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. 故障排查方法

相关推荐
driver19992 小时前
hyperV装的windows11安装docker不支持虚拟化
运维·docker·容器
落日漫游2 小时前
ansible事实详解
云原生
一点事4 小时前
centos7:离线安装docker
运维·docker·容器
初学者_xuan4 小时前
K8S资源无法删除处理方法
容器·贪心算法·kubernetes
AI大模型学徒6 小时前
从入门到实践:Kubernetes(K8s)全维度知识体系解析
运维·容器
zfj3216 小时前
容器 的 cpu request limit 与 linux cgroups 的关系
linux·运维·服务器·kubernetes·cgroup
qq_5470261797 小时前
Docker 常用命令解析
docker·容器·eureka
qq_5470261797 小时前
Docker 详解
运维·docker·容器
小黑要上天7 小时前
8-docker run --rm选项说明
运维·docker·容器