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

如何将外部AWS实例添加到现有Kops Kubernetes集群?

能否将外部AWS Ubuntu实例接入kops创建的Kubernetes集群?

是的,你完全可以将自己的外部AWS Ubuntu实例接入现有的kops Kubernetes集群,但需要根据使用场景选择不同的接入方式,以下是详细说明和操作步骤:

一、临时接入(不纳入kops管理,适合测试场景)

这种方式下,你手动将节点加入集群,但kops的集群配置中不会记录这个节点,后续执行kops update cluster或kops rolling-update时,kops可能会将这个“额外”节点判定为非集群管理节点并移除,因此仅适合短期测试使用。

操作步骤:

  1. 准备外部实例环境

    • 确保实例与集群处于同一个VPC内(或通过VPC对等连接、VPN等实现网络互通,需开放集群API服务器6443端口、节点间10250/2379/2380等通信端口)
    • 给实例分配与集群节点一致的安全组(或配置等价的入站/出站规则)
    • 关闭swap(kubelet强制要求):
      swapoff -a
      sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
      
    • 安装与集群版本完全匹配的容器 runtime(如containerd或Docker)、kubelet、kubeadm、kubectl:
      以Ubuntu为例,添加对应版本的K8s apt源后安装组件(假设集群版本为1.27.3):
      # 添加GPG密钥
      curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg
      # 添加K8s apt源
      echo 'deb https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
      # 更新并安装指定版本组件
      sudo apt update
      sudo apt install -y kubelet=1.27.3-00 kubeadm=1.27.3-00 kubectl=1.27.3-00
      # 锁定版本防止自动更新
      sudo apt-mark hold kubelet kubeadm kubectl
      
  2. 获取集群节点加入命令
    在你用来管理kops集群的机器上:

    • 先导出集群kubeconfig:
      kops export kubecfg --name <你的集群名称> --state <你的kops状态存储路径,比如s3://my-kops-state-store>
      
    • 生成节点加入命令:
      kubeadm token create --print-join-command
      
      命令会输出类似如下内容:
      kubeadm join api.your-cluster.example.com:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890
      
  3. 在外部实例执行加入命令
    将上面生成的命令复制到外部Ubuntu实例,以sudo权限执行,等待节点完成注册。在管理机器上运行kubectl get nodes,当节点状态变为Ready时,即完成接入。

二、永久接入(纳入kops管理,避免被清理)

如果希望外部实例长期留在集群中,且不被kops的更新操作移除,需要将实例纳入kops的集群配置,让kops管理它的生命周期。

操作步骤:

  1. 获取外部实例核心信息
    通过AWS控制台或CLI获取实例的ID、可用区、子网ID:

    aws ec2 describe-instances --instance-ids <你的外部实例ID> --query 'Reservations[0].Instances[0].[Placement.AvailabilityZone, SubnetId]'
    
  2. 编辑kops集群配置
    在管理机器上打开集群配置编辑器:

    kops edit cluster <你的集群名称> --state <你的kops状态存储路径>
    

    在配置的spec.nodes部分,新增一个节点组并指定你的外部实例:

    spec:
      nodes:
      - name: existing-external-node
        instanceGroup: nodes
        zone: <实例所在可用区,比如us-east-1a>
        subnet: <实例所在子网ID>
        # 关键:指定外部实例的ID
        instanceID: i-0123456789abcdef0
        # 其他配置与现有节点组保持一致,如镜像、IAM角色、安全组等
        image: <集群使用的Ubuntu镜像ID>
        iam:
          profile: nodes.<你的集群名称>
        securityGroup: nodes.<你的集群名称>
    
  3. 应用配置并同步集群
    提交配置修改:

    kops update cluster <你的集群名称> --state <你的kops状态存储路径> --yes
    

    执行滚动更新让kops同步配置到外部实例:

    kops rolling-update cluster <你的集群名称> --state <你的kops状态存储路径> --yes
    
  4. 验证节点状态
    运行kubectl get nodes,确认外部实例已作为集群节点存在,且状态为Ready。

重要注意事项

  • 外部实例的Ubuntu版本、K8s组件版本必须与集群现有节点完全一致,否则会出现兼容性问题
  • 实例的IAM角色权限要与集群节点的IAM角色权限相同,否则节点无法正常与API服务器通信、获取集群资源
  • 永久接入后,后续所有kops集群操作都会包含该节点,需保证其配置与集群其他节点保持同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:35:24