【kubeadm】离线部署k8s(使用containerd)

背景:最近部署高版本的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

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值