首页 > 其他分享 >Kubeadm高可用安装k8s集群-补充说明

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

时间:2022-12-04 14:33:38浏览次数:68  
标签:kubectl kube get 集群 user Kubeadm k8s kubeadm

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 参考资料

标签:kubectl,kube,get,集群,user,Kubeadm,k8s,kubeadm
From: https://www.cnblogs.com/tz90/p/16949826.html

相关文章

  • k8s源码分析7-API核心服务Authorization的认证及鉴权
    一、Authentication认证本节重点总结:Authentication的目的Kubernetes使用身份认证插件利用下面的策略来认证API请求的身份客户端证书持有者令牌(BearerToke......
  • 大数据--Hadoop环境部署(4)Hadoop集群部署
    Hadoop集群的部署方式分为三种,分别是独立模式(Standalonemode)、伪分布式模式(Pseudo-Distributedmode)和完全分布式模式(Clustermode),独立模式和伪分布式模式主要用于学习和......
  • 进击的K8S:Kubernetes基础概念
    Kubernetes简介Kubernetes简称K8S(因为k和s中间有8个字母),是一个开源的容器集群管理平台,基于Go语言编写。使用K8S,将简化分布式系统上的容器应用部署,使得开发人员可以专注于......
  • 在超算/计算集群中编译和安装OpenFOAM-5.x
    安装的准备现在OpenFOAM已经更新到了第十版,之所以安装5版本,是因为我个人现在做CFD-DEM耦合的工作,CFDEM耦合软件支持的OpenFOAM就是5.x版本。不管是哪一个版本,安装过程和准......
  • K8S 部署电商项目
     Ingress和IngressController概述在k8s中为什么会有service这个概念?Pod漂移问题Kubernetes具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其......
  • k8s篇-k8s集群架构及组件详解【史上最详细】
    Okubernetes简介k8s是什么k8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可以促进声明式配置和自动化。k8s能做什么1)服务发现和负载......
  • K8S 核心组件 kubelet 与 kube-proxy 分析
    kubeletkubelet进程用于处理master下发的任务,管理pod中的容器,注册自身所在的节点.节点管理启动参数说明--register-node#如果设置为true则会向apiserver......
  • K8s架构|全面整理K8s的架构介绍
    K8S架构与核心技术介绍1.架构图1.1整体结构图1.2组件间的协议CNI:CNI是ContainerNetworkInterface的是一个标准的,通用的接口;用于连接容器管理系统和网络......
  • K8S的架构及工作原理
    1、Master和Node1)、MasterK8S中的Master是集群控制节点,负责整个集群的管理和控制在Master上运行着以下关键进程:kube-apiserver:提供了HTTPRest接口的关键服务进程,......
  • 【云原生】k8s 管理平台 rancher
    目录一、概述二、Rancher架构三、安装Rancher1)安装Helm2)安装ingress-controller3)为Rancher创建命名空间4)选择SSL配置5)安装cert-manager6)通过Helm安装Rancher2)添......