K8S安装

📅 2026/7/5 2:49:40
K8S安装
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关闭SwapKubernetes要求必须禁用Swap分区-1-9。sudo swapoff -a sudo sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab配置内核模块与参数加载overlay和br_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-port6443/tcp sudo firewall-cmd --permanent --add-port2379-2380/tcp sudo firewall-cmd --permanent --add-port10250/tcp sudo firewall-cmd --permanent --add-port10251/tcp sudo firewall-cmd --permanent --add-port10252/tcp sudo firewall-cmd --reload在Worker节点执行sudo firewall-cmd --permanent --add-port10250/tcp sudo firewall-cmd --permanent --add-port30000-32767/tcp # NodePort端口范围 sudo firewall-cmd --reload2. 安装容器运行时所有节点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] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 gpgkeyhttps://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 --disableexcludeskubernetes设置 kubelet 开机自启此时会反复重启待集群初始化后会稳定sudo systemctl enable kubelet初始化 Master 节点仅在 Master 执行sudo kubeadm init \ --pod-network-cidr192.168.0.0/16 \ --apiserver-advertise-address192.168.174.129 \ --kubernetes-versionv1.35.0 \ --cri-socketunix:///var/run/containerd/containerd.sock \ --image-repositoryregistry.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-local和bridge插件无需外部镜像所有节点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可见成功了[rootk8s-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 [rootk8s-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 [rootk8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 97m v1.35.3 [rootk8s-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就说明集群安装成功了。