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 个控制平面节点实现高可用)。

相关推荐
K_i13417 分钟前
Kubernetes HTTPS迁移:Ingress到GatewayAPI实战
容器·https·kubernetes
Vahala0623-孔勇5 小时前
微服务网关深度设计:从Spring Cloud Gateway到Envoy,流量治理与安全认证实战指南
java·安全·微服务·云原生
tpoog6 小时前
【C++项目】基于微服务的即使通信系统
微服务·云原生·架构
能不能别报错7 小时前
K8s学习笔记(十) Deployment 副本控制器
笔记·学习·kubernetes
二饭8 小时前
使用Docker安装Neo4j
docker·容器·neo4j
戴誉杰8 小时前
cloudfared 内网穿透通过docker方式遇到的问题
运维·docker·容器·cloudfared
野熊佩骑10 小时前
CentOS7二进制安装包方式部署K8S集群之CA根证书生成
linux·运维·docker·云原生·容器·kubernetes·centos
能不能别报错11 小时前
K8s学习笔记(十一) service
笔记·学习·kubernetes
妮妮喔妮11 小时前
docker-compose端口冲突问题
运维·docker·容器
kjl53656616 小时前
docker命令
运维·docker·容器