帮助与文档

我们为你提供丰富、详尽的使用指南以及产品文档

KubeSphere®️(QKE) 用户指南

简介

QKE 服务旨在方便用户在青云平台搭建 KubeSphere 集群。KubeSphere 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,帮助企业轻松应对多租户、工作负载和集群管理、服务与网络管理、应用管理、镜像仓库管理和存储管理等业务场景。

创建 QKE

在青云上,您可以很方便的创建和管理一个 QKE 集群。支持横向在线伸缩,同时具有自我诊断功能,即当系统发现某节点坏死时在控制台显示状态。 另外我们还提供了监控告警等功能来帮助您更好的管理集群。集群将运行于私有网络内,结合青云提供的硬盘,在保障高性能的同时兼顾您的数据安全。

准备工作

为了保障数据安全, QKE 集群需要运行在受管私有网络中。所以在创建一个 QKE 集群之前,需要创建一个 VPC 和一个受管私有网络, 若还未创建请参考创建 VPC创建私有网络。受管私有网络需要加入 VPC,并开启 DHCP 服务(默认开启)。如果 VPC 选择 172.30.0.1/16,那需要修改docker默认网段,避免冲突。

预先创建 API 密钥。

至少有 230GB,14块的硬盘配额。硬盘的类型与 QKE 集群主机类型一致。

当要创建高可用的集群时,需要 1 个负载均衡器配额,1 个防火墙配额。

当要通过 EIP 暴露 KubeSphere Console 时,需要 1 个额外的负载均衡器配额,1 个额外的防火墙配额。

选择基本配置

在创建的对话框中,您需要填写名称 (可选),选择 QKE 版本号以及选择计费方式。

节点资源配置

我们提供了四种默认资源配置组

  • 性能型配置组都是用性能型主机及存储,计算节点标记 Role 为 node_perf。
  • 超高性能型配置组都为超高性能型主机及存储,计算节点标记 Role 为 node_super_perf。
  • 性能型高可用配置组都是用性能型主机及存储,计算节点标记 Role 为 node_perf。
  • 超高性能型高可用配置组都为超高性能型主机及存储,计算节点标记 Role 为 node_super_perf。

用户也可根据自身需求选择自定义方式配置节点,但由于创建挂盘的是和主节点类型一致的,所以,对于有挂盘的资源,请配置正确的调度策略调度到和主节点类型一致的计算节点上,比如:主节点为超高性能型主机,Mysql 使用挂盘,则需调度这个 Pod 到 超高性能型节点。

如选择自定义方式,请根据需要选择 Kubernetes 主节点,性能型节点,超高性能型节点的 CPU、节点配置和数量、下图以主节点为例。集群主机资源类型请保持一致,要么都是性能型,要么都是超高性能型。

网络设置

选择集群主机所在的私网,私网需要在创建集群前准备好。

依赖服务设置

QKE 集群的状态数据默认存储在主节点的 etcd 应用中,同时用户可以选择预先部署 etcd on QingCloud v3.2.24 以上版本,在此处选择其为 QKE 集群的依赖服务,为了便于扩容,推荐添加依赖的 ELK 服务,注意:etcd 集群必须和 QKE 集群在同一 VPC 下。 如果此 VPC 内无可用 etcd 集群,可以在 QKE 创建界面快速创建 etcd 集群。

QKE 集群的日志组件默认存储在集群内置的 ES 应用中,同时用户可以选择预先部署 ELK on QingCloud v5.5.1 以上版本,在此处选择其为 QKE 集群的依赖服务,为了更强性能,推荐添加依赖的 etcd 服务,注意:ELK 集群必须和 QKE 集群在同一 VPC 下。 如果此 VPC 内无可用 ELK 集群,可以在 QKE 创建界面快速创建 ELK 集群。

服务环境参数设置

  • 为了更好地与青云基础设施集成,QKE 需要使用您的 API 密钥来调用 QingCloud IaaS API。请在控制台生成密钥

  • 其他可以设置的参数
    • KubeSphere 控制台 EIP:选择可用 EIP,可通过此 EIP 直接访问 KubeSphere 控制台
    • Pod 网段:Pod IP 地址范围
    • Service 网段:Service IP 地址范围
    • API External Domain:集群的域名
    • 节点端口范围:NodePort 端口范围
    • Max Pods: 每个工作节点(计算节点)上可运行的最大 pod 数量, k8s 官方的每节点推荐 Pod 数 100 个左右
    • 选择网卡插件:支持 Calico 和 Flannel
    • Proxy Mode:Kube Proxy 运行方式,支持 ipvs 和 iptables
    • 主机 hosts 记录:在 Node 中设置 hosts 记录,多条记录用逗号分割
    • Registry mirrors:镜像服务地址,多个记录用空格分割
    • Insecure registry:不安全镜像仓库地址,多个记录用空格分割
    • 私有镜像服务器:配置一个私有镜像服务器
    • 镜像服务器用户名:私有镜像服务器登录用户名
    • 镜像服务器密码:私有镜像服务器登录密码
    • Docker 网桥的 IP 地址和子网掩码:Docker 网桥的 IP 地址和子网掩码
  • 日志和清理设置
    • Kubernetes 日志级别:Kubernetes 的日志级别,数字越大记录越详细,也会占用更多日志空间
    • 日志保留天数:每隔多少日清理日志,0表示不清理日志 (范围: 0 - 30)
    • 设置审计日志规则文件路径:设置审计日志规则文件路径,路径为空不记录审计日志,预置默认审计日志规则文件路径:/etc/kubernetes/audit/default-audit-policy-file.yaml
    • 审计日志保留天数:每隔多少日清理审计日志,0表示不清理审计日志 (范围: 0 - 30)
    • Docker 清理天数:每隔多少日清理 Docker,0表示不清理 Docker 无用数据 (范围: 0 - 30)

创建成功

当 QKE 创建完成之后,您可以查看每个节点的运行状态。当节点的服务状态显示为“正常”状态,表示该节点启动正常。 当每个节点都启动正常后 QKE 集群显示为“活跃”状态,表示您已经可以正常使用 QKE 服务了。

测试 QKE

使用客户端节点

QKE 集群创建完成之后可以进行测试,创建集群大概需要 8 分 30 秒。找到客户端节点,点击 vnc 图标。

使用 root/k8s 登录。首次登录需要修改密码。登录客户端节点后可以通过 ssh 免密登录其他计算节点。

执行

kubectl get pods --all-namespaces

程序返回所有 pod 状态,整个集群工作正常。

使用 QKE

QKE v1.0.0 - KubeSphere Advanced Edition v2.0.1 含有 KubeSphere Advanced Edition v2.0.1 是基于 Kubernetes v1.13.5。 更加详细的说明文档您可以参看 KubeSphere v2.0.1 说明文档

集群创建完成后,确认 KubeSphere 的后端都已正常运行。

# kubectl get po -n kubesphere-system
NAME                                    READY   STATUS    RESTARTS   AGE
ks-account-5b4b4d8866-dcr4m             1/1     Running   0          23h
ks-apigateway-6b5cb7f5f8-r7hzl          1/1     Running   1          23h
ks-apiserver-5d48d99767-wrbxf           1/1     Running   0          23h
ks-console-84c5656f4f-lk8xb             1/1     Running   0          23h
ks-console-84c5656f4f-sqcxv             1/1     Running   4          23h
ks-controller-manager-c7d95d755-vtq48   1/1     Running   7          23h
ks-docs-77c4796dc9-99n9r                1/1     Running   0          23h
openldap-748984454-hsl6n                1/1     Running   0          23h
redis-7569768957-d465k                  1/1     Running   5          23h

访问 KubeSphere 控制台

  • 对于没有设置 “KubeSphere 控制台 EIP” 参数的 QKE 集群

KubeSphere Dashboard 以 NodePort 的形式暴露在端口 30880,您可以在 VPC 上设置端口转发到任一集群节点 (非Client节点) 的此端口来访问 KubeSphere Dashboard。还需要配置的如下图所示。

此示例中,端口是30880,在实际使用中,您需要根据 kubectl get svc -n kubesphere-system ks-console 命令返回结果来查看具体端口号。

如果 VPC 绑定了公网 IP,用户通过公网 IP 访问 KubeSphere Dashboard 还需要配置 VPC 所绑定的防火墙的下行规则,放行通过公网 IP 对 30880 端口的访问。

配置规则保存后,您就可以使用 VPC 的公网 IP 地址来访问 KubeSphere 了,如下图

  • 对于设置 “KubeSphere 控制台 EIP” 参数的 QKE 集群

可在 QingCloud 控制台 QKE 集群详情页的 “KubeSphere 控制台 URL” 标签页找到 KubeSphere 控制台访问 URL。

QKE 详情页

“KubeSphere 控制台 URL” 标签页

可直接单击 URL 访问 KubeSphere 控制台

  • 登录默认账户 使用如下账户信息来登录 KubeSphere, 用户登录后务必修改登录密码!

用户名: admin@kubesphere.io
密码: P@88w0rd

在线伸缩

增加节点

当 QKE 需增加节点以应付应用逐步增多带来的压力,您可以在 QKE 详情页点击“新增节点”按钮,建议新增节点类型与集群主节点类型一致。添加成功详情页会显示服务状态为活跃。

删除节点

当客户端连接并不多的时候您也可以在 QKE 详情页选中需要删除的节点,然后点“删除”按钮删除节点,以节省资源和费用。此操作要保证 QKE 集群内有足够资源容纳迁移的 Pod。

删除节点后挂载存储卷的容器组迁移失败问题解决办法

使用云平台硬盘作为存储服务的有状态副本集的容器组所在节点被删除后,可能会遇到此有状态副本集的容器组无法在其他节点重新创建的问题。要查看集群内被删除容器组挂载存储卷的 volumeattachment 对象是否正常清理,将此 volumeattachment 对象删除后,重新创建的容器组可以正常挂载存储卷。

  • 找到无法重新创建的容器组
    # kubectl get po -n demo-project nginx-perf-7
    NAME           READY   STATUS              RESTARTS   AGE
    nginx-perf-7   0/1     ContainerCreating   0          22h
    
  • 查看容器组无法重新创建的原因,显示挂载存储卷失败
    # kubectl describe po -n demo-project nginx-perf-7
    ...
    Events:
    Type     Reason       Age                  From                 Message
    ----     ------       ----                 ----                 -------
    Warning  FailedMount  51s (x604 over 22h)  kubelet, i-e5ri86tg  Unable to mount volumes for pod "nginx-perf-7_demo-project(087b3391-8990-11e9-9b03-525433ce642d)": timeout expired waiting for volumes to attach or mount for pod "demo-project"/"nginx-perf-7". list of unmounted volumes=[nginx-neonsan-pvc]. list of unattached volumes=[nginx-neonsan-pvc default-token-znp5w]
    
  • 找到未挂载上的存储卷 nginx-neonsan-pvc-nginx-perf-7
    # kubectl get po -n demo-project nginx-perf-7 -oyaml
    ...
    spec:
      volumes:
        - name: nginx-neonsan-pvc
          persistentVolumeClaim:
              claimName: nginx-neonsan-pvc-nginx-perf-7
    ...
    
  • 找到未挂载上的存储卷对应的 PV pvc-93e24c1d88d711e9, 到 QingCloud 控制台查看硬盘名为 pvc-93e24c1d88d711e9 的硬盘应为可用状态。
    # kubectl get pvc nginx-neonsan-pvc-nginx-perf-7 -n demo-project
    NAME                             STATUS   VOLUME                 CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    nginx-neonsan-pvc-nginx-perf-7   Bound    pvc-93e24c1d88d711e9   100Gi      RWO            neonsan        44h
    
  • 找到 PV pvc-93e24c1d88d711e9 对应的 volumeattachment 对象名 csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
    # kubectl get volumeattachment -oyaml|grep pvc-93e24c1d88d711e9 -B 16
      apiVersion: storage.k8s.io/v1
      kind: VolumeAttachment
      metadata:
          creationTimestamp: 2019-06-07T03:52:13Z
          deletionGracePeriodSeconds: 0
          deletionTimestamp: 2019-06-09T00:47:49Z
          finalizers:
          - external-attacher/csi-qingcloud
          name: csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          resourceVersion: "1178846"
          selfLink: /apis/storage.k8s.io/v1/volumeattachments/csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          uid: a21a70df-88d7-11e9-aed1-525433888127
      spec:
          attacher: csi-qingcloud
          nodeName: i-5n8osu8t
          source:
              persistentVolumeName: pvc-93e24c1d88d711e9
    
  • 查看未被正常清理的 volumeattachment 对象, status.detachError 显示 node "XXX" not found
    # kubectl get volumeattachment csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883 -oyaml
      apiVersion: storage.k8s.io/v1
      kind: VolumeAttachment
      metadata:
          creationTimestamp: 2019-06-07T03:52:13Z
          deletionGracePeriodSeconds: 0
          deletionTimestamp: 2019-06-09T00:51:53Z
          finalizers:
          - external-attacher/csi-qingcloud
          name: csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          resourceVersion: "1180401"
          selfLink: /apis/storage.k8s.io/v1/volumeattachments/csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          uid: a21a70df-88d7-11e9-aed1-525433888127
      spec:
          attacher: csi-qingcloud
          nodeName: i-5n8osu8t
          source:
              persistentVolumeName: pvc-93e24c1d88d711e9
      status:
          attached: true
          detachError:
              message: node "i-5n8osu8t" not found
              time: 2019-06-09T00:52:12Z
    
  • 编辑 volumeattachment 对象,删去 finalizers 部分
    # kubectl edit volumeattachment csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883 -oyaml
      apiVersion: storage.k8s.io/v1
      kind: VolumeAttachment
      metadata:
          creationTimestamp: 2019-06-07T03:52:13Z
          deletionGracePeriodSeconds: 0
          deletionTimestamp: 2019-06-09T00:51:53Z
          name: csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          resourceVersion: "1180401"
          selfLink: /apis/storage.k8s.io/v1/volumeattachments/csi-8b2ed050e78ad6f3a5491af35c9351358856ae15cc874262ca0b78a1c332b883
          uid: a21a70df-88d7-11e9-aed1-525433888127
      spec:
          attacher: csi-qingcloud
          nodeName: i-5n8osu8t
          source:
              persistentVolumeName: pvc-93e24c1d88d711e9
    ...
    
  • 观察容器组状态,5 分钟左右可挂载上存储卷,没有其他问题情况下容器组可恢复运行状态
    # kubectl get po -n demo-project nginx-perf-7
    NAME           READY   STATUS    RESTARTS   AGE
    nginx-perf-7   1/1     Running   0          23h
    

垂直扩容

如果需要给节点增强配置或降低配置,可以使用扩容集群的功能。 此操作会造成扩容节点暂时不可用,要保证 QKE 集群内有足够资源容纳迁移的 Pod。

可以在接下来的界面中调整不同角色的容量。

和 QingCloud IaaS 的整合

负载均衡器

QKE v1.0.0 - KubeSphere Advanced Edition v2.0.1 集成了 QingCloud 负载均衡器插件 v1.3.4 支持将 KubeSphere 内部的服务和 QingCloud IaaS 的负载均衡器关联起来,通过负载均衡器将服务暴露给集群外部调用。LB 插件具体用法请参考文档

Service 的 type 设置为 LoadBalancer,然后在 metadata 中增加以下 annotations:

  1. service.beta.kubernetes.io/qingcloud-load-balancer-type ,负载均衡器的承载能力类型,和 create_loadbalancer 接口中的 loadbalancer_type 取值范围相同。
  2. service.beta.kubernetes.io/qingcloud-load-balancer-eip-ids ,负载均衡器上绑定的 EIP ID,最多支持4个,这个 annotation 表示要创建的是 “公网” 类型的负载均衡器。 EIP 必须是可用的 EIP,系统会自动创建负载均衡器。

整体如下面的例子:

  1. QingCloud 控制台创建公网 IP。
  2. 得到公网 IP 的 ID。
  3. 在 KubeSphere Dashboard 创建 LoadBalancer 类型服务。
  4. 通过公网 IP 访问到集群内部服务。

存储

QKE v1.0.0 - KubeSphere Advanced Edition v2.0.1 内置了 QingCloud CSI v0.2.1,可以动态创建基于 QingCloud IaaS 上的硬盘的 PVC,并挂载到 Pod,当 Pod 迁移时,硬盘会自动随着 Pod 迁移到其他主机上。KubeSphere 的存储卷使用方法见文档

使用 NeonSAN 硬盘

在支持 NeonSAN 硬盘的区可以通过 KubeSphere 控制台创建 NeonSAN 存储类型,就可以创建 NeonSAN 存储卷。在有 NeonSAN 的区请使用 NeonSAN 硬盘。

  • admin 账号登录 KubeSphere 控制台,在平台管理 -> 基础设施 -> 存储类型处创建 NeonSAN 存储类型

  • 创建 NeonSAN 硬盘的存储类型参数可以参考 KubeSphere 文档

  • 创建存储卷时”存储卷设置”处的存储类型选择刚刚创建的 “neonsan” 存储类型

  • 创建工作负载挂载 NeonSAN 存储卷

删除 QKE

用户删除集群可以在 APPCenter 集群列表页选中待删除集群,在更多操作中选择删除,可删除 QKE 集群。集群删除后会进入回收站,用户可以到回收站恢复或永久删除集群,回收站中资源保存 2 小时之后会自动永久删除。集群永久删除后用户可手动删除 QKE 集群残留资源,如硬盘、负载均衡器、防火墙。

关于合约价格的说明

QKE 页面上的费用预览计费仅包括集群基础资源费用。QKE 创建时会自动创建的硬盘、负载均衡器,QKE 创建时快速创建的依赖服务、公网 IP 资源费用将会另外计算。使用 QKE 时用户创建的硬盘、负载均衡器、防火墙也将另外计算。

QKE 创建时另外计费资源

资源 个数 说明
硬盘 14 安装 KubeSphere 会自动创建硬盘
负载均衡器 2 高可用集群会自动创建 1 个负载均衡器,KubeSphere 控制台通过公网 IP 暴露会自动创建 1 个负载均衡器
防火墙 2 高可用集群会自动创建 1 个防火墙,KubeSphere 控制台通过公网 IP 暴露会自动创建 1 个防火墙
依赖服务 2 快速创建外接 etcd 会创建 1 个 etcd 集群,快速创建外接 ELK 会创建 1 个 ELK 集群

注意事项

  1. 如果 VPC 选择 172.30.0.1/16,需要修改 Docker 默认网段,避免冲突。
  2. 所有节点的主机资源类型请保持一致,要么都是性能型,要么都是超高性能型。
  3. 添加节点请选择与主节点类型一致的主机。
  4. 由于需要调用 QingCloud IaaS API 以及拉取镜像,请确保集群所在私网能够访问公网(VPC 绑定了公网 IP)。
  5. 私有网络负载均衡器的 vxnet 请选择 QKE 集群所在的 vxnet,不要和 Pod 的 vxnet 混用。
  6. 在有 NeonSAN 的区请配置并使用 NeonSAN 硬盘。
  7. 基础网络部署请将集群缺省防火墙开通 6443 和节点端口范围(默认为 30000-32767)。
  8. 如果删除 QKE 集群,集群将在回收站保留 2 小时,2 小时之后将被永久清理,需要手动删除负载均衡器、VPC 等相关资源。
  9. 更多 Kubernetes 的使用方法请参考 Kubernetes 官方文档