K8S容器平台离线安装

2022-03-07
2 min read

安装前环境检查

在开始正式安装之前,务必根据您要部署的基础环境查看 环境准备

当安装环境无法访问公网时,安装流程需要在安装前增加 2 个步骤:

1.拷贝离线安装包到安装环境,并解压得到安装目录。

2.向可访问的镜像仓库导入安装包内的离线镜像包。

安装时调整以下 2 个步骤:

1.下载配置文件步骤可直接从本文档中复制内容在本地创建文件。

2.最终使用安装目录内的本地 chart 文件执行 helm 安装。

其他步骤与正常安装相同,文档仅重点介绍导入镜像和从本地 chart 安装步骤。

标记节点角色

1.为所有可用节点打上qfusion/node=标签标记,用于部署产品和调度数据库实例。

kubectl label node [Nodes] qfusion/node=

2.为运行 QFusion 平台管控面组件的节点打上 qfusion/master=true 标签,标记多个节点时将采取高可用部署策略:

kubectl label node [Nodes] qfusion/master=true

创建集群命名空间

登录任意master所在的节点,手动创建平台命名空间,用于部署产品组件,以下步骤假设使用qfusion命名空间:

kubectl create ns qfusion

从3.12.3版本开始,qfusion产品引入Istio实现服务网格,使用前需为qfusion命名空间打上特定标签,否则无法从集群外部访问:

kubectl label ns qfusion qf-istio-discovery=enabled qf-useistio=enabled --overwrite

将安装包拷贝至部署节点,解压进入安装目录

将离线安装包拷贝到作为部署节点的服务器上任意目录,解压安装包,得到docker目录

tar xvf qfusion_release-3.12.7-rds-xxxxx.tar

进入安装目录

cd qfusion_release-3.12.7-rds-xxxxx

配置安装文件

1.生成配置文件:复制如下内容,写入一个空文件,并命名为ext-profile.yaml,保存

# Common
common:
  appConfig:
    config:
      ntpServer: PROFILE_NTP
      cpuOverRate: 2
      memoryOverRate: 1
      clusterForcedAntiAffinity: true
      proxyServiceType: "ClusterIP"
      clusterServiceType: "ClusterIP"

# Storage
csi-localpv:
  enabled: true
  localpv:
    # 卷挂载目录
    iops: 1000000
    storageSize: 100000

vip-allocator:
  enabled: true

# Monitor
monitor:
  sync:
    username: root
    enabled: false
    # 172.16.130.26:22:123456,172.16.130.27:22:123456,172.16.130.25:22:123456
    hosts: "10.10.150.11:22:123456,10.10.150.75:22:123456"
  prometheus:
    nodeExporterPort: "9200"

node-exporter:
  listenPort: "9200"
  • 内容为默认配置,无需更改,可直接使用。

  • 常见的配置项自定义场景如下:

  • 修改CPU超分比,默认为2,对应配置项为cpuOverRate:2。

  • 修改QFusion自带的NodeExporter监控端口,默认使用9200端口,冲突时可修改为其他可用端口,对应配置项为nodeExporterPort:“9200"和listenPort:“9200” 2.基于ext-profile.yaml创建 configmap:

kubectl create cm install-ext-profiles -n qfusion --from-file=external.profile=ext-profile.yaml -o yaml --dry-run=client | kubectl apply -f -

导入本地镜像

  • 该步骤要求客户环境已部署有可访问的镜像仓库服务(也可使用安装包内自带资源临时部署)。

  • 如示例中提供镜像服务的源地址为registry.mirror.com,镜像仓库名为qfusion。镜像服务源地址根据实际情况提供即可,镜像仓库名请固定设置为qfusion。 1.将 installer/roles/kube-install/files/bin/skopeo 二进制文件复制到系统可执行路径中,并赋予可执行权限:

cp installer/roles/kube-install/files/bin/skopeo /usr/bin/skopeo
chmod 755 /usr/bin/skopeo

2.用安装包附带的bin/tarsalt程序对离线镜像资源包registry/images.rds进行解密,得到镜像压缩包images.tar(若压缩包已存在则跳过此步骤):

bin/tarsalt -src-file=registry/images.irds

3.解压安装包registry目录中的images.tar镜像压缩包,得到docker目录

cd registry
tar xvf images.tar

4.将安装包内的镜像资源同步到镜像仓库。执行安装包installer目录中的sync_images.sh脚本,将镜像所在目录和镜像仓库地址作为参数传入:

../installer/sync-images.sh $(pwd)/docker registry.mirror.com/qfusion
  • registry.mirror.com,本地镜像仓库地址(即本地镜像源),根据实际情况调整

  • qfusion:镜像仓库(仓库名称),默认为qfusion 5.* 需要注意的是:当前版本仓库中默认只有mysql5.7的镜像,其它类型数据库镜像,可在部署完成后通过管理平台执行导入。 具体操作:admin用户登录管理平台,左侧菜单——平台管理——数据库镜像——导入镜像。 在联网状态下,开源类数据库可通过推荐url直接导入;对于商业数据库,管理平台页面也提供了镜像制作方法的参考。

从本地 chart 文件安装

切换到安装包 installer 目录执行以下命令:

helm install qfusion qfusion-installer -n qfusion --set global.registry=<registry.mirror.com> --set global.repository=<qfusion>  --set  global.registryUserName=<userName> --set global.registryPassword=<password>  --set nodeLabel=false
  • 添加的 global.registryglobal.repository 选项为安装时使用的镜像源和镜像仓库,需要替换为上文导入镜像步骤中使用的镜像源地址和镜像仓库名。
  • 添加的 global.registryUserNameglobal.registryPassword 选项为远程镜像仓库的用户名与密码
  • 离线安装的版本由qfusion-installer/Chart.yaml文件内容所决定。

注意:

1、需要在所有node节点登录远程镜像仓库

$ docker login -u <username> -p <password>  registry.cn-hangzhou.aliyuncs.com

2、如果遇到已经登录docker仓库,k8s仍提示 repository does not exist or may require' docker login: denied: requested access to the resource is denied,执行如下命令:

$ cp /root/.docker/config.json /var/lib/kubelet/
$ systemctl restart kubelet.service

安装结果检查

1.执行

[root@10-10-150-157 installer]# kubectl get pod -n qfusion
NAME                                 READY   STATUS    RESTARTS   AGE
qfusion-installer-7686fd6cf9-q6xnz   0/1     Pending   0          17m

查看QFusion的pod状态是否就绪,若安装正常,大约5min左右所有pod状态即可为Running或Completed状态。 avatar

安装成功之后即可正常登陆平台,具体操作可参考 申请授权 进行功能使用。

2.如果10分钟以上仍有非Running/非Completed的状态,请联系 在线客服 进行处理。

常见异常状态参考:

Pending(调度失败,资源不足,或者节点存在Pod不能容忍的污点)

Terminating(磁盘空间不足,Dockerd与containerd状态不同步)

CrashLoopBackOff(Pod反复拉起后退出登陆,一般是系统配置问题,比如内存资源不足,系统OOM,cgroup OOM)

OOMKilled(节点内存不足或启动内存有限制)

Evicted(磁盘空间不足)