类型
状态
日期
链接
摘要
标签
分类
图标
密码
本文将详细介绍,如何基于操作系统 openEuler 22.03 LTS SP3,利用 KubeKey 制作 KubeSphere 和 Kubernetes 离线安装包,并实战部署 KubeSphere 3.4.1 和 Kubernetes 1.28.8 集群。
实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
ksp-master-1 | 192.168.9.91 | 8 | 16 | 40 | 100 | 离线环境 KubeSphere/k8s-master |
ksp-master-2 | 192.168.9.92 | 8 | 16 | 40 | 100 | 离线环境 KubeSphere/k8s-master |
ksp-master-3 | 192.168.9.93 | 8 | 16 | 40 | 100 | 离线环境 KubeSphere/k8s-master |
ksp-registry | 192.168.9.90 | 4 | 8 | 40 | 100 | 离线环境部署节点和镜像仓库节点(Harbor) |
ksp-deploy | 192.168.9.89 | 4 | 8 | 40 | 100 | 联网主机用于制作离线包 |
合计 | 4 | 32 | 64 | 200 | 500 | ㅤ |
实战环境涉及软件版本信息
- 操作系统:openEuler 22.03 LTS SP3
- KubeSphere:v3.4.1
- Kubernetes:v1.28.8
- KubeKey: v3.1.1
- Harbor: v2.10.1
1 离线部署资源制作
本文增加了一台能联网的 ksp-deploy 节点,用来制作离线部署资源包。
1.1 下载 KubeKey
- 下载最新版的 KubeKey
1.2 创建 manifests 文件
KubeKey v3.1.0 之前 manifests 文件需要根据模板手动编写, 现在可以通过 KubeKey 的
create manifest
命令自动生成一份 manifests 模板。create manifest
支持的参数如下
- 官方示例(支持多集群、多架构)
- 创建一个 amd64 架构 kubernetes v1.28.8 的 manifests 文件
- 生成的配置文件如下
- 修改配置文件
KubeKey v3.1.1 生成的 manifests 配置文件适用于 ubuntu 部署纯 Kubernetes 集群,并没有部署 KubeSphere 的镜像。因此,我们需要结合部署 KubeSphere 需要的镜像列表,生成一份完整的 manifests 文件。
- 下载 KubeSphere 镜像列表
完整的镜像一共 120 个,受限于篇幅,这里不做展示,请查看下文完整的 manifest 文件。
1.3 获取操作系统依赖包
本实验环境使用的操作系统是 x64 的 openEuler 22.03 LTS SP3,需要自己制作安装 Kubernetes 需要的操作系统依赖包镜像 openEuler-22.03-rpms-amd64.iso,其他操作系统请读者在 KubeKey releases 页面下载。
个人建议在离线环境用 openEuler 的安装 ISO,制做一个完整的离线软件源。在利用 KubeKey 安装离线集群时,就不需要考虑操作系统依赖包的问题。
1.4 生成 manifest 文件
根据上面的文件及相关信息,生成最终的 manifest 文件 ksp-v3.4.1-v1.28.8-manifest.yaml。
manifest 修改说明
- 开启 harbor 和 docker-compose 配置项,为后面通过 KubeKey 自建 harbor 仓库推送镜像使用。
- 默认创建的 manifest 模板中的镜像是从 docker.io 获取,替换前缀为 registry.cn-beijing.aliyuncs.com/kubesphereio
- operatingSystems 配置删除默认的 ubuntu,新增 openEuler 配置
1.5 导出制品 artifact
根据生成的 manifest,执行下面的命令制作制品(artifact)。
正确执行后,输出结果如下 :(受限于篇幅,仅展示最终结果)
制品制作完成后,查看制品大小(全镜像,制品包居然达到了 13G,生产环境还是有选择的裁剪吧)。
1.6 导出 KubeKey 离线安装包
把 KubeKey 工具也制作成压缩包,便于拷贝到离线节点。
2 准备离线部署 KubeSphere 和 Kubernetes 的前置数据
请注意,以下操作无特殊说明时需在离线环境部署(Registry)节点上执行。
2.1 上传离线部署资源包到部署节点
将以下离线部署资源包,上传至离线环境部署(Registry) 节点的
/data/
目录(可根据实际情况修改)。- Kubekey:kubekey-offline-v3.4.1-v1.28.tar.gz
- 制品 artifact:ksp-v3.4.1-v1.28-artifact.tar.gz
执行以下命令,解压 KubeKey:
2.2 创建离线集群配置文件
- 执行以下命令创建离线集群配置文件
命令执行成功后,在当前目录会生成文件名为 ksp-v341-v1228-offline.yaml 的配置文件。
2.3 修改 Cluster 配置
在离线集群配置文件文件中 kind: Cluster 小节的作用是部署 Kubernetes 集群。本文示例采用 3 个节点同时作为 control-plane、etcd 节点和 worker 节点。
执行以下命令修改离线集群配置文件
ksp-v341-v1228-offline.yaml
:修改 kind: Cluster 小节中 hosts 和 roleGroups 等信息,修改说明如下。
- hosts:指定节点的 IP、ssh 用户、ssh 密码、ssh 端口。示例演示了 ssh 端口号的配置方法。同时,新增一个 Registry 节点的配置
- roleGroups:指定 3 个 etcd、control-plane 节点,复用相同的机器作为 3 个 worker 节点
- 必须指定主机组
registry
作为仓库部署节点(本文为了满足读者的需求使用了 KubeKey 自动部署 Harbor 镜像仓库。当然,也可以使用已有的 Harbor,使用已有 Harbor 时此配置可以不加)
- internalLoadbalancer: 启用内置的 HAProxy 负载均衡器
- system.rpms:新增配置,部署时安装 rpm 包(openEuler 系统默认没有安装 tar 包,必须提前安装)
- domain:自定义了一个 opsxlab.cn,没特殊需求的场景保留默认值即可
- containerManager:使用了 containerd
- storage.openebs.basePath:新增配置,指定 openebs 默认存储路径为 /data/openebs/local
- registry:必须指定
type
类型为harbor
,否则默认安装 docker registry
修改后的完整示例如下:
2.4 修改 ClusterConfiguration 配置
在离线集群配置文件中 kind: ClusterConfiguration 小节的作用是部署 KubeSphere 及相关组件。
本文为了验证离线部署的完整性,启用了除 KubeEdge 、GateKeeper 以外的所有插件。
继续编辑离线集群配置文件
ksp-v341-v1228-offline.yaml
,修改 kind: ClusterConfiguration 部分来启用可插拔组件,具体的修改说明如下。- 启用 etcd 监控
- 启用 KubeSphere 告警系统
- 启用 KubeSphere 审计日志
- 启用 KubeSphere DevOps 系统
- 启用 KubeSphere 事件系统
- 启用 KubeSphere 日志系统(v3.4.0 开始默认启用 opensearch)
- 启用 Metrics Server
- 启用网络策略、容器组 IP 池,服务拓扑图(名字排序,对应配置参数排序)
- 启用应用商店
- 启用 KubeSphere 服务网格(Istio)
- 修改上面的所有参数后,必须加入一个参数( 2.x 版本的 KubeKey 没这个问题,3.x 的到 v3.1.1 为止,都存在这个问题。 不加的话,在部署 KubeSphere 的时候会有命名空间不匹配的问题)
经过上述步骤,我们成功完成了对离线集群配置文件
ksp-v341-v1228-offline.yaml
的修改。由于篇幅限制,无法在此展示完整的文件内容,请各位读者根据上文提供的配置说明仔细核对。3 安装配置 Harbor
为了验证 KubeKey 离线部署 Harbor 服务的能力,本文采用 KubeKey 部署镜像仓库 Harbor。生产环境建议提前自建。
请注意,以下操作如无特殊说明,均在离线环境部署(Registry)节点上执行。
3.1 安装 Harbor
执行以下命令安装镜像仓库 Harbor:
- 查看安装镜像
- 查看 Harbor 服务状态
- 查看 hosts(确保使用了自定义域名)
- 查看 Harbor 配置的域名(确保使用了自定义域名)
- 查看 Docker 是否配置了私有证书(确保使用了自定义域名及证书)
3.2 在 Harbor 中创建项目
使用 KubeKey 安装的 Harbor 默认信息如下:
- 登陆账户信息:管理员账号:admin,密码:Harbor12345(生产环境必须修改)。
使用 Shell 脚本创建项目,
vim create_project_harbor.sh
。- 执行脚本创建项目
3.3 推送离线镜像到 Harbor 仓库
将提前准备好的离线镜像推送到 Harbor 仓库,这一步为可选项,因为创建集群的时候默认会推送镜像(本文使用参数忽略了)。为了部署成功率,建议先推送。
- 推送离线镜像
- 正确的安装结果如下(受限于篇幅,内容有删减):
- Harbor 管理页面查看项目和镜像仓库(提前在自己电脑上做好域名解析配置)

从项目管理页面可以看到一共创建了 124 个镜像仓库。
4 安装 KubeSphere 和 Kubernetes 集群
请注意,以下操作如无特殊说明,均在离线环境部署(Registry)节点上执行。
4.1 安装 KubeSphere 和 Kubernetes 集群
执行以下命令,安装 KubeSphere 和 Kubernetes 集群。
参数说明
- --with-packages:安装操作系统依赖
- --skip-push-images: 忽略推送镜像,前面已经完成了推送镜像到私有仓库的任务
特殊说明:
- 由于本文在安装的过程中启用了日志插件,因此在安装的过程中必须按照 「问题 2」的描述手工介入处理,否则安装会失败。
- 当出现熟悉的安装滚动条 >>---> 后,可以另开一个终端 使用命令
kubectl get pod -A
或是kubectl get pod -A | grep -v Running
观察进度,如出现异常可及时介入处理。
- 也可以通过下面的命令查看详细的部署过程日志及报错信息。
部署完成需要大约 10-30 分钟左右,具体看网速、机器配置、启用多少插件等。
部署完成后,您应该会在终端上看到类似于下面的输出。提示部署完成的同时,输出中还会显示用户登陆 KubeSphere 的默认管理员用户和密码。
4.2 部署结果验证
登录 Web 控制台通过
http://{IP}:30880
使用默认帐户和密码 admin/P@88w0rd
访问 KubeSphere 的 Web 控制台,简单的验证一下部署结果。- 查看集群节点状态

- 查看系统组件状态

- 查看系统监控状态

5 常见问题
5.1 问题 1
- 问题现象
- 解决方案
在离线集群配置文件 kind: ClusterConfiguration 小节的
spec
部分加入参数 namespace_override: kubesphereio
5.2 问题 2
- 问题现象
- 解决方案
官方配置写死了 busybox 的地址,暂时需要手动修改。
本文虽然基于操作系统 openEuler 22.03 LTS SP3,但对于 CentOS、Ubuntu 等其他操作系统同样具有借鉴意义。
免责声明:
- 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
- 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境。由此引发的任何问题,作者概不负责!
- 作者:Cloud1024
- 链接:https://itq5.com/posts/linux_k8s_kubekay_install
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。