Kubernetes 中的奇遇:工作节点自动伸缩

发布: (2026年5月10日 GMT+8 09:31)
5 分钟阅读
原文: Dev.to

I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you’ve already provided) here? Once I have the article, I’ll translate it into Simplified Chinese while preserving the original formatting, markdown, and technical terms.

概览

我们的初始集群是手动搭建的:控制平面是手动配置的,每个工作节点都是单独加入的。虽然这种方式适合学习,但在生产环境中既不可扩展也不具弹性。要摆脱静态、单节点工作池的限制,我们需要三项能力:

  • 自动加入 – 新的虚拟机在启动后应立即加入集群。
  • 自愈 – 如果节点故障,应自动配置替代节点。
  • 智能伸缩 – 当负载增加时集群应扩容,负载下降时应收缩,以节省成本。

关键是在每台虚拟机上放置启动脚本,自动运行 kubeadm join

创建永久加入令牌

标准的 kubeadm 令牌在 24 小时后过期,这对于可能运行数月的自动伸缩组来说并不合适。在控制平面上创建一个没有 TTL 的令牌:

kubeadm token create --print-join-command --ttl 0

复制打印出的完整命令;稍后你将在启动脚本中嵌入它。

构建实例模板

实例模板(Instance Template)告诉 GCP 如何创建虚拟机(包括镜像、机器类型、元数据等)。将 “ 替换为您上面复制的命令。

gcloud compute instance-templates create k8s-worker-template \
  --image-family=k8s-node-family \
  --machine-type=e2-standard-2 \
  --tags=k8s-worker \
  --metadata startup-script='#! /bin/bash
'

注: k8s-node-family 是在本系列前面部分创建的自定义镜像。

创建区域托管实例组 (MIG)

区域 MIG 将节点分布在多个可用区,以实现高可用性。

gcloud compute instance-groups managed create k8s-worker-mig \
  --template=k8s-worker-template \
  --size=1 \
  --region=us-central1

GCP 将立即启动一个节点,该节点将启动、执行启动脚本,并自动加入集群。

启用自动伸缩

将托管实例组 (MIG) 配置为基于 CPU 利用率进行伸缩。当平均 CPU 使用率超过 60 % 时,组将至少保留一个节点,并可扩展至最多五个节点。

gcloud compute instance-groups managed set-autoscaling k8s-worker-mig \
  --max-num-replicas=5 \
  --min-num-replicas=1 \
  --target-cpu-utilization=0.60 \
  --region=us-central1

测试自动伸缩器

  1. 创建负载生成器 – 一个在无限循环中消耗 CPU 的 busybox pod。

    kubectl create deployment load-generator --image=busybox -- /bin/sh -c "while true; do :; done"
  2. 请求 CPU – 告诉 Kubernetes 该 pod 需要多少 CPU(集群自动伸缩器需要此信息才能工作)。

    kubectl set resources deployment load-generator --requests=cpu=200m
  3. 扩大负载 – 增加副本数以产生足够的需求。

    kubectl scale deployment load-generator --replicas=20
  4. 观察伸缩过程

    • 在一个终端中,监视节点列表:

      kubectl get nodes -w
    • 在另一个终端中,监视 MIG 实例:

      gcloud compute instance-groups managed list-instances k8s-worker-mig --region=us-central1

    你应该会看到初始节点被占满,pods 进入 Pending 状态,GCP 自动伸缩器 provisioning 额外的 VM,直至满足负载。

与 GKE 的比较

如果你使用 Google Kubernetes Engine,整个部署可以通过一条命令完成:

gcloud container clusters create k8s-easy-cluster \
  --zone us-central1-a \
  --num-nodes 3 \
  --machine-type e2-medium

虽然 GKE 将底层细节抽象掉,但“硬核”方式构建集群可以让你更深入地了解每个组件,从而在排障时成为更出色的运维人员。

下一步

  • 在不中断的情况下升级控制平面 – 继续本系列学习滚动升级。
  • 探索更多自动化(例如,监控、日志记录、网络策略)。

References

0 浏览
Back to Blog

相关文章

阅读更多 »