介绍


最接几天在折腾 Kubernetes,记录一下遇到的一个问题以及解决方法。Kubernetes 是谷歌出品的一个容器集群管理系统,可以管理大规模分布式的容器集群,使用场景非常广泛。

问题


在集群的工作节点上执行kubectl报错

[root@k8s-node239 ~]# kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@k8s-node239 ~]#
[root@k8s-node239 ~]#

作为集群管理的核心,工作节点上的kubectl可能一上来就跪了

安装的方法今天暂且不说,记录一下 The connection to the server localhost:8080 was refused 这个问题的解决方法。

解决方法1


在 kubectl init 之后,需要使用一个非 root 账户登录,然后运行下列命令:

sudo cp /etc/kubernetes/admin.conf $HOME/
sudo chown $(id -u):$(id -g) $HOME/admin.conf
export KUBECONFIG=$HOME/admin.conf

即可完美解决问题。

解决方法2

出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了“/etc/kubernetes/admin.conf”。

因此,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:

#复制admin.conf,请在主节点服务器上执行此命令
scp /etc/kubernetes/admin.conf 172.16.2.202:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf 172.16.2.203:/etc/kubernetes/admin.conf

然后分别在工作节点上配置环境变量:

#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo “export KUBECONFIG=/etc/kubernetes/admin.conf” >> ~/.bash_profile

接下来,工作节点就正常了,如

[root@k8s-node239 ~] kubectl get pods -n devops
NAME READY STATUS RESTARTS AGE
jenkins-app-5f6b59fd6c-28lq2 1/1 Running 3 100d
jenkins-slave-1fb0bc24-0db2-40b4-a2fb-a08e63b233fa-7lv4s-c5vhq 5/6 Error 0 18d
jenkins-slave-f0f10242-c76c-4ff6-b676-a010d67ddee9-qs4ms-5x3sk 5/6 Error 0 4d22h
tomcat-deployment-766c6c7f44-cx2x9 1/1 Running 3 95d
[root@k8s-node239 ~]