kubeadm init
来设置群集(主节点)并复制到/etc/kubernetes/admin.conf $HOME/.kube/config
上,使用kubectl
时一切都很好。$HOME/.kube/config
中的更改不同,因此现在我无法再连接kubectl
那么,有了新的IP地址后,如何重新生成admin.conf?运行kubeadm init
只会杀死所有我不想要的东西。
答案 0 :(得分:3)
以下命令可用于重新生成 admin.conf
kubeadm alpha phase kubeconfig admin --apiserver-advertise-address <new_ip>
但是,如果您使用IP而不是主机名,则您的API服务器证书将无效。因此,要么重新生成证书( kubeadm alpha阶段证书续订apiserver ),要么使用主机名代替IP,要么添加不安全 -insecure-skip-tls-verify 标志(当使用kubectl时)
答案 1 :(得分:3)
我在互联网上找到了该解决方案,并且对我有用:
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
答案 2 :(得分:2)
您不想使用kubeadm reset来重置所有内容,因此您必须重新开始配置集群。
在您的情况下,请查看以下步骤:
nano / etc / kubernetes / config (与您的集群相关的配置设置) 在此文件中,请查找以下参数并进行相应的更新
KUBE_MASTER =“-master = http://YOUR_HOSTNAME:8080”
KUBE_ETCD_SERVERS =“-etcd-servers = http://YOUR_HOSTNAME:2379”“#2379是默认端口
nano /etc/etcd/etcd.conf (与etcd相关的conf)
KUBE_ETCD_SERVERS =“-etcd-servers = http://YOUR_HOSTNAME/WHERE_EVER_ETCD_HOSTED:2379”
2379 是ETCD的默认端口。而且您可以在此处定义多个以逗号分隔的ETCD服务器。
4。重新启动kubelet,apiserver等服务
最好使用主机名代替IP,以避免出现这种情况。
希望有帮助!