本文是对使用kubeadm编写的用于堆叠控制平面节点的官方“ 创建高可用群集”的免费解释。 我不喜欢复杂的语言和其中使用的示例,所以我写了我的指南。
如果您有任何疑问或不清楚,请查阅官方文档或询问Google 。 在此以最简单,最拘束的形式描述了所有阶段。
输入数据
我们有3个节点:
- 节点1(10.9.8.11)
- node2(10.9.8.12)
- node3(10.9.8.13)
我们将为其提供一个容错IP地址:
然后在其上安装etcd集群和Kubernetes。
平衡器设置
首先,我们需要在所有三个节点上安装Keepalived:
apt-get -y install keepalived
现在我们编写配置文件/etc/keepalived/keepalived.conf
:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 100 advert_int 1 nopreempt authentication { auth_type AH auth_pass iech6peeBu6Thoo8xaih } virtual_ipaddress { 10.9.8.10 } }
我们在所有三个节点上激活并运行Keepalived:
systemctl start keepalived systemctl enable keepalived
现在,我们可以验证节点10.9.8.10
在eth0
接口上收到的地址10.9.8.10
。
部署Kubernetes集群
UPD:本文是针对v1.12编写的,尽管已针对v1.13进行了改编,但现在部署集群的过程看起来更加简单和合理。
看看这个简单的指南 。
此刻,现在一切都变得容易了
确保所有节点上都安装了最新的Kubernetes软件包:
apt-get -y install kubeadm kubelet kubectl
还要在最后一个节点之外的所有节点上停止Keepalived守护程序。
systemctl stop keepalived
初音
现在我们将为kubeadm生成配置(对于每个主节点,我们需要一个单独的配置):
CLUSTER_IP=10.9.8.10 NODES=(node1 node2 node3) IPS=(10.9.8.11 10.9.8.12 10.9.8.13) POD_SUBNET="192.168.0.0/16" for i in "${!NODES[@]}"; do HOST=${IPS[$i]} NAME=${NODES[$i]} INITIAL_CLUSTER=$( for j in "${!NODES[@]}"; do echo "${NODES[$j]}=https://${IPS[$j]}:2380" done | xargs | tr ' ' , ) cat > kubeadm-config-${NODES[$i]}.yaml <<EOT apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: stable apiServer: certSANs: - "${CLUSTER_IP}" controlPlaneEndpoint: "${CLUSTER_IP}:6443" etcd: local: extraArgs: initial-cluster: "${INITIAL_CLUSTER}" initial-cluster-state: new name: ${NODES[$i]} listen-peer-urls: "https://${IPS[$i]}:2380" listen-client-urls: "https://127.0.0.1:2379,https://${IPS[$i]}:2379" advertise-client-urls: "https://${IPS[$i]}:2379" initial-advertise-peer-urls: "https://${IPS[$i]}:2380" serverCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" peerCertSANs: - "${NODES[$i]}" - "${IPS[$i]}" networking: podSubnet: "${POD_SUBNET}" EOT done
我们在第一个节点上启动etcd,生成证书和admin-config
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local $kubeadm init phase kubeconfig admin systemctl start kubelet
我们将生成的证书和kubeadm配置复制到其余的控制平面节点。
NODES="node2 node3" CERTS=$(find /etc/kubernetes/pki/ -maxdepth 1 -name '*ca.*' -o -name '*sa.*') ETCD_CERTS=$(find /etc/kubernetes/pki/etcd/ -maxdepth 1 -name '*ca.*') for NODE in $NODES; do ssh $NODE mkdir -p /etc/kubernetes/pki/etcd scp $CERTS $NODE:/etc/kubernetes/pki/ scp $ETCD_CERTS $NODE:/etc/kubernetes/pki/etcd/ scp /etc/kubernetes/admin.conf $NODE:/etc/kubernetes scp kubeadm-config-$NODE.yaml $NODE: done
第二节点
我们在第二个节点上启动etcd:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase preflight $kubeadm init phase certs all $kubeadm init phase kubelet-start $kubeadm init phase kubeconfig kubelet $kubeadm init phase etcd local systemctl start kubelet
第三节点
我们在最后一个节点上使用etcd启动Kubernetes master。
(确保已设置平衡器IP并指向该节点)
kubeadm init --config kubeadm-config-${HOSTNAME}.yaml
第一和第二节点
现在我们可以在前两个节点上启动Kubernetes master:
kubeadm="kubeadm --config=kubeadm-config-${HOSTNAME}.yaml" $kubeadm init phase kubeconfig all $kubeadm init phase control-plane all $kubeadm init phase mark-control-plane $kubeadm init phase upload-config kubeadm
并运行Keepalived守护进程:
systemctl start keepalived