#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程 原创
KubeKey v2.0.0 版本新增了清单(manifest)和制品(artifact)的概念,为用户离线部署 Kubernetes 集群提供了一种解决方案。在过去,用户需要准备部署工具,镜像 tar 包和其他相关的二进制文件,每位用户需要部署的 Kubernetes 版本和需要部署的镜像都是不同的。现在使用 kk,用户只需使用清单 manifest 文件来定义将要离线部署的集群环境需要的内容,再通过该 manifest 来导出制品 artifact 文件即可完成准备工作。离线部署时只需要 kk 和 artifact 就可快速、简单的在环境中部署镜像仓库和 Kubernetes 集群。
1、下载kk安装包工具,完成后解压
wget https://github.com/kubesphere/kubekey/releases/download/v2.1.1/kubekey-v2.1.1-linux-amd64.tar.gz
tar -zxvf kubekey-v2.1.1-linux-amd64.tar.gz
2、使用kk来创建一个原生集群
#安装必要组件
yum install conntrack socat -y
export KKZONE=cn
#创建集群
./kk create cluster --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
安装过程省略,默认已经安装成功。
3、安装完成后可以通过30880访问页面
4、基于当前的集群环境导出配置文件manifest
说明:manifest 就是一个描述当前 Kubernetes 集群信息和定义 artifact 制品中需要包含哪些内容的文本文件。目前有两种方式来生成该文件:根据模版手动创建并编写该文件。 使用 kk 命令根据已存在的集群生成该文件。
可以对文件内容进行修改
./kk create manifest
#执行后生成如下的配置文件:manifest-sample.yaml
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Manifest
metadata:
name: sample
spec:
arches:
- amd64
operatingSystems:
- arch: amd64
type: linux
id: centos
version: "7"
osImage: CentOS Linux 7 (Core)
repository:
iso:
localPath:
url:
kubernetesDistributions:
- type: k3s
version: v1.21.4
components:
helm:
version: v3.6.3
cni:
version: v0.9.1
etcd:
version: v3.4.13
containerRuntimes:
- type: containerd
version: 1.6.2
crictl:
version: v1.24.0
# docker-registry:
# version: "2"
harbor:
version: v2.4.1
# docker-compose:
# version: v2.2.2
images:
- docker.io/rancher/coredns-coredns:1.8.3
- registry.cn-beijing.aliyuncs.com/kubesphereio/alertmanager:v0.21.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/cni:v3.20.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4
- registry.cn-beijing.aliyuncs.com/kubesphereio/ks-apiserver:v3.2.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/ks-console:v3.2.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/ks-controller-manager:v3.2.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/ks-installer:v3.2.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/kube-controllers:v3.20.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/kube-rbac-proxy:v0.8.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/kube-state-metrics:v1.9.7
- registry.cn-beijing.aliyuncs.com/kubesphereio/kubectl:v1.21.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/linux-utils:2.10.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/node-exporter:v0.18.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/node:v3.20.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager-operator:v1.4.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/notification-manager:v1.4.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/notification-tenant-sidecar:v3.2.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/pause:3.4.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/pod2daemon-flexvol:v3.20.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-config-reloader:v0.43.2
- registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus-operator:v0.43.2
- registry.cn-beijing.aliyuncs.com/kubesphereio/prometheus:v2.26.0
- registry.cn-beijing.aliyuncs.com/kubesphereio/provisioner-localpv:2.10.1
- registry.cn-beijing.aliyuncs.com/kubesphereio/snapshot-controller:v4.0.0
registry:
auths: {}
• reppostiory 部分需要指定服务器系统的依赖 iso 包,可以直接在 url 中填入对应下载地址或者提前下载 iso 包到本地在 localPath 里填写本地存放路径并删除 url 配置项即可
• 开启 harbor、docker-compose 配置项,为后面通过 KK 自建 harbor 仓库推送镜像使用
• 默认创建的 manifest 里面的镜像列表从 docker.io 获取,建议修改以下示例中的青云仓库中获取镜像
• 可根据实际情况修改 manifest-sample.yaml 文件的内容,用以之后导出期望的 artifact 文件
5、集群中导出制品artifact
说明:制品就是一个根据指定的 manifest 文件内容导出的包含镜像 tar 包和相关二进制文件的 tgz 包。在 kk 初始化镜像仓库、创建集群、添加节点和升级集群的命令中均可指定一个 artifact,kk 将自动解包该 artifact 并将在执行命令时直接使用解包出来的文件。
注意:导出命令会从互联网中下载相应的二进制文件,请确保网络连接正常。
导出命令会根据 manifest 文件中的镜像列表逐个拉取镜像,请确保 kk 的工作节点已安装 containerd 或最低版本为 18.09 的 docker。
kk 会解析镜像列表中的镜像名,若镜像名中的镜像仓库需要鉴权信息,可在 manifest 文件中的 .registry.auths 字段中进行配置。
若需要导出的 artifact 文件中包含操作系统依赖文件(如:conntarck、chrony 等),可在 operationSystem 元素中的 .repostiory.iso.url 中配置相应的 ISO 依赖文件下载地址。
#默认tar包的名字是kubekey-artifact.tar.gz,可通过-o参数自定义包名
$ export KKZONE=cn
$ ./kk artifact export -m manifest-sample.yaml -o kubesphere.tar.gz
在离线环境安装集群
1、将 KK 和制品 artifact 通过 U 盘等介质拷贝至离线环境安装节点
保证kk工具包和生成的制品包可以拷贝到离线安装节点。
2、创建离线集群集群配置文件
./kk create config --with-kubernetes v1.21.5 --with-kubernetes v1.21.5 -f config-sample.yaml
3、修改配置文件
vim config-sample.yaml
说明:按照实际离线环境配置修改节点信息
必须指定 registry 仓库部署节点(因为 KK 部署自建 harbor 仓库需要使用) ,registry 里必须指定 type 类型为 harbor,不配 harbor 的话默认是装的 docker registry
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: node1, address: 192.168.0.5, internalAddress: 192.168.0.5, user: root, password: "CMCC@2022!"}
roleGroups:
etcd:
- node1
control-plane:
- node1
worker:
- node1
registry:
- node1
controlPlaneEndpoint:
# internalLoadbalancer: haproxy
domain: lb.kubesphere.local
address: ""
port: 6443
kubernetes:
version: v1.21.5
clusterName: cluster.local
autoRenewCerts: true
etcd:
type: kubekey
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
## multus support. https://github.com/k8snetworkplumbingwg/multus-cni
multusCNI:
enabled: false
registry:
type: harbor
auths:
"dockerhub.kubekey.local":
username: admin
password: Harbor12345
plainHTTP: false
# 设置集群部署时使用的私有仓库
privateRegistry: "dockerhub.kubekey.local"
namespaceOverride: ""
registryMirrors: []
insecureRegistries: []
addons: []
4、使用kk来安装镜像仓库
说明:
• config-sample.yaml(离线环境集群的配置文件)
• kubesphere.tar.gz(源集群打包出来的 tar 包镜像)
• harbor 安装文件在 /opt/harbor , 如需运维 harbor,可至该录下。
./kk init registry -f config-sample.yaml -a kubesphere.tar.gz
检查443端口是否正常
5、创建Harbor项目(重要)
执行脚本创建harbor项目
curl https://github.com/kubesphere/ks-installer/blob/master/scripts/create_project_harbor.sh
修改脚本配置文件
vim create_project_harbor.sh
url="https://dockerhub.kubekey.local"
user="admin"
passwd="Harbor12345"
harbor_projects=(library
kubesphereio
kubesphere
calico
coredns
openebs
csiplugin
minio
mirrorgooglecontainers
osixia
prom
thanosio
jimmidyson
grafana
elastic
istio
jaegertracing
jenkins
weaveworks
openpitrix
joosthofman
nginxdemos
fluent
kubeedge
)
for project in "${harbor_projects[@]}"; do
echo "creating $project"
curl -u "${user}:${passwd}" -X POST -H "Content-Type: application/json" "${url}/api/v2.0/projects" -d "{ \"project_name\": \"${project}\", \"public\": true}" -k
done
说明:
• 修改 url 的值为 https://dockerhub.kubekey.local
• 需要指定仓库项目名称和镜像列表的项目名称保持一致
• 脚本末尾 curl 命令末尾加上 -k
6、安装kubesphere集群
说明 :
• config-sample.yaml(离线环境集群的配置文件)
• kubesphere.tar.gz(源集群打包出来的 tar 包镜像)
• 指定 k8s 版本、kubepshere 版本
• --with-packages(必须添加否则 ISO 依赖安装失败)
./kk create cluster -f config-sample.yaml -a kubesphere.tar.gz --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
恭喜,到这里就创建成功了
7、查看集群状态
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
注意:本文没有使用iso依赖的方式,会导致找不到conntrack socat 两个组件找不到,需要手动yum安装一下,如果要解决这个问题,可以在制作tar包的时候,把iso的依赖包也都加上进去,
————————————————
【本文正在参加云原生有奖征文活动】