K8s:离线部署Kubernetes1.26.12及采用外部Harbor

本文详细介绍了在离线环境下使用KubeKey部署KubeSphere集群的完整流程。主要内容包括:1)在联网服务器下载KubeKey工具、获取镜像列表并构建离线安装包;2)在离线服务器创建配置文件,配置私有镜像仓库信息;3)通过KubeKey命令执行离线安装。

一、离线环境

CPU:Hygon C86 7285 32-core Processor

操作系统:麒麟操作系统

containerd:1.7.27

Harbor:2.13.1

二、一台能上互联网的服务器

2.1、下载KubeKey3.1.10

https://kubernetes.pek3b.qingstor.com/kubekey/releases/download/v3.1.10/kubekey-v3.1.10-linux-amd64.tar.gz

解压后,会有 KubeKey 二进制文件 kk。

#tar -zxvf kubekey-v3.1.10-linux-amd64.tar.gz

2.2、获取kubesphere版本信息及镜像列表

https://get-images.kubesphere.io/

镜像列表文件如下:

|-------------------------|---------------------------------------------------------------------------|
| 文件名 | 描述 |
| kubesphere-images.txt | 包含 KubeSphere 及扩展组件涉及的所有镜像,以及在华为云的镜像地址,可根据该文件中的列表将镜像同步至离线仓库中。 |
| kk-manifest.yaml | 包含 KubeSphere 及扩展组件涉及的所有镜像,可使用 kk 快速构建离线包。 |
| kk-manifest-mirror.yaml | 包含华为云镜像仓库中 KubeSphere 及扩展组件涉及的所有镜像。访问 DockerHub 受限时可使用该 manifest 文件构建离线包。 |

2.3、创建 manifest 文件

chmod +x kk

./kk create manifest --with-kubernetes v1.26.12 --with-registry

使用 kk 离线部署镜像仓库,添加 --with-registry 打包镜像仓库的安装文件

该命令将创建一个 manifest-sample.yaml 文件。

2.4、编辑 manifest 文件

#vi manifest-sample.yaml

复制kk-manifest-mirror.yaml(若访问 DockerHub 受限) 中的镜像列表,添加到新创建的 manifest-sample.yaml 文件中。

apiVersion: kubekey.kubesphere.io/v1alpha2

kind: Manifest

metadata:

name: sample

spec:

arches:

  • amd64

operatingSystems: []

kubernetesDistributions:

  • type: kubernetes

version: v1.26.12

components:

helm:

version: v3.14.3

cni:

version: v1.2.0

etcd:

version: v3.5.13

containerRuntimes:

  • type: docker

version: 24.0.9

  • type: containerd

version: 1.7.13

calicoctl:

version: v3.27.4

crictl:

version: v1.29.0

docker-registry:

version: "2"

harbor:

version: v2.10.1

docker-compose:

version: v2.26.1

images:

ks-corenew

devops

gatekeeper

gateway

grafana

kubeedge

kubefed

loki

metrics-server

network

openpitrix

opensearch

servicemesh

storage-utils

tower

vector

whizard-alerting

whizard-events

whizard-logging

whizard-monitoring

whizard-notification

whizard-telemetry

registry:

auths: {}

2.5、构建离线包

./kk artifact export -m manifest-sample.yaml -o kubesphere.tar.gz

三、一台离线服务器

3.1、依赖项要求

|-------------|------------------------------|-------------------------------|
| 依赖项 | Kubernetes 版本 ≥ 1.18 | Kubernetes 版本 < 1.18 |
| socat | 必须 | 可选,但建议安装 |
| conntrack | 必须 | 可选,但建议安装 |
| ebtables | 可选,但建议安装 | 可选,但建议安装 |
| ipset | 可选,但建议安装 | 可选,但建议安装 |

如何安装socat、conntrack,详见我另外一篇博客《k8s:离线添加集群节点的相关组件安装与升级

将联网主机 上的二个文件同步至离线环境的 master 节点。

kk(KubeKey3.1.10的解压文件)

kubesphere.tar.gz

3.2、创建配置文件config-sample.yaml(私有仓库)

chmod +x kk

./kk create config --with-kubernetes v1.26.12

命令执行完毕后将生成安装配置文件 config-sample.yaml

3.3、编辑config-sample.yaml配置

注:资源有限,仅部署在一台服务器中。

vi config-sample.yaml

apiVersion: kubekey.kubesphere.io/v1alpha2

kind: Cluster

metadata:

name: sample

spec:

hosts:

  • {name: master, address: 172.23.123.117, internalAddress: 172.23.123.117, user: root, password: "@datatom66"}

roleGroups:

etcd:

  • master

control-plane:

  • master

worker:

  • master

controlPlaneEndpoint:

domain: ""

address: "172.23.123.117"

port: 6443

kubernetes:

version: v1.26.12

clusterName: cluster.local

autoRenewCerts: true

containerManager: containerd

etcd:

type: kubekey

network:

plugin: calico

kubePodsCIDR: 10.233.64.0/18

kubeServiceCIDR: 10.233.0.0/18

multusCNI:

enabled: false

registry:

auths:

"172.23.123.117:8443":

username: "admin"

password: "Harbor12345"

privateRegistry: "172.23.123.117:8443"

namespaceOverride: "kubesphereio"

registryMirrors: []

insecureRegistries:

  • "172.23.123.117:8443"

addons: []

        1. spec:hosts 参数下设置各服务器的信息

|-----------------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 描述 |
| name | 用户自定义的服务器名称。 |
| address | 服务器的 SSH 登录 IP 地址。 |
| internalAddress | 服务器在子网内部的 IP 地址。 |
| port | 服务器的 SSH 端口号。如果使用默认端口 22 可不设置此参数。 |
| user | 服务器的 SSH 登录用户名,该用户必须为 root 用户或其他具有 sudo 命令执行权限的用户。如果使用 root 用户可不设置此参数。 |
| password | 服务器的 SSH 登录密码。如果已经设置 privateKeyPath 可不设置此参数。 |
| privateKeyPath | 服务器的 SSH 登录密钥的路径。如果已经设置 password 可不设置此参数。 |
| arch | 服务器的硬件架构。如果服务器的硬件架构为 Arm64,请将此参数设置为 arm64 ,否则请勿设置此参数。安装包默认仅支持所有集群节点都为 x86_64 或 arm64 架构的场景。如果各集群节点的硬件架构不完全相同,请联系 KubeSphere 技术支持团队。 |

        1. spec:roleGroups 参数下设置服务器的角色:

|---------------|------------------------------------------------------------------------------------------------------|
| 参数 | 描述 |
| etcd | 安装 etcd 数据库的节点。请在此参数下设置集群控制平面节点。 |
| control-plane | 集群控制平面节点。如果您已经为集群配置了高可用性,您可以设置多个控制平面节点。 |
| worker | 集群工作节点。 |
| registry | 用于创建私有镜像服务的服务器。该服务器不会用作集群节点。 安装、升级 KubeSphere 时,如果集群节点无法连接互联网,需要在此参数下设置用于创建私有镜像服务的服务器。其他情况下请将此参数注释掉。 |

3.4、将kubesphere.tar.gz的jar推送到harbor

下次再写如何推送jar到harbor库。

3.5、安装 Kubernetes1.26.12

./kk create cluster -f config-sample.yaml -a /app/KubeSphere/setup/kubesphere.tar.gz --with-local-storage

如果显示如下信息,则表明 Kubernetes 集群创建成功。

|--------------|-------------------------------------------------------------------------------------------|-------------------------------------------------|
| 类型 | 命令示例 | 说明 |
| 在线安装 | ./kk create cluster -f config.yaml | 自动从互联网下载 Kubernetes、Docker、KubeSphere 等镜像和二进制文件 |
| 离线安装 | ./kk create cluster -f config-sample.yaml -a /path/to/offline.tar.gz --with-local-storage | 使用本地打包好的离线包(包含所有镜像和组件)进行部署,适用于无公网环境 |

  • KubeKey 会做以下几件事:

解析 kubesphere.tar.gz 中的内容

包含:Kubernetes 各组件镜像、CNI 插件、KubeSphere 组件等

提供部署所需的二进制文件、YAML 模板、Docker 镜像元数据

生成 /etc/kubernetes/manifests/ 下的静态 Pod 文件

如:kube-apiserver.yaml, kube-controller-manager.yaml 等

这些文件依赖于 kubesphere.tar.gz 中的信息

生成集群证书、配置文件、节点配置脚本等

启动 kubelet 并触发控制平面 Pod 被创建

相关推荐
奔波霸的伶俐虫14 分钟前
windows docker desktop 安装修改镜像学习
学习·docker·容器
原神启动116 分钟前
K8S(六)—— 企业级,Rancher安装配置与核心功能实操
容器·kubernetes·rancher
阿杰 AJie17 分钟前
安装 docker.io(不走外网 Docker 域名)
docker·容器·eureka
.hopeful.28 分钟前
Docker——镜像仓库和镜像
运维·docker·容器
m0_4856146732 分钟前
K8S项目生命周期管理
云原生·容器·kubernetes
CodeCaptain37 分钟前
Dify结合vllm-openai docker镜像出现docker: invalid reference format问题的解决方案
运维·docker·容器
LucidX44 分钟前
Kubernetes Pod 详解与Rancher 部署
容器·kubernetes·rancher
星环处相逢1 小时前
从 Pod 核心原理到 Rancher 实战:K8s 容器管理全解析
容器·kubernetes·rancher
伞啊伞1 小时前
k8s(四) Rancher 管理集群
容器·kubernetes·rancher
忍冬行者1 小时前
k8s的etcd的一键备份和故障恢复
docker·云原生·容器·kubernetes·云计算