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

相关推荐
暴躁的鱼15 分钟前
docker运行可登录的gerrit容器
运维·docker·容器
Joren的学习记录22 分钟前
【Linux运维大神系列】Kubernetes详解2(kubeadm部署k8s1.27单节点集群)
linux·运维·kubernetes
赵文宇(温玉)24 分钟前
Docker与VM的差异与最佳场景
docker·容器·eureka
lbb 小魔仙27 分钟前
【Linux】K8s 集群搭建避坑指南:基于 Linux 内核参数调优的生产级部署方案
linux·运维·kubernetes
techzhi31 分钟前
docker compose和docker-compose的区别
运维·docker·容器
jasnet_u37 分钟前
SpringBoot3.x+SpringCloudAlibaba2023+JDK17微服务基础框架搭建
微服务·云原生·架构
木二_1 小时前
附058.Kubernetes Gitea部署
ci/cd·kubernetes·gitea
没有bug.的程序员1 小时前
Kubernetes 与微服务的融合架构:调度、弹性、健康检查深度协同
jvm·微服务·云原生·架构·kubernetes·健康检查·弹性伸缩
Kendra9199 小时前
Kubernetes 常用命令
云原生·容器·kubernetes
Rabbit_QL9 小时前
【网络设置】Docker 自定义网络深度解析:从踩坑到工程实践
网络·docker·容器