K8S安装
2026/7/5 2:49:36 网站建设 项目流程

1. 系统前置准备(所有节点)

这部分是所有节点都需要执行的准备工作,确保系统满足K8s的运行要求。

  • 设置主机名与hosts解析:为每个节点设置一个唯一的主机名,并配置/etc/hosts文件,让节点之间能通过主机名互相访问-1。

# 在Master节点执行 sudo hostnamectl set-hostname k8s-master # 在Worker节点执行 sudo hostnamectl set-hostname k8s-worker-1 # 在所有节点执行,将下面的IP和主机名换成你的实际信息 cat <<EOF | sudo tee -a /etc/hosts 192.168.1.10 k8s-master 192.168.1.11 k8s-worker-1 EOF

关闭Swap:Kubernetes要求必须禁用Swap分区-1-9。

sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

配置内核模块与参数:加载overlaybr_netfilter模块,并设置网络转发参数-1-9。

# 加载内核模块 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter # 设置内核参数 cat <<EOF | sudo 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 sudo sysctl --system

配置防火墙:Rocky Linux默认启用firewalld,需要开放K8s集群所需的端口-1。以下命令在Master节点执行:

sudo firewall-cmd --permanent --add-port=6443/tcp sudo firewall-cmd --permanent --add-port=2379-2380/tcp sudo firewall-cmd --permanent --add-port=10250/tcp sudo firewall-cmd --permanent --add-port=10251/tcp sudo firewall-cmd --permanent --add-port=10252/tcp sudo firewall-cmd --reload

Worker节点执行:

sudo firewall-cmd --permanent --add-port=10250/tcp sudo firewall-cmd --permanent --add-port=30000-32767/tcp # NodePort端口范围 sudo firewall-cmd --reload

2. 安装容器运行时(所有节点)

Kubernetes需要一个容器运行时来运行Pod。这里我们使用官方推荐的containerd-1-9。

# 安装 yum-utils 并添加 Docker CE 仓库(containerd.io 在此仓库中) sudo dnf install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo # 安装 containerd.io sudo dnf install -y containerd.io # 生成默认配置并修改为使用 systemd cgroup 驱动(避免启动失败) sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # 启动 containerd 并设置开机自启 sudo systemctl enable --now containerd

注意:请勿安装docker-ce,否则K8s可能会自动检测到Docker而非Containerd作为运行时,从而引发配置冲突。只需要安装containerd.io即可。

3. 添加 Kubernetes YUM 源并安装组件

为简化安装过程,建议配置国内镜像源以提高下载速度3:

cat <<EOF > kubernetes.repo [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 mv kubernetes.repo /etc/yum.repos.d/

安装

sudo dnf install -y kubelet-1.35.3 kubeadm-1.35.3 kubectl-1.35.3 --disableexcludes=kubernetes
设置 kubelet 开机自启(此时会反复重启,待集群初始化后会稳定)
sudo systemctl enable kubelet

初始化 Master 节点(仅在 Master 执行)

sudo kubeadm init \ --pod-network-cidr=192.168.0.0/16 \ --apiserver-advertise-address=192.168.174.129 \ --kubernetes-version=v1.35.0 \ --cri-socket=unix:///var/run/containerd/containerd.sock \ --image-repository=registry.aliyuncs.com/google_containers



初始化成功后,配置 kubectl 访问权限

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

💡 保存好 init 命令输出的kubeadm join命令,稍后你需要用它来添加Worker节点。如果忘记了,可以在Master上使用kubeadm token create --print-join-command重新生成。

如:

kubeadm join 192.168.174.129:6443 --token e7yk5i.k7yjm8os4mdpagrz \ --discovery-token-ca-cert-hash sha256:9a06c44eee40e549f7763668ef489b02f932d6d1779dc316444387331eb5910e

终极解决方案:直接跳过网络插件,使用host-localbridge插件(无需外部镜像)所有节点

Kubernetes 自带的bridge插件不需要拉取任何外部镜像,直接使用 kubelet 内置的 CNI 插件。

步骤 1:创建 CNI 配置文件

# 创建 CNI 配置目录 sudo mkdir -p /etc/cni/net.d # 创建 bridge 网络配置(无需拉取任何镜像) cat > /etc/cni/net.d/10-bridge.conf << 'EOF' { "cniVersion": "0.3.1", "name": "bridge", "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "ranges": [ [{"subnet": "192.168.0.0/16"}] ], "routes": [{"dst": "0.0.0.0/0"}] } } EOF # 创建 loopback 配置 cat > /etc/cni/net.d/99-loopback.conf << 'EOF' { "cniVersion": "0.3.1", "type": "loopback" } EOF # 重启 kubelet systemctl restart kubelet

步骤 2:重启 kubelet 并检查节点状态

# 重启 kubelet systemctl restart kubelet # 等待 10 秒 sleep 10 # 查看节点状态 kubectl get nodes # 查看 Pod 状态 kubectl get pods -n kube-system

可见成功了

[root@k8s-master ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-bbdc5fdf6-44w48 1/1 Running 0 89m coredns-bbdc5fdf6-f8zjj 1/1 Running 0 89m etcd-k8s-master 1/1 Running 1 89m kube-apiserver-k8s-master 1/1 Running 2 89m kube-controller-manager-k8s-master 1/1 Running 1 89m kube-proxy-jrxnv 1/1 Running 0 89m kube-scheduler-k8s-master 1/1 Running 1 89m [root@k8s-master ~]# kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-bbdc5fdf6-44w48 1/1 Running 0 90m coredns-bbdc5fdf6-f8zjj 1/1 Running 0 90m etcd-k8s-master 1/1 Running 1 90m kube-apiserver-k8s-master 1/1 Running 2 90m kube-controller-manager-k8s-master 1/1 Running 1 90m kube-proxy-jrxnv 1/1 Running 0 90m kube-scheduler-k8s-master 1/1 Running 1 90m [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 97m v1.35.3 [root@k8s-master ~]#

6. 加入 Worker 节点(仅在 Worker 执行)

在Worker节点上,使用第4步保存的kubeadm join命令加入集群。

kubeadm join 192.168.174.129:6443 --token e7yk5i.k7yjm8os4mdpagrz \ --discovery-token-ca-cert-hash sha256:9a06c44eee40e549f7763668ef489b02f932d6d1779dc316444387331eb5910e

✅ 验证集群

在Master节点执行kubectl get nodes,如果所有节点状态都是Ready,就说明集群安装成功了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询