Kubernetes Node節點主機名 修改
來自專輯
Kubernetes知識圈
背景
Kubernetes 集群環境中,有時候需要修改 Node 節點主機名,這時我們應該如何操作?
有些同學,在更改了 kubelet.conf
配置中 hostname-override
參數,也更改了 kube-proxy-config.yml
配置中 hostnameOverride
參數,刪除 Node 節點並且重啟 kubelet
和 kube-proxy
服務,但主機名並沒有修改,這是為什么?下文會給出解釋。
環境是使用 二進制搭建的 kubernetes v1.18.2 版本
准備工作
大家要知道一點,Node節點主機名更改,需要先刪除Node節點
,在刪除節點前,我們需要把該節點上的Pod應用服務驅逐到其它節點上。
注意,如果集群中只有一個Node節點,不能使用驅逐命令,因為使用驅逐命令后,所有Pod會處於
Pending
狀態。
# 通過以下命令驅逐節點上pod應用
$ kubectl drain service2 --delete-local-data --ignore-daemonsets
# 查看node節點,service2 上應用服務驅逐完后會標記為不可調度
$ kubectl get node
NAME STATUS ROLES AGE VERSION
service2 Ready,SchedulingDisabled <none> 24d v1.18.2
service3 Ready <none> 24d v1.18.2
# 刪除 service2 節點
$ kubectl delete node service2
修改 Node節點主機名
修改 kubelet 和 kube-proxy 服務配置文件
登陸 service2 機器,修改 kubelet 和 kube-proxy 服務配置文件,具體按如下修改:
本次演示,把主機名從 service2 修改為 service2-test
# 停止 kubelet 和 kube-proxy 服務
$ systemctl stop kubelet
$ systemctl stop kube-proxy
# 修改 kubelet.conf 配置文件中 hostname-override 參數
$ vim /opt/kubernetes/cfg/kubelet.conf
# 修改完后,查看
$ grep hostname-override /opt/kubernetes/cfg/kubelet.conf
--hostname-override=service2-test \
# 修改 kube-proxy.kubeconfig 配置文件中 hostnameOverride 參數
$ vim /opt/kubernetes/cfg/kube-proxy-config.yml
# 修改完后,查看
$ grep hostnameOverride /opt/kubernetes/cfg/kube-proxy-config.yml
hostnameOverride: service2-test # 注冊到k8s的節點名稱唯一
刪除 kubelet 服務生成的認證文件和客戶端證書
這里回答
背景
提到的問題,如果不刪除 kubelet 服務生成的認證文件
和客戶端證書
,那么修改的節點主機名是不會生效。
# 刪除 kubelet 服務生成的認證文件和客戶端證書
$ rm -f /opt/kubernetes/cfg/kubelet.kubeconfig
$ rm -f /opt/kubernetes/ssl/kubelet*
# 重新啟動 kubelet 和 kube-proxy 服務
$ systemctl start kubelet
$ systemctl start kube-proxy
驗證
# 登陸到 k8s-master 機器上查看 csr,如何沒有自動授權 Node加入,需要執行下面命令
$ kubectl certificate approve csr-xhjk5
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-xhjk5 31m kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap Pending
# 執行上面命令成功后,會看到下面結果
$ kubectl get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
csr-xhjk5 31m kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap Approved,Issued
# 查看 node 節點,成功加入node節點,並且主機名也修改成功
$ kubectl get node
NAME STATUS ROLES AGE VERSION
service2-test Ready <none> 31m v1.18.2
service3 Ready <none> 24d v1.18.2
總結
修改 Node節點主機名順序如下:
- 1、使用
kubectl drain
命令驅逐節點上Pod - 2、使用
kubectl delete node
命令刪除需要改名的節點 - 3、停止
kubelet
和kube-proxy
服務 - 4、修改
kubelet.conf
和kube-proxy-config.yml
配置 - 5、刪除 kubelet 服務生成的
認證文件
和客戶端證書
- 6、啟動
kubelet
和kube-proxy
服務 - 7、使用命令
kubectl get csr
和kubectl certificate approve
命令授權 node節點加入
熱門文章推薦
- Kubernetes 是否值得學習嗎?
- Kubernetes 私有集群 LoadBalancer 解決方案
- Nginx 之 realip模塊 使用詳解
- Kubernetes節點頻繁NotReady-處理和防范
- K8S node NotReady 后如何保證服務可用
- K8S Pod 內抓包快速定位網絡問題
最后
- 歡迎您加我微信【ypxiaozhan01】,拉您進技術群或者掃下面群二維碼,一起交流學習...