Kubernetes 1.28 集群部署指南(基于 Containerd 容器运行时)
#作者:程宏斌
文章目录
- 一、基础环境配置
- 1、防火墙和selinux
- 2、swap交换分区
- 3、时间同步
- 4、配置hosts及免密
- 5、内核优化
- 二、containerd安装
- 1、下载解压
- 2、拷贝containerd运行时文件到宿主机指定路径
- 3、生成配置文件
- 4、修改Cgroup的管理者为systemd组件
- 5、修改pause的基础镜像名称
- 6、启动containerd服务
- 7、拷贝ctr客户端工具及runc容器运行时
- 8、拷贝容器的运行时,用于后期启动容器
- 三、安装runc
- 四、kubeadm安装集群
- 五、部署Calico网络插件
Centos7部署K8s1.28集群-基于containerd-1.7.11、runc-1.1.11
一、基础环境配置
1、防火墙和selinux
# 关闭防火墙并关闭开机自启
systemctl disable firewalld --now
systemctl status firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 查看状态
getenforce
Disabled
2、swap交换分区
# 临时禁用
swapoff -a
# 永久禁用
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 查看状态
free -h
total used free shared buff/cache available
Mem: 3.8G 1.0G 1.9G 13M 976M 2.6G
Swap: 0B 0B 0B
3、时间同步
# 安装时间同步软件,也可以使用chrony
yum -y install ntpdate
# 配置定时任务
crontab -e
0 */1 * * * ntpdate time1.aliyun.com
4、配置hosts及免密
# 编辑hosts文件
vim /etc/hosts
172.16.1.60 master
172.16.1.61 node1
172.16.1.62 node2
# 免密操作
ssh-keygen
# 将密钥分发到node节点
ssh-copy-id node1
ssh-copy-id node2
5、内核优化
# 修改配置文件
cat >/etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
fs.file-max = 2097152
EOF
cat >/etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF# 加载内核模块
modprobe overlay
modprobe br_netfilter
# 编辑 /etc/security/limits.conf,添加:
* soft nofile 65535
* hard nofile# 重新登录控制台查看
ulimit -n
# 官方参考文档 ,以下内容摘自官方文档
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# 加载模块
lsmod | grep br_netfilter
lsmod | grep overlay
二、containerd安装
1、下载解压
wget https://github.com/containerd/containerd/releases/download/v1.7.11/containerd-1.7.11-linux-amd64.tar.gz
tar xf cri-containerd-1.7.3-linux-amd64.tar.gz
2、拷贝containerd运行时文件到宿主机指定路径
cp bin/containerd /usr/local/bin
拷贝containerd的systemd的配置文件
cp etc/systemd/system/containerd.service /usr/lib/systemd/system/
3、生成配置文件
mkdir /etc/containerd #创建配置文件目录
containerd config default > /etc/containerd/config.toml #生成默认的配置文件
4、修改Cgroup的管理者为systemd组件
grep SystemdCgroup /etc/containerd/config.toml SystemdCgroup = false
sed -ri ‘s#(SystemdCgroup = )false#\1true#’ /etc/containerd/config.toml
grep SystemdCgroup /etc/containerd/config.toml SystemdCgroup = true
5、修改pause的基础镜像名称
grep sandbox_image /etc/containerd/config.toml sandbox_image = “registry.k8s.io/pause:3.6”
sed -i ‘s#registry.k8s.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9#’ /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml sandbox_image = “registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9”
6、启动containerd服务
systemctl enable --now containerd
systemctl status containerd
7、拷贝ctr客户端工具及runc容器运行时
cp usr/local/bin/ctr /usr/bin/ #拷贝ctr客户端工具到PATH环境变量
ctr version #查看contrainerd服务版本信息
8、拷贝容器的运行时,用于后期启动容器
cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/
ll /usr/bin/containerd-shim-runc-v2
三、安装runc
1、下载:
wget https://github.com/opencontainers/runc/releases/download/v1.1.11/runc.amd64
2、拷贝runC到环境变量
mv runc.amd64 /usr/sbin/runc
3、为runc程序添加执行权限
chmod +x /usr/sbin/runc
ll /usr/sbin/runc
-rwxr-xr-x 1 root root 10709696 Mar 8 2024 /usr/sbin/runc*
4、查看runC的版本信息
runc -v
runc version 1.1.11
commit: v1.1.11-0-g4bccb38c
spec: 1.0.2-dev
go: go1.20.12
四、kubeadm安装集群
配置k8s的源文件
官方源文件
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
阿里云源文件
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
安装kubectl,kubeadm,kubelet
yum install -y kubelet kubeadm kubectl
修改镜像(改为阿里云的镜像)
vim /etc/containerd/config.toml
crictl --runtime-endpoint unix:///var/run/containerd/containerd.sock info
查看指定 CRI 运行时的详细信息
重启
systemctl daemon-reload
systemctl restart containerd
systemctl status containerd
初始化集群
编辑kubeadm-config.yaml (修改相关ip配置)
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.15
imageRepository: registry.aliyuncs.com/google_containers
controlPlaneEndpoint: "10.0.12.11:6443"
networking:podSubnet: "10.244.0.0/16"serviceSubnet: "10.1.0.0/16"
etcd:local:imageRepository: registry.aliyuncs.com/google_containers
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:criSocket: unix:///var/run/containerd/containerd.sockname: VM-12-11-opencloudoskubeletExtraArgs:
cgroup-driver: systemd
初始化命令
kubeadm init --config kubeadm-config.yaml
如果初始化异常请重置
(查看分析kubelet以及containerd日志 journalctl -u containerd -f、journalctl -u kubelet -f)
kubeadm reset -f --cri-socket unix:///var/run/containerd/containerd.sock
rm -rf /etc/kubernetes/*
rm -rf /var/lib/etcd/*
rm -rf /var/lib/kubelet/*
以下操作之后可以使用kubectl命令
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
执行命令加入集群(我部署的单节点)
五、部署Calico网络插件
下载
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.5/manifests/calico.yaml > calico.yaml
修改yaml
- name: CALICO_IPV4POOL_CIDRvalue: "10.244.0.0/16"
放开注释,kubeadm-config.yaml 的podSubnet: 修改yaml里面的镜像(这是阿里云仓库的)
sed -i 's|quay.azk8s.cn/calico/cni:v3.28.0|registry.cn-hangzhou.aliyuncs.com/ali_cloud_images/cni:v3.28.5|g' calico.yamlsed -i 's|quay.azk8s.cn/calico/node:v3.28.0|registry.cn-hangzhou.aliyuncs.com/ali_cloud_images/node:v3.28.5|g' calico.yamlsed -i 's|quay.azk8s.cn/calico/kube-controllers:v3.28.0|registry.cn-hangzhou.aliyuncs.com/ali_cloud_images/kube-controllers:v3.28.5|g' calico.yaml运行这个文件
kubectl apply -f calico.yaml