赞
踩
执行本部署操作文档,请用户知悉如下内容后再操作:
本部署文档所涉及部署物料汇总如下,部署前请提前下载物料,
序号 | 物料名称 | 说明 |
| KylinCloud-SolutionBase-<架构>-<time>.iso | 部署镜像,以发布为准 |
| KylinCloud-SolutionBase-<架构>-<time>.iso.sha256sum | 镜像sha256sum值 |
其他相关物料汇总如下,
序号 | 物料名称 | 物料说明 | 备注 |
| keepalived_virtual_ip | master节点管理网络未使用的ip地址 | 用于做master节点vip高可用 |
2. | redis_virtual_ip | master节点管理网络未使用的ip地址 | 3及3以下节点场景给redis做高可用使用,其它场景不需要 |
chronyd在重启后才会更新时间,要想不重启服务实现同步可以在每个节点的定时任务中添加手动同步命令每分钟同步一次
# vi /etc/crontab # 末尾添加 * * * * * root /usr/local/bin/chronyc -a makestep |
不需要级联用户DNS可以跳过此步骤。
# 在coredns configmap中添加级联信息 # 需要注意代码块中 kubectl edit cm -n kube-system coredns 添加 <domain-postfix>:53 { errors cache 30 forward . <Server-IP> } |
在部署节点(选用master1节点)执行镜像展开操作。
#【master1节点】执行本节操作 # 将ISO镜像拷贝到部署节点,挂载至一个空目录,如 /mnt/solution-base, 以镜像名称 KylinCloud-SolutionBase-amd64-2309191918.iso为例: $ mkdir -p /mnt/solution-base # 执行脚本 expand-mirror 展开镜像, 容器云v3.3底座之后为containerd,镜像仓库导入脚本支持docker和containerd(展开镜像仅针对一种运行时)。 # 容器运行时为containerd时,导入命令为: $ bash expand-mirror --runtime containerd ## 更多帮助 $ bash expand-mirror --help |
在部署节点master1上运行文件服务容器file-server,用于部署外部组件提供yum源等。若不需要使用本地yum源,可以跳过此步骤。
# 根据集群架构版本替换file-server镜像的架构版本。若(uname -m)输出结果为aarch64或arm64则使用arm64架构镜像;若(uname -m)输出结果为x86_64或amd64则使用amd64架构镜像; # 以arm64架构为例: $ nerdctl run -d --name file-server --restart=always --net bridge -p 8080:80 --cni-path /opt/cni/bin/ registry.kylincloud.org:4001/solution/deploy/arm64/file-server:v2.13.7 # 以amd64架构为例: $ nerdctl run -d --name file-server --restart=always --net bridge -p 8080:80 --cni-path /opt/cni/bin/ registry.kylincloud.org:4001/solution/deploy/amd64/file-server:v2.13.7 |
集群所有节点配置file-server的容器服务作为本地yum源,若需要配置则执行如下操作,否则跳过。
配置集群节点本地yum源方法,操作步骤如下。
# 所有节点执行并配置yum配置文件,新增或更新文件/etc/yum.repos.d/kylincloud.repo如下内容, 替换<master1-ip>为master1节点ip地址。 $ cat /etc/yum.repos.d/kylincloud.repo [kylincloud] baseurl = http://<master1-ip>:8080/ enabled = 1 gpgcheck = 0 name = registry.kylincloud.org repo in deploy # 检测yum 可正常访问(系统默认yum源无法访问可设置enabled=0,若需要部署完成恢复即可) $ yum makecache && yum list |
在部署节点master1上运行部署容器kcall-basic,默认为containerd容器运行时。
# 根据集群架构版本替换kcall镜像的架构版本。若(uname -m)输出结果为aarch64或arm64则使用arm64架构镜像;若(uname -m)输出结果为x86_64或amd64则使用amd64架构镜像; # 以arm64架构为例: $ nerdctl run -d --restart always --name kcall-basic --network host -v /root/.ssh:/root/.ssh -v /root/.kube:/root/.kube registry.kylincloud.org:4001/solution/kcall/arm64:kylincloud-v3.3 bash # 以amd64架构为例: $ nerdctl run -d --restart always --name kcall-basic --network host -v /root/.ssh:/root/.ssh -v /root/.kube:/root/.kube registry.kylincloud.org:4001/solution/kcall/amd64:kylincloud-v3.3 bash |
后续部署步骤中,默认均在kcall-basic部署容器中进行。进入容器命名示例如下
# 以容器运行时为containerd时: $ nerdctl exec -ti kcall-basic -- bash |
如下:
# 修改镜像仓库指向,标注部分使用节点具体ip进行替换执行 $ for host in master2IP master3IP node1IP node2IP node3IP ; do ssh root@${host} "sed -i '/registry.kylincloud.org/c\{master1IP} registry.kylincloud.org' /etc/hosts" ;done |
若需要部署集群外部的组件,则配置。否则跳过此步骤
# 检查inventory/inventory.ini文件中的配置,确认deploy的ip地址(默认配置为部署节点,一般选用master节点)、密码无误。,示例如下: $ cd /home/installer/ $ vim inventory/inventory.ini [all] deploy ansible_host=172.20.192.223 ansible_user=root ansible_password=kylincloud@123. |
keepalived服务用于给容器云集群master节点提供高可用vip地址,用户可根据实际需要选择是否部署。
若用户有硬件/软件负载均衡,可选择跳过此步骤。
若用户需要使用keepalived作为master节点vip高可用,可选择部署。
两节点以上场景则可选择安装keepalived组件,配置keepalived操作步骤如下;
# 检查inventory/inventory.ini文件中的配置,确认所有master*的ip地址、密码无误,并确认[k8s-master]分组填入所有master节点,示例如下: $ cd /home/installer/ $ vim inventory/inventory.ini [all] master1 ansible_host=172.20.43.100 ansible_user=root ansible_password=kylincloud@123. master2 ansible_host=172.20.43.101 ansible_user=root ansible_password=kylincloud@123. master3 ansible_host=172.20.43.102 ansible_user=root ansible_password=kylincloud@123. [k8s-master] master1 master2 master3 # 修改inventory/group_vars/all/global.yaml,配置keepalived_virtual_ip值,此ip为部署物料中的keepalived_virtual_ip,示例如下: $ vim inventory/group_vars/all/global.yaml # 此ip为的keepalived_virtual_ip ## Master节点使用的keepalived虚拟ip地址,配置为同一网段未使用的IP keepalived_virtual_ip: 172.20.43.103 |
$ make install-keepalived 如果报错,需解决错误后执行make uninstall-keepalived,再重新make install-keepalived |
若用户有mysql集群,可选择跳过此步骤。
若用户需要将mysql服务,部署在专属的服务器上(至少需要2个节点,支持部支持署1主1从、1主2从模式),可以执行如下部署操作。
若用户需要将mysql服务,部署在容器云集群内(部署1主2从模式),跳过此步骤,根据部署集群内部组件->更新配置->配置mysql步骤操作即可。
配置mysql操作步骤如下,
# 检查inventory/inventory.ini文件中相关的配置,确认mysql1 mysql2 mysql3的ip地址、密码无误,如主机密码带有特殊字符,需使用双引号括起来。示例如下: $ cd /home/installer/ $ vim inventory/inventory.ini # 针对2节点场景(部署1主1从),确定的mysql1, mysql2的ip地址、密码无误,并确认[mysql]分组填入相应节点。示例如下 [all] mysql1 ansible_host=172.20.188.109 ansible_user=root ansible_password=kylincloud@123. mysql2 ansible_host=172.20.188.110 ansible_user=root ansible_password=kylincloud@123. [mysql] mysql1 mysql2 # 针对3节点及3以上节点场景(部署1主2从),确定的mysql1, mysql2,mysql3的ip地址、密码无误,并确认[mysql]分组填入相应节点。示例如下 [all] mysql1 ansible_host=172.20.188.109 ansible_user=root ansible_password=kylincloud@123. mysql2 ansible_host=172.20.188.110 ansible_user=root ansible_password=kylincloud@123. mysql3 ansible_host=172.20.188.111 ansible_user=root ansible_password=kylincloud@123. [mysql] mysql1 mysql2 mysql3 |
$ make install-mysql 如果报错,需解决错误后执行make uninstall-mysql,再重新make install-mysql |
若用户有redis集群,可选择跳过此步骤。
若用户需要将redis服务,部署在专属的服务器上(支持1主1从、1主2从、3主3从集群模式)可以执行如下部署操作。
若用户需要将redis服务,部署在容器云集群内(1主2从哨兵模式),跳过此步骤,根据部署集群内部组件->更新配置->配置redis步骤操作即可。
配置redis操作步骤如下,
## 进入部署脚本目录 $ cd /home/installer/ $ vim inventory/inventory.ini ## 检查inventory/inventory.ini文件中相关的配置; # 针对2节点场景(部署1主1从),确定的redisMaster1 , redisSlave1的ip地址、密码无误,并确认[redis-master]、[redis-slave]分组填入相应节点。示例如下 [all] redisMaster1 ansible_host=172.20.188.112 ansible_user=root ansible_password=kylincloud@123. redisSlave1 ansible_host=172.20.188.115 ansible_user=root ansible_password=kylincloud@123. # 修改分组 [redis-master] redisMaster1 [redis-slave] redisSlave1 # 针对3节点场景(部署1主2从),确定的redisMaster1 , redisSlave1,redisSlave2的ip地址、密码无误,并确认[redis-master]、[redis-slave]分组填入相应节点。示例如下 [all] redisMaster1 ansible_host=172.20.188.112 ansible_user=root ansible_password=kylincloud@123. redisSlave1 ansible_host=172.20.188.115 ansible_user=root ansible_password=kylincloud@123. redisSlave2 ansible_host=172.20.188.116 ansible_user=root ansible_password=kylincloud@123. # 修改分组 [redis-master] redisMaster1 [redis-slave] redisSlave1 redisSlave2 # 针对3节点以上(至少需要6节点,部署3主3从集群版本)场景,确认redisMaster1 redisMaster2 redisMaster3 redisSlave1 redisSlave2 redisSlave3的ip地址、密码无误,并确认[redis-master]、[redis-slave]分组填入相应节点。示例如下: [all] redisMaster1 ansible_host=172.20.188.112 ansible_user=root ansible_password=kylincloud@123. redisMaster2 ansible_host=172.20.188.113 ansible_user=root ansible_password=kylincloud@123. redisMaster3 ansible_host=172.20.188.114 ansible_user=root ansible_password=kylincloud@123. redisSlave1 ansible_host=172.20.188.115 ansible_user=root ansible_password=kylincloud@123. redisSlave2 ansible_host=172.20.188.116 ansible_user=root ansible_password=kylincloud@123. redisSlave3 ansible_host=172.20.188.117 ansible_user=root ansible_password=kylincloud@123. ## 修改Redis用于做探活使用keepalived虚拟机ip地址,命令如下: $ vim inventory/group_vars/all/global.yaml # 针对3节点以下场景,需要添加redis_virtual_ip地址,此ip为部署物料中的redis_virtual_ip,示例如下: redis_virtual_ip: 172.20.42.103 # 针对3节点以上场景,不需要添加redis_virtual_ip地址 |
$ make install-redis 如果报错,需解决错误后执行make uninstall-redis,再重新make install-redis |
若用户有第三方存储卷,如glusterfs/nfs共享存储卷,请确认容器数据使用storageclass挂载方式或hostpath挂载方式(两种方式选择一种即可),否则跳过此步骤。
对于容器云数据使用storageclass方式,需要提前为存储卷创建好storageclass。以便创建pvc时可使用,创建方法略。
对于容器云数据使用hostpath方式,需要集群所有节点上挂载共享存储目录至节点的指定目录,默认为: /opt/glusterfs,安装命令如下:
## 将此挂载写入/etc/fstab文件,命令如下: $ vim /etc/fstab ## 在最后一行添加, 若将服务器172.20.43.75节点上的/opt/nfs目录挂载至本节点/opt/glusterfs目录: ## 172.20.43.75:/opt/nfs /opt/glusterfs nfs defaults 0 0 ## 修改完成后执行命令 $ mount -a ## 测试挂载,无错误信息表示挂载正确 ## 执行检测是否挂载成功 $ mount | grep xxx ## 注意此处共享存储所有节点需要挂载到同一个目录,并记录此目录路径,后续相关配置需要使用,称其为共享存储挂载目录。 |
挂载完成后需配置共享存储卷,配置glusterfs操作如下所示,
# 在master1节点的kcall-basic容器中执行 # 检查inventory/inventory.ini文件中相关的配置,确认deploy的ip地址、密码无误,如主机密码带有特殊字符,需使用双引号括起来。示例如下: $ cd /home/installer/ $ vim inventory/inventory.ini [all] # 需要配置glusterfs共享存储的节点,默认为deploy节点 deploy ansible_host=172.20.188.99 ansible_user=root ansible_password=kylincloud@123. # 修改配置文件完成后,开始配置glusterfs配置 $ make install-glusterfs 如果报错,需解决错误后执行make uninstall-glusterfs,再重新make install-glusterfs |
若用户无第三方共享存储卷,需执行如下操作步骤部署nfs存储卷。部署nfs存储前,需提前准备专属服务器和物理磁盘。
建议将存储卷部署在专属服务器上并准备数据盘,挂载好数据存储卷作为nfs存储后端,配置如下,若无则跳过此步骤。
## 登录部署nfs服务的节点,以磁盘/dev/vdd为例,查询磁盘的uuid $ ls -l /dev/disk/by-uuid/ |grep vdd lrwxrwxrwx 1 root root 9 Sep 13 16:47 80946a0b-3d95-44bc-831c-c4df57d526db -> ../../vdd ## 将此磁盘挂载写入/etc/fstab文件,命令如下: $ vim /etc/fstab ## 在最后一行添加, 若节点本地目录/opt/nfs目录挂载至数据磁盘/dev/vdd: ## UUID=80946a0b-3d95-44bc-831c-c4df57d526db /opt/nfs xfs defaults 0 0 ## 修改完成后执行命令 $ mount -a ## 测试挂载,无错误信息表示挂载正确,执行检测是否挂载成功 $ mount | grep xxx |
在master1节点上,执行nfs存储部署。
# 检查inventory/inventory.ini文件中相关的配置,确认nfs的ip地址、密码无误,如主机密码带有特殊字符,需使用双引号括起来。示例如下: # 进入kcall-basic容器 $ kydocker exec -it kcall-basic bash $ cd /home/installer/ $ vim inventory/inventory.ini [all] # 需要配置nfs存储的节点,默认为nfs节点 nfs ansible_host=172.20.188.112 ansible_user=root ansible_password=kylincloud@123. # 修改配置文件完成后,开始部署nfs存储 $ make install-nfs # 如果报错,需解决错误后执行make uninstall-nfs,再重新make install-nfs # 执行挂载命令后如需要卸载nfs前需要解除所有节点挂载nfs的目录,默认为/opt/glusterfs unmount /opt/glusterfs |
部署内部组件时,容器的数据存储方式支持hostpath(本地存储)和storageclass(pvc存储)两种方式, 需根据部署集群外部组件->配置存储卷的存储方式配置。
使用hostpath存储时,默认将数据存储在/opt/glusterfs路径下。
使用storageclass存储时,默认将数据存储在名称为nfs-storage的存储后端中。并需要提前配置好server地址及path路径。
修改配置文件conf/charts.yaml参数,无特殊要求只需修改nfs.server配置。
# 配置存储类型相关信息 globals: volumeType: "storageclass" # 默认数据存储类型支持hostpath和storageclass,默认storageclass glusterPath: /opt/glusterfs # hostpath存储时,默认存储路径 |
修改配置文件conf/charts.yaml参数如下。
## 修改关于globals部分的配置参数 globals: mysql.type: "external" |
修改配置文件conf/charts.yaml参数如下。
## 修改关于globals部分的配置参数 globals: # 若使用容器云集群内部的mysql,mysql.type配置为"internal",否则配置为"external" mysql.type: "internal" # 若使内部的mysql,可修改如下参数,外部mysql保持默认即可。 mysql.username: "root" # 需要配置访问mysql的用户名,默认即可 mysql.password: "kylincloud@123." # 需要配置访问mysql的用户密码,默认即可 charts: mysql: #默认为3副本,低于3节点场景下设置为实际节点数即可 mysql.replicas: 3 #默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistentVolume.storageClass: nfs-storage #配置sc名称,默认为nfs-storage persistentVolume.size: 10Gi #配置volume大小,默认为10Gi |
容器云集群默认需要部署maxscale组件,对于集群外部和内部mysql,配置maxscale分别如下。
对于外部mysql,修改配置文件conf/charts.yaml参数如下,
# 若使用外部的mysql,需要配置如下数据库配置信息,至少2个实例 globals: #默认为2副本,低于3节点场景下设置为实际节点数即可 replicas: 2 mysql.server[0].name: "server1" mysql.server[0].host: "172.20.192.223" #配置成实际mysql1节点的ip地址。 mysql.server[0].port: "3306" #配置成实际mysql1节点的port端口。 mysql.server[1].name: "server2" mysql.server[1].host: "172.20.192.224" #配置成实际mysql2节点的ip地址。 mysql.server[1].port: "3306" #配置成实际mysql2节点的port端口。 mysql.server[2].name: "server3" #配置名称,存在3个mysql实例则配置,否则删除。 mysql.server[2].host: "172.20.192.225" #配置host,存在3个mysql实例则配置,否则删除。 mysql.server[2].port: "3306" #配置port,存在3个mysql实例则配置,否则删除。 |
对于内部mysql,修改配置文件conf/charts.yaml参数如下。
# 若使用内部的mysql,需要配置如下 globals: #默认为2副本,低于3节点场景下设置为实际节点数即可 replicas: 2 |
修改配置文件conf/charts.yaml参数如下。
#修改globals部分的配置参数 globals: redis.type: "internal" # 若使用外部的redis,redis.type配置为"external",否则默认 |
修改配置文件conf/charts.yaml参数如下。
#修改globals部分的配置参数 globals: redis.type: "internal" # 若使用外部的redis,redis.type配置为"external",否则默认 #修改charts部分的配置参数 charts: redis: sets: #默认为3副本,低于3节点场景下设置为实际节点数即可 replicas: 3 haproxy.replicas: 3 # 默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistentVolume.size: 10Gi #配置volume大小,默认为10Gi persistentVolume.storageClass: nfs-storage #配置sc名称,默认为nfs-storage |
容器云集群默认已部署ingress组件,若需要部署apisix组件,修改配置文件conf/charts.yaml参数如下。
# 修改charts部分内容 charts: #默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistentVolume.size: 10Gi #配置volume大小,默认为10Gi persistentVolume.storageClass: nfs-storage #配置sc名称,默认为nfs-storage #默认为3副本,低于3节点场景下设置为实际节点数即可(建议低于3节点场景etcd副本设为1) apisix.replicaCount: 3 etcd.replicaCount: 3 #默认未开启节点亲和性,这里设置为ture。若实际master节点的hostname与master*格式不一致,请修改apisix.nodeAffinityPreset.values为实际值。 apisix.nodeAffinityPreset.enabled: true apisix.nodeAffinityPreset.key: "kubernetes.io/hostname" apisix.nodeAffinityPreset.values: "{'master1','master2','master3'}" |
4.1.6.配置minio
集群默认要求部署minio,修改配置文件conf/charts.yaml参数配置如下。
# 配置minio组件相关信息,默认apisix容器运行在master节点,若节点的hostname名称与默认格式<master*>不一致,可修改。 charts: #默认为4副本,低于3节点场景下可设置为实际节点数即可 replicas: 4 #默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistence.storageClass: nfs-storage #配置sc名称,默认为nfs-storage persistence.size: 100Gi #配置volume大小,默认为100Gi |
容器云集群支持部署etcd组件供业务使用,需部署则配置,否则跳过。配置文件conf/charts.yaml参数配置如下。
# 配置charts参数 charts: #默认为3副本,低于3节点场景下建议设置为1 replicaCount: 3 #默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistence.storageClassName: nfs-storage #配置sc名称,默认为nfs-storage persistence.size: 8Gi #配置volume大小,默认为8Gi |
容器云集群支持部署kylinsearch组件供业务使用,需部署则配置,否则跳过。配置文件conf/charts.yaml参数配置如下。
# 配置charts参数,需要配置charts.kylinsearch-{curator,master,data,coordinate,ingest}.sets,以配置charts.kylinsearch-curator为例,其他类似 charts: kylinsearch-curator: sets: #默认为2副本,低于3节点场景下建议根据节点数设定 replicas: 2 #默认使用名称为nfs-storage的storageclass,需要配置其他sc则添加/修改如下内容 volumeType: "storageclass" #支持hostpath和storageclass,默认为storageclass persistence.storageClass: nfs-storage #配置sc名称,默认为nfs-storage persistence.size: 8Gi #配置volume大小,默认为8Gi |
更新配置文件,修改需要部署的集群内部组件列表,不修改则默认部署所有组件。修改配置文件则执行如下操作,
# 更新conf/.order.yaml配置文件,需要部署组件则设置enabled为true否则false $ cat conf/.order.yaml order: - name: pre # 基础组件名称 enabled: true # 基础组件启用 succeed: false # 基础组件部署状态 depend: [] # 基础组件依赖 - name: zones enabled: false succeed: false depend: [] - name: apisix enabled: true succeed: false depend: - pre - name: etcd enabled: true succeed: false depend: - pre - name: mysql enabled: true # 外部mysql设置为false succeed: false depend: - pre - name: redis enabled: true # 外部redis设置为false succeed: false depend: - pre - name: minio enabled: true succeed: false depend: - pre - name: kylinsearch-curator enabled: true succeed: false depend: - pre - name: kylinsearch-master enabled: true succeed: false depend: - kylinsearch-curator - name: kylinsearch-data enabled: true succeed: false depend: - kylinsearch-master - name: kylinsearch-coordinate enabled: true succeed: false depend: - kylinsearch-master - name: kylinsearch-ingest enabled: true succeed: false depend: - kylinsearch-master - name: cert-manager enabled: false succeed: false depend: - pre - name: maxscale enabled: true succeed: false depend: - pre |
开始部署容器云应用基础组件,部署操作步骤如下:
# 进入master节点kcall容器执行部署命令 # 部署应用组件pre $ python3 kcall.py basic deploy install pre # 部署所有应用基础组件 $ python3 kcall.py basic deploy install all # 若某个基础组件部署失败,可卸载后再重复部署,如mysql为例 # 卸载单个组件,可支持的组件列表可通过conf/.order.yaml配置文件查看name得到 $ python3 kcall.py basic deploy uninstall mysql # 安装单个组件 $ python3 kcall.py basic deploy install mysql |
等待所有基础组件部署完成。
当所有基础组件及应用组件部署完成后,校验所有pod服务运行正常。
# 查看所有pod状态 kubectl get pods -A -o wide # 查看单个pod状态 kubectl describe pods -n <namespace> <pod-name> # 查看单个pod日志 kubectl logs -n <namespace> <pod-name> |
根据需求选择安装相应的命令工具行,操作命令如下:
# 以master节点为例,安装命令行工具操作命令如下: # 安装etcdctl命令行工具,<pod-name>替换为任意etcd的pod名称 $ kubectl cp -n kube-system <pod-name>:/usr/local/bin/etcdctl /usr/local/bin/etcdctl $ chmod 0755 /usr/local/bin/etcdctl $ etcdctl version # 安装mysql $ yum install -y mariadb # 安装redis-cli $ yum install -y redis # 安装mc $ yum install -y mc |
卸载组件支持所有和单个操作,请谨慎操作。
# 卸载所有基础组件,支持重复卸载 $ python3 kcall.py basic deploy uninstall all # 卸载单个基础组件,更新单个组件名称<module-name>,可支持的组件列表可通过conf/.order.yaml配置文件查看name得到,支持重复卸载 $ python3 kcall.py basic deploy uninstall <module-name> |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。