#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程 原创

安逸的鸿蒙客
发布于 2022-6-2 10:49
浏览
0收藏
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访问页面
#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程-鸿蒙开发者社区
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

#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程-鸿蒙开发者社区
检查443端口是否正常
#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程-鸿蒙开发者社区
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

#云原生征文# 使用Kubekey2.1.1离线部署KubeSphere全过程-鸿蒙开发者社区
恭喜,到这里就创建成功了

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的依赖包也都加上进去,
————————————————
【本文正在参加云原生有奖征文活动】

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
标签
已于2022-6-2 10:50:23修改
1
收藏
回复
举报
回复
    相关推荐