English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 2|回复: 0

kubeadm 部署的集群 常见问题汇总

[复制链接]
查看: 2|回复: 0

kubeadm 部署的集群 常见问题汇总

[复制链接]
查看: 2|回复: 0

243

主题

0

回帖

739

积分

高级会员

积分
739
cy7AFCbTmQ

243

主题

0

回帖

739

积分

高级会员

积分
739
2025-2-21 20:07:21 | 显示全部楼层 |阅读模式
扩容节点

扩容 Worker 节点

kubeadm init 后会输出在终端上, 有效期 2 小时, 超时后可以重新生成
生成添加命令:
1
kubeadm token create --print-join-command
扩容 Master 节点

生成加入命令

1
2
3
4
5
6
7
8
# 生成证书, 记录 certificate key
kubeadm init phase upload-certs --upload-certs

# 获取加入命令
kubeadm token create --print-join-command

# 将上面的输出结果拼接,这个就是加入 master 的命令,在新的 master 上执行
echo "$(kubeadm token create --print-join-command) --control-plane --certificate-key $(kubeadm init phase upload-certs --upload-certs | tail -1)"
修改负载均衡配置

扩容完 master 节点不要忘了将新的节点增加到 Apiserver 的负载均衡上。
证书位置

1
2
3
4
5
# 这里能看到在用哪个 secret
kubectl get secret -n kube-system kubeadm-certs -o yaml

# 查看对应的 secret
kubectl get secret -n kube-system bootstrap-token-277b0n -o yaml
移除节点

移除 worker 节点

1
2
kubectl drain worker2 --ignore-daemonsets
kubectl delete node worker2
移除 etcd member

如果要移除 master 节点,并且 master 节点上部署了 etcd ,那除了上一步操作,还需要从 etcd 集群中移除这个节点。
1
2
3
4
5
6
7
kubectl exec -it -n kube-system etcd-master1 -- /bin/sh

# 查看etcd member list
etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member list

# 通过ID来删除etcd member
etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key member remove 12637f5ec2bd02b8
升级集群

kubeadm 搭建的集群升级比较方便,总体步骤如下:
升级第一个 master 节点

上面安装的 kubelet kubeadm kubectl 这 3 个是机器上使用 yum 安装的,所以需要通过 yum 来升级。先升级 kubeadm 组件, 新版本每个大版本一个 yum 仓库,需要先修改仓库配置文件,参考:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/change-package-repository/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 查看可用的版本
sudo yum list --showduplicates kubeadm --disableexcludes=kubernetes

# 升级kubeadm到指定的版本
sudo yum update kubeadm-1.29.6 --disableexcludes=kubernetes

# 验证kubeadm版本
kubeadm version

# 升级检查,主要检查兼容性以及建议升级到的版本
kubeadm upgrade plan

# 开始升级,升级 `kube-apiserver` `kube-controller-manager` `kube-scheduler` 这些组件在节点上是以静态 Pod 的形式存在的。
kubeadm upgrade apply v1.29.6

# 把其他组件也一块升级了
sudo yum update kubelet-1.29.6 kubectl-1.29.6 cri-tools kubernetes-cni --disableexcludes=kubernetes

# 重启kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
升级其他 master 节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 升级kubeadm到指定的版本
sudo yum update kubeadm-1.29.6 --disableexcludes=kubernetes

# 验证kubeadm版本
kubeadm version

# 升级节点
kubeadm upgrade node

# 升级其他软件包
sudo yum update kubelet-1.29.6 kubectl-1.29.6 cri-tools kubernetes-cni --disableexcludes=kubernetes

sudo systemctl daemon-reload
sudo systemctl restart kubelet
升级 worker 节点

1
2
3
4
5
# 升级软件包
sudo yum update kubeadm-1.29.6 kubelet-1.29.6 kubectl-1.29.6 cri-tools kubernetes-cni --disableexcludes=kubernetes

sudo systemctl daemon-reload
sudo systemctl restart kubelet
测试集群是否正常

创建一个 nginx 的 pod 资源
1
2
3
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get deploy,svc,pod
访问 nodeport,检查能否访问到 nginx 服务
查看 ETCD 状态

1
kubectl exec -n kube-system etcd-master1 -- etcdctl --endpoints="10.0.0.13:2379,10.0.0.12:2379,10.0.0.11:2379" --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key endpoint status --write-out=table
pause 镜像版本问题

使用 kubeadm image pull 事先把镜像拉取下来,但是后面 kubeadm init 还是报错:
1
2
3
> journalctl -xeu kubelet -f

Jul 22 08:35:49 master1 kubelet[2079]: E0722 08:35:49.169395    2079 pod_workers.go:190] "Error syncing pod, skipping" err="failed to \"CreatePodSandbox\" for \"etcd-master1_kube-system(642dcd53ce8660a2287cd7eaabcd5fdc)\" with CreatePodSandboxError: \"Failed to create sandbox for pod \\\"etcd-master1_kube-system(642dcd53ce8660a2287cd7eaabcd5fdc)\\\": rpc error: code = Unknown desc = failed to get sandbox image \\\"k8s.gcr.io/pause:3.6\\\": failed to pull image \\\"k8s.gcr.io/pause:3.6\\\": failed to pull and unpack image \\\"k8s.gcr.io/pause:3.6\\\": failed to resolve reference \\\"k8s.gcr.io/pause:3.6\\\": failed to do request: Head \\\"https://k8s.gcr.io/v2/pause/manifests/3.6\\\": dial tcp 142.250.157.82:443: connect: connection refused\"" pod="kube-system/etcd-master1" podUID=642dcd53ce8660a2287cd7eaabcd5fdc
这里我们已经提前拉取了镜像在本地了, 但是 init 的时候还是会从 k8s.gcr.io 拉取镜像,造成 init 失败,如果你的网络可以访问 k8s.gcr.io 的情况下则可以完成初始化, 你会发现这里拉取失败的镜像 tag 和 kubeadm config images pull 拉下来的版本不一致。
问题原因:containerd 的配置文件里面指定了 pause 的镜像,这里会拉取这个版本的镜像,和 kubeadm 不一致。所以两个镜像都需要,或者修改下 containerd 的配置。

修改 NodePort 端口范围

在 master 节点上修改:
vim /etc/kubernetes/manifests/kube-apiserver.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.0.0.22:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=10.0.0.22
    - --allow-privileged=true
    ...
    # 增加了这一行
    - --service-node-port-range=1-65535
    image: registry.k8s.io/kube-apiserver:v1.27.3
    imagePullPolicy: IfNotPresent
    livenessProbe:
      failureThreshold: 8
      httpGet:
        host: 10.0.0.22
        path: /livez
修改完成后保存, apiserver 会自动重启.
master 节点允许调度

1
2
3
4
5
# 老版本Kubernetes执行这个,我测试1.21是这污点
# kubectl taint node --all node-role.kubernetes.io/master:NoSchedule-

# 1.28版本 去掉master上的这个污点即可
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
手动证书更新

使用kubeadm部署的集群证书过期后处理
修改 kube-proxy 代理模式

相比 iptables,使用 ipvs 可以提供更好的性能
1
kubectl -n kube-system edit configmap kube-proxy
mode 参数修改成 ipvs

1
kubectl -n kube-system rollout restart daemonset kube-proxy
查看 kube-proxy 日志,出现 Using ipvs Proxier 说明修改成功。

自动补全功能


1
yum -y install bash-completion

1
apt install -y bash-completion




[table][tr][td]1
2
3
4
5
[/td][td]
cat >> ~/.bashrc
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

243

主题

0

回帖

739

积分

高级会员

积分
739

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-3-11 03:30 , Processed in 0.836657 second(s), 29 queries .

Powered by 智能设备

©2025

|网站地图