因为一些莫可名状的原因,国内网络使用 Kubeadm 颇有难度,这里大概说一下过程中的一些坑。
主体流程遵循官网指南:https://kubernetes.io/docs/getting-started-guides/kubeadm/
1/4 准备工作
这里用包管理的方式安装 kubeadm、Docker 等组件。需要注意一点点的是,如果用的非 Root 用户,要注意 sudo 的时候的环境代理设置问题。或者干脆在 apt/yum 的配置文件中写入代理服务器。
另外这里安装 Docker 之后,注意给 Docker 配置代理。或者可以直接想法子搞到下面列表中的镜像,并导入 Docker 之中:
镜像准备
下面提到的镜像基于目前的 1.6.2 版本,每次更新都会有不同。
Image | Ver | Component |
---|---|---|
gcr.io/google_containers/kube-proxy-amd64 | v1.6.2 | Kubernetes |
gcr.io/google_containers/kube-controller-manager-amd64 | v1.6.2 | Kubernetes |
gcr.io/google_containers/kube-apiserver-amd64 | v1.6.2 | Kubernetes |
gcr.io/google_containers/kube-scheduler-amd64 | v1.6.2 | Kubernetes |
gcr.io/google_containers/etcd-amd64 | 3.0.17 | Kubernetes |
gcr.io/google_containers/pause-amd64 | 3.0 | Kubernetes |
gcr.io/google_containers/k8s-dns-sidecar-amd64 | 1.14.1 | DNS |
gcr.io/google_containers/k8s-dns-kube-dns-amd64 | 1.14.1 | DNS |
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 | 1.14.1 | DNS |
gcr.io/google_containers/etcd | 2.2.1 | Calico |
quay.io/calico/node | v1.1.3 | Calico |
quay.io/calico/cni | v1.8.0 | Calico |
quay.io/calico/kube-policy-controller | v0.5.4 | Calico |
2/4 Master 初始化
kubeadm init
这里的几个问题:
- 如果准备采用 flannel 插件,需要
-pod-network-cidr 10.244.0.0/16
参数 - Ubuntu 下可能会出现无限等待 Node 加入的情况,可能的原因是 /etc/resolv.conf 中有关于 localhost 的 search 记录,删掉这行就能解决。
- 如果准备采用 Calico 插件,那么要注意 Calico 的 YAML 中的 ip pool 跟集群设置一致。
- 如果不是预先准备好的备份,过程会比较长,耐心。。
Init 成功之后会出一堆文本信息,其中包含几点内容,最好保存下来:
- 自动生成的 kubectl config 文件,可以复制到 ~/.kube/config 中作为缺省 kubectl 使用。
- 把新节点加入集群的方法。
另外这里还有个提示——没有安装 Pod Network。
3/4 安装 Pod Network
这一步很重要,所有的应用包括 Kube DNS 在内,都依赖于此。
如上文所示,准备使用的是 Calico,这里值得注意的一坑是,不同版本的 Kubernetes 会有不同的 Calico 安装,1.6 版本应该使用的是:kubectl apply -f http://docs.projectcalico.org/v2.1/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
http://docs.projectcalico.org/v2.1/getting-started/kubernetes/installation/hosted/kubeadm/
还有一些其他的安装方式可以参考。
Calico 的注意事项
- 他的 ETCD 服务器要求装在 Master 所在的 Node 上,使用的是 nodeSelector 的方式,选择标签:
node-role.kubernetes.io/master: ""
。 - 上文提到的 pod network cidr 和 ip pool 的一致性问题
--service-cidr
和 IP Pool 不能重叠
4/4 加入节点
在其他 Node 上做好准备工作之后,用kubeadm init
命令中提到的kubeadmin join
方法加入集群。