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
...
继续修改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
使用如下命令查看,可以看到已经有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都能访问
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证书没有更新,到时候研究一下
ca证书更不更新都无所谓了,谁也不能在一家公司待10年,况且,只要升级CA证书必然也会更新,到时候升级k8s版本就好了。
1.4 参考资料
今天的学习是为了以后的工作更加的轻松!