kubeadm方式部署k8s集群

使用 kubeadm 部署 Kubernetes 集群是官方推荐的生产级方案,以下是详细的多节点集群部署步骤(1 个控制平面节点 + 1 个工作节点,可扩展):

前置准备

  1. 服务器要求(每台节点)

    操作系统:Ubuntu 20.04/22.04、CentOS 7/8 或 Rocky Linux(推荐 Ubuntu)

    硬件:2 CPU、2GB 内存(控制平面),1 CPU、1GB 内存(工作节点,生产建议更高)

    网络:所有节点互通,控制平面需开放 6443 端口,节点间需开放 10250 等端口

    其他:关闭 Swap、禁用 SELinux(CentOS)、配置静态 IP

  2. 环境初始化(所有节点执行

    (1)关闭 Swap

bash 复制代码
# 临时关闭
sudo swapoff -a

# 永久关闭(Ubuntu/Debian)
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 永久关闭(CentOS/RHEL)
sudo sed -i 's/.*swap.*/#&/' /etc/fstab

(2)配置内核参数(启用 IPv4 转发和桥接)

bash 复制代码
# 创建配置文件
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

(3)安装容器运行时(以 containerd 为例)

  1. 安装 containerd
bash 复制代码
dnf install -y containerd.io

验证:

bash 复制代码
rpm -q containerd.io

应显示已安装的版本号

  1. 配置 containerd
bash 复制代码
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
systemctl restart containerd
systemctl enable containerd

配置国内镜像(注意格式对齐,不然会报错),否则可能会拉取不到

bash 复制代码
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
   endpoint = ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub.docker.com"]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
   endpoint = ["https://registry.aliyuncs.com/google_containers"]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
   endpoint = ["https://registry.aliyuncs.com/google_containers"]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
   endpoint = ["https://quay.mirrors.ustc.edu.cn"]

验证:

bash 复制代码
systemctl status containerd

应显示 "active (running)"

  1. 安装 kubeadm、kubelet、kubectl(所有节点
bash 复制代码
# 对于 CentOS 8/Rocky Linux 8,使用阿里云源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# 安装 1.27.4 版本(可替换为其他稳定版本)
sudo dnf install -y kubelet-1.27.4 kubeadm-1.27.4 kubectl-1.27.4 --disableexcludes=kubernetes

防止自动升级版本

bash 复制代码
sudo yum versionlock add kubelet kubeadm kubectl

部署控制平面节点(主节点)

  1. 初始化控制平面
    --apiserver-advertise-address=47.100.169.179 此处的ip是部署的master ip(确保其他节点能够访问)
bash 复制代码
#提前拉取镜像,加快安装(此步骤可做可不做)
#master节点提前拉取镜像,这里使用阿里云的镜像
kubeadm  config images list --kubernetes-version=v1.27.4  --image-repository=registry.aliyuncs.com/google_containers
kubeadm  config images pull --kubernetes-version=v1.27.4  --image-repository=registry.aliyuncs.com/google_containers

sudo kubeadm init \
--apiserver-advertise-address=47.100.169.179 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.27.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

参数说明:

--apiserver-advertise-address=47.100.169.179 \ #指定apiserver的IP,即master节点的IP

--image-repository registry.aliyuncs.com/google_containers \ #设置镜像仓库为国内的阿里云镜像仓库

--kubernetes-version v1.27.4 \ #设置k8s的版本,跟步骤三的kubeadm版本一致

--service-cidr=10.96.0.0/12 \ #这是设置node节点的网络的,暂时这样设置

--pod-network-cidr=10.244.0.0/16 #这是设置node节点的网络的,暂时这样设置

查看kubelet日志

bash 复制代码
journalctl -xeu kubelet

初始化成功后,会输出 节点加入命令(含 token),请复制保存(后续工作节点需要)。

若忘记命令,可在主节点重新生成:

bash 复制代码
sudo kubeadm token create --print-join-command
  1. 配置 kubectl 权限(主节点
bash 复制代码
# 普通用户配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 验证控制平面状态
kubectl get pods -n kube-system
  1. 安装网络插件(主节点
    Kubernetes 集群必须安装网络插件才能使 Pod 之间通信,这里选择 Flannel(简单易用):
bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.22.2/Documentation/kube-flannel.yml

等待 1-2 分钟,验证节点状态(变为 Ready):

bash 复制代码
kubectl get nodes  # 控制平面节点状态应为 Ready

添加工作节点

在 工作节点 执行之前保存的 加入命令(格式如下):

bash 复制代码
bash
sudo kubeadm join 192.168.1.100:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

验证节点是否加入成功(在主节点执行):

bash 复制代码
kubectl get nodes  # 应显示控制平面和工作节点,状态均为 Ready

验证集群状态

bash 复制代码
# 查看节点状态
kubectl get nodes

# 查看系统组件状态
kubectl get pods -n kube-system

# 查看集群信息
kubectl cluster-info

所有节点状态为 Ready,且 kube-system 命名空间下的 Pod 均为 Running 状态,说明集群部署成功。

可选:部署 Dashboard(可视化界面)

bash 复制代码
# 部署 Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

# 创建管理员账号(创建 dashboard-admin.yaml)
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
EOF

# 获取登录令牌
kubectl -n kubernetes-dashboard create token admin-user

# 启动代理(本地访问)
kubectl proxy

访问 Dashboard:http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/,粘贴令牌登录。

常见问题解决

节点状态 NotReady:检查网络插件是否安装成功(kubectl get pods -n kube-system)。

初始化失败:执行 sudo kubeadm reset 清理环境后重新初始化。

工作节点加入失败:检查网络连通性、令牌是否过期(重新生成令牌)。

通过以上步骤,可搭建一个基础的多节点 Kubernetes 集群,适合测试和生产环境(生产环境建议配置 3 个控制平面节点实现高可用)。

相关推荐
运维老郭3 小时前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
AAA@峥7 小时前
容器数据不丢失:Docker 分层存储 + Volume 共享、备份迁移完整指南
运维·docker·容器
十年磨一剑~8 小时前
docker 为何每次 docker tag才能 docker push
docker·容器·eureka
gs8014010 小时前
记一次多 Agent 架构在单节点 K8s 触发的 PID 耗尽与 Pod 驱逐(Evicted)大摸排
容器·架构·kubernetes
bukeyiwanshui11 小时前
20260701 k8s Metric Server
容器·贪心算法·kubernetes
江湖有缘11 小时前
基于Docker环境部署tillywork开源工作管理工具
docker·容器·开源
鸿儒51713 小时前
MR-50国产化GPU docker配置方法
docker·容器·mr
Zhu75814 小时前
在k8s集群部署ApacheHadoop单节点单数据副本
云原生·容器·kubernetes
Akamai中国14 小时前
Akamai收购安全企业浏览器提供商LayerX
人工智能·云原生·云计算·云服务