Ubuntu 22.04 安装 K8S 1.28.2版本

第一步:所有节点安装 K8s 核心组件(Master + Worker)

查看可以安装的版本(选择最新的版本安装)
apt-cache madison kubeadm

# 1.安装指定版本的 K8s 组件(避免自动升级)
sudo apt install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00

# 2. 锁定版本(防止 apt 更新自动升级)
sudo apt-mark hold kubelet kubeadm kubectl

# 3. 验证安装(显示版本即成功)
kubeadm version
kubectl version --client

第二步:Master 节点初始化集群(仅 Master 执行)

初始化是搭建集群的核心步骤,需指定 Pod 网段(默认 10.244.0.0/16,与主机网段不冲突即可):

# 1. 初始化集群(替换为 Master 节点的静态 IP)
sudo kubeadm init \
  --apiserver-advertise-address=192.168.38.201 \  # Master 静态 IP,必填
  --image-repository=registry.aliyuncs.com/google_containers \  # 国内阿里云镜像,加速拉取
  --kubernetes-version=v1.28.2 \  # 与安装的组件版本一致
  --pod-network-cidr=10.244.0.0/16 \  # Pod 网段,后续网络插件需匹配
  --service-cidr=10.96.0.0/12  # 服务网段,默认值即可

# 2. 初始化成功后,执行以下命令配置 kubectl 权限(非 root 用户需执行)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 3. 验证 Master 节点状态(显示 Ready 即成功)
kubectl get nodes
# 此时 Master 节点状态是 NotReady(缺少网络插件),下一步解决
  • 遇到pause下载失败的问题
# 手动下载,并打tag
sudo ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/pause:3.10.1
sudo ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/pause:3.10.1 registry.k8s.io/pause:3.10.1

# 1. 执行 kubeadm 重置(基础清理)
sudo kubeadm reset -f

# 2. 停止并禁用 kubelet(释放端口占用)
sudo systemctl stop kubelet
sudo systemctl disable kubelet

# 3. 清理残留的配置文件和目录(关键,手动删除未清理的文件)
sudo rm -rf /etc/kubernetes/*
sudo rm -rf /var/lib/etcd/*
sudo rm -rf /var/lib/kubelet/*
sudo rm -rf /var/run/kubernetes/*

# 4. 重启 Containerd(释放容器占用的端口)
sudo systemctl restart containerd

# 5. 检查端口是否释放(验证 10250/10257/2379/2380 端口)
sudo netstat -tulpn | grep -E '10250|10257|2379|2380'
# 输出为空则端口已释放;若有输出,kill 对应的进程(示例:kill -9 进程ID)

# 重新执行集群初始化
sudo kubeadm init   --apiserver-advertise-address=192.168.38.201   --image-repository=registry.aliyuncs.com/google_containers   --kubernetes-version=v1.28.2   --pod-network-cidr=10.244.0.0/16   --service-cidr=10.96.0.0/12

第三步:安装网络插件(仅 Master 执行,解决 NotReady)

K8s 集群必须安装网络插件才能让 Pod 通信,推荐用 Calico(轻量、适配性强):

bash
运行
# 1. 下载 Calico 配置文件(适配 Pod 网段 10.244.0.0/16)
#curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

# 修改镜像下载地址
grep 'image:' calico.yaml
sed -i 's#docker.io/calico/#m.daocloud.io/docker.io/calico/#g' calico.yaml
grep 'image:' calico.yaml


# 2. 部署 Calico 插件
kubectl apply -f calico.yaml

# 3. 验证网络插件(等待 1-2 分钟,所有 Pod 状态为 Running)
kubectl get pods -n kube-system
# 重点看 calico-node-xxx、calico-kube-controllers-xxx 状态是否为 Running

# 4. 再次验证 Master 节点(显示 Ready 即成功)
kubectl get nodes
若 Calico 镜像拉取慢,可替换为国内镜像(修改 calico.yaml 中 image 为 registry.aliyuncs.com/calico/xxx),或等待自动拉取完成。

第四步:Worker 节点加入集群(仅 Worker 执行)

使用 Master 初始化成功后复制的 kubeadm join 命令,示例:

bash
运行
# 替换为你实际的 join 命令(包含 token 和 hash)
sudo kubeadm join 192.168.38.201:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

# 若 token 过期,在 Master 节点执行以下命令重新生成:
# sudo kubeadm token create --print-join-command

第五步:验证集群(Master 节点执行)

bash
运行
# 1. 查看所有节点(均显示 Ready)
kubectl get nodes
# 输出示例:
# NAME         STATUS   ROLES           AGE   VERSION
# k8s-master   Ready    control-plane   10m   v1.28.8
# k8s-worker   Ready    <none>          5m    v1.28.8

# 2. 查看集群状态
kubectl cluster-info


# 3. 测试创建一个 Pod(验证 Worker 节点可调度)
kubectl run nginx --image=nginx:alpine
kubectl get pods -o wide  # 查看 Pod 是否运行在 Worker 节点

## 遗留nginx镜像下载问题
posted @ 2026-02-13 18:59  武平宁  阅读(48)  评论(0)    收藏  举报