如何将第二个主服务器添加到现有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
用于添加另一个主人。 --certificate-key ...
中的关键是在第一个主人身上运行kubeadm init phase upload-certs --experimental-upload-certs
所建议的。
我收到以下错误:
[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
有关,目前是空字符串吗?我怎样才能克服这种情况?
根据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服务器,控制器管理器和调度程序)作为DaemonSet pod运行,通过Kubernetes API配置,而不是通过静态文件在kubelet中配置的静态pod。
此PR(#59371)可能会澄清使用自托管配置的不同之处。
您需要从现有主服务器复制证书(etcd / api server / ca等)并将其放在第二个主服务器上。然后运行kubeadm init脚本。由于证书已经存在,因此跳过证书创建步骤,并恢复其余的群集初始化步骤。