版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/scylhy/article/details/82314487
kubernetes配置DNS
之前,在搭建fabric的k8s启动方式,启动的kfk、zookeeper,解析不到服务名,虽然可以
通过修改/etc/hosts解决,但是很麻烦,并且,fabric提供的镜像,进入容器后,发现很多工
具没有,甚至不能apt安装.
所以,考虑配置DNS,这里有两个选择,kube-dns和core-dns,最先配置了kube-dns,遇到
了问题,容器启动失败,后换成core-dns,也是同样的问题,这很有可能跟搭建的集群有关.
最终发现是自己搭建集群,启动参数设置的又问题,这个工具有点大,参数有点多,慢慢学.
集群环境说明
为了简单搭建集群,以尽快学习相关知识,进入到原生云领域.这里不向大家那样搭建多个 节点,而只在一个节点上进行,及master和node在同一台物理机器上.这样专注于业务功能 开发,而不是集群的运维.
节点环境
阿里云 ubuntu16.04环境
name ip master/node1 172.16.199.55(私有ip) - kubernetes1.11手动搭建
- 忙完这段时间的工作(阿里比赛和实验室的专利),撰写完整的单节点搭建k8s环境,此处留坑
搭建core-dns
-
git clone https://github.com/coredns/deployment.git cd deployment/kubernetes
deployment/kubernetes 目录结构
liudeMacBook-Pro:kubernetes liu$ tree . ├── README.md ├── coredns.yaml.sed ├── deploy.sh └── rollback.sh 0 directories, 4 files
生成coredns.yaml
#将部署结果保存到coredns.yaml ./deploy.sh -i 169.169.0.2 -d cluster.local >coredns.yaml #为方便操作可写成脚本(主要是,之前debug太多次)
部署coredns
kubectl create -f . #一段时间后,正常的话 root@liu:~/data/deployment# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-55f86bf584-bp6sx 1/1 Running 0 11s coredns-55f86bf584-gfpkr 1/1 Running 0 11s #但,一开始,我只一直是如下的情况,稍后解决 root@liu:~# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-7c49789867-gwlhm 0/1 CrashLoopBackOff 18 1h coredns-7c49789867-kf292 0/1 CrashLoopBackOff 18 1h
修改kubelet启动参数,添加–cluster-dns 和–cluster-domain,并重启kubelet
KUBELET_ARGS=" --cluster-dns=169.169.0.2 --cluster-domain=cluster.local --kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
测试dns
创建busybox.yaml(注意:yaml不能使用tab,并注意空格数)
apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: - image: busybox command: - sleep - "3600" imagePullPolicy: IfNotPresent name: busybox restartPolicy: Always
创建测试pod
root@liu:~# kubectl create -f busybox.yaml root@liu:~# kubectl get pod NAME READY STATUS RESTARTS AGE busybox 1/1 Running 1 1h
-
#成功状态 root@liu:~# kubectl exec -ti busybox -- nslookup baidu.com Server: 100.100.2.136 Address 1: 100.100.2.136 Name: baidu.com Address 1: 123.125.115.110 Address 2: 220.181.57.216 # k8s官网上的那个测试,失败的原因是kubernetes.default被墙了 root@liu:~# kubectl exec -ti busybox -- nslookup kubernetes.default Server: 100.100.2.136 Address 1: 100.100.2.136 nslookup: can't resolve 'kubernetes.default' command terminated with exit code 1 #开启vpn后,测试记过如下图
-
以上是正常的创建过程,但实际中遇到了各种问题
Q1:coredns/kubedns容器创建失败
root@liu:~# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-55f86bf584-7d9q7 0/1 CrashLoopBackOff 14 53m coredns-55f86bf584-sdgkd 0/1 CrashLoopBackOff 14 53m root@liu:~/data/deployment# kubectl logs -n kube-system -f coredns-55f86bf584-7hjmp 2018/09/02 04:17:43 plugin/kubernetes: open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory
A:该错误是apiserver没有设置启动参数 –admission-control=ServiceAccount
修改apiserver启动参数
KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --service-cluster-ip-range=169.169.0.0/16 --service-node-port-range=1-65535 --admission-control=ServiceAccount,NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
修改kube-controller-manager 启动参数–service-account-private-key-file
KUBE_CONTROLLER_MANAGER_ARGS="--service-account-private-key-file=/var/run/kubernetes/apiserver.key --master=http://172.16.199.55:8080 --logtostderr=false --log-dir=/var/log/kubernetes --v=2"
仅修改apiserver,会造成创建rc,生不成rc,即查询不到pod
参考:
还有一个问题待解决找不到参数crt