我的kubernetes群集IP地址已更改,现在kubectl将不再连接

时间:2018-10-04 12:45:15

标签: kubernetes

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

那么,有了新的IP地址后,如何重新生成admin.conf?运行kubeadm init只会杀死所有我不想要的东西。

3 个答案:

答案 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来重置所有内容,因此您必须重新开始配置集群。

在您的情况下,请查看以下步骤:

  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是默认端口

  3. 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,以避免出现这种情况。

希望有帮助!