基于Containerd容器运行时,kubeadm极速部署K8S集群
一、主机配置【最低2g,2c,硬盘100G】
1、主机名配置
hostnamectl set-hostname k8s-master01
2、配置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens33" DEVICE="ens33" ONBOOT="yes" IPADDR="192.168.229.130" PREFIX="24" GATEWAY="192.168.229.2" DNS1="119.29.29.29"
3、查看ip配置结果
ip a s ens33
4、主机名与IP地址映射关系【所有主机均需要】
vi /etc/hosts
192.168.229.130 k8s-master01 192.168.229.131 k8s-worker01
5、防火墙关闭
systemctl disable firewalld
systemctl stop firewalld
firewall-cmd --state
6、关闭SeLinux
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 需要重启操作系统
或者【不需要重启操作系统】
vi /etc/selinux/config
7、时间同步配置
crontab -e
添加:
0 */1 * * * ntpdate time1.aliyun.com
8、内核升级
- 检查当前
CentOS
系统内核版本 ,执行如下命令查看:
uname -r
Linux 3.10.0-1160.el7.x86_64
检查发现当前内核版本是3.10,
- 使用elrepo源升级内核,配置elrepo源,执行如下命令
9、配置内核转发,及网桥过滤
- 添加网桥过滤及内核转发配置文件
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 EOF
- 加载br_netfilter模块
modprobe br_netfilter
- 查看是否加载
lsmod | grep br_netfilter
10、安装ipset及ipvsadm
yum -y install ipset ipvsadm
- 配置ipvsadm模块加载方式
cat > /etc/sysconfig/modules/ipvs.modules << EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF
- 授权、运行、检查是否加载
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
11、关闭swap
执行swapoff -a 临时关闭,通过修改/etc/fstab文件实现永久关闭。执行如下命令
ansible k8s -m shell -a "sed -ri 's/.*swap.*/#&/' /etc/fstab"
或者 ,将swap注释
vi /etc/fstab
二、容器运行时Containerd准备
网盘下载:
链接:https://pan.baidu.com/s/1HyTVVFqrmudESzhDeHxVZA?pwd=26o9
提取码:26o9
- 将文件下载到本地,然后上传到linux目录,不要自己解压,一个一个复制,应使用 命令 -C / ,解压到根目录 /root,它会自动将解压后文件,分配到各目录
[root@k8s-master01 master01]# tar xf cri-containerd-cni-1.7.7-linux-amd64.tar.gz -C /
- 创建containerd目录
[root@k8s-master01 master01]# mkdir /etc/containerd
- 生成config.toml配置文件
[root@k8s-master01 master01]# containerd config default > /etc/containerd/config.toml
- 编辑沙盒配置文件,k8s 1.27版本用的是3.9的沙盒,需要将3.8改为3.9
[root@k8s-master01 master01]# vi /etc/containerd/config.toml
配置文件中沙盒地址为国外的,不开vpn下载不了,需要改为阿里云地址:
sandbox_image = "registry.aliyuncs.com/k8sxio/pause:3.9"
设为开机启动
[root@k8s-master01 master01]# systemctl enable --now containerd #设置开机启动
2、runc下载:https://github.com/search?q=runc&type=repositories
网盘下载
链接:https://pan.baidu.com/s/1GNP9VxGKC7vw6a5m_xqKOg?pwd=c7oj
提取码:c7oj
- 部署前,首先进行解压
1 | [root@k8s-master01 master01] # tar xf libseccomp-2.5.4.tar.gz |
进入解压后文件
[root@k8s-master01 master01]# cd libseccomp-2.5.4/
- 安装需要的工具
[root@k8s-master01 libseccomp-2.5.4]# yum -y install gperf
- 配置
[root@k8s-master01 libseccomp-2.5.4]# ./configure
- 编译
[root@k8s-master01 libseccomp-2.5.4]# make
- 安装
[root@k8s-master01 libseccomp-2.5.4]# make install
- 使用查找命令,测试是否安装成功
[root@k8s-master01 libseccomp-2.5.4]# find / -name "libseccomp.so"
- runc安装,查找旧的runc安装地址
[root@k8s-master01 ~]# which runc /usr/local/sbin/runc
- 删除旧的runc
[root@k8s-master01 ~]# rm -rf /usr/local.sbin/runc
下载新的runc
链接:https://pan.baidu.com/s/1bPKlfK5EeeZT4ujp2Z-ebw?pwd=fa1i
提取码:fa1i
- 添加权限
[root@k8s-master01 master01]# chmod +x runc.amd64
- 将下载后新文件,移动到刚才删除文件位置
[root@k8s-master01 master01]# mv runc.amd64 /usr/local/sbin/runc
- 执行runc
[root@k8s-master01 master01]# runc
三、K8S集群部署
- K8S软件yum源准备
cat > /etc/yum.repos.d/k8s.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
- 集群软件安装
默认安装【最新版本】 yum -y install kubeadm kubelet kubectl 查看指定版本 [root@k8s-master01 ~]# yum list kubeadm.x86_64 --showdup licates | sort -r 安装指定版本 yum -y install kubeadm-1.27.3-0 kubelet-1.27.3-0 kubectl-1.27.3-0
- 配置kubelet
为了实现docker使用的cgroupdriver与kubelet使用的一致性,建议修改如下文件内容
[root@k8s-master01 ~]# vim /etc/sysconfig/kubelet
- 修改这一行内容
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
- 设置kubelet为开机自动启动,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
- 集群初始化
192.168.229.130为master节点IP
kubeadm init --kubernetes-version=v1.27.3 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.229.130 --cri-socket unix:///var/run/containerd/containerd.sock --image-repository=registry.aliyuncs.com/google_containers
出现这个表示安装成功
- 执行如下命令
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 使用containerd时,会在net.d目录生成的文件
[root@k8s-master01 ~]# ls /etc/cni/net.d
10-containerd-net.conflist 这个文件是给pod分配IP地址的,
- 这个地址不打算使用,计划部署一个calico,所以移动到home目录
[root@k8s-master01 ~]# mv /etc/cni/net.d/10-containerd-net.conflist /home
将分节点,添加到master节点
kubeadm join 192.168.229.130:6443 --token ra45m5.7rc4atyi11xxae7d \ --discovery-token-ca-cert-hash sha256:f83babdf7e1db104a365ba4d8eff9e83e9672ea34e06a8cdba3d0954385876bd --cri-socket unix:///var/run/containerd/containerd.sock
四、网络插件calico部署
下载地址:https://docs.tigera.io/calico/latest/getting-started/kubernetes/quickstart
在master节点,将上面命令进行复制执行
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/tigera-operator.yaml
配置文件,先下载下来,修改后执行
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/custom-resources.yaml
vi custom-resources.yaml
执行命令
kubectl create -f custom-resources.yaml
查看命名空间是否有pod运行 kubectl get pods -n calico-system //监视查看 watch kubectl get pods -n calico-system
参考:https://www.bilibili.com/video/BV1Cz4y1g7HJ?p=1&vd_source=db8cd9c1a8a8621ff5b724115534601a
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程