K8S1.37测试环境部署

K8S1.37测试环境部署

img

开篇

环境说明

用的到软件链接:

通过网盘分享的文件:K8S1.37
链接: https://pan.baidu.com/s/150zswHsmoycECwnBemBazw?pwd=ei8u 提取码: ei8u 
--来自百度网盘超级会员v9的分享

为什么叫墙内离线版呢?
已经把在国内默认网络环境下无法下载的或下载速度比较慢的镜像全都提前通过外网环境下载到本地了,离线下载到本地的有:

  • containerd
    • runc
    • containerd-2.4.1-linux-amd64.tar.gz
    • cni-plugins-linux-amd64-v1.9.1.tgz
  • k8s deb packe
    • cri-tools_1.37.0-1.1_amd64.deb
    • kubectl_1.37.1-1.1_amd64.deb
    • kubernetes-cni_1.9.1-1.1_amd64.deb
    • kubeadm_1.37.1-1.1_amd64.deb
    • kubelet_1.37.1-1.1_amd64.deb
    • k8s_1.36.2_images(registry.k8s.io)
  • k8s1.37 images
    • registry.k8s.io/kube-apiserver:v1.37.1
    • registry.k8s.io/kube-controller-manager:v1.37.1
    • registry.k8s.io/kube-scheduler:v1.37.1
    • registry.k8s.io/kube-proxy:v1.37.1
    • registry.k8s.io/coredns/coredns:v1.14.6
    • registry.k8s.io/pause:3.10.2
    • registry.k8s.io/etcd:3.7.0-0
  • calico_3.33
    • calico_images
      • quay.io/calico/calico:v3.33.0
      • quay.io/calico/node:v3.33.0
      • quay.io/calico/third-party-cni-plugins:v3.33.0
    • calico yaml file
主机名 操作系统/内核版本/k8s 版本 IP 地址 CPU 内存 网络环境
master01 Ubuntu 26.04/7.0/k8s v1.37 192.168.80.XX/24 2*2 4G 墙内环境
node01 Ubuntu 26.04/7.0/k8s v1.37 192.168.80.XX/24 2*2 4G 墙内环境
node02 Ubuntu 26.04/7.0/k8s v1.37 192.168.80.XX/24 2*2 4G 墙内环境
# 以下所有的软件或镜像全都是截止2026/10/2号最新的
# 查看containerd最新版本,截止2026/10/2最新版本是2.4.1
https://github.com/containerd/containerd/

# 查看k8s的最新版本,截止2026/10/2最新的k8s版本是1.37.1
curl -s https://dl.k8s.io/release/stable.txt
https://github.com/kubernetes/kubernetes/releases?utm_source=chatgpt.com

# calico官网,截止2026/10/2最新版本是3.33
https://docs.tigera.io/calico/latest/about

基础环境

所有节点

# 修改主机名
sudo hostnamectl set-hostname XXX
# 1. 关闭swap(永久关闭,避免K8s启动失败)
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab

# 2. 加载内核模块(overlay、br_netfilter,K8s网络依赖)
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter

# 3. 配置网络内核参数(开启IP转发、桥接过滤,避免网络不通)
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

# 验证配置(无报错即正常)
sysctl net.ipv4.ip_forward
lsmod | grep br_netfilter
lsmod | grep overlay

安装container runtime

所有节点

# 安装containerd
tar Cxzvf /usr/local containerd-2.4.1-linux-amd64.tar.gz 
# 编写服务文档
mkdir -p /usr/local/lib/systemd/system/
tee /usr/local/lib/systemd/system/containerd.service << EOF
# Copyright The containerd Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target dbus.service

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

EOF


# 配置containerd(启用systemdcgroup,K8s 1.37必须)
mkdir -p /etc/containerd/
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i "s|sandbox = 'registry.k8s.io/pause:3.10.2'|sandbox = 'registry.aliyuncs.com/google_containers/pause:3.10.2'|g" /etc/containerd/config.toml

# 重启服务
systemctl daemon-reload && systemctl enable --now containerd

# 安装runc
install -m 755 runc.amd64 /usr/local/sbin/runc

# 安装cni-plugins
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.9.1.tgz 

# 查看版本
containerd --version
runc --version

添加k8s.1.37的国内源

# 1. 安装依赖
apt install -y apt-transport-https ca-certificates curl

# 2. 导入K8s 1.36密钥(阿里云源,无需apt-key)
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.37/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 3. 写入K8s 1.37源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.37/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list

# 4. 更新源
apt update

安装k8s1.37基础组件

# 安装K8s 1.37最新稳定版(自动适配系统,无需指定版本)
# 如果是离线版的话,直接dpkg -i *.deb也可
apt install -y kubelet kubeadm kubectl  
如报错请运行
apt install -y kubelet kubeadm kubectl --allow-change-held-packages

# 锁定版本,防止后续自动升级导致兼容问题
apt-mark hold kubelet kubeadm kubectl

# 验证(输出版本号即成功)
echo "kubeadm: $(kubeadm version -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubectl: $(kubectl version --client -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubelet: $(kubelet --version | awk '{print $2}')"

master节点初始化集群

# 提前上传镜像文件 ctr -n k8s.io image ls 查看
ctr -n k8s.io images import  k8s-v1.37.1-aliyun.tar 

# 初始化集群(替换为自己的Master节点IP,不可带版本--kubernetes-version=v1.36.2 )
# 如果带了版本之后镜像pause又会重新下载
kubeadm init \
  --apiserver-advertise-address=192.168.80.130 \
  --pod-network-cidr=10.244.0.0/16 \
  --image-repository=registry.aliyuncs.com/google_containers

# 授权root用户使用kubectl(若为普通用户,替换$HOME为普通用户目录)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 当前状态是正常的,coredns有问题是因为没有网络插件
root@master01:~# kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS      AGE
coredns-6b5f954497-jlzhz           0/1     Pending   0             2m8s
coredns-6b5f954497-zr8wt           0/1     Pending   0             2m8s
etcd-master01                      1/1     Running   1 (31s ago)   2m16s
kube-apiserver-master01            1/1     Running   1 (31s ago)   2m18s
kube-controller-manager-master01   1/1     Running   1 (31s ago)   2m16s
kube-proxy-htmhg                   1/1     Running   1 (31s ago)   2m8s
kube-scheduler-master01            1/1     Running   1 (31s ago)   2m16s


# 保存初始化成功后输出的kubeadm join命令(用于Node节点加入集群,示例如下,以实际输出为准)
# 节点加入的时候此token可能会过期,如果需要重新打印的话运行 kubeadm token create --print-join-command
# kubeadm join 192.168.80.146:6443 --token xxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxx

安装calico插件

  1. 下载最新的calico部署yaml文件
  2. 替换为国内的镜像源(建议修改完成之后直接引入已经导出的镜像,这样速度快)
# 国内有可能不行
root@zhanghe:~# curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.33.0/manifests/calico.yaml

kubectl apply -f calico.yaml

节点加入

# 在master重新打印join指令,kubeadm token create --print-join-command
# 复制Master节点初始化成功后输出的join命令,示例如下(替换为实际输出)
kubeadm join 192.168.80.146:6443 --token xxxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxx

集群验证

# 查看节点状态(Master节点状态为Ready即成功)
kubectl get nodes

# 查看所有Pod状态(kube-system、kube-flannel命名空间下所有Pod均为Running)
kubectl get pods -A

# 查看集群组件状态(均为Healthy)
kubectl get cs

# 查看组件版本
echo "kubeadm: $(kubeadm version -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubectl: $(kubectl version --client -o yaml | grep gitVersion | awk '{print $2}')"
echo "kubelet: $(kubelet --version | awk '{print $2}')"
posted @ 2026-10-02 10:49  运维贺贺  阅读(25)  评论(0)    收藏  举报