初始设置Kubernetes集群后,最常见的操作是通过添加更多运行工作负载的节点(容器和Pod)来扩展集群。扩展群集的方式取决于群集引导过程中最初使用的工具,本文将演示如何使用kubeadm命令行工具向Kubernetes集群添加更多Worker节点。
在开始之前 需要有一个正常工作的Kubernetes集群,已配置并且正常工作的控制平面节点。 在Worker节点中安装的容器运行时(Docker,cri-o,containerd等)和Kubernetes工具(kubeadm和kubelet)。 如果使用防火墙(例如firewalld),则应在防火墙中打开端口10250、30000-32767和Pod网络附加组件所需的端口。 SSH访问要添加的计算机。 配置的kubectl用于检查节点在集群中是否可用。 然后可以按照以下标准步骤将现有的Kubernetes集群加入或添加新的Worker节点。
步骤1:获取加入Token 将新的工作程序节点加入Kubernetes集群时需要Token,当您使用kubeadm引导集群时,会生成Token,Token将在24小时后失效。 检查是否有Token,在控制节点上运行命令: $ kubeadm token list
如果Token已过期,请使用以下命令生成一个新Token: sudo kubeadm token create 抓取Token使用以下方法生成: $ kubeadm token list 您还可以生成Token并打印join命令: kubeadm token create --print-join-command
步骤2:获取发现Token CA cert Hash 对于基于Token的发现,join命令通过将根哈希与提供的哈希进行匹配来验证根CA公钥,通过运行以下命令,在控制节点上获取发现Token CA cert Hash: openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
步骤3:获取API Server Advertise地址 使用kubectl命令获取API服务器端点: $ kubectl cluster-info Kubernetes master is running at https://192.168.122.195:6443 KubeDNS is running at https://192.168.122.195:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Metrics-server is running at https://192.168.122.195:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy 如输出所示,我的API位于https://192.168.122.195:6443。 参考:安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群。
步骤4:将新的Kubernetes Worker节点加入集群 kubeadm join命令用于引导Kubernetes工作者节点或其他控制平面节点,并将其加入集群,将工作程序节点加入集群的命令语法为: kubeadm join [api-server-endpoint] [flags] 所需的常见参数是: --token string:要使用的Token。 --discovery-token-ca-cert-hash:具有格式:<type>:<value>。 因此,我们完整的join命令将具有以下格式: kubeadm join \ <control-plane-host>:<control-plane-port> \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> 例子: sudo kubeadm join \ 192.168.122.195:6443 \ --token nx1jjq.u42y27ip3bhmj8vj \ --discovery-token-ca-cert-hash sha256:c6de85f6c862c0d58cc3d10fd199064ff25c4021b6e88475822d6163a25b4a6c 命令输出: [preflight] Running pre-flight checks [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' [kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.17" ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env" [kubelet-start] Starting the kubelet [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap... This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster. 等待节点的状态为“Ready”,检查控制节点: $ watch kubectl get nodes 由于在配置和启动服务之前先拉出容器映像,此过程可能需要几分钟: $ sudo docker ps
步骤5:从群集中删除工作节点 要从集群中删除Kubernetes辅助节点,请执行以下操作。 1、从节点迁移pods: kubectl drain <node-name> --delete-local-data --ignore-daemonsets 2、防止节点安排使用新的Pod,将节点标记为不可计划: kubectl cordon <node-name> 3、恢复通过“kubeadm join”对节点所做的更改,在要删除的工作节点上运行: sudo kubeadm reset 4、一旦成功执行了kubeadm reset命令,就可以重做将新节点加入集群的相同过程。
相关主题 |