ubuntu 24.04.4,下载(kubeadm 、kubelet、kubectl 、contanerd.io)的二进制离线包安装 k8s v1.34.3
集群规划(3 节点):
master节点,主机名:k8s-master-01,内网ip:172.29.128.1
工作节点01:主机名:k8s-worker-01,内网ip:172.29.132.68
工作节点02:主机名:k8s-worker-02,内网ip:172.29.132.69
一,离线包准备
查看kubeadm-1.34.3需要哪些镜像:
kubeadm config images list --kubernetes-version v1.34.3
离线部署需要的离线资源清单:
| 资源名称 | 离线包名称 | 下载链接 |
| 系统底层依赖包 |
ubuntu-24.04-deps.tar.gz |
需要包含安装依赖: socat, conntrack, ipvsadm, ipset, bridge-utils, iptables, ca-certificates, apparmor-utils |
| 容器运行时全套 |
containerd-2.3.3-linux-amd64.tar.gz |
https://github.com/containerd/containerd/releases/download/v2.3.3/containerd-2.3.3-linux-amd64.tar.gz |
| K8s v1.34.3 控制平面二进制 |
kubeadm |
https://dl.k8s.io/v1.34.3/bin/linux/amd64/kubectl |
| Calico 3.32.1完整离线资源 |
calicoctl-linux-amd64 calico-v3.32.1.yaml |
https://github.com/projectcalico/calico/releases/download/v3.32.1/calicoctl-linux-amd64 |
| Calico 3.32.1镜像 |
quay.io/calico/cni:v3.32.1 |
查看镜像: awk '/image:\s*/{print $2}' calico-v3.32.1.yaml | sort -u |
|
7 个 K8s 核心控制平面镜像的导出包 k8s-1.34.3-offline-images.tar |
registry.k8s.io/kube-apiserver:v1.34.3 registry.k8s.io/kube-controller-manager:v1.34.3 registry.k8s.io/kube-scheduler:v1.34.3 registry.k8s.io/kube-proxy:v1.34.3 registry.k8s.io/etcd:3.6.5-0 registry.k8s.io/coredns/coredns:v1.12.1 registry.k8s.io/pause:3.10.1 |
查看镜像:kubeadm config images list --kubernetes-version v1.34.3 |
|
nerdctl v.2.3.3离线安装包 |
nerdctl-2.3.3-linux-amd64.tar.gz | https://github.com/containerd/nerdctl/releases/download/v2.3.3/nerdctl-2.3.3-linux-amd64.tar.gz |
离线包汇总:
#系统依赖包 ubuntu-24.04-debs.tar.gz #k8s-1.34.3镜像 k8s-1.34.3-offline-images.tar
#nerdctl离线安装包 nerdctl-2.3.3-linux-amd64.tar.gz #kubeadm离线文件清单 containerd-2.3.3-linux-amd64.tar.gz runc.amd64 cni-plugins-linux-amd64-v1.6.0.tgz containerd.service kubeadm kubectl kubelet calicoctl-linux-amd64 calico-release-v3.32.1.tgz calico-v3.32.1.yaml #k8s-1.34.3镜像包 k8s-1.34.3-offline-images.tar,包含: registry.k8s.io/kube-apiserver:v1.34.3 registry.k8s.io/kube-controller-manager:v1.34.3 registry.k8s.io/kube-scheduler:v1.34.3 registry.k8s.io/kube-proxy:v1.34.3 registry.k8s.io/etcd:3.6.5-0 registry.k8s.io/coredns/coredns:v1.12.1 registry.k8s.io/pause:3.10.1 #3个calico镜像 quay.io/calico/cni:v3.32.1 quay.io/calico/kube-controllers:v3.32.1 quay.io/calico/node:v3.32.1
2,制作 ubantu 24.04.4 系统依赖离线包
必备依赖列表:
socat, conntrack, ipvsadm, ipset, bridge-utils, iptables, ca-certificates, apparmor-utils
把下面的全部打包也可以:
curl, wget, openssl, ca-certificates, gnupg, lsb-release, openssh-server, sshpass, tar, unzip, ipset, ipvsadm, conntrack, socat, lvm2, bridge-utils, iptables,apparmor-utils
跳板机下载 deb(仅下载不安装),注意:这条命令要找一台没有安装过这些软件的跳板机,已安装过的软件会跳过下载。.
apt clean apt update apt install -y --download-only curl wget openssl ca-certificates gnupg lsb-release openssh-server sshpass tar unzip ipset ipvsadm conntrack socat lvm2 bridge-utils iptables apparmor-utils mkdir -p system-debs && cp /var/cache/apt/archives/*.deb system-debs/ tar -zcvf ubuntu-24.04-debs.tar.gz system-debs
如果已安装,可以加 --reinstall 参数强制重新安装
apt clean apt update apt install -y --reinstall --download-only curl wget openssl ca-certificates gnupg lsb-release openssh-server sshpass tar unzip ipset ipvsadm conntrack socat lvm2 bridge-utils iptables apparmor-utils mkdir -p system-debs && cp /var/cache/apt/archives/*.deb system-debs/ tar -zcvf ubuntu-24.04-debs.tar.gz system-debs
离线节点安装系统依赖
#保留当前本地修改过的配置文件,不覆盖 export DEBIAN_FRONTEND=noninteractive dpkg --force-confold -i *.deb #安装系统依赖 cd /data tar -zxvf ubuntu-24.04-debs.tar.gz cd ubuntu-24.04-debs dpkg -i *.deb apt install -f -y --no-download
3,国内加速器下载k8s v1.34.3 + calico v3.32.1的镜像并导出镜像
#下载镜像 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-apiserver:v1.34.3 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-controller-manager:v1.34.3 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-scheduler:v1.34.3 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-proxy:v1.34.3 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/etcd:3.6.5-0 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/coredns/coredns:v1.12.1 nerdctl pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.10.1 nerdctl pull m.daocloud.io/quay.io/calico/cni:v3.32.1 nerdctl pull m.daocloud.io/quay.io/calico/kube-controllers:v3.32.1 nerdctl pull m.daocloud.io/quay.io/calico/node:v3.32.1 #镜像改名 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-apiserver:v1.34.3 registry.k8s.io/kube-apiserver:v1.34.3 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-controller-manager:v1.34.3 registry.k8s.io/kube-controller-manager:v1.34.3 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-scheduler:v1.34.3 registry.k8s.io/kube-scheduler:v1.34.3 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/kube-proxy:v1.34.3 registry.k8s.io/kube-proxy:v1.34.3 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/etcd:3.6.5-0 registry.k8s.io/etcd:3.6.5-0 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/coredns/coredns:v1.12.1 registry.k8s.io/coredns/coredns:v1.12.1 nerdctl tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.10.1 registry.k8s.io/pause:3.10.1 nerdctl tag m.daocloud.io/quay.io/calico/cni:v3.32.1 quay.io/calico/cni:v3.32.1 nerdctl tag m.daocloud.io/quay.io/calico/kube-controllers:v3.32.1 quay.io/calico/kube-controllers:v3.32.1 nerdctl tag m.daocloud.io/quay.io/calico/node:v3.32.1 quay.io/calico/node:v3.32.1 #导出镜像 nerdctl save -o k8s-1.34.3-offline-images.tar \ registry.k8s.io/kube-apiserver:v1.34.3 \ registry.k8s.io/kube-controller-manager:v1.34.3 \ registry.k8s.io/kube-scheduler:v1.34.3 \ registry.k8s.io/kube-proxy:v1.34.3 \ registry.k8s.io/etcd:3.6.5-0 \ registry.k8s.io/coredns/coredns:v1.12.1 \ registry.k8s.io/pause:3.10.1 \ quay.io/calico/cni:v3.32.1 \ quay.io/calico/kube-controllers:v3.32.1 \ quay.io/calico/node:v3.32.1
二, 上传离线包
master节点:上传全部离线包。
工作节点:除了三个calico离线包(calicoctl-linux-amd64、 calico-release-v3.32.1.tgz、 calico-v3.32.1.yaml),其它全部上传。
离线包目录:/data/kubeadm-1.34.3-offline
三、前置统一操作(所有 3 节点执行)
1, 配置主机名与 hosts 解析
# Master节点执行 hostnamectl set-hostname k8s-master-01 # Worker01 hostnamectl set-hostname k8s-worker-01 # Worker02 hostnamectl set-hostname k8s-worker-02 # 全部节点写入/etc/hosts cat >> /etc/hosts << EOF 172.29.128.1 k8s-master-01 172.29.132.68 k8s-worker-01 172.29.132.69 k8s-worker-02 EOF
2, 关闭防火墙、swap、selinux
# 关闭swap永久生效
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 关闭ufw
systemctl stop ufw
systemctl disable ufw
# 加载内核模块ipvs/overlay
modprobe overlay
modprobe ip_tables
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
# 内核参数优化k8s网络
cat >> /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p
3. 时间同步
apt install chrony -y systemctl enable --now chronyd timedatectl set-timezone Asia/Shanghai
四,部署containerd(所有节点)
1,执行安装
cd /data/kubeadm-.134.3-offline # 解压containerd二进制 tar -zxvf containerd-2.3.3-linux-amd64.tar.gz cp bin/* /usr/local/bin/ # 部署runc cp runc.amd64 /usr/local/bin/runc chmod +x /usr/local/bin/runc # 部署cni插件 mkdir -p /opt/cni/bin tar -zxvf cni-plugins-linux-amd64-v1.6.0.tgz -C /opt/cni/bin chmod +x /opt/cni/bin/* # 部署systemd服务 cp containerd.service /etc/systemd/system/ systemctl daemon-reload
2,生成并修改 containerd 核心配置(适配 K8s/K3s 必改)
# 生成默认配置 containerd config default > /etc/containerd/config.toml # 修改配置:cgroup驱动systemd、sandbox镜像pause、关闭cni自动配置 sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml sed -i 's#sandbox_image = "registry.k8s.io/pause:3.9"#sandbox_image = "registry.k8s.io/pause:3.10.1"#' /etc/containerd/config.toml # 禁用内置cni,由calico接管 sed -i '/\[plugins."io.containerd.grpc.v1.cri".cni\]/,/}/d' /etc/containerd/config.toml # 刷新缓存 systemctl daemon-reload # 重启 systemctl restart containerd systemctl enable --now containerd systemctl status containerd # 校验连接文件 ls -l /run/containerd/containerd.sock
3,安装nerdctl
tar -zxvf nerdctl-2.3.3-linux-amd64.tar.gz cp nerdctl /usr/local/bin/ chmod +x /usr/local/bin/nerdctl # 配置nerdctl默认命名空间 mkdir -p /etc/nerdctl cat > /etc/nerdctl/nerdctl.toml <<EOF namespace = "k8s.io" address = "/run/containerd/containerd.sock" cgroup_manager = "systemd" EOF
4,离线导入 K8s 控制平面镜像(从 kubeadm-1.34.3-offline-images.tar 文件导入)
nerdctl -n k8s.io load -i /k8s-1.34.3-offline-images.tar
- registry.k8s.io/kube-apiserver:v1.34.3
- registry.k8s.io/kube-controller-manager:v1.34.3
- registry.k8s.io/kube-scheduler:v1.34.3
- registry.k8s.io/kube-proxy:v1.34.3
- registry.k8s.io/etcd:3.5.16-0
- registry.k8s.io/coredns/coredns:v1.11.3
- registry.k8s.io/pause:3.10.1
- quay.io/calico/cni:v3.32.1
- quay.io/calico/kube-controllers:v3.32.1
- quay.io/calico/node:v3.32.1
五,部署 kubeadm / kubectl / kubelete
1, 所有节点执行部署
cp /data/kubeadm-1.34.3-offline/{kubeadm,kubectl,kubelet} /usr/local/bin/ chmod +x /usr/local/bin/{kubeadm,kubectl,kubelet} # 重载systemd识别新服务 systemctl daemon-reload systemctl enable --now kubelet #验证版本 kubeadm version
kubectl version --client kubelet --version
写入 kubelet systemd 服务
cat > /etc/systemd/system/kubelet.service <<EOF [Unit] Description=kubelet Kubernetes Agent After=network.target containerd.service [Service] ExecStart=/usr/local/bin/kubelet \ --config=/var/lib/kubelet/config.yaml \ --kubeconfig=/var/lib/kubelet/kubelet.conf Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF #启动 kubelet 并开机自启 systemctl daemon-reload systemctl enable --now kubelet
六,kubeadm init 离线初始化控制平面
新建 kubeadm 配置文件 kubeadm-init.yaml
apiVersion: kubeadm.k8s.io/v1beta4 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 172.29.128.1 bindPort: 6443 nodeRegistration: criSocket: unix:///run/containerd/containerd.sock name: k8s-master-01 imagePullPolicy: IfNotPresent taints: [] --- apiVersion: kubeadm.k8s.io/v1beta4 kind: ClusterConfiguration kubernetesVersion: v1.34.3 imageRepository: registry.k8s.io controlPlaneEndpoint: 172.29.128.1:6443 networking: dnsDomain: cluster.local serviceSubnet: 10.96.0.0/12 podSubnet: 192.168.0.0/16 etcd: local: {} dns: {}
执行离线初始化(无外网拉取)
kubeadm init --config /data/kubeadm-1.34.3-offline/kubeadm-init.yaml
查看初始化日志:
journalctl -u kubelet -f --no-pager
. 初始化成功后执行 kubectl 权限配置
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # 记录输出的join命令(worker节点离线加入集群) # 示例输出保存,后续worker用: # kubeadm join 172.29.128.1:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx # token有效期短,过期执行重新生成:kubeadm token create --print-join-command
七,部署 Calico 网络插件
# 应用calico网络yaml kubectl apply -f calico-v3.32.1.yaml # 校验网络就绪 kubectl get nodes # STATUS从NotReady变为Ready即成功 kubectl get pods -n kube-system
八,Worker 节点离线加入集群(两台 worker 完全相同操作)
执行 master 输出的 join 命令(离线不会拉取镜像)
kubeadm join 172.29.128.1:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx
token 过期重建(master 执行)
# 永久token,无过期 kubeadm token create --ttl 0 --print-join-command
全集群校验
# master执行 kubectl get nodes # 三台节点全部Ready代表部署完成 kubectl get pods -n kube-system -o wide

浙公网安备 33010602011771号