k8s 1.35 使用kubeadm部署高可用集群

目录

  • [1. kubeadm、kubelet、kubectl安装](#1. kubeadm、kubelet、kubectl安装)
  • [2. 安装containerd](#2. 安装containerd)
    • [2.1 解压安装包,设置systemd](#2.1 解压安装包,设置systemd)
    • [2.2 安装runc](#2.2 安装runc)
    • [2.3 安装CNI插件](#2.3 安装CNI插件)
  • [3. 使用cgroup v2](#3. 使用cgroup v2)
  • [4. 集群部署](#4. 集群部署)
    • [4.1 第一个master节点](#4.1 第一个master节点)
    • [4.2 增加控制面节点](#4.2 增加控制面节点)
    • [4.3 calico安装](#4.3 calico安装)
  • 注意点

1. kubeadm、kubelet、kubectl安装

2. 安装containerd

2.1 解压安装包,设置systemd

参考https://github.com/containerd/containerd/blob/main/docs/getting-started.md

  1. 先把https://github.com/containerd/containerd/releases,找一个最新的安装包解压到本地,然后解压
shell 复制代码
tar Cxzvf /usr/local/ containerd-2.2.1-linux-amd64.tar.gz
bin/
bin/containerd-shim-runc-v2
bin/containerd-shim
bin/ctr
bin/containerd-shim-runc-v1
bin/containerd
bin/containerd-stress
shell 复制代码
systemctl daemon-reload
systemctl enable --now containerd

2.2 安装runc

  • 上面官方文档里有写
shell 复制代码
install -m 755 runc.amd64 /usr/local/sbin/runc

2.3 安装CNI插件

  • 命令如下
shell 复制代码
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.9.0.tgz

结果

复制代码
./
./bandwidth
./host-device
./LICENSE
./loopback
./ptp
./vrf
./tuning
./host-local
./static
./tap
./bridge
./README.md
./macvlan
./firewall
./dummy
./sbr
./ipvlan
./portmap
./dhcp
./vlan

3. 使用cgroup v2

  • /etc/containerd/config.toml文件内容如下
toml 复制代码
[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc]
  [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
    SystemdCgroup = true
  • 由于cgroups v1 support is deprecated and will be removed in a future release. Please migrate to cgroups v2. To explicitly enable cgroups v1 support for kubelet v1.35 or newer, you must set the kubelet configuration option 'FailCgroupV1' to 'false'. You must also explicitly skip this validation. For more information, see https://git.k8s.io/enhancements/keps/sig-node/5573-remove-cgroup-v1,我们需要把启用cgroups v2,文档参考https://kubernetes.io/zh-cn/docs/concepts/architecture/cgroups/
  • 首先使用stat -fc %T /sys/fs/cgroup/,看Linux系统当前使用的cgroup版本,对于CGroup v1,输出tmpfs;对于CGroup v2输出cgroup2fs

我当前的输出是tmpfs

  • 需要在/etc/default/grub的GRUB_CMDLINE_LINUX中添加systemd.unified_cgroup_hierarchy=1,然后执行下面的命令(不同发行版不一样)
shell 复制代码
# Debian/Ubuntu(默认已安装)
sudo update-grub

# CentOS/RHEL 7+
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# Fedora(UEFI模式)
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

# Arch Linux
sudo grub-mkconfig -o /boot/grub/grub.cfg
  • 重启操作系统
shell 复制代码
sudo reboot

再次执行stat -fc %T /sys/fs/cgroup/,发现输出变成cgroup2fs

4. 集群部署

4.1 第一个master节点

  • 先看下文章最后的 注意点1
  • 使用下面的命令。control-plane-endpoint是负载均衡器的访问地址,可以暂时使用某个master节点
shell 复制代码
kubeadm init \
  --control-plane-endpoint=11.50.138.91:6443 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.35.0 \
  --pod-network-cidr=10.244.0.0/16

等待组件都就绪,然后执行

shell 复制代码
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

 export KUBECONFIG=/etc/kubernetes/admin.conf

然后可以使用kubectl命令了

4.2 增加控制面节点

  • 在第一个master节点上生成认证密钥
shell 复制代码
kubeadm init phase upload-certs --upload-certs

结果如下

复制代码
[root@mengshi3-apack-node01 ~]# kubeadm init phase upload-certs --upload-certs
[upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
[upload-certs] Using certificate key:
2921c3475df1449711486d503a7202f5d2a97126f416dd4627c35a52faf5db0d

然后生成添加控制面节点的命令

shell 复制代码
kubeadm token create --print-join-command --certificate-key 2921c3475df1449711486d503a7202f5d2a97126f416dd4627c35a52faf5db0d

会生成下面的命令。在需要加进来的节点机器上执行,即可把节点作为控制面节点加入k8s集群

复制代码
kubeadm join 11.50.138.91:6443 --token wicgtt.nc2z5fj7cqa2ypah --discovery-token-ca-cert-hash sha256:2ffcfac3c76d84c0aceff773e9ec8a7a59155f721eeaaa024df1f055abfe4c96 --control-plane --certificate-key 2921c3475df1449711486d503a7202f5d2a97126f416dd4627c35a52faf5db0d

4.3 calico安装

  • 上面的组件装完之后,节点状态是NotReady,这时候,需要安装网络插件以支持集群的节点间网络通信,常见的插件有flannel和calico,对于简单的小集群可以使用flannel,这里我们选择功能更强的calico
  • https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml这是calico的yaml文件,可以修改镜像地址之后apply到集群。安装完了之后,观察组件状态是否全部Running
  • 然后Node Ready,集群部署成功

注意点

1. registry.k8s.io/pause:3.10.1镜像

需要在containerd的k8s.io ns下放一个registry.k8s.io/pause:3.10.1镜像,在拉起核心组件的时候需要。但我们无法直接访问这个仓库,所以可能需要tag一下。使用下面的命令

shell 复制代码
ctr -n k8s.io images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10.1 registry.k8s.io/pause:3.10.1

2. 可用的镜像站点

复制代码
docker.m.daocloud.io
相关推荐
Z21-X8 分钟前
云原生运维实战笔记:华为云存储类服务全景解析——EVS、OBS、SFS与CBR深度实践
运维·笔记·学习·云原生·华为云
分布式存储与RustFS1 小时前
K8s 集群备份落到自建对象存储:Velero 接 RustFS 配置指南
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无言听风雨丶10 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
openFuyao11 小时前
openFuyao x 复旦大学软件工程实验室 Panel 回顾:Agentic时代,集群调度技术体系将如何演进?
kubernetes·openfuyao
螺蛳粉 螺蛳粉11 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
知已难寻12 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
相思难忘成疾14 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo14 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
n1121215 小时前
Ollama 接 Open WebUI 中文界面:我踩的 4 个坑
云原生·eureka·ollama·本地大模型·open webui·私有部署·中文界面
阿里云云原生15 小时前
用户说 App“下不了单”:用 Session Replay 看清流程卡在哪一步
云原生