Linux系统中HOME目录未设置导致kubectl执行报错

嵌入式技术

1335人已加入

描述

一、问题描述

在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。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分