离线安装 Kubernetes 和 KubeSphere
本节介绍如何在不能访问 Internet 的环境下使用离线安装包部署 Kubernetes 和 KubeSphere。
安装过程中将用到开源工具 KubeKey 的 v4.x 版本。有关 KubeKey 的更多信息,请访问 GitHub KubeKey 仓库。
注意: KubeSphere 社区版用户需要在联网状态下自行构建离线安装包;KubeSphere 其他版本的用户可联系 KubeSphere 交付服务专家获取最新的离线安装包,即可跳过「构建离线安装包」一节。
| 说明 |
|---|
安装过程依赖 |
概述
与在线安装相比,离线安装需要先在可访问 Internet 的机器上将所需的组件与镜像打包为离线安装包,再将其传输至目标环境进行安装。整体流程如下:
-
构建离线安装包(在联网机器上):下载组件与镜像,并打包为
artifact.tgz。 -
传输离线包:将
artifact.tgz拷贝至目标环境(例如通过存储介质或内网传输)。 -
安装集群(在目标环境):解压离线包,将镜像推送至私有镜像仓库(若单独安装私有镜像仓库,即方式一;若由 KubeKey 在创建集群时同步安装,镜像推送由安装流程自动完成),然后安装 Kubernetes 与 KubeSphere。
角色说明
离线安装涉及以下四类角色:
| 角色 | 职责 | 最低配置(每节点) | 网络要求 |
|---|---|---|---|
打包节点 |
从 Internet 下载所需软件包与镜像,构建离线安装包 |
CPU:1 核,内存:1 GB,硬盘:150 GB |
需能访问互联网 |
部署节点(运行 Web Installer 服务) |
安装过程中在该节点执行 |
CPU:1 核,内存:1 GB,硬盘:150 GB |
与 Kubernetes 节点网络互通 |
私有镜像仓库节点 |
存放集群所需的容器镜像 |
CPU:8 核,内存:16 GB,硬盘:100 GB |
与 Kubernetes 节点网络互通 |
Kubernetes 节点 |
运行集群工作负载(无需提前安装 Kubernetes) |
CPU:2 核,内存:4 GB,硬盘:40 GB |
节点间网络互通 |
| 说明 |
|---|
|
前提条件
| 说明 |
|---|
以下为 Kubernetes 节点需满足的前提条件。 |
-
您需要准备至少 1 台 Linux 服务器作为集群节点。在生产环境中,为确保集群具备高可用性,建议准备至少 5 台 Linux 服务器,其中 3 台作为控制平面节点,另外 2 台作为工作节点。如果您在多台 Linux 服务器上安装 KubeSphere,请确保所有服务器属于同一子网。
-
集群节点的操作系统和版本须为 Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04、Debian 10、Debian 11、CentOS 8、AlmaLinux 9.0 或 Kylin v10。多台服务器的操作系统可以不同。关于其它操作系统和版本支持,请咨询青云科技官方解决方案专家或交付服务专家。
-
在生产环境中,为确保集群具有足够的计算和存储资源,建议每台集群节点配置至少 8 个 CPU 核心、16 GB 内存和 200 GB 磁盘空间。除此之外,建议在每台集群节点的 /var/lib/docker(对于 Docker)或 /var/lib/containerd(对于 containerd) 目录额外挂载至少 200 GB 磁盘空间用于存储容器运行时数据。
-
在生产环境中,建议提前为 KubeSphere 集群配置高可用性以避免单个控制平面节点出现故障时集群服务中断。有关更多信息,请参阅配置高可用性。
说明 如果您规划了多个控制平面节点,请务必提前为集群配置高可用性。
-
默认情况下,KubeSphere 使用集群节点的本地磁盘空间作为持久化存储。在生产环境中,建议提前配置外部存储系统作为持久化存储。有关更多信息,请参阅配置外部持久化存储。
-
请确保所有集群节点上 /etc/resolv.conf 文件中配置的 DNS 服务器地址可用。否则,KubeSphere 集群可能会出现域名解析问题。
-
请确保在所有集群节点上都可以使用 sudo、tar、curl 和 openssl 命令。
-
请确保所有集群节点时间同步。
配置防火墙规则
KubeSphere 需要特定端口和协议用于服务之间的通信。如果您的基础设施环境已启用防火墙,您需要在防火墙设置中放行所需的端口和协议。如果您的基础设施环境未启用防火墙,您可以跳过此步骤。
下表列出需要在防火墙中放行的端口和协议。
| 服务 | 协议 | 行为 | 起始端口 | 结束端口 | 备注 |
|---|---|---|---|---|---|
ssh |
TCP |
allow |
22 |
N/A |
N/A |
etcd |
TCP |
allow |
2379 |
2380 |
N/A |
apiserver |
TCP |
allow |
6443 |
N/A |
N/A |
calico |
TCP |
allow |
9099 |
9100 |
N/A |
bgp |
TCP |
allow |
179 |
N/A |
N/A |
nodeport |
TCP |
allow |
30000 |
32767 |
N/A |
master |
TCP |
allow |
10250 |
10258 |
N/A |
worker |
TCP |
allow |
10250 |
N/A |
N/A |
dns |
TCP |
allow |
53 |
N/A |
N/A |
dns |
UDP |
allow |
53 |
N/A |
N/A |
local-registry |
TCP |
allow |
5000 |
N/A |
离线环境需要 |
local-apt |
TCP |
allow |
5080 |
N/A |
离线环境需要 |
rpcbind |
TCP |
allow |
111 |
N/A |
使用 NFS 作为持久化存储时需要 |
ipip |
IPENCAP / IPIP |
allow |
N/A |
N/A |
使用 Calico 时需要 |
构建离线安装包
创建配置文件
提示: 可通过 https://get-images.kubesphere.io 页面生成配置文件。
登录打包节点,在打包节点上创建 config.yaml 文件:
apiVersion: kubekey.kubesphere.io/v1
kind: Config
spec:
zone: "cn"
download:
arch:
- amd64
- arm64
images:
policy: warn
registry: hub.kubesphere.com.cn
kubernetes:
kube_version:
- v1.23.17
- v1.24.17
- v1.25.16
- v1.26.15
- v1.27.16
- v1.28.15
- v1.29.15
- v1.30.14
- v1.31.12
- v1.32.11
- v1.33.7
- v1.34.3
cni:
type:
- calico
- cilium
- flannel
- kubeovn
- hybridnet
# multi_cni: # 可选,多 CNI 管理组件,如 multus
# - multus
# - spiderpool
cri:
container_manager:
- containerd
- docker
storage_class:
local:
enabled: true
nfs:
enabled: true
image_registry:
type:
- harbor
- docker-registry
iso:
- "almalinux-9.0-rpms"
- "kylin-v10SP3-rpms"
- "ubuntu-22.04-debs"
- "centos-8-rpms"
- "kylin-v10SP2-rpms"
- "ubuntu-24.04-debs"
- "debian-10-debs"
- "kylin-v10SP1-rpms"
- "debian-11-debs"
- "ubuntu-18.04-debs"
- "kylin-v10SP3-2403-rpms"
- "ubuntu-20.04-debs"
# 按需增删
字段说明:
| 字段 | 说明 |
|---|---|
|
配置文件的 API 版本,固定值为 |
|
资源类型,固定值为 |
|
软件包下载的区域, |
|
指定需要下载的 CPU 架构,支持 |
|
镜像下载策略, |
|
镜像仓库地址 |
|
需要包含的 Kubernetes 版本列表 |
|
需要包含的 CNI 插件类型 |
|
需要包含的多 CNI 管理组件 |
|
容器运行时类型,支持 |
|
需要包含的存储类,支持 |
|
镜像仓库类型,支持 |
|
制作 ISO 依赖包的操作系统列表,用于安装系统依赖 |
获取 kk 与 Web Installer
如果访问 GitHub 或 Google APIs 受限,请设置如下环境变量:
export KKZONE=cn
执行以下命令下载 KubeKey 和 Web Installer:
curl -sfL https://get-kk.kubesphere.io | sh -
执行完成后,会在当前目录生成以下文件:
| 原文件 | 解压后文件 |
|---|---|
|
|
|
|
|
离线安装包的构建脚本 |
制作离线安装包
执行构建脚本:
./package.sh config.yaml
当输出以下信息时,表示制作成功:
Offline package artifact.tgz has been created successfully.
离线包为 artifact.tgz,包含以下内容:
artifact/
├── kubekey-artifact.tgz # 完整的离线资源包
└── tools/ # 不同架构的工具包
├── amd64/
│ ├── kubekey-v4.x.x-linux-amd64.tar.gz
│ ├── nerdctl-2.2.1-linux-amd64.tar.gz
│ └── oras_1.3.0_linux_amd64.tar.gz
└── arm64/
├── kubekey-v4.x.x-linux-arm64.tar.gz
├── nerdctl-2.2.1-linux-arm64.tar.gz
└── oras_1.3.0_linux_arm64.tar.gz
将 artifact.tgz 传输至目标环境后,后续步骤均在目标环境中执行。
使用离线包安装集群
安装集群前,需要指定私有镜像仓库地址。有以下两种方式:
-
方式一:单独安装私有镜像仓库,请参考 镜像仓库安装。
-
方式二:在创建集群时同时安装镜像仓库,需要在
inventory.yaml和config.yaml中添加对应配置信息。详情请参考下文命令行安装步骤。
选择安装方式
以下两种方法均可完成 Kubernetes 和 KubeSphere 的安装,安装结果一致,您只需选择其中一种操作入口即可,无需同时执行:
-
方法 1:命令行安装:适用于熟悉命令行操作、需要精细化配置集群参数的场景。
-
方法 2:Web Installer 安装:适用于希望通过图形化界面完成节点添加、参数配置和安装校验的场景。
| 说明 |
|---|
两种方法任选其一,请勿重复执行。两种方法均支持上文所述的两种私有镜像仓库部署方式(单独安装、或在创建集群时同步安装)。 |
解压离线包
tar -zxvf artifact.tgz
方法 1:命令行安装
1. 进入离线包目录并解压工具
KubeKey 工具位于 tools/{arch}/ 目录下,请根据安装机器的架构解压对应工具。
查看机器架构:
uname -m
进入离线包目录:
cd artifact/
解压 KubeKey 到离线包目录:
tar -zxvf tools/{arch}/kubekey-v4.x.x-linux-{arch}.tar.gz -C .
2. 推送镜像到私有镜像仓库(仅方式一:单独安装私有镜像仓库)
| 说明 |
|---|
|
执行以下命令将离线包中的镜像推送到已部署的私有镜像仓库:
./kk artifact images --push -c config.yaml -a kubekey-artifact.tgz
注意: 执行前请确保推送所用的 config.yaml 中已正确配置私有镜像仓库地址(即 spec.image_registry.auth 字段)。该 config.yaml 与上文「构建离线安装包」步骤中用于打包的配置文件为同一文件。
3. 创建节点配置文件
执行以下命令创建节点配置文件 inventory.yaml:
./kk create inventory -o .
命令执行完毕后,将生成节点配置文件 inventory.yaml。inventory.yaml 主要用于设置集群中各节点的连接信息,示例如下:
apiVersion: kubekey.kubesphere.io/v1
kind: Inventory
metadata:
name: default
spec:
hosts:
# localhost:
# connector:
# password: 123456
# node1:
# connector:
# type: ssh
# host: node1
# port: 22
# user: root
# password: 123456
# internal_ipv4: 1.1.1.1
groups:
# 所有 Kubernetes 节点
k8s_cluster:
groups:
- kube_control_plane
- kube_worker
# 控制平面节点
kube_control_plane:
hosts:
- localhost
# 工作节点
kube_worker:
hosts:
- localhost
# etcd 节点(仅当 etcd_deployment_type 为 external 时)
etcd:
hosts:
- localhost
# image_registry:
# hosts:
# - localhost
# NFS 节点(用于镜像仓库存储和 Kubernetes NFS 存储)
# nfs:
# hosts:
# - localhost
spec.hosts 中的节点连接参数:
| 参数 | 描述 |
|---|---|
|
节点名称 |
|
节点连接信息 |
|
节点连接类型。支持 |
|
使用 SSH 连接节点时的地址 |
|
使用 SSH 连接节点时的端口。默认值: |
|
使用 SSH 连接节点时的用户名。默认值: |
|
连接节点时的密码。 |
|
SSH 连接节点时的私钥文件路径。密码和密钥任选其一 |
|
SSH 连接节点时的私钥文件内容。可使用密钥内容替代密钥文件路径 |
|
节点在集群中通信时使用的 IPv4 地址 |
|
节点在集群中通信时使用的 IPv6 地址 |
spec.groups 中的节点角色参数:
| 参数 | 描述 |
|---|---|
|
Kubernetes 集群节点分组。包含 |
|
Kubernetes 集群中的控制平面节点。在 |
|
Kubernetes 集群中的工作节点。在 |
|
Kubernetes 集群中的 etcd 节点。在 |
|
用于创建私有镜像仓库的节点。离线安装时通常需要配置 |
如果选择在创建集群时同时安装镜像仓库,需要在 inventory.yaml 中额外添加 image_registry 节点和分组。示例如下:
spec:
hosts:
harbor1:
connector:
type: ssh
host: 172.16.0.1
port: 22
user: root
password: 123456
internal_ipv4: 172.16.0.1
groups:
image_registry:
hosts:
- harbor1
4. 创建安装配置文件
执行以下命令创建安装配置文件。以下示例使用 v1.32.11,该版本已包含在前文 config.yaml 示例的离线资源列表中:
./kk create config --with-kubernetes v1.32.11 -o .
将 v1.32.11 替换为实际需要的 Kubernetes 版本。请确保替换后的版本已包含在构建离线包时使用的 spec.download.kubernetes.kube_version 列表中。
命令执行完毕后,将生成安装配置文件 config-v1.32.11.yaml。
如果选择在创建集群时同时安装镜像仓库,需要在 config-v1.32.11.yaml 中补充镜像仓库配置:
apiVersion: kubekey.kubesphere.io/v1
kind: Config
spec:
download:
arch: # 推送镜像的架构
- amd64
- arm64
images:
# 镜像检查策略。
# warn: 如果镜像缺少某些CPU架构或操作系统,仅记录警告
# strict: 拉取的镜像必须包含所有选定的CPU架构和操作系统,否则报错。(默认)
policy: warn # 有些镜像可能只有amd64单架构,推送多架构镜像时请设置为 warn
image_registry:
auth:
registry: dockerhub.kubekey.local # 私有镜像仓库地址
username: admin # 私有镜像仓库登录用户名
password: Harbor12345 # 私有镜像仓库登录密码
skip_tls_verify: false # 是否跳过 TLS 证书验证,默认为 false
plain_http: false # 是否使用 HTTP 明文传输,默认为 false
5. 安装集群
./kk create cluster -a kubekey-artifact.tgz -i inventory.yaml -c config-v1.32.11.yaml
6. 安装 KubeSphere
KubeKey v4.x 将 Kubernetes 和 KubeSphere 解耦安装,安装完 Kubernetes 后需手动执行以下 Helm 命令安装 KubeSphere。
| 说明 |
|---|
|
tar -zxvf kubekey-artifact.tgz
helm upgrade --install \
-n kubesphere-system \
--create-namespace \
ks-core \
./charts/ks-core-1.2.5.tgz \
--debug \
--wait \
--reset-values \
--set auditing.enable=true \
--set ha.enabled=true \
--set redisHA.enabled=true \
--set global.imageRegistry=dockerhub.kubekey.local \
--set extension.imageRegistry=dockerhub.kubekey.local
| 说明 |
|---|
|
方法 2:Web Installer 安装
1. 进入离线包目录并解压工具
KubeKey 工具位于 tools/{arch}/ 目录下,请根据安装机器的架构解压对应工具。
查看机器架构:
uname -m
进入离线包目录:
cd artifact/
解压 KubeKey 到离线包目录:
tar -zxvf tools/$(uname -m)/kubekey-v4.x.x-linux-$(uname -m).tar.gz -C .
解压 kubekey-artifact.tgz 到工作目录。该文件包含安装时所需的所有资源:二进制文件、Helm Chart 包、镜像文件等。
mkdir kubekey
tar -zxvf kubekey-artifact.tgz -C kubekey
2. 启动 Web Installer
./kk web --port 8080 --schema-path web-installer/schema --ui-path web-installer/dist
如果显示如下信息,表示 Web Installer 启动成功:
Web server started successfully on port 8080
请勿关闭命令终端。
3. 通过 Web Installer 部署 Kubernetes 和 KubeSphere
在浏览器中访问 http://<部署节点 IP 地址>:8080,点击 开始安装,进入部署流程。
3.1 添加集群节点
-
Master:控制平面节点,负责集群调度与管理。Master 节点上会自动安装 etcd。
-
Worker:工作节点,运行实际业务容器。
-
Image:镜像仓库节点,用于自动部署私有镜像仓库。在线安装时通常无需配置此角色。
Web Installer 支持以下三种节点添加方式:
-
手动添加:适用于添加单个节点。您需要填写主机名、IP 地址、SSH 地址、SSH 认证等信息。
-
文件上传:适用于批量添加节点。请根据模板填写节点信息后上传文件。
-
节点扫描:适用于自动发现节点。您可以通过 IP CIDR 扫描节点,并根据扫描结果选择需要添加的节点。
注意: 如果只添加一个节点,节点角色必须为 Master & Worker。
3.2 修改配置参数
配置部署 Kubernetes 和 KubeSphere 所需的参数。
Kubernetes 和 KubeSphere Core 标签页均支持 表单模式 和 YAML 模式。您可以在表单中填写配置信息(所有参数均需配置),也可以直接编辑 YAML 文件。如需了解更多配置信息,请参阅 配置示例。
| 说明 |
|---|
如果选择安装镜像仓库,需通过 YAML 模式 添加以下参数,跳过在线下载: |
download:
fetch: false
安装镜像仓库
如果需要在安装集群时同时部署私有镜像仓库,请在添加节点时添加 Image 角色的节点,并在 Kubernetes 配置参数中将镜像仓库类型设置为 harbor 或 docker-registry:
-
单节点镜像仓库:添加 1 个 Image 角色节点,在 Kubernetes 配置参数中设置镜像仓库类型。
-
高可用镜像仓库:添加多个 Image 角色节点(建议 ≥ 3 个),在 Kubernetes 配置参数中设置镜像仓库类型,并配置镜像仓库高可用虚拟 IP 作为访问入口。
配置完成后,点击 下一步。
3.3 安装预览
在 安装预览 页面,确认版本等信息无误后,点击 下一步:执行安装 开始安装。也可以返回上一步修改配置参数。
3.4 安装
耐心等待安装完成。安装完成后,系统会自动进入安装校验步骤。
若安装过程中出现异常,点击 查看日志 查看日志详情,退出或初始化后重新安装。
| 说明 |
|---|
若需要在 Web Installer 页面重新安装、修改配置参数或清除配置,点击左侧的 初始化 按钮,将重置 Kubernetes 节点上的所有任务并回到基本信息页面。初始化操作不可逆,请谨慎执行。 |
3.5 安装校验
-
在 安装校验 页面,点击 开始检测,系统将自动运行对应的检测脚本验证系统可用性。
-
若通过系统检测,点击 完成,可查看 KubeSphere 的访问地址、管理员用户名和默认密码。
-
在网页浏览器上输入访问地址,登录 KubeSphere Web 控制台,即可开始使用 KubeSphere。
| 说明 |
|---|
取决于您的网络环境,您可能需要配置流量转发规则并在防火墙中放行 |
访问 KubeSphere Web 控制台
安装完成后,在浏览器中访问安装结果中显示的 KubeSphere 控制台地址。
使用安装结果中显示的管理员用户名和默认密码登录 KubeSphere Web 控制台。首次登录后,建议立即修改默认密码。