之前,在搭建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
- 下载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
- 测试dns
#成功状态
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
- 参考:
- kubernetes下heapster的部署案例
- Kubernetes 解决/var/run/secret/kubernetes.io/serviceaccount/token no such file or directory问题
- 还有一个问题待解决找不到参数crt