kubernetes 将单主机转换为多主机

标签 kubernetes

我在裸机服务器中使用 kubeadm 命令创建了单主 kubernetes v1.9.0 集群。现在我想再添加两个主控并使其成为多主控。

是否可以转换为多主配置?有没有针对此类对话的文档?

我找到了 Kops 的链接,不确定相同的步骤也适用于其他环境。

https://github.com/kubernetes/kops/blob/master/docs/single-to-multi-master.md

谢谢 SR

最佳答案

是的,这是可能的,但您可能需要暂时中断您的主设置。 您需要按照说明 here 进行操作

简而言之:

创建 kubeadm 配置文件。在该 kubeadm 配置文件中,您需要包含您将使用的负载均衡器的 SAN。示例:

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
apiServerCertSANs:
- "LOAD_BALANCER_DNS"
api:
    controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
etcd:
  local:
    extraArgs:
      listen-client-urls: "https://127.0.0.1:2379,https://CP0_IP:2379"
      advertise-client-urls: "https://CP0_IP:2379"
      listen-peer-urls: "https://CP0_IP:2380"
      initial-advertise-peer-urls: "https://CP0_IP:2380"
      initial-cluster: "CP0_HOSTNAME=https://CP0_IP:2380"
    serverCertSANs:
      - CP0_HOSTNAME
      - CP0_IP
    peerCertSANs:
      - CP0_HOSTNAME
      - CP0_IP
networking:
    # This CIDR is a Calico default. Substitute or remove for your CNI provider.
    podSubnet: "192.168.0.0/16" 

将创建的证书复制到新节点。应复制 /etc/kubernetes/pki/ 下的所有证书

admin.conf/etc/kubernetes/admin.conf 复制到新节点

示例:

USER=ubuntu # customizable
CONTROL_PLANE_IPS="10.0.0.7 10.0.0.8"
for host in ${CONTROL_PLANE_IPS}; do
    scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
    scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
    scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
    scp /etc/kubernetes/admin.conf "${USER}"@$host:
done

为第二个节点创建第二个 kubeadm 配置文件:

apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
apiServerCertSANs:
- "LOAD_BALANCER_DNS"
api:
    controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
etcd:
  local:
    extraArgs:
      listen-client-urls: "https://127.0.0.1:2379,https://CP1_IP:2379"
      advertise-client-urls: "https://CP1_IP:2379"
      listen-peer-urls: "https://CP1_IP:2380"
      initial-advertise-peer-urls: "https://CP1_IP:2380"
      initial-cluster: "CP0_HOSTNAME=https://CP0_IP:2380,CP1_HOSTNAME=https://CP1_IP:2380"
      initial-cluster-state: existing
    serverCertSANs:
      - CP1_HOSTNAME
      - CP1_IP
    peerCertSANs:
      - CP1_HOSTNAME
      - CP1_IP
networking:
    # This CIDR is a calico default. Substitute or remove for your CNI provider.
    podSubnet: "192.168.0.0/16"

将以下变量替换为该节点的正确地址:

LOAD_BALANCER_DNS

LOAD_BALANCER_PORT

CP0_HOSTNAME

CP0_IP

CP1_HOSTNAME

CP1_IP

将复制的证书移动到正确的位置

USER=ubuntu # customizable
  mkdir -p /etc/kubernetes/pki/etcd
  mv /home/${USER}/ca.crt /etc/kubernetes/pki/
  mv /home/${USER}/ca.key /etc/kubernetes/pki/
  mv /home/${USER}/sa.pub /etc/kubernetes/pki/
  mv /home/${USER}/sa.key /etc/kubernetes/pki/
  mv /home/${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
  mv /home/${USER}/front-proxy-ca.key /etc/kubernetes/pki/
  mv /home/${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
  mv /home/${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
  mv /home/${USER}/admin.conf /etc/kubernetes/admin.conf

现在,您可以开始使用 kubeadm 添加主服务器

  kubeadm alpha phase certs all --config kubeadm-config.yaml
  kubeadm alpha phase kubelet config write-to-disk --config kubeadm-config.yaml
  kubeadm alpha phase kubelet write-env-file --config kubeadm-config.yaml
  kubeadm alpha phase kubeconfig kubelet --config kubeadm-config.yaml
  systemctl start kubelet

将节点加入etcd集群:

  CP0_IP=10.0.0.7
  CP0_HOSTNAME=cp0
  CP1_IP=10.0.0.8
  CP1_HOSTNAME=cp1

  KUBECONFIG=/etc/kubernetes/admin.conf kubectl exec -n kube-system etcd-${CP0_HOSTNAME} -- etcdctl --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/peer.crt --key-file /etc/kubernetes/pki/etcd/peer.key --endpoints=https://${CP0_IP}:2379 member add ${CP1_HOSTNAME} https://${CP1_IP}:2380
  kubeadm alpha phase etcd local --config kubeadm-config.yaml

最后,添加控制平面:

  kubeadm alpha phase kubeconfig all --config kubeadm-config.yaml
  kubeadm alpha phase controlplane all --config kubeadm-config.yaml
  kubeadm alpha phase mark-master --config kubeadm-config.yaml

对三爷重复这些步骤,你应该就可以了。

关于kubernetes 将单主机转换为多主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249608/

相关文章:

kubernetes - 标签上的Kubernetes AntiAffinity-通过Node-Labels传播副本

kubernetes - k8s 中的 cpu 限制大小应该确定为多少?

docker - Kubernetes docker 卷挂载选项

azure - Kubernetes 虚拟节点池虚拟机意外费用

docker - 为 gcloud 构建提交指定 Dockerfile

kubernetes - k3s ctr 图像导入到不同的目录

ubuntu - NFS 挂载在 Kubernetes 中的 ubuntu 节点上

kubernetes - 在 Kubernetes 1.10 中禁用堆健康检查

kubernetes - 将外部节点加入现有 Kubernetes 集群

kubernetes - 如何为面向公众的 Web 应用程序设置 DNS 和入口 Controller ?