You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP手动搭建k8s集群如何实现新创建VM自动加入Master作为节点

自动加入K8s集群的可行方案

核心实现逻辑为:基于你已预装Docker、K8s组件的自定义镜像,只需在弹性实例启动阶段自动获取集群加入凭证、执行kubeadm join命令即可实现无人值守接入,两种落地方式如下:

方案1:实例模板配置启动脚本(推荐,复杂度最低)

  • 首先登录K8s Master节点生成长期有效的加入凭证(默认token有效期仅24小时,生成永久有效期凭证避免定期更新),执行命令:
    kubeadm token create --ttl 0 --print-join-command
    保存输出的完整join命令,格式参考:kubeadm join [Master内网IP]:6443 --token [生成的token] --discovery-token-ca-cert-hash sha256:[CA证书哈希]
  • 进入GCP控制台编辑弹性实例组绑定的实例模板,在「元数据」板块添加键为startup-script的配置项,值填写如下内容,替换为你刚才保存的join命令:
#!/bin/bash
# 增加重复执行判断,避免实例重启时重复执行加入逻辑
if ! kubectl get node &> /dev/null; then
  替换为你保存的完整kubeadm join命令
fi
  • 注意需保证弹性实例所属VPC网络可访问Master节点的6443端口,无需额外开放公网权限

方案2:cloud-init配置集成(适合需额外初始化的场景)

如果节点启动需要同步完成内核参数调整、磁盘挂载等其他初始化操作,可将加入逻辑集成到cloud-init配置中:

  • 在实例模板的元数据板块添加键为user-data的配置项,值参考如下:
#cloud-config
runcmd:
  - |
    if ! systemctl is-active --quiet kubelet; then
      替换为你保存的完整kubeadm join命令
      systemctl enable --now kubelet
    fi

生产环境安全优化

如果你不想将join凭证明文写在实例模板配置中,可配合GCP Secret Manager做凭证托管:

  • 将完整join命令存储为名为k8s-join-command的Secret,给实例模板绑定的服务账号授予该Secret的只读权限
  • 启动脚本调整为如下内容,启动时自动拉取凭证执行:
#!/bin/bash
if ! kubectl get node &> /dev/null; then
  JOIN_CMD=$(gcloud secrets versions access latest --secret=k8s-join-command --region=你的Secret所属区域)
  eval $JOIN_CMD
fi

内容的提问来源于stack exchange,提问作者TheAkashKamble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:57:03