嵌入式技术
一、问题描述
在Kubernets Master节点中,执行 kubectl get nodes时,报如下错误:
root@master:/# pwd
/
root@master:/# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
root@master:/#
二、问题分析
执行kubectl命令时,会读取本地的.kube/config文件,并使用其中的配置信息来连接到Kubernetes API Server。.kube/config文件内容如下:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ...... # 此处省略
server: https://30.*.*.*:6443 # API Server地址
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data:
...
client-key-data:
...
查看当前用户的HOME目录下,是否存在.kube目录。
# cd ~
# ls -a
.
..
.bash_history
.bashrc
.cache
.config
.dbus
.kube
.local
.profile
......
kube目录和config文件都存在。此时,再执行kubectl命令不再报错,可查询出结果。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 114d v1.23.1
node2 Ready < none > 114d v1.23.1
此时,在当前命令窗口,使用export命令配置HOME目录:
export HOME=/root
有关环境变量,可参阅Linux shell:变量
再次切换目录到/下,执行kubectl get nodes可查询到结果。
所以,执行kubectl命令报错的原因为未设置HOME环境变量。
另外,新建一个命令窗口,执行su root命令,也可以正常执行kubectl命令。
root@master:/# pwd
/
root@master:/# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
root@master:/#
root@master:/#
root@master:/# su root
root@master:/# pwd
/
root@master:/# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 114d v1.23.1
node2 Ready < none > 114d v1.23.1
其背后的技术原理为:
在Linux中,每个用户都有一个主目录,它是用户登录时的默认工作目录。当用户切换到另一个用户时,其主目录也会随之切换。这是通过设置环境变量HOME来实现的。执行su root命令时,便会自动设置HOME环境变量为/root。
全部0条评论
快来发表一下你的评论吧 !