【kubeadm】离线部署k8s(使用containerd)
背景:最近部署高版本的k8s没有看见有containerd为底层的文档,所以参考了几位博主的文档离线部署了1.26.4版本的k8s学习一下部署前提:此次安装1.26.4的k8s集群,关闭虚拟机swap、selinux、firewalld,集群机器间时间同步,1.26版本k8s使用containerd故不安装docker。
背景:最近部署高版本的k8s没有看见有containerd为底层的文档,所以参考了几位博主的文档离线部署了1.26.4版本的k8s学习一下
部署前提:此次安装1.26.4的k8s集群,关闭虚拟机swap、selinux、firewalld,集群机器间时间同步,1.26版本k8s使用containerd故不安装docker
1.安装要求
自己部署来测试最低要求准备一台2核2G的机器即可
2.部署前机器操作
在所有机器中操作
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
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
EOF
sysctl --system
#设置服务器主机名,只要和下面hosts文件的ip主机名对应起来就可。
hostnamectl set-hostname <hostname>
cat >> /etc/hosts << EOF
192.168.10.102 master01 #修改为对应ip和主机名
192.168.10.100 node01
192.168.10.100 node02
EOF
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
3.部署镜像仓库
由于离线环境无法拉取镜像,所以要先部署一个镜像仓库来进行镜像拉取(已部署好私仓可以跳过这节)
这边新启动一个机器用docker部署一个registry仓库
docker run -d --name registry --restart=always -p 5000:5000 -v home/registry:/var/lib/registry registry
使用本机ip验证是否启动成功
curl 本机ip:5000/v2/_catalog
4.部署containerd
下载可执行文件并应用
# 下载介质
## containerd介质版本链接
https://github.com/containerd/containerd/releases
## 下载,这边选择的系统是adm64,containerd版本为 1.7.11版本
wget https://github.com/containerd/containerd/releases/download/v1.7.11/containerd-1.7.11-linux-amd64.tar.gz
# 创建containerd目录并解压到系统中
mkdir /root/containerd
tar -C /root/containerd -zxvf containerd-1.7.11-linux-amd64.tar.gz
# 追加环境变量并立即生效
export PATH=$PATH:/usr/local/bin:/usr/local/sbin && source ~/.bashrc
# 使containerd生效
cd /root/containerd/bin
cp * /usr/bin
cp ctr /usr/local/bin
修改配置文件并启动containerd
#首先生成 containerd 运行所需要的配置文件,方便后期修改。
mkdir -p /etc/containerd/ && containerd config default > /etc/containerd/config.toml
#修改containerd默认配置文件,把192.168.10.103:5000修改成自己的镜像仓库地址
#sandbox_image这个镜像可以从registry.aliyuncs.com/google_containers/pause:3.9下载放到本地镜像仓库,注意:若pause:3.9这个镜像有问题,启动完k8s集群后会出现sandbox错误
cat > /etc/containerd/config.toml << EOF
oom_score = 0
root = "/home/containerd" # containerd容器存放的位置
state = "/run/containerd"
version = 2
[cgroup]
path = ""
[debug]
address = ""
format = ""
gid = 0
level = ""
uid = 0
[grpc]
address = "/run/containerd/containerd.sock"
gid = 0
max_recv_message_size = 16777216
max_send_message_size = 16777216
tcp_address = ""
tcp_tls_ca = ""
tcp_tls_cert = ""
tcp_tls_key = ""
uid = 0
[metrics]
address = ""
grpc_histogram = false
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "192.168.10.103:5000/google_containers/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["http://192.168.10.103:5000"] #填自己的镜像仓库
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["http://192.168.10.103:5000"] #填自己的镜像仓库
EOF
#修改containerd系统文件
cat > /usr/lib/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=/usr/bin/containerd --config /etc/containerd/config.toml
Restart=always
RestartSec=5
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
EOF
#启动 containerd 并设置自启动
systemctl start containerd && systemctl enable containerd
下载crictl工具
#下载
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.29.0/crictl-v1.29.0-linux-amd64.tar.gz
#解压
tar -xzvf crictl-v1.29.0-linux-amd64.tar.gz
cp crictl /usr/local/bin
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF
#配置完即可使用crictl命令
下载runc
wget https://github.com/opencontainers/runc/releases/download/v1.1.8/runc.amd64
cp runc.amd64 /usr/local/bin/runc
chmod +x /usr/local/bin/runc
5.部署k8s
下载kubeadm、kubelet、kubectl离线包
#在有网环境下下载安装包
cat > /etc/yum.repos.d/kubernetes.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
mkdir kubeadm && cd kubeadm
yum -y install kubelet-1.26.4 kubectl-1.26.4 kubeadm-1.26.4 --downloadonly --downloaddir=./
#将上面在线环境拉取的镜像包kubeadm文件夹复制到离线环境中
#安装离线包
yum localinstall *.rpm
#查看需要的镜像
kubeadm config images list
#上述命令输出结果如下
registry.k8s.io/kube-apiserver:v1.26.4
registry.k8s.io/kube-controller-manager:v1.26.4
registry.k8s.io/kube-scheduler:v1.26.4
registry.k8s.io/kube-proxy:v1.26.4
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.9.3
#有网环境中拉取上面的镜像并推到自己的镜像仓库中,这种镜像拉取不到的话可以在前面加一个国内代理m.daocloud.io的前缀拉取,例:
docker pull m.daocloud.io/registry.k8s.io/kube-apiserver:v1.26.4
kubeadm部署
#kubeadm初始化
kubeadm init \
--apiserver-advertise-address=192.168.101.175 \ #管理节点ip
--image-repository registry-1.docker.io/kubernetes \ #containerd配置文件中的镜像仓库
--control-plane-endpoint=192.168.101.175 \ #管理节点ip
--kubernetes-version v1.26.4 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--v=5
#添加kubeconfig文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#添加其他节点
上述kubeadm init命令执行成功后会返回创建.kube/config的命令,跟着结果执行即可;执行成功后返回一串kubeadm join命令,将这串kubeadm join命令在工作节点上执行即可添加节点,添加的节点也要进行上述的初始化和部署操作
添加完后集群部署完成,但不可访问,访问还需部署网络插件,这里部署calico
6.部署calico网络插件
#下载helm
wget https://get.helm.sh/helm-v3.11.0-linux-amd64.tar.gz
tar -xzvf helm-v3.11.0-linux-amd64.tar.gz
cd linux-amd64
mv helm /usr/local/bin/
#下载tigera-operator
wget https://github.com/projectcalico/calico/releases/download/v3.26.4/tigera-operator-v3.26.4.tgz
tar -xzvf tigera-operator-v3.26.4.tgz
#拉取tigera-operator所需的镜像
#修改tigera-operator/values.yaml
把下图方框的镜像仓库修改成自己的镜像仓库
#calico所需镜像,需要先拉下来推送到私有镜像仓库中
#这些镜像在quay.io库中,普通方式拉取不到,可以通过代理拉取
tigera/operator:v1.30.9
calico/ctl:v3.26.4
calico/node:v3.26.4
calico/cni:v3.26.4
calico/kube-controllers:v3.26.4
calico/apiserver:v3.26.4
calico/csi:v3.26.4
calico/pod2daemon-flexvol:v3.26.4
calico/typha:v3.26.4
calico/node-driver-registrar:v3.26.4
#创建tigera-operator命名空间
kubectl create ns tigera-operator
#部署calico
#registry-1.docker.io修改成本地的镜像仓库
helm install calico tigera-operator -ntigera-operator\
--version v3.26.4 \
--set installation.registry=registry-1.docker.io \
--set tigeraOperator.registry=registry-1.docker.io \
--set calicoctl.image='calico/ctl'
7.参考文档
【containerd部署】Containerd 的安装和基本使用 - 阿蛮君博客
【kubeadm离线部署】 kubeadm部署k8s(包括离线方式)_kubeadm离线部署k8s-CSDN博客
【kubeadm init报错排查】 https://blog.csdn.net/weixin_52156647/article/details/129765134
【kubeadm官方文档】使用 kubeadm 创建集群 | Kubernetes
【calico所需镜像】operator/config/calico_versions.yml at v1.30.9 · tigera/operator · GitHub
更多推荐
所有评论(0)