CentOS通过kubeadm部署k8s 1.34单master

以下是在 CentOS Stream 10 系统上,使用 kubeadm 安装 Kubernetes v1.34 并配置 Calico 作为网络插件(1 master + 2 worker 节点,Master IP:192.168.10.30,Node IP:192.168.10.31–32)的详细操作步骤。


一、准备工作(Master 与 Node 均需完成)

  1. 关闭 SELinux
   #!/bin/bash
   # 一键关闭 SELinux 脚本
   # 适用于 CentOS Stream / RHEL 系列
   
   CONFIG_FILE="/etc/selinux/config"
   
   # 修改配置文件
   if grep -q "^SELINUX=" $CONFIG_FILE; then
       sed -i 's/^SELINUX=.*/SELINUX=disabled/' $CONFIG_FILE
   else
       echo "SELINUX=disabled" >> $CONFIG_FILE
   fi
   
   # 临时关闭 (立即生效)
   setenforce 0 2>/dev/null
   
   # 显示结果
   echo "✅ SELinux 已关闭(重启后永久生效)"
   getenforce
  1. 禁用 Swap
   swapoff -a
   sed -i '/ swap / s/^/#/' /etc/fstab
  1. hosts解析
  cat <<EOF | tee -a /etc/hosts
  192.168.10.30 k8s-master30
  192.168.10.31 k8s-node31
  192.168.10.32 k8s-node32
  EOF
  1. 加载 kernel 模块 & 配置 sysctl
   modprobe overlay
   modprobe br_netfilter
   cat <<EOF | tee /etc/modules-load.d/k8s.conf
   overlay
   br_netfilter
   EOF
   
   cat <<EOF | tee /etc/sysctl.d/k8s.conf
   net.bridge.bridge-nf-call-iptables = 1
   net.ipv4.ip_forward = 1
   net.bridge.bridge-nf-call-ip6tables = 1
   EOF
   sysctl --system
  1. 安装容器运行时,推荐 containerd并设置 cgroup:
   # ① 安装依赖并添加仓库
   dnf install -y yum-utils
   yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
   
   # ② 更新索引并安装 containerd
   # 使用 dnf download 命令
   dnf install -y dnf-plugins-core   # 确保包含 download 功能
   dnf download containerd
   # 如果你也想下载所有依赖包,可以使用 --resolve 参数:
   dnf download --resolve containerd
   
   dnf install -y containerd
   
   # ③ 配置 containerd
   mkdir -p /etc/containerd
   containerd config default | tee /etc/containerd/config.toml
   # 编辑 config.toml,将 SystemdCgroup = false 改为 true
   grep 'SystemdCgroup = false' /etc/containerd/config.toml
               SystemdCgroup = false
   sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
   grep 'SystemdCgroup = ' /etc/containerd/config.toml
               SystemdCgroup = true
   # ④ 重启并启用服务
   systemctl restart containerd
   systemctl enable containerd
   ps -ef | grep containerd
   
   
   # 安装nerdctl
   [root@localhost 03-]# wget https://github.com/containerd/nerdctl/releases/download/v2.1.4/nerdctl-2.1.4-linux-amd64.tar.gz
   [root@localhost 03-]# tar xf nerdctl-2.1.4-linux-amd64.tar.gz 
   [root@localhost 03-]# ls
   containerd-rootless-setuptool.sh  containerd-rootless.sh  nerdctl  nerdctl-2.1.4-linux-amd64.tar.gz
   [root@localhost 03-]# cp nerdctl /usr/local/bin/
   [root@localhost 03-]# nerdctl --version
   nerdctl version 2.1.4
   

二、安装 kubeadm、kubelet 和 kubectl v1.34

根据官方文档,在 CentOS Stream 10 上添加 Kubernetes v1.34 仓库并安装组件:

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key
EOF

dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 下载rpm包
dnf download --resolve kubelet.x86_64 kubeadm.x86_64 kubectl.x86_64 --disableexcludes=kubernetes

systemctl enable --now kubelet

确保你安装的是针对 Kubernetes v1.34 的版本。官方安装说明指出,该指南专为 v1.34 设计。(Kubernetes)


三、初始化 Master 节点(192.168.10.30)

  1. 拉取所需镜像(可选)
   kubeadm config images pull
   
   kubeadm config images list
   registry.k8s.io/kube-apiserver:v1.34.0
   registry.k8s.io/kube-controller-manager:v1.34.0
   registry.k8s.io/kube-scheduler:v1.34.0
   registry.k8s.io/kube-proxy:v1.34.0
   registry.k8s.io/coredns/coredns:v1.12.1
   registry.k8s.io/pause:3.10.1
   registry.k8s.io/etcd:3.6.4-0
  1. 初始化控制平面
   kubeadm init \
     --apiserver-advertise-address=192.168.10.30 \
     --pod-network-cidr=192.168.0.0/16

(选择适合的 Pod 网络 CIDR,如 192.168.0.0/16)(docs.tigera.io)

  1. 配置 kubectl
   mkdir -p $HOME/.kube
   cp /etc/kubernetes/admin.conf $HOME/.kube/config
   chown $(id -u):$(id -g) $HOME/.kube/config
  1. 确认 Master 状态
   kubectl get nodes

四、在 Master 上安装 Calico 插件

推荐使用 Calico Operator 安装方式:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/custom-resources.yaml

然后监控 Calico pods:

kubectl get pods -n calico-system

待所有 pods 状态为 Running 再继续。(docs.tigera.io)


五、加入 Worker 节点(192.168.10.31 和 192.168.10.32)

在每台 Node 上执行前述环境准备(第 I 部分)及安装 kubeadm/kubelet/kubectl(第 II 部分),然后运行从 Master 初始化过程中获得的 join 命令:

kubeadm join 192.168.10.30:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

如 token 已过期,可在 Master 上重新生成:

kubeadm token create --print-join-command

六、验证集群状态

在 Master 上运行:

kubectl get nodes

应显示所有三台节点状态都为 Ready


七、创建Pod

cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3   # 可以换成最新的 nginx 镜像
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort     # 通过宿主机 NodePort 方式暴露服务
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30080   # 访问方式:http://任意节点IP:30080


kubeadm 集群重置步骤

1. 在所有节点执行 reset

先在 master 节点运行:

kubeadm reset -f

然后在 所有 worker 节点运行:

kubeadm reset -f

这会停止 kubelet、清理 kubeadm 安装的组件和配置。


🧹 2. 清理 CNI 网络配置

在所有节点执行:

rm -rf /etc/cni/net.d/*
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /var/lib/etcd
ip link delete cni0
ip link delete flannel.1

🧹 3. 清理 iptables 规则

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P FORWARD ACCEPT

4. 清理 kubeconfig 文件

rm -f $HOME/.kube/config
posted @ 2025-09-10 16:10  broadviews  阅读(329)  评论(0)    收藏  举报