本文主要参考 Kubernetes 官方文档 Creating a single control-plane cluster with kubeadm (v1.16),但由于国内实在是访问 Google 困难,之前的教程都是从国内各种镜像中拉取 k8s 镜像,再 tag 成官方的,实在是不太优雅。好在 K8S 新版支持了指定镜像源,可以方便的指定国内源。
0. 安装 docker 和 k8s 相关命令行工具
0.1 安装 docker
利用 daocloud 上的 docker 安装方法在国内安装 docker,由于默认会从官方拉,我们可以考虑利用 Aliyun 的镜像
1 | curl -sSL https://get.daocloud.io/docker | sh -s -- --mirror Aliyun |
然后配置 docker 加速器,这里我们选择网易的 docker 源,如果有其他国内源,你也可以自行更改
1 | curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://hub-mirror.c.163.com |
根据提示重启 docker
1 | sudo systemctl restart docker.service |
0.2 安装 k8s 相关命令行工具——kubelet
, kubeadm
, kubectl
在这里我们利用阿里云的 ubuntu k8s 源下载 k8s 相关包
1 | sudo apt-get update && sudo apt-get install -y apt-transport-https curl |
我们这里安装的是目前 K8S 最新的版本 v1.16.2
1. 初始化 Kubernetes
1.1 初始化 k8s master
K8s 1.11 支持了 kubeadm
传入配置文件,我们可以新建下述配置文件 kubeadm.conf
,注意我们采用的是 k8s 1.16.1 的相关配置,这个版本支持的 etcd 镜像 tag 为 3.3.15-0
,如果有必要,dnsDomain
可以改成自己需要的,这里我们采用默认的 cluster.local
如果你的 k8s 版本不一致,可以采用 kubeadm config images list
查看你的 k8s 所需要的 etcd 镜像 tag。
1 | apiVersion: kubeadm.k8s.io/v1beta1 |
这里我们用到了阿里云的 k8s 镜像源。上面的 kubernetesVersion
写明自己的 kubeadm 版本,不然会去 google 官方请求版本,可能会卡住。然后运行
1 | kubeadm init --config kubeadm.conf |
即可初始化集群。
完成之后,初始化成功,会输出类似于下面的信息
1 | Your Kubernetes master has initialized successfully! |
执行
1 | mkdir -p $HOME/.kube |
最后,为了让 master 也可以调度,可以加入下面的命令:
1 | kubectl taint node $(kubectl get nodes -o name) node-role.kubernetes.io/master- |
1.2 添加网络配置
上述信息做好了之后,在 master 上加入 flannel
插件,flannel 插件版本我们目前采用文档中针对 v1.16 的版本,由于国内网络环境缓慢,建议下载该文件更改镜像之后再 kubectl apply:
1 | curl https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml | sed 's/quay.io/quay.azk8s.cn/g' > /tmp/kube-flannel.yml |
注意上述命令只需要在主节点执行。
1.3 节点加入
在 kubeadm init
成功后,命令行会显示 Join 命令,命令格式如下:
1 | kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash> |
但如果之后忘记了命令,可以用下述命令获取 <token>
:
1 | kubeadm token list |
然后可以用下述命令获得 <hash>
1 | openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' |