0

我在 aws ec2 实例上创建了一个由 k0s 安装的 k8s。为了更快地交付新集群,我尝试为它制作一个 AMI。

但是,我启动了一个新的ec2实例,内部IP改变了,节点变成了NotReady

ubuntu@ip-172-31-26-46:~$ k get node
NAME               STATUS     ROLES    AGE   VERSION
ip-172-31-18-145   NotReady   <none>   95m   v1.21.1-k0s1
ubuntu@ip-172-31-26-46:~$

是否可以重新配置它?


解决方法

我找到了使 AWS AMI 正常工作的解决方法

简短的回答

  1. 使用 kubelet 安装节点--extra-args
  2. 更新 kube-api 到新 IP 并重启 kubelet

详情 :: 1

在 kubernete 集群中,kubelet播放节点代理节点。它会告诉kube-api“嘿,我在这里,我的名字是 XXX”。

节点的名称是它的主机名,创建后不能更改。它可以由 设置--hostname-override

如果您不更改节点名称,kube-api将尝试使用主机名然后出现old-node-name未找到导致的错误。

详情 :: 2

到k0s,把kubelet'KUBECONFIG放在里面/var/lib/k0s/kubelet.conf,里面有一个kubelet api server location

server: https://172.31.18.9:6443

为了连接一个新的 kube-api 位置,请更新它

4

1 回答 1

1

你检查 kubelet 日志了吗?很可能是证书的问题。您不能仅仅将现有节点变成 ami 并希望它能够工作,因为证书是为特定 IP 签名的。

查看github 上的awslabs/amazon-eks-ami 存储库。您可以查看 aws 如何处理其 k8s ami。

repo 中有一个files/bootstrap.sh文件,用于引导实例。它会做各种特定于实例的事情,包括获取证书。

如果您想“更快地交付新集群”,我建议创建一个包含所有依赖项但没有实际 k8s 助推的 ami。在从 ami 启动实例之后安装 k8s(或在您的情况下为 k0s),而不是之前。(或者弄清楚如何重新生成特定于节点的证书和配置。)

于 2021-06-10T13:14:39.570 回答