Kubernetes 1.23.17 集群部署完全记录(单点)

一、Docker Cgroup 驱动配置

1.1 CGroup 驱动的重要性

在 Linux 系统中,控制组(CGroup)用于限制分配给进程的资源。kubelet 和容器运行时都需要使用相同的 cgroup 驱动来管理资源分配。

复制代码
# 配置 Docker 使用 systemd 作为 cgroup 驱动
sudo tee /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.xuanyuan.me",
    "https://docker.1ms.run",
    "https://docker.1panel.live",
    "https://hub.rat.dev",
    "https://docker-mirror.aigc2d.com",
    "https://docker.mybacc.com",
    "https://dytt.online"
  ]
}
EOF

# 重启 Docker 服务
systemctl restart docker

二、Kubernetes 仓库配置

2.1 配置阿里云镜像源

复制代码
# 创建 Kubernetes yum 仓库配置文件
cat <<EOF | 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
EOF

# 临时关闭 SELinux
setenforce 0

# 永久禁用 SELinux(生产环境需谨慎)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

三、Kubernetes 组件安装与配置

3.1 查看可用版本

复制代码
# 查看可用的 kubeadm 版本
dnf list --showduplicates kubeadm

3.2 安装指定版本组件

复制代码
# 安装 Kubernetes 1.23.17 版本组件
dnf install kubeadm-1.23.17-0 kubectl-1.23.17-0 kubelet-1.23.17-0 -y

# 自动安装的依赖包:
# kubeadm-1.23.17-0.x86_64
# kubectl-1.23.17-0.x86_64
# kubelet-1.23.17-0.x86_64
# cri-tools-1.26.0-0.x86_64
# kubernetes-cni-1.2.0-0.x86_64

3.3 配置 kubelet cgroup 驱动

复制代码
# 设置 kubelet 使用 systemd cgroup 驱动
tee /etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
EOF

# 启用 kubelet 服务
systemctl enable kubelet

3.4 查看所需镜像

复制代码
# 查看 Kubernetes 所需镜像列表
kubeadm config images list

输出示例:

复制代码
registry.k8s.io/kube-apiserver:v1.23.17
registry.k8s.io/kube-controller-manager:v1.23.17
registry.k8s.io/kube-scheduler:v1.23.17
registry.k8s.io/kube-proxy:v1.23.17
registry.k8s.io/pause:3.6
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.8.6

3.5 生成初始化配置文件

复制代码
# 生成默认初始化配置
kubeadm config print init-defaults > kube-init.yml

# 编辑配置文件
vim kube-init.yml

修改后的配置文件示例:

复制代码
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.2.32   # 管理端 IP 地址
  bindPort: 6443                   # API Server 端口
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: master01                   # 节点名称
  taints: null
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: 1.23.17         # Kubernetes 版本
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers  # 使用阿里云镜像
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
controllerManager: {}
scheduler: {}
etcd:
  local:
    dataDir: /var/lib/etcd

四、集群初始化

4.1 初始化 Master 节点

复制代码
# 使用配置文件初始化集群
kubeadm init --config kube-init.yml

4.2 配置 kubectl

复制代码
# 创建 .kube 目录并复制配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 或者使用环境变量方式
export KUBECONFIG=/etc/kubernetes/admin.conf

4.3 查看节点状态

复制代码
kubectl get nodes

输出示例:

复制代码
NAME       STATUS     ROLES                  AGE   VERSION
master01   NotReady   control-plane,master   19m   v1.23.17

五、网络插件部署

5.1 安装 Calico 网络插件

复制代码
# 下载 Calico 3.24.1 配置文件
wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/calico.yaml

# 部署 Calico 网络
kubectl apply -f calico.yaml

5.2 验证网络插件

复制代码
# 查看 kube-system 命名空间下的 Pod
kubectl get pod -n kube-system

# 查看节点状态(应该变为 Ready)
kubectl get nodes

六、测试集群功能

6.1 创建测试应用

创建 nginx-test.yaml 文件:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx-test
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.20.2
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30002

6.2 部署测试应用

复制代码
# 部署 Nginx 应用
kubectl apply -f nginx-test.yaml

# 查看 Pod 状态
kubectl get pod

# 查看 Service
kubectl get svc

# 测试访问
curl http://<节点IP>:30002

6.3 清理测试应用

复制代码
# 删除测试应用
kubectl delete -f nginx-test.yaml
# 或者删除单个 Pod
kubectl delete pod nginx-test

七、Worker 节点加入集群

7.1 获取加入命令

复制代码
# 查看初始化时生成的加入命令
# 在 Master 节点上执行

# 如果 token 过期(24小时有效期),重新生成
kubeadm token create --print-join-command

7.2 Worker 节点执行加入命令

复制代码
# 在 Worker 节点上执行(示例)
kubeadm join 192.168.2.32:6443 \
    --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:1d5e264d2e0dd29e0f8d433b4f548901a187b21f97d15cb73fe171ca5a43f17b

八、Kubernetes 核心组件说明

组件 功能描述
kubeadm 用于初始化集群,生成安全证书和令牌,配置集群所需组件
kubelet 与 Master 节点通信,根据调度决策创建/更新/删除 Pod,维护节点容器状态
kubectl Kubernetes 集群管理命令行工具
kube-proxy 维护节点网络规则,实现服务发现和负载均衡
kube-scheduler 调度 Pod 到合适的节点
kube-controller-manager 运行控制器进程,维护集群状态
etcd 分布式键值存储,保存集群所有数据

九、故障排查

9.1 常见问题

  1. 节点处于 NotReady状态

    复制代码
    # 查看节点详细信息
    kubectl describe node <节点名称>
    
    # 查看 kubelet 日志
    journalctl -u kubelet -f

    2. Pod 创建失败

    查看 Pod 详情

    kubectl describe pod <pod名称>

    查看 Pod 日志

    kubectl logs <pod名称>

3.镜像拉取失败

复制代码
# 检查镜像仓库配置
docker info | grep -i mirror

9.2 重置集群

复制代码
# 如果初始化失败,可以重置集群
kubeadm reset
rm -rf /etc/kubernetes/
rm -rf ~/.kube/

十、总结

本文详细介绍了 Kubernetes 1.23.17 集群的完整部署流程,包括:

  1. Docker cgroup 驱动配置

  2. Kubernetes 仓库配置

  3. 组件安装与配置

  4. 集群初始化

  5. 网络插件部署

  6. 集群功能测试

  7. Worker 节点加入

  8. 故障排查方法

相关推荐
Zfox_19 小时前
CANN GE 深度解析:图编译器与执行引擎的后端优化策略、OM 文件结构与 Stream 调度机制
容器·节点小宝
人鱼传说21 小时前
docker desktop是一个好东西
运维·docker·容器
小章UPUP1 天前
Kubernetes (K8s) 与 Podman 的比较
容器·kubernetes·podman
忆~遂愿1 天前
CANN metadef 核心解析:计算图原型定义、算子元数据抽象与异构系统互操作机制
docker·容器
说实话起个名字真难啊1 天前
用docker来安装openclaw
docker·ai·容器
恬静的小魔龙1 天前
【群晖Nas】群晖Nas中实现SVN Server功能、Docker/ContainerManager等
docker·svn·容器
Zfox_1 天前
CANN Catlass 算子模板库深度解析:高性能 GEMM 融合计算、Cube Unit Tiling 机制与编程范式实践
docker·云原生·容器·eureka
农民工老王1 天前
K8s 1.31 私有化部署实战:从 Calico 崩溃到 NFS 挂载失败的排坑全记录
云原生·kubernetes
灰子学技术1 天前
istio从0到1:如何解决分布式配置同步问题
分布式·云原生·istio
广州中轴线1 天前
OpenStack on Kubernetes 生产部署实战(十四)
kubernetes·智能路由器·openstack