跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Kubernetes (K8s) 集群部署指南

Kubernetes 集群部署涉及环境初始化、容器运行时配置、私有镜像仓库搭建及组件安装。步骤包括静态 IP 设置、防火墙关闭、Swap 禁用、时间同步、Docker 与 CRI-Docker 配置、Harbor 仓库认证、K8s 工具安装、镜像拉取与标记、集群初始化、Flannel 网络插件部署及 Pod 测试验证。

laoliangsh发布于 2026/3/16更新于 2026/7/2444 浏览
Kubernetes (K8s) 集群部署指南

Kubernetes 部署

一、k8s 中容器的管理方式

K8S 集群创建方式有 3 种:

  • containerd:默认情况下,K8S 在创建集群时使用的方式
  • docker:Docker 使用的普及率最高,虽然 K8S 在 1.24 版本后已经废除了 kubelet 对 docker 的支持,但可以借助 cri-docker 方式来实现集群创建
  • cri-o:CRI-O 的方式是 Kubernetes 创建容器最直接的一种方式,在创建集群的时候,需要借助于 cri-o 插件的方式来来实现 Kubernetes 集群的创建。

注意:

docker 和 cri-o 这两种方式要对 kubelet 程序的启动参数进行设置

二、k8s 集群部署

1、k8s 环境部署说明

K8S 中文官网:https://kubernetes.io/zh-cn/

主机名ip角色
reg.hxd.org192.168.83.200harbor 仓库
k8s-master192.168.83.100master,k8s 集群控制节点
k8s-node1192.168.83.10worker,k8s 集群工作节点
k8s-node2192.168.83.20worker,k8s 集群工作节点

2、集群环境初始化

  • 设置静态 IP,三种方式
1、[root@ ~]# nmtui 编辑连接 -> ens160 -> 修改内容 -> 确定 -> 返回 -> 退出 [root@ ~]# nmcli c up ens160 # 连接网络[root@ ~]# nmcli c reload # 登录网络连接
2、[root@ ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
# Generated by dracut initrd
NAME="ens160"
DEVICE="ens160"
ONBOOT=yes NETBOOT=yes UUID="42fc4d6c-82c6-4cea-b683-1ad03460b5fe"
IPV6INIT=yes BOOTPROTO=none IPADDR="192.168.83."
# ip
NETMASK="255.255.255.0"
GATEWAY="192.168.83.2"
DNS1="114.114.114.114"
TYPE=Ethernet
[root@ ~]# nmcli c up ens160
[root@ ~]# nmcli c reload
3、[root@ ~]# nmcli c mod ens160 ipv4.method manual ipv4.address 192.168.83. ipv4.gateway 192.168.83.2 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect 
[root@ ~]# nmcli c up ens160
[root@ ~]# nmcli c reload
yes
  • 关掉防火墙和 SELINUX
[root@ ~]# systemctl disable --now firewalld
[root@ ~]# vim /etc/selinux/config
SELINUX=disabled
或者
[root@ ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  • master 和 node 禁用 swap 和配置本地解析
[root@k8s- ~]# systemctl mask swap.target
[root@k8s- ~]# swapoff -a
[root@k8s- ~]# vim /etc/fstab
# 注释 swap
#/dev/mapper/rhel-swap swap swap defaults 0 0
[root@k8s- ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.83.100 k8s-master
192.168.83.10 k8s-node1
192.168.83.20 k8s-node2
192.168.83.200 reg.hxd.org
  • master 和 node 节点时间同步
[root@k8s- ~]# vim /etc/chrony.conf
pool ntp1.aliyun.com iburst # 修改为阿里云的时间同步地址
[root@k8s- ~]# systemctl restart chronyd
[root@k8s- ~]# chronyc sources -v
# 最下面如果是^*,说明时间同步成功 ^* 118.31.40.99 2671 -138ms [ -143ms] +/- 173ms

3、所有节点安装 docker-ce

  • 配置 docker 仓库
[root@ ~]# vim /etc/yum.repos.d/docker.repo
[docker]
name =docker
baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.5/x86_64/stable/
gpgcheck =0
[root@ ~]# dnf install docker-ce -y
  • 所有节点设定 docker 的资源管理模式为 systemd
[root@ ~]# vim /etc/docker/daemon.json
{"registry-mirrors":["https://reg.hxd.org"]}
[root@ ~]# systemctl enable --now docker

4、配置 harbor 仓库

  • 生成认证 key 和证书
# 创建目录
[root@reg ~]# mkdir /data/certs/ -p
# 生成认证 key 和证书
[root@reg ~]# openssl req -newkey rsa:4096 \ -nodes -sha256 -keyout /data/certs/hxd.org.key \ -addext "subjectAltName = DNS:reg.hxd.org"\ -x509 -days 365 -out /data/certs/hxd.org.crt
# 注意创建时,必须写对域名 Common Name (eg, your name or your server's hostname)
[]:reg.hxd.org
# 查看证书信息
[root@reg ~]# openssl x509 -in /data/certs/hxd.org.crt -noout -text
  • 启用 docker,并设置开机启动
[root@reg ~]# systemctl enable --now docker
  • 将 harbor 的证书颁发给其他三个主机
[root@k8s- ~]# mkdir /etc/docker/certs.d/reg.hxd.org/ -p
[root@reg ~]# for i in 100 10 20 ; do scp /data/certs/hxd.org.crt [email protected].$i:/etc/docker/certs.d/reg.hxd.org/ca.crt; done
  • 启用 harbor 仓库

下载软件包地址:https://github.com/goharbor/harbor/releases

# 上传到 harbor 仓库主机并解压
[root@reg ~]# tar zxf harbor-offline-installer-v2.5.4.tgz -C /opt/# 复制配置文件格式为.yml 结尾来启用文件
[root@reg ~]# cd /opt/
[root@reg opt]# ls containerd harbor
[root@reg opt]# cd harbor/
[root@reg harbor]# ls common common.sh docker-compose.yml harbor.v2.5.4.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
[root@reg harbor]# cp harbor.yml.tmpl harbor.yml
# 修改配置文件以下内容
[root@reg harbor]# vim harbor.yml
hostname: reg.hxd.org
certificate: /data/certs/hxd.org.crt
private_key: /data/certs/hxd.org.key
harbor_admin_password: 123
# 安装并启用 harbor
[root@reg harbor]# ./install.sh --help
Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients. Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https. Please set --with-trivy if needs enable Trivy Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
[root@reg harbor]# ./install.sh --with-chartmuseum
# 在 master 主机上登陆 harbor 仓库
[root@k8s-master ~]# docker login reg.hxd.org
Login Succeeded
[root@k8s-master ~]# docker info
Cgroup Driver: systemd # 资源管理更改为 systemd
https://reg.hxd.org/ # 认证 harbor 仓库

5、安装 K8S 部署工具

  • 所有节点部署 K8S 软件仓库
[root@k8s- ~]# vim /etc/yum.repos.d/k8s.repo
[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0
  • 安装软件
# 显示所有版本
[root@k8s-master ~]# dnf list kub* --showduplicates
# master 上安装
[root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y
# node1,node2 上安装
[root@k8s-node ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 -y

6、在所节点安装 cri-docker

  • 安装 cri-docker

k8s 从 1.24 版本开始移除了 dockershim,所以需要安装 cri-docker 插件才能使用 docker 软件下载:https://github.com/Mirantis/cri-dockerd

# dnf install libcgroup-0.41-19.el8.x86_64.rpm \> cri-dockerd-0.3.14-3.el8.x86_64.rpm -y # 上传 k8s-1.30.tar.gz
# 上传 libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm 安装包,并解压
[root@k8s-master ~]# dnf install *.rpm -y
# 传给 node 节点
[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm [email protected]:/root/
[root@k8s-master ~]# scp libcgroup-0.41-19.el8.x86_64.rpm cri-dockerd-0.3.14-3.el8.x86_64.rpm [email protected]:/root/
  • 修改 cri-docker 配置文件
[root@k8s- ~]# vim /lib/systemd/system/cri-docker.service
# 指定网络插件名称及基础容器镜像
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.hxd.org/k8s/pause:3.9
  • 启用 cri-docker
[root@k8s-systemc ~]# systemctl daemon-reload
[root@k8s- ~]# systemctl enable --now cri-docker.service
# dockerd 的套接字文件
[root@k8s-master ~]# ll /var/run/cri-dockerd.sock # 默认文件信息
# [root@k8s-master ~]# kubeadm config print init-defaults | less

7、在 master 节点拉取 K8S 所需镜像

  • 拉取 k8s 集群所需要的镜像
[root@k8s-master ~]# kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0 \ --cri-socket=unix:///var/run/cri-dockerd.sock
[root@k8s-master ~]# docker images | awk '/google/{print $1":"$2}'
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{print $3}'
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' | awk -F / '{system("docker tag "$0" reg.hxd.org/k8s/"$3)}'
# 在浏览器 harbor 建立 k8s 项目选择公开
[root@k8s-master ~]# docker images | awk '/hxd/{system("docker push "$1":"$2)}'
# 注意拉取到仓库前必须登录仓库
[root@k8s-master ~]# docker login reg.hxd.org
用户:admin 密码:123

8、集群初始化

  • 启动 kubelet 服务
# 所有主机
[root@k8s- ~]# systemctl enable --now kubelet.service
[root@k8s- ~]# systemctl restart kubelet.service
  • 执行初始化
[root@k8s-master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \ --image-repository reg.hxd.org/k8s \ --kubernetes-version v1.30.0 \ --cri-socket=unix:///var/run/cri-dockerd.sock
# 指定集群配置文件变量 (不指定执行 kubectl get node 会报错)
[root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  • 给 node 主机指定这个 master 令牌
kubeadm join 192.168.83.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --cri-socket=unix:///var/run/cri-dockerd.sock
# 当前节点没有就绪,因为还没有安装网络插件,容器没有运行
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane 4m35s v1.30.0

注意:

在此阶段如果生成的集群 token 找不到了可以重新生成

9、安装 flannel 网络插件

官方网站:https://github.com/flannel-io/flannel

  • 安装网咯插件
# 上传下载好的 flannel-0.25.5.tag.gz 和 kube-flannel.yml
[root@k8s-master ~]# mkdir network
[root@k8s-master ~]# mv flannel-0.25.5.tag.gz kube-flannel.yml network/
[root@k8s-master ~]# cd network/
[root@k8s-master network]# docker load -i flannel-0.25.5.tag.gz
Loaded image: flannel/flannel-cni-plugin:v1.5.1-flannel1
# 在浏览器 harbor 建立 flannel 项目选择公开
# 给镜像打标签
[root@k8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
# 拉取镜像
[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel-cni-plugin:v1.5.1-flannel1
# 给镜像打标签
[root@k8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.hxd.org/flannel/flannel:v0.25.5
# 拉取镜像
[root@k8s-master ~]# docker push reg.hxd.org/flannel/flannel:v0.25.5
  • 编辑 kube-flannel.yml 修改镜像下载位置
[root@k8s-master ~]# vim kube-flannel.yml
image: flannel/flannel:v0.25.5
image: flannel/flannel-cni-plugin:v1.5.1-flannel1
image: flannel/flannel:v0.25.5
  • 安装 flannel 网络插件
[root@k8s-master ~]# kubectl apply -f kube-flannel.yml
# 查看集群节点
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4h13m v1.30.0
k8s-node1 Ready <none> 4h11m v1.30.0
k8s-node2 Ready <none> 4h11m v1.30.0

注意:

所有阶段的 STATUS 为 Ready 状态,那么恭喜你,你的 kubernetes 就装好了!!

10、测试集群运行情况

  • 建立一个 pod
# 上传 nginx-latest.tar.gz 镜像
# 打标签
[root@k8s-master ~]# docker tag nginx:latest reg.hxd.org/library/nginx:latest
# 拉取到仓库
[root@k8s-master ~]# docker push reg.hxd.org/library/nginx:latest
# 建立 pod
[root@k8s-master ~]# kubectl run test --image nginx:latest
# 查看 pod 状态
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
test 1/1 Running 0 4m48s
[root@k8s-master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test 1/1 Running 0 6m38s 10.244.2.2 k8s-node2 <none><none>
# 查看建立的 pos 信息
[root@k8s-master ~]# kubectl describe pods test
Container ID: docker://5c3ac30e03bd991bc9a20aa1ab49a098893b6fbbf03565cedd8e406c33590d0a
容器 id
Normal Scheduled 9m53s default-scheduler Successfully assigned default/test to k8s-node2
# 删除 pod
[root@k8s-master ~]# kubectl delete pod test

注意:

node 主机删除了建立的 pos 镜像,也会自动生成

11、设置 kubectl 命令补齐功能

[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source ~/.bashrc

目录

  1. Kubernetes 部署
  2. 一、k8s 中容器的管理方式
  3. 二、k8s 集群部署
  4. 1、k8s 环境部署说明
  5. 2、集群环境初始化
  6. Generated by dracut initrd
  7. ip
  8. 注释 swap
  9. 最下面如果是^,说明时间同步成功 ^ 118.31.40.99 2671 -138ms [ -143ms] +/- 173ms
  10. 3、所有节点安装 docker-ce
  11. 4、配置 harbor 仓库
  12. 创建目录
  13. 生成认证 key 和证书
  14. 注意创建时,必须写对域名 Common Name (eg, your name or your server's hostname)
  15. 查看证书信息
  16. 上传到 harbor 仓库主机并解压
  17. 修改配置文件以下内容
  18. 安装并启用 harbor
  19. 在 master 主机上登陆 harbor 仓库
  20. 5、安装 K8S 部署工具
  21. 显示所有版本
  22. master 上安装
  23. node1,node2 上安装
  24. 6、在所节点安装 cri-docker
  25. dnf install libcgroup-0.41-19.el8.x8664.rpm \> cri-dockerd-0.3.14-3.el8.x8664.rpm -y # 上传 k8s-1.30.tar.gz
  26. 上传 libcgroup-0.41-19.el8.x8664.rpm cri-dockerd-0.3.14-3.el8.x8664.rpm 安装包,并解压
  27. 传给 node 节点
  28. 指定网络插件名称及基础容器镜像
  29. dockerd 的套接字文件
  30. [root@k8s-master ~]# kubeadm config print init-defaults | less
  31. 7、在 master 节点拉取 K8S 所需镜像
  32. 在浏览器 harbor 建立 k8s 项目选择公开
  33. 注意拉取到仓库前必须登录仓库
  34. 8、集群初始化
  35. 所有主机
  36. 指定集群配置文件变量 (不指定执行 kubectl get node 会报错)
  37. 当前节点没有就绪,因为还没有安装网络插件,容器没有运行
  38. 9、安装 flannel 网络插件
  39. 上传下载好的 flannel-0.25.5.tag.gz 和 kube-flannel.yml
  40. 在浏览器 harbor 建立 flannel 项目选择公开
  41. 给镜像打标签
  42. 拉取镜像
  43. 给镜像打标签
  44. 拉取镜像
  45. 查看集群节点
  46. 10、测试集群运行情况
  47. 上传 nginx-latest.tar.gz 镜像
  48. 打标签
  49. 拉取到仓库
  50. 建立 pod
  51. 查看 pod 状态
  52. 查看建立的 pos 信息
  53. 删除 pod
  54. 11、设置 kubectl 命令补齐功能
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • LLaMaFactory 基于免费 GPU 环境微调大模型教程
  • StarRocks 与 MySQL 深度对比:架构、性能与选型
  • Linux 环境下编译 Kotaemon 源码:C#与 C++混合开发指南
  • AI 辅助 PCB 设计:效率革命与工程师角色重塑
  • IROS 2025 无人机与集群学习控制论文精选
  • 仿生学突破:SILD 模型如何实现无人机电力线避障检测
  • 小需求设计:如何用 Redis 实现协议勾选状态管理
  • C++ 异常机制详解
  • AI 工具泛滥时代,为何能力越来越不值钱?
  • 深入理解 Linux 软链接与硬链接
  • Java IO 流:核心原理与实战应用
  • Stable Diffusion 模型版本演进与核心差异解析
  • 前端新手必备的 10 个 VS Code 插件及配置指南
  • C++ 输入输出详解(上):基础流与格式控制
  • Java 模拟算法实战:经典题型深度解析
  • YOLO+OpenClaw+SAM 微调实现工业缺陷自动标注
  • Spring Bean Scope 作用域详解
  • ToClaw 信息检索与分析能力实测:从热搜到深度报告
  • C++ 继承进阶:友元、静态成员与菱形继承详解
  • AI 技术前沿动态:Ouroboros、CoPaw、Claude 与 Cursor 更新

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online