kubeadm部署kubernetes 1.24版本集群
kubeadm 安装docker支持的k8s环境
2022年5月3日,kubernetes 1.24版本正式发布,从1.24版本开始 kubernetes正式移除对Dockershim的支持,若需要1.24版本依然支持docker,则需要引入第三方cri-dockerd项目进行支持,本博客主要内容即为使用kubeadm 部署基于docker支持的k8s 1.24版本。文章如有疏漏或者疑惑的地方,可以随时指正或交流
本文大部分内容来源与B站(云原生说)视频讲解 ,本文在原视频的基础上,一步步实际操作,记录安装过程中的遇到的问题与解决方法
全网首发!kubeadm极速部署Kubernetes 1.24版本集群【Kubernetes 1.24部署集群发布及重磅改动】_哔哩哔哩_bilibili
1.24版本之前docker-shim
1.24版本docker-shim架构
目录
3.2 安装 kubeadm kubelet kubectl
1、基础环境配置
实际操作环境为3台虚拟机环境,配置为8C(CPU)、16G(内存)、200G(存储),操作系统为Centos7.9,为三台虚拟机分别设置不同的静态IP,hostname等
1.1 关闭 selinux
编辑vim /etc/selinux/config
1.2 关闭防火墙
systemctl status firewalld
systemctl disable firewalld
检查防火墙状态
firewall-cmd --state
1.3 配置时间同步状态(联网方式)
使用 crontab -e命令,在新界面按a见进入编辑模式,输入下面定时任务
0 */1 * * * ntpdate time1.aliyun.com
保存退出,使用 crontab -l 查看定时任务状态
1.4 修改主机名
编辑 vim /etc/hostname
本文三个虚拟机主机hostname设置分别为
master01
k8s-worker-01.com
k8s-worker-02.com
1.5 配置hosts集群信息
编辑/etc/hosts文件
1.6 升级内核 (该步骤可以省略)
导入elrepo gpg key
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装 elrepo YUM源仓库
yum install -y https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64
设置grub2默认引导为0
grub2-set-default 0
重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
更新后,需要重启,使升级的内核生效
reboot
重启后执行 uname -ar 查看kernel 版本
1.7 加载br_netfilter模块
modprobe br_netfilter
1.8 添加网桥过滤及内核转发配置文件
cat << EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
执行命令,刷新配置
sysctl -p /etc/sysctl.d/k8s.conf
查看是否加载
lsmod | grep br_netfilter
1.8 安装ipset及ipvsadm
yum install -y 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
1.9 关闭SWAP分区
修改完成后需要重启操作系统,如不重启,可临时关闭,命令为swapoff -a
永久关闭swap分区,需要屏蔽/etc/fstab文件中关于swap那一行,该操作需要重启操作系统,
1.10 安装docker-ce
配置阿里云镜像站
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
Docker安装
yum install docker-ce -y
启动docker进程
systemctl enable --now docker
修改cgroup管理方式
/etc/docker/daemon.json 默认没有此文件,需要单独创建,里面填充下面的参数
{
"exec-opts":["native.cgroupdriver=systemd"]
}
2 cri-dockerd 安装
2.1 golang环境准备
获取golang安装包,由于接下来的cri-dockerd模块依赖是golang的特定版本,因此这里下载golang1.18,查看项目依赖go版本的方法是查看go.mod文件说明:
下载golang 1.18 版本
wget https://golang.google.cn/dl/go1.18.3.linux-amd64.tar.gz
解压golang至指定目录
tar -C /usr/local/ -zxvf ./go1.18.3.linux-amd64.tar.gz
创建gopath目录
mkdir /home/gopath
添加环境变量,编辑/etc/profile 文件,在文件末尾添加以下配置
export GOROOT=/usr/local/go
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
加载/etc/profile文件
source /etc/profile
配置go proxy代理
go env -w GOPROXY="https://goproxy.io,direct"
验证golang是否安装完成,执行 go version命令
2.2 部署cri-dockerd
下载cri-dockerd源码
进入cri-dockerd目录
cd cri-dockerd/
看cri-dockerd github项目主页 Build and install部分的介绍,介绍的步骤不一定要全部执行,图片下方为本人亲自测试的简单步骤。
执行 依赖包下载和命令构建
go get && go build
构建完成后生成cri-dockerd命令
接下来执行cri-dockerd命令的安装及环境配置命令
install -o root -g root -m 0755 cri-dockerd /usr/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
3 配置k8s
这里使用国内的阿里镜像源,安装部署k8s
3.1 配置k8s镜像源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=kubernetes-yum-repos-kubernetes-el7-x86_64安装包下载_开源镜像站-阿里云
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3.2 安装 kubeadm kubelet kubectl
默认安装仓库中的最新版
yum install kubeadm kubelet kubectl -y
也可执行 yum list kubeadm kubelet kubectl --showduplicates | sort -r 按照输出的列表项安装特定版本.
拉取k8s指定版本的镜像
kubeadm config images pull --cri-socket unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers
执行主节点初始化任务,需要注意kubernetes-version的值要和上一步拉取的镜像版本号一致,apiserver-advertise-address填写master 节点的IP
kubeadm init --kubernetes-version=v1.24.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address={master Node IP} --cri-socket unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers
执行过程中遇到如下问题
查看/var/log/messages 日志信息发现如下问题
该问题可能属于k8s代码问题,解决办法使用国内源下载该版本镜像,然后重新打tag
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
手动拉取成功后需执行如下命令清除kubeadm 安装历史信息
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
重新执行执行初始化命令,即可成功
kubeadm init --kubernetes-version=v1.24.2 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address={master Node IP} --cri-socket unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers
接下来在worker节点上执行相关的操作,worker节点与master节点的操作步骤的唯一区别是:master节点执行kubeadm init操作,woker节点执行kubeadm join操作,因此上面的步骤除了kubeadm init步骤之外,其他所有的步骤woker节点同样也需要执行。
执行kubeadm init 成功之后输出的 最后一行kubeadm join 命令,以下代码块仅供参考。
kubeadm join {master_ip:port} --token r5ztlz.kskrprlewgb3xczn \
--discovery-token-ca-cert-hash sha256:73f9047c5fb922fc26abd56e2c3cecc369d70dd28b44245fb1f9f0718b062bf7 --cri-socket unix:///var/run/cri-dockerd.sock
在worker 节点执行kubeadm join命令时,若同样遇到与kubeadm init 相同的问题时,解决办法一样。
手动下载阿里云pause:3.6容器,然后重新打tag
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
清理上次执行产生的数据
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
重新执行
kubeadm join {master_ip:port} --token r5ztlz.kskrprlewgb3xczn \
--discovery-token-ca-cert-hash sha256:73f9047c5fb922fc26abd56e2c3cecc369d70dd28b44245fb1f9f0718b062bf7 --cri-socket unix:///var/run/cri-dockerd.sock
在woker 节点执行kubectl get nodes查看节点状况,如遇如下问题
原因:kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。
将kubeadm init节点 /etc/kubernetes/ 目录下产生的 admin.conf 文件拷贝至该节点 /etc/kubernetes/目录下
配置环境变量信息
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
重新加载环境变量
source /etc/profile
然后再次执行
kubectl get nodes
更多推荐
所有评论(0)