基于 kubeadm 部署单控制平面的 k8s 集群 (2)

过程中会用到一些列 docker 镜像文件,这些文件在 Google 的镜像仓库,可以通过 kubeadm config images pull 命令验证网络是否能够正常拉取镜像。国内环境,十有八九无法直接连接,可从其他镜像仓库下载,然后再修改镜像标签,以便启动相关 pod。

准备镜像

列出安装过程中需要用到的镜像文件,命令为

kubeadm config images list # ECHO ------ k8s.gcr.io/kube-apiserver:v1.15.2 k8s.gcr.io/kube-controller-manager:v1.15.2 k8s.gcr.io/kube-scheduler:v1.15.2 k8s.gcr.io/kube-proxy:v1.15.2 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.3.10 k8s.gcr.io/coredns:1.3.1

这里选择从 docker hub 中的 mirrorgooglecontainers 拉取镜像副本,然后更新tag,再删除镜像副本,脚本如下:

images=(kube-proxy:v1.15.2 kube-scheduler-amd64:v1.15.2 kube-controller-manager-amd64:v1.15.2 kube-apiserver:v1.15.2 etcd:3.3.10 pause:3.1) for imageName in ${images[@]} ; do docker pull mirrorgooglecontainers/$imageName docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName docker rmi mirrorgooglecontainers/$imageName done

mirrorgooglecontainers 下面没有 coredns,我们可以从另一个位置单独拉取,命令如下:

docker pull coredns/coredns:1.3.1 docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1 docker rmi coredns/coredns:1.3.1 初始化控制平面节点

控制平面节点是控制平面组件运行的机器,包括etcd(集群数据库)和 API server (kubectl CLI与之通信)。

需要安装pod网络插件,才能使得集群 pod 间可以相互通信,必须在任何应用程序之前部署 pod 网络。此外,CoreDNS将不会在安装网络之前启动。kubeadm仅支持基于容器网络接口(CNI)的网络,有几个项目使用CNI提供了Kubernetes pod网络,其中一些还支持网络策略。有关可用网络加载项的完整列表,请参阅。

另外,请注意,Pod网络不得与任何主机网络重叠,因为这可能会导致问题。如果发现网络插件的首选Pod网络与某些主机网络之间发生冲突,应为 kubeadm init 指定 --pod-network-cidr 参数配置网络网络,并在网络插件的YAML中修改相应信息。

这里我选择 calico 网络,根据 calico 文档说明,我们需为 kubeadm init 指定 --pod-network-cidr=192.168.0.0/16参数。现在运行 kubeadm init <args>

kubeadm init \ --kubernetes-version v1.15.2 \ --apiserver-advertise-address=10.163.10.6 \ --pod-network-cidr=192.168.0.0/16 ###--ECHO Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.163.10.6:6443 --token xxxxxx.xxxxxxxxxxxxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

输出上述信息,则说明 控制平面初始化完成,根据提示消息,依次执行以下命令:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

注意记录输出结果中的 kubeadm join *** 信息,随后在添加工作节点到集群时需要用到,可以复制后暂时存到某个地方。

安装网络

此时,我们通过 kubectl get pods --all-namespaces 命令,应该可以看到 coredns 处于 pending 状态,安装网网络以后,它才能处于 running 状态。我们选择 calico 为 pod 提供网络,pod 网络本身以k8s 应用的形式运行,执行下面命令进行安装。

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

安装了pod网络后,可以通过检查 CoreDNS pod 是否在输出中运行来确认它是否正常工作 kubectl get pods --all-namespaces。

kubectl get pods --all-namespaces # ECHO ---- NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-7bd78b474d-vmq2w 1/1 Running 0 4m57s kube-system calico-node-2cwtx 1/1 Running 0 4m57s kube-system coredns-5c98db65d4-gv2j6 1/1 Running 0 10m kube-system coredns-5c98db65d4-n6lpj 1/1 Running 0 10m kube-system etcd-vm-10-13-ubuntu 1/1 Running 0 8m54s kube-system kube-apiserver-vm-10-13-ubuntu 1/1 Running 0 9m10s kube-system kube-controller-manager-vm-10-13-ubuntu 1/1 Running 0 9m3s kube-system kube-proxy-qbk66 1/1 Running 0 10m kube-system kube-scheduler-vm-10-13-ubuntu 1/1 Running 0 9m8s

pod 启动需要时间,请耐心等待。

加入节点

CoreDNS pod 启动并运行后,我们可以为集群添加工作节点。工作节点服务器需安装docker 、kubeadm 和 kubelet,安装过程参考 master 节点部署流程。

拉取镜像

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxgff.html