我的 kubernetes 集群 IP 地址发生了变化,现在 kubectl 将不再连接


  • 在 Ubuntu 下运行,我使用kubeadm init来设置我的集群(主节点(并通过/etc/kubernetes/admin.conf $HOME/.kube/config复制,使用kubectl时一切都很好。
  • 但是重新启动后,我的主节点的IP地址更改与$HOME/.kube/config中的IP地址不同,因此现在我无法再连接kubectl

那么,既然我有了新的 IP 地址,如何重新生成 admin.conf?跑kubeadm init只会杀死一切不是我想要的东西。

我在互联网上找到了这个解决方案,它对我有用:

systemctl stop kubelet docker
cd /etc/
mv kubernetes kubernetes-backup
mv /var/lib/kubelet /var/lib/kubelet-backup
mkdir -p kubernetes
cp -r kubernetes-backup/pki kubernetes
rm kubernetes/pki/{apiserver.*,etcd/peer.*}
systemctl start docker
kubeadm init --ignore-preflight-errors=DirAvailable--var-lib-etcd
#Run "kubeadm reset" on all nodes if was this error "error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists"
cp kubernetes/admin.conf ~/.kube/config
kubectl get nodes --sort-by=.metadata.creationTimestamp
kubectl delete node $(kubectl get nodes -o jsonpath='{.items[(@.status.conditions[0].status=="Unknown")].metadata.name}')
kubectl get pods --all-namespaces

在这些之后,加入你的奴隶成为主人。 参考: https://medium.com/@juniarto.samsudin/ip-address-changes-in-kubernetes-master-node-11527b867e88

以下命令可用于重新生成admin.conf

kubeadm alpha phase kubeconfig admin --apiserver-advertise-address <new_ip>

但是,如果使用 IP 而不是主机名,则 API 服务器证书将无效。所以,要么重新生成你的证书(kubeadm alpha phase证书更新apiserver(,使用主机名而不是IP,或者在使用kubectl时添加不安全的--insecure-skip-tls-ver标志

您不想使用kubeadm reset.这将重置所有内容,您必须再次开始配置群集。

好吧,在您的场景中,请查看以下步骤:

  1. nano /etc/hosts(针对YOUR_HOSTNAME更新您的新 IP(
  2. nano /etc/kubernetes/config(与您的集群相关的配置设置(在此文件中查找以下参数并相应地更新

    KUBE_MASTER="--master=http://YOUR_HOSTNAME:8080"

    KUBE_ETCD_SERVERS="--etcd-servers=http://YOUR_HOSTNAME:2379" #2379 is default port

  3. nano /etc/etcd/etcd.conf(confetcd有关 (

    KUBE_ETCD_SERVERS="--etcd-servers=http://YOUR_HOSTNAME/WHERE_EVER_ETCD_HOSTED:2379"

    2379etcd的默认端口。 您可以在此处定义多个etcd服务器,逗号分隔

  4. 重新启动kubeletapiserveretcd服务。

最好使用hostname而不是IP来避免这种情况。

希望对您有所帮助!

请找到 K8S 群集设置,其中主 IP 和工作 IP 已更改。

  • 使用主节点和工作节点的新主机 IP 编辑/etc/hosts文件

  • 然后重置群集:

对于 1.23 版本:sudo kubeadm reset

对于 1.26/27 版本:sudo kubeadm reset --cri-socket unix:///run/cri-dockerd.sock

  • 重新初始化群集

对于版本 1.23:sudo kubeadm init

对于版本 1.26:sudo kubeadm init --cri-socket unix:///run/cri-dockerd.sock此命令将生成加入辅助角色的密钥。

  • 在主节点中运行以下 3 个命令:
mkdir -p $HOME/.kube
sudo cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 在工作节点中运行群集加入命令:

对于版本 1.23:在主节点中生成密钥 对于 1.26 版:在主节点和 --cri-socket unix:///run/cri-dockerd.sock 中生成密钥

相关内容

  • 没有找到相关文章

最新更新