网站首页 > 博客文章 正文
8 K8s集群初始化及注意事项
8.1 K8s集群初始化
在k8s-master-01节点进行以下操作
- 查看kubeadm安装的版本
kubeadm version
本次安装的版本是1.31.3
- 编辑kubeadm-config.yaml
vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: 7t2weq.bjbawausm0jaxury
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.3.60
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
name: k8s-master-01
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/control-plane
---
apiServer:
certSANs:
- 192.168.3.50 # 如果搭建的不是高可用集群,把此处改成master的IP
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: 192.168.3.50:16443 # 如果搭建的不是高可用集群,把此处改成master的IP,端口改成6443
controllerManager: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.31.3 # 更改此处的版本号和kubeadm version一致
networking:
dnsDomain: cluster.local
podSubnet: 172.16.0.0/16 #注意此处的网段,不要与service和节点网段冲突
serviceSubnet: 10.96.0.0/16 #注意此处的网段,不要与pod和节点网段冲突
scheduler: {}
- 更新kubeadm文件
kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
- 将new.yaml文件复制到其他master节点
for i in k8s-master-02 k8s-master-03; do scp new.yaml $i:/root/; done
其他节点的new.yaml不需要更改任何配置,包括IP地址也不需要更改
不过我改了k8s-master-02和k8s-master03节点new.yaml的advertiseAddress、nodeRegistration.name
vim new.yaml
vim new.yaml
- 所有Master节点提前下载镜像,可以节省初始化时间:
kubeadm config images pull --config /root/new.yaml
- 在k8s-master-01节点初始化(只能在一个主节点)
初始化以后会在/etc/kubernetes目录下生成对应的证书和配置文件,之后其他Master节点加入k8s-master-01节点即可
kubeadm init --config /root/new.yaml --upload-certs
K8s Master节点初始化成功
初始化成功以后,会产生Token值(随机值),用于其他节点(master、node)加入时使用,因此要记录下初始化成功生成的token值(令牌值)
- master节点使用
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d \
--control-plane --certificate-key 655009b0379dc4fd8f838f5ba3e1e27734d89021d9ab3639d1b6ab716303ceba
- node节点集群使用
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d
- 查看k8s集群节点信息
kubectl get node
报错咯
原因:kubebctl不知道连接哪个集群查看节点信息
解决方案:在k8s-master-01节点执行如下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
目前网络插件没有安装,所以状态是NotReady
kubectl get node
- 查看k8s组件
kubectl get po -n kube-system
采用初始化安装方式,所有的系统组件均以容器的方式运行并且在kube-system命名空间内,此时可以查看Pod状态:
k8s组件的配置文件在/etc/kubernetes/manifests/目录下
ls /etc/kubernetes/manifests/
8.2 集群初始化失败排查
严格按照我的步骤执行,一次就装成功
如果初始化失败,重置后再次初始化,命令如下(没有失败不要执行)
kubeadm reset -f ; ipvsadm --clear ; rm -rf ~/.kube
如果多次尝试都是初始化失败,需要看系统日志,CentOS日志路径:/var/log/messages,Ubuntu日志路径:/var/log/syslog
tail -f /var/log/messages | grep -v "not found" |grep -v "NetworkPluginNotReady"
经常出错的原因:
- Containerd的配置文件修改的不对,自行参考《安装containerd》小节核对
- new.yaml配置问题,比如非高可用集群忘记修改16443端口为6443
- new.yaml配置问题,三个网段有交叉,出现IP地址冲突
- VIP不通导致无法初始化成功,此时messages日志会有VIP超时的报错
9 K8s集群添加Master实现高可用
其他master节点加入集群,k8s-master-02和k8s-master-03分别执行
不能能直接复制文档当中的命令,而是你自己刚才k8s-master-01初始化之后产生的命令
- 将k8s-master-02加入集群
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d \
--control-plane --certificate-key 655009b0379dc4fd8f838f5ba3e1e27734d89021d9ab3639d1b6ab716303ceba
- k8s-master-03加入集群
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d \
--control-plane --certificate-key 655009b0379dc4fd8f838f5ba3e1e27734d89021d9ab3639d1b6ab716303ceba
- 在k8s-master-01查看Master集群节点
kubectl get nodes
10 K8s集群Token过期处理
注意:以下步骤是上述init命令产生的Token过期了才需要执行以下步骤,如果没有过期不需要执行,直接join即可。
- 查看token 列表
kubeadm token list
- 工作节点token过期后生成新的token
工作节点指的是k8s-node-01、k8s-node-02、k8s-node-03
kubeadm token create --print-join-command
- 主节点token过期后生成新的token
工作节点一般在200个工作节点范围内,主节点不需要发生变化
主节点指的是k8s-master-01、k8s-master-02、k8s-master-03
主节点需要生成--certificate-key
kubeadm init phase upload-certs --upload-certs
有了 certificate-key
f786efdb685f4c64c362e32675b4e3b1d7f9643365b8d29a6b295e3dcf1a95e1
就可以使用如下命令加入新的master节点
kubeadm join 192.168.3.50:16443 --token 6f3smu.1ntls8pwrwdombuk --discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d
--control-plane --certificate-key
f786efdb685f4c64c362e32675b4e3b1d7f9643365b8d29a6b295e3dcf1a95e1
- 再次查看token list
kubeadm token list
11 K8s集群添加Node节点
Node节点上主要部署公司的一些业务应用,生产环境中不建议Master节点部署系统组件之外的其他Pod,测试环境可以允许Master节点部署Pod以节省系统资源。
- 将k8s-node-01加入集群
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d
- 将k8s-node-02加入集群
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d
- 将k8s-node-03加入k8s集群
kubeadm join 192.168.3.50:16443 --token 7t2weq.bjbawausm0jaxury \
--discovery-token-ca-cert-hash sha256:8d7f7bcf28ab4e9d4af76ad42fd470c4891f11f5aa51e70e42876cef703fe78d
- 所有节点初始化完成后,在k8s-master-01节点查看集群状态(NotReady不影响)
kubectl get node
12 K8s集群安装Calico插件
- 所有节点禁止NetworkManager管理Calico的网络接口,防止有冲突或者是干扰
cat >>/etc/NetworkManager/conf.d/calico.conf<<EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:vxlan-v6.calico;interface-name:wireguard.cali;interface-name:wg-v6.cali
EOF
- 所有节点重启网络
systemctl daemon-reload
systemctl restart NetworkManager
查看系统错误日志
tail -f /var/log/messages
- 在k8s-master-01节点切换到calico所在的目录和分支
cd /root/k8s-ha-install && git checkout manual-installation-v1.31.x && cd calico/
- 在k8s-master-01节点修改Pod网段
POD_SUBNET=`cat /etc/kubernetes/manifests/kube-controller-manager.yaml | grep cluster-cidr= | awk -F= '{print $NF}'`
sed -i "s#POD_CIDR#${POD_SUBNET}#g" calico.yaml
vim /root/k8s-ha-install/calico/calico.yaml
- 在k8s-master-01节点将 Calico 网络插件配置应用到 Kubernetes 集群
kubectl apply -f calico.yaml
- 在k8s-master-01节点查看容器和节点状态
此时要等待一下子,初始化需要一点时间
kubectl get po -n kube-system
kubectl get node
所有的节点都是Ready状态
13 K8s度量指标Metrics安装
在新版的Kubernetes中系统资源的采集均使用Metrics-server,可以通过Metrics采集节点和Pod的内存、磁盘、CPU和网络的使用率。
- 将k8s-master-01节点的front-proxy-ca.crt复制到所有Node节点
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node-01:/etc/kubernetes/pki/front-proxy-ca.crt
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node-02:/etc/kubernetes/pki/front-proxy-ca.crt
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-node-03:/etc/kubernetes/pki/front-proxy-ca.crt
- 在k8s-master-01节点安装metrics server
cd /root/k8s-ha-install/kubeadm-metrics-server
kubectl create -f comp.yaml
- 在k8s-master-01节点查看metrics-server状态
此时要等待一下子,初始化需要一点时间
kubectl get po -n kube-system -l k8s-app=metrics-server
- 查看Kubernetes 集群中节点资源使用情况(如 CPU 和内存)
kubectl top node
- 查看所有命名空间中所有 Pod 的资源使用情况(如 CPU 和内存)的命令
kubectl top po -A
14 K8s Dashboard部署
14.1 K8s Dashboard安装
Dashboard用于展示集群中的各类资源,同时也可以通过Dashboard实时查看Pod的日志和在容器中执行一些命令等。
https://github.com/kubernetes/dashboard
K8s Dashboard 只需要在k8s-master-01节点安装
- 切换到dashboard所在的目录
cd /root/k8s-ha-install/dashboard/
- 从当前目录中的所有 YAML 或 JSON 文件创建 Kubernetes 资源
kubectl create -f .
- 查看dashboard
kubectl get po -n kubernetes-dashboard
此时要等待一下子,初始化需要一点时间
14.2 K8s Dashboard登录
- 更改dashboard的svc为NodePort(如果已经为NodePort忽略此步骤)
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
- 查看端口号
kubectl get svc kubernetes-dashboard -n kubernetes-dashboard
- 根据自己的实例端口号,通过任意安装了kube-proxy的宿主机的IP+端口即可访问到dashboard
https://192.168.3.60:30437/
https://192.168.3.61:30437/
https://192.168.3.62:30437/
- 在k8s-master-01节点创建有效时间1年的Token用于登录dashboard
kubectl create token admin-user -n kube-system --duration=31536000s
eyJhbGciOiJSUzI1NiIsImtpZCI6ImFmNHZrR180b1lmTFhPU1h5ZjhaZlU3UW43cFk1Uk40QmxwNHNYWjB3TUkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzY1MjUzMTgyLCJpYXQiOjE3MzM3MTcxODIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiMTQyNDQ1YWMtNGQwMC00ZTc2LTljOTMtOGJmYjY1YTI2OTE0Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiNGI2MTFjNzEtZTA2Yy00ZGVhLWE4NzItZjhmN2M4ZWZiNzkzIn19LCJuYmYiOjE3MzM3MTcxODIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbi11c2VyIn0.vpFWtd7eGaTabA2MirWDbcNFpMr9CU2Bspc5EeZInzNtj9Ld6CC0lu1VSGvPgQhOn-MThZvAbz_wgwWrXAR09s_0dDcqrfCRYmwKdeAX9J1A-ntwlc9J8CLwTOWm89blxanmbfgxl3ll5le9cHh5Ja2fq3FowPVxA4Ns4XHrV1dgUcNTw8-aRX_Zbl12OdzZRkvnP-O7LaFIhqAm1l4p8XStCXMvkWPKtlNHAGCN-Bz6ZvRqUkaSEfmXbjepERlfuBgNHqj79n9AFLjib8NdedhgKTEiVfGPzcvhSSXSiG4gzUHNf5z-QKYOQgXM2xLGDPe-mpLtDqCqRpNQF4qRLA
将token值输入到令牌后,单击登录即可访问Dashboard
默认访问的命名空间是default
点击kube-system
切换到kube-system命名空间
15 K8s集群配置
15.1 将Kube-proxy改为ipvs模式
因为在初始化集群的时候注释ipvs配置,因此需要自行修改
在k8s-master-01上执行
kubectl edit cm kube-proxy -n kube-system
将第59行的mode: ""改成mode: "ipvs"
15.2 更新Kube-Proxy的Pod
kubectl patch daemonset kube-proxy -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}" -n kube-system
验证Kube-Proxy模式
curl 127.0.0.1:10249/proxyMode
- 上一篇: IF嵌套层数太多?试试Drools规则引擎
- 下一篇: Linux安全之iptables的target
猜你喜欢
- 2024-12-31 二进制部署k8s集群
- 2024-12-31 Kubernetes系列之集群部署
- 2024-12-31 容器化部署SpringBoot微服务
- 2024-12-31 【云原生】k8s 一键部署(ansible)
- 2024-12-31 【云原生】k8s 离线部署讲解和实战操作
- 2024-12-31 探索eBPF:Linux内核的黑科技
- 2024-12-31 Kubernetes 常见故障排查和处理
- 2024-12-31 使用RKE的方式快速部署K8S集群
- 2024-12-31 在 Anolis 8.8 | Rocky 9.3 | AlmaLinux 9.3 上部署 k8s v1.28.3 集群
- 2024-12-31 k8s集群报错:check that the calico/node container is running and has
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)