如何向现有Kubernetes 1.14集群的控制平面添加第二个主服务器?
available documentation显然假设两个母版(在堆叠的控制平面和etcd节点中)是同时创建的。我已经用kubeadm init --pod-network-cidr=10.244.0.0/16
创建了我的第一个母版,所以我没有本文档中提到的kubeadm-config.yaml
。
我尝试了以下方法:
kubeadm join ... --token ... --discovery-token-ca-cert-hash ... \
--experimental-control-plane --certificate-key ...
在第一个主服务器上运行kubeadm join ... --token ... --discovery-token-ca-cert-hash ...
时建议使用kubeadm token create --print-join-command
部分;它通常用于添加其他工人。 --experimental-control-plane
用于添加另一个母版。在第一个主服务器上运行kubeadm init phase upload-certs --experimental-upload-certs
提示了--certificate-key ...
中的密钥。
我收到以下错误:
[preflight] Running pre-flight checks
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver.
The recommended driver is "systemd". Please follow the guide at
https://kubernetes.io/docs/setup/cri/
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
error execution phase preflight:
One or more conditions for hosting a new control plane instance is not satisfied.
unable to add a new control plane instance a cluster that doesn't have a stable
controlPlaneEndpoint address
Please ensure that:
* The cluster has a stable controlPlaneEndpoint address.
* The certificates that must be shared among control plane instances are provided.
我的群集没有稳定的controlPlaneEndpoint
地址是什么意思?这可能与controlPlaneEndpoint
当前为空字符串的输出中的kubectl -n kube-system get configmap kubeadm-config -o yaml
有关吗?我该如何克服这种情况?
答案 0 :(得分:2)
根据HA - Create load balancer for kube-apiserver:
- 在云环境中,应将控制平面节点放在TCP转发负载平衡器之后。该负载均衡器分发 目标列表中所有健康控制平面节点的流量。的 apiserver的运行状况检查是端口
上的TCP检查 kube-apiserver侦听(默认值:6443
)。- 负载均衡器必须能够与apiserver端口上的所有控制平面节点通信。它还必须允许传入流量 在其侦听端口上。
- 确保负载均衡器的地址 始终与kubeadm的
ControlPlaneEndpoint
的地址匹配。
要设置ControlPlaneEndpoint
的配置,应将kubeadm
与--config
标志一起使用。看一下here中的配置文件示例:
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT"
Kubeadm配置文件示例分散在许多文档部分中。我建议您阅读/apis/kubeadm/v1beta1
GoDoc,其中已完全填充了多个kubeadm配置类型使用的YAML文件的示例。
如果您要配置自托管控制面板,请考虑使用kubeadm alpha selfhosting
功能:
[..]关键组件,例如API服务器,控制器管理器和 调度程序作为通过Kubernetes API配置的DaemonSet Pod运行 而不是通过静态文件在kubelet中配置的静态pod。
此PR(#59371)可能阐明了使用自托管配置的区别。
答案 1 :(得分:0)
您需要从现有主机复制证书(etcd / api服务器/ ca等),然后将其放置在第二个主机上。 然后运行kubeadm初始化脚本。由于已经存在证书,因此将跳过证书创建步骤,并恢复其余的群集初始化步骤。