Kubeadm高可用安装k8s集群-补充说明

1.1 k8s 1.24管理用户无token处理

1.24版本及以上关闭了自动生成admin-user-token的配置

[root@k8s-master01 dashboard]# kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'
#输出的是空值,正常输出应如下
[root@k8s-master01 dashboard]# kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'
admin-user-token-8z5ht

如果安装k8s 1.24以上版本,需要修改apiserver如下配置,所有master节点都需要修改

vim /etc/kubernetes/manifests/kube-apiserver.yaml
...
- kube-apiserver #在这一行下增加下面一行
- --feature-gates=LegacyServiceAccountTokenNoAutoGeneration=false 
...

image-20221026231526281

继续修改controller-manager如下配置

vim /etc/kubernetes/manifests/kube-controller-manager.yaml
...
- kube-controller-manager #在这一行下增加下面一行
- --feature-gates=LegacyServiceAccountTokenNoAutoGeneration=false 
...

重启kubelet

systemctl restart kubelet

重新创建dashboard-user用户

cd /root/k8s-ha-install/dashboard/ 
kubectl delete -f dashboard-user.yaml
kubectl  create -f dashboard-user.yaml

可以看到admin-user重新生成了

kubectl get serviceaccount -n kube-system

image-20221026232202054

使用如下命令查看,可以看到已经有token了

[root@k8s-master01 dashboard]# kubectl -n kube-system get secret | grep admin-user | awk '{print $1}'
admin-user-token-8z5ht

#查看token值
[root@k8s-master01 1.1.1]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

1.2 集群可用性验证

#查看所有pod启动状态
kubectl get po --all-namespaces

#看资源监控数据
kubectl top po -n kube-system

#查看svc,k8s有两个比较重要的svc,一般是第一个ip地址如下
[root@k8s-master01 ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   192.168.0.1   <none>        443/TCP   46h

#第二个svc是,kube-dns的svc,一般是第十个ip地址
[root@k8s-master01 ~]# kubectl get svc -n kube-system
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns         ClusterIP   192.168.0.10     <none>        53/UDP,53/TCP,9153/TCP   46h
metrics-server   ClusterIP   192.168.39.238   <none>        443/TCP                  17h


#查看所有节点是否能连接这两个svc,所有节点都需要测试一下
telnet 192.168.0.1 443
telnet 192.168.0.10 53

[root@k8s-master03 ~]# kubectl get po --all-namespaces -owide
#可以看到calico-kube-controllers-6f6595874c-kqd9j这个pod在master01,ip是172.25.244.193,验证其他节点是否能ping通他
ping 172.25.244.193

#进入pod测试是否能互通,使用如下命令进入到容器ping其他节点的ip地址
 kubectl exec -it calico-node-rvwhh -n kube-system -- sh
 ping 172.25.244.193 #这个做不了,因为没有ping命令

修改kubernetes-dasboard的clustip为nodeport,是每个节点会开个端口便于访问

测试dasboard是否能访问,随便找个节点的ip都能访问

image-20221027143632018

1.3 kubeadm证书更新

kubeadm安装的集群只有一年的有效期

推荐一年更新一次k8s版本,更新的时候证书会自动续期。一年更新一次可以使用他的新功能也可以修复一些bug。

1.3.1 证书续期一年

#查看证书有效期,每个master节点都看
kubeadm certs check-expiration

#更新前备份之前的证书防止集群出现故障好进行恢复
cp -rp /etc/kubernetes/pki/ /opt/pki.bak

#续期证书
kubeadm certs renew all
systemctl restart kubelet

#这个更新操作会对证书做一次更新
ls /etc/kubernetes/pki/ -l

#更新完后查看集群状态
kubectl get node
kubectl get pod -n kube-system
kubectl get pod -A
kubectl run nginx --image=nginx
kubectl get pod 

快过期的时候在系统日志中会有提示

tail -f /var/log/messages

1.3.2 证书续期99年

需要用到源码文件

#先看版本,记住版本,我的是1.23.12
kubeadm version

#拉取k8s源码
git clone https://gitee.com/mirrors/kubernetes.git
cd kubernetes/

#查看所有分支
git branch -a

#根据tag找
git tag

#切换到1.23.12版本
git checkout v1.23.12

#启动golang环境的容器,因为K8s是go语言开发的,需要用到go环境,但是使用容器更加方便
docker run -it --rm -v `pwd`:/go/src/ registry.cn-beijing.aliyuncs.com/dotbalo/golang:kubeadm bash
cd /go/src/
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=off
grep "365" cmd/kubeadm/app/constants/constants.go
sed -i 's#365#365 * 100#g' cmd/kubeadm/app/constants/constants.go
grep "365" cmd/kubeadm/app/constants/constants.go
mkdir -p _output/
chmod 777 -R _output/
make WHAT=cmd/kubeadm
cp _output/bin/kubeadm ./kubeadm
exit

#以下在宿主机上运行
cp kubeadm /opt/
/opt/kubeadm version
/opt/kubeadm certs renew all
kubeadm certs check-expiration
systemctl restart kubelet

#更新其他节点的证书
scp /opt/kubeadm k8s-master02:/opt/
scp /opt/kubeadm k8s-master03:/opt/

#分别在master02,03上执行
/opt/kubeadm certs renew all
kubeadm certs check-expiration
systemctl restart kubelet

注意ca证书没有更新,到时候研究一下image-20221027200825175

ca证书更不更新都无所谓了,谁也不能在一家公司待10年,况且,只要升级CA证书必然也会更新,到时候升级k8s版本就好了。

1.4 参考资料

posted @ 2022-12-04 14:28  努力吧阿团  阅读(257)  评论(0编辑  收藏  举报