离线场景的使用¶
提醒事项¶
- 针对 RHEL 8.4 系列,由于包依赖问题,执行过程中会卸载系统预装的 fuse 包
准备事项¶
-
需要预先部署的服务:
- 文件资源服务
minio
- 镜像仓库服务
docker registry
(2.7 以下)或者harbor
- 文件资源服务
-
需要安装的必要工具:
- 用于导入镜像文件的工具:
skopeo
,需要 >=1.9.2;podman
, Required >= 4.4.4 - 用于导入二进制文件的工具:
minio client
- 用于导入镜像文件的工具:
-
通过Helm部署
kubean
下载离线资源¶
通过 Github Releases 页面可以下载我们想要版本的离线资源。
离线资源的基本说明:
├── files.list # 文件内容的列表
├── files-${tag}.tar.gz # 文件压缩包, 内含导入脚本
├── images.list # 镜像内容的列表
├── images-${tag}.tar.gz # 镜像压缩包, 内含导入脚本
└── os-pkgs-${linux_distribution}-${tag}.tar.gz # 各系统压缩包, 内含导入脚本
将离线资源导入对应服务¶
导入 Binaries 资源¶
请先解压 files-${tag}.tar.gz
文件, 其内部包含:
files/
├── import_files.sh # 该脚本用于导入二进制文件到 minio 文件服务
└── offline-files.tar.gz # 二进制文件的压缩包
执行如下命令, 将二进制文件导入到 minio 服务中:
MINIO_USER=${username} MINIO_PASS=${password} ./import_files.sh ${minio_address}
minio_address
是minio API Server
地址,端口一般为9000,比如http://1.2.3.4:9000
导入 Images 资源¶
需要解压 images-${tag}.tar.gz
文件, 其内部包含:
images/
├── import_images.sh # 该脚本用于导入镜像文件到 docker registry 或 harbor 镜像仓库服务, 可用于合并不同平台镜像
└── offline-images.tar.gz # 镜像文件的压缩包
执行如下命令, 将镜像文件导入到 docker registry 或 harbor 镜像仓库服务中:
# 免密模式
REGISTRY_SCHEME=http REGISTRY_ADDR=${registry_address} ./import_images.sh
# 用户名口令模式
REGISTRY_SCHEME=https REGISTRY_ADDR=${registry_address} REGISTRY_USER=${username} REGISTRY_PASS=${password} ./import_images.sh
REGISTRY_ADDR
是镜像仓库的地址,比如1.2.3.4:5000
- 当镜像仓库存在用户名密码验证时,需要设置
REGISTRY_USER
和REGISTRY_PASS
导入 OS packages 资源¶
Note
- 目前支持 Centos / Redhat / Kylin / Ubuntu 等发行版的 OS Packages 资源
- 统信 UnionTech V20 系列的 OS Package 需要手动构建,构建方法见 README
需要解压 os-pkgs-${linux_distribution}-${tag}.tar.gz
文件,其内部包含:
os-pkgs
├── import_ospkgs.sh # 该脚本用于导入 os packages 到 minio 文件服务
├── os-pkgs-amd64.tar.gz # amd64 架构的 os packages 包
├── os-pkgs-arm64.tar.gz # arm64 架构的 os packages 包
└── os-pkgs.sha256sum.txt # os packages 包的 sha256sum 效验文件
执行如下命令,将 os packages 包到 minio 文件服务中:
MINIO_USER=${username} MINIO_PASS=${password} ./import_ospkgs.sh ${minio_address} os-pkgs-${arch}.tar.gz
建立离线源¶
下面的【建立本地ISO镜像源】与【建立在线ISO镜像源】只需要执行其中一个即可。
建立 ISO 镜像源¶
建立本地 ISO 镜像源¶
OS Packages 主要用于解决 docker-ce 的安装依赖,但在实际的离线部署过程中,可能还需要使用到发行版系统的其他包,此时需要建立本地 ISO 镜像源。
Note
我们需要提前下载主机对应的 ISO 系统发行版镜像, 当前支持 Centos、Redhat、Ubuntu 发行版的 ISO 镜像源创建; 需要在每个创建kubernetes的集群上都执行本操作。
这里可以使用脚本 artifacts/gen_repo_conf.sh
, 执行如下命令即可挂载 ISO 镜像文件, 并创建 Repo 配置文件:
# 基本格式
./gen_repo_conf.sh --iso-mode ${linux_distribution} ${iso_image_file}
# linux_distribution 的值是 centos、redhat、debian 或者 ubuntu
# 执行脚本创建 ISO 镜像源
./gen_repo_conf.sh --iso-mode centos CentOS-7-x86_64-Everything-2207-02.iso
# 查看 ISO 镜像挂载情况
df -h | grep mnt
/dev/loop0 9.6G 9.6G 0 100% /mnt/centos-iso
# 查看 ISO 镜像源配置
cat /etc/yum.repos.d/Kubean-ISO.repo
[kubean-iso]
name=Kubean ISO Repo
baseurl=file:///mnt/centos-iso
enabled=1
gpgcheck=0
sslverify=0
建立在线 ISO 镜像源¶
导入至 MinIO¶
将 ISO 中的镜像源导入到 minio server中,需要使用到脚本 artifacts/import_iso.sh
,执行如下面命令即可将 ISO 镜像中软件源导入到
minio server 中:
MINIO_USER=${username} MINIO_PASS=${password} ./import_iso.sh ${minio_address} Centos-XXXX.ISO
为主机新建如下文件 /etc/yum.repos.d/centos-iso-online.repo
即可使用在线 ISO 镜像源:
[kubean-iso-online]
name=Kubean ISO Repo Online
baseurl=${minio_address}/kubean/centos-iso/$releasever/os/$basearch
enabled=1
gpgcheck=0
sslverify=0
此外,如果导入的是 RHEL ISO,需注意此 ISO 提供两个源:
[kubean-iso-online-BaseOS]
name=Kubean ISO Repo Online BaseOS
baseurl=${minio_address}/kubean/redhat-iso/$releasever/os/$basearch/BaseOS
enabled=1
gpgcheck=0
sslverify=0
[kubean-iso-online-AppStream]
name=Kubean ISO Repo Online AppStream
baseurl=${minio_address}/kubean/redhat-iso/$releasever/os/$basearch/AppStream
enabled=1
gpgcheck=0
sslverify=0
- 需要将
${minio_address}
替换为 minio API Server 地址
这一步也可以通过设置 ClusterOperation 文件中 enable-repo.yml 的 extraArgs 的值来实现,
将 extraArgs 的值添加为 '{minio_url}/kubean/centos-iso/$releasever/os/$basearch'
这种格式,
参阅 ClusterOperation 结合 playbook 创建源配置文件了解更多信息。
导入至本地目录¶
将 ISO 中的镜像源导入到本地目录中,需要使用到脚本 artifacts/import_iso.sh
,执行如下面命令即可将 ISO 镜像中软件源导入到指定的本地目录中
./import_iso.sh ${you_local_path} Centos-XXXX.ISO
repo 配置方式类似导入至 MinIO
[kubean-iso-online]
name=Kubean ISO Repo Online
baseurl=${your_local_path}/centos-iso/$releasever/os/$basearch
enabled=1
gpgcheck=0
sslverify=0
建立 extras 软件源¶
当前支持 Red Hat Linux 系列
在安装 K8S 集群时, 还会依赖一些 extras 软件, 比如 container-selinux
, 这些软件往往在 ISO 镜像源中并不提供. 对此 OS
packages 离线包已对其进行了补充, 其在导入 minio 之后,
我们还需要向各个节点创建 extra repo 配置文件.
同样可以使用脚本 artifacts/gen_repo_conf.sh
, 执行如下命令即可创建 Extra Repo:
./gen_repo_conf.sh --url-mode ${linux_distribution} ${repo_base_url}
# 执行脚本创建 URL 源配置文件
./gen_repo_conf.sh --url-mode centos ${minio_address}/kubean/centos/\$releasever/os/\$basearch
# 查看 URL 源配置文件
cat /etc/yum.repos.d/Kubean-URL.repo
[kubean-extra]
name=Kubean Extra Repo
baseurl=http://10.20.30.40:9000/kubean/centos/$releasever/os/$basearch
enabled=1
gpgcheck=0
sslverify=0
Note
若 repo_base_url
参数中带有 $
符号,需要对其进行转义 \$
。
需要将 ${minio_address}
替换为实际 minio API Server
的地址。
ClusterOperation 结合 playbook 创建源配置文件¶
由于创建源的过程涉及到集群的所有节点, 手动脚本操作相对繁琐, 这里提供了一种 playbook 的解决方式.
centos yum repo 的配置示例:
apiVersion: kubean.io/v1alpha1
kind: ClusterOperation
metadata:
name: cluster-ops-01
spec:
cluster: sample
image: ghcr.io/kubean-io/spray-job:latest
actionType: playbook
action: cluster.yml
preHook:
- actionType: playbook
action: ping.yml
- actionType: playbook
action: enable-repo.yml # 在部署集群前, 先执行 enable-repo 的 playbook, 为每个节点创建指定 url 的源配置
extraArgs: |
-e "{repo_list: ['http://10.20.30.40:9000/kubean/centos/\$releasever/os/\$basearch']}"
- actionType: playbook
action: disable-firewalld.yml
postHook:
- actionType: playbook
action: cluster-info.yml
- actionType: playbook
action: enable-repo.yml # 在部署集群后, 还原各节点 yum repo 配置. (注:此步骤, 可视情况添加.)
extraArgs: |
-e undo=true
ubuntu20.04 apt repo 的配置示例:
apiVersion: kubean.io/v1alpha1
kind: ClusterOperation
metadata:
name: cluster-ops-01
spec:
cluster: sample
image: ghcr.io/kubean-io/spray-job:latest
actionType: playbook
action: cluster.yml
preHook:
- actionType: playbook
action: ping.yml
- actionType: playbook
action: enable-repo.yml # 在部署集群前, 先执行 enable-repo 的 playbook, 为每个节点创建指定 url 的源配置
# 注:ubuntu 是 os package 离线资源,ubuntu-iso 是 iso 安装包资源
extraArgs: |
-e "{repo_list: ['deb [trusted=yes] http://MINIO_ADDR:9000/kubean/ubuntu/amd64 focal/', 'deb [trusted=yes] http://MINIO_ADDR:9000/kubean/ubuntu-iso focal main restricted']}"
- actionType: playbook
action: disable-firewalld.yml
postHook:
- actionType: playbook
action: cluster-info.yml
- actionType: playbook
action: enable-repo.yml # 在部署集群后, 还原各节点 apt repo 配置. (注:此步骤, 可视情况添加.)
extraArgs: |
-e undo=true
部署集群前的配置¶
离线设置需要参考 kubespray
位于 kubespray/inventory/sample/group_vars/all/offline.yml
的配置文件:
---
## 全局的离线配置
### 配置私有容器镜像仓库服务的地址
registry_host: "{{ registry_address }}"
### 配置二进制文件服务的地址
github_url: https://files.m.daocloud.io/github.com
dl_k8s_io_url: https://files.m.daocloud.io/dl.k8s.io
storage_googleapis_url: https://files.m.daocloud.io/storage.googleapis.com
get_helm_url: https://files.m.daocloud.io/get.helm.sh
### 如果使用 CentOS / RedHat / AlmaLinux / Fedora, 需要配置 yum 源文件服务地址:
yum_repo: "{{ minio_address }}"
### 如果使用 Debian, 则配置:
debian_repo: "{{ minio_address }}"
### 如果使用 Ubuntu, 则配置:
ubuntu_repo: "{{ minio_address }}"
### 如果 containerd 采用非安全 HTTP 免认证方式, 则需要配置:
containerd_registries_mirrors:
- prefix: "{{ registry_address }}"
mirrors:
- host: "http://{{ registry_address }}"
capabilities: ["pull", "resolve"]
skip_verify: true
### 如果 docker 采用非安全 HTTP 免认证方式, 则需要配置:
docker_insecure_registries:
- {{ registry_address }}
额外说明:
针对一些特殊的操作系统,在离线部署时,还需要添加一些额外参数:
操作系统 | 额外参数 |
---|---|
RHEL 系列 | rhel_enable_repos: false |
Oracle Linux 系列 | use_oracle_public_repo: false |
我们以 examples/install/3.airgap
作为模板。
将如上离线配置按照具体情况进行调整,特别需要替换<registry_address>
和 <minio_address>
。
最终将配置添加更新到 examples/install/3.airgap/VarsConfCM.yml
文件中。
同时我们还需要修改 examples/install/3.airgap/HostsConfCM.yml
中的集群节点 IP 及用户名密码。
最终,通过 kubectl apply -f examples/install/3.airgap
启动 ClusterOperation 任务来安装 k8s 集群。
增量离线包的生成和使用¶
详细文档见 Air gap patch usage。