Kubernetes 奇遇记:创建 Workers
Source: Dev.to
我们从零开始构建了控制平面——这很有用,但也很困难。控制平面只是大脑;我们仍然需要工作节点(肌肉)来运行我们的容器化应用程序。手动配置每个工作节点将是一场噩梦,因此本系列的这一部分展示了如何从预先配置好的机器创建一个 Golden Image,并快速部署相同的工作节点。
Creating a Golden Image
- 加载了
overlay和br_netfilter内核模块。 - 为 iptables 调整了网络桥接设置。
- 禁用了 swap(
kubelet所必需)。 - 安装了 containerd 并将
systemd设置为 cgroup 驱动。
所有这些前置条件——操作系统调优和 Kubernetes 二进制文件(kubeadm、kubelet、kubectl)——都已预装在 k8s-seed 虚拟机中。Golden Image 是该完美配置的冻结快照,可实现自动化、基于镜像的供应。
步骤 1:概括种子实例
在将 k8s-seed 用作模板之前,我们必须清除唯一标识符,以便每个新 VM 都拥有自己的身份。
-
SSH 登录种子机器
gcloud compute ssh k8s-seed --zone=us-central1-a -
清理唯一标识符
sudo cloud-init clean --seed --logs --machine-id exit -
停止实例(在本地机器上运行)
gcloud compute instances stop k8s-seed --zone=us-central1-a
第2步:创建自定义镜像
从已停止的种子磁盘创建 Google Compute Engine 镜像。
gcloud compute images create k8s-node-image-v1 \
--source-disk=k8s-seed \
--source-disk-zone=us-central1-a \
--family=k8s-node-family
--family 标志允许您稍后引用该镜像的“最新”版本。
第3步:配置工作节点
使用黄金镜像即时启动新工作节点。
gcloud compute instances create worker-1 \
--zone=us-central1-a \
--image-family=k8s-node-family \
--tags=k8s-worker
gcloud compute instances create worker-2 \
--zone=us-central1-a \
--image-family=k8s-node-family \
--tags=k8s-worker
步骤 4:加入集群
工作节点需要使用 kubeadm join 向控制平面注册。
-
定位您的加入命令(已从控制节点的
kubeadm init中保存):kubeadm join 10.128.0.x:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> -
在每个工作节点上运行该命令(以
worker-1为例):gcloud compute ssh worker-1 --zone=us-central1-a sudo kubeadm join 10.128.0.x:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> exit对
worker-2重复相同步骤。 -
验证节点
kubectl get nodes两个工作节点都应显示
Ready状态。
对于 Worker 2:重复相同步骤
gcloud compute ssh worker-2 --zone=us-central1-a
sudo kubeadm join ... # 粘贴您的命令
exit
第5步:验证集群
从控制平面确认所有节点已注册。
kubectl get nodes
预期输出:
NAME STATUS ROLES AGE VERSION
control-plane Ready control-plane 10m v1.35.0
worker-1 Ready <none> 2m v1.35.0
worker-2 Ready <none> 1m v1.35.0
简单方法(GKE)
如果您使用 Google Kubernetes Engine,整个过程可以用一条命令替代:
gcloud container clusters create k8s-easy-cluster \
--zone us-central1-a \
--num-nodes 3 \
--machine-type e2-medium
接下来怎么办?
您的多节点集群已经启动,但仍然是静态的。如果工作节点崩溃,您必须手动替换它,扩容需要手动配置和 kubeadm join。后续文章可能会介绍如何自动化节点生命周期和扩容,以实现真正的云原生、弹性集群。
深入了解
- 原始蓝图: 受 Kelsey Hightower 的指南 Kubernetes The Hard Way 启发。
- 官方文档: 所有组件的权威来源 Kubernetes.io Documentation
