1 - 概览

概览

平台概览页面,可查看TKEStack控制台管理资源的概览。

如下图所示,在【平台管理】页面点击【概览】,此处可以展现:

  1. 平台的资源概览
  2. 集群的资源状态
  3. 快速入口
  4. 实用提示

2 - 集群管理

集群管理

概念

在这里可以管理你的 Kubernetes 集群

img

平台安装之后,可在【平台管理】控制台的【集群管理】中看到 global 集群,如下图所示: Global集群

TKEStack还可以另外新建独立集群以及导入已有集群实现多集群的管理

注意:新建独立集群导入已有集群都属于TKEStack架构中的业务集群

新建独立集群

  1. 登录 TKEStack,右上角会出现当前登录的用户名,示例为admin

  2. 切换至【平台管理】控制台

  3. 在“集群管理”页面中,单击【新建独立集群】,如下图所示:

    新建独立集群

  4. 在“新建独立集群”页面,填写集群的基本信息。新建的集群节点需满足部署环境要求,在满足需求之后,TKEStack的集群添加非常便利。如下图所示,只需填写【集群名称】、【目标机器】、【SSH端口】(默认22)、【密码】,其他保持默认即可添加新的集群。

    注意:若【保存】按钮是灰色,单击页面空白处即可变蓝

    集群基本信息0.png

    • 集群名称: 支持中文,小于60字符即可

    • Kubernetes版本: 选择合适的kubernetes版本,各版本特性对比请查看 Supported Versions of the Kubernetes Documentation建议使用默认值

    • 网卡名称: 可以通过 ifconfig 查看设备的网卡名称,一般默认都是 eth0。但有一些特殊情况:如果非 eth0 一定要填入正确的网卡名称,否则跨设备通信容易出现问题

    • 高可用类型 :高可用 VIP 地址(按需使用

      注意:如果使用高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 脑裂 现象。

      • 不设置:第一台 master 节点的 IP 地址作为 APIServer 地址
    • TKE 提供:用户只需提供高可用的 IP 地址。TKE 部署 Keepalive,配置该 IP 为 Global 集群所有 Master 节点的VIP,以实现 Global 集群和控制台的高可用,此时该 VIP 和所有 Master 节点 IP 地址都是 APIServer 地址

      • 使用已有:对接配置好的外部 LB 实例。VIP 绑定 Global 集群所有 Master 节点的 80(TKEStack 控制台)、443(TKEStack 控制台)、6443(kube-apiserver 端口)、31138(tke-auth-api 端口)端口,同时确保该 VIP 有至少两个 LB 后端(Master 节点),以避免 LB 单后端不可用风险
    • GPU:选择是否安装 GPU 相关依赖。(按需使用

      注意:使用 GPU 首先确保节点有物理 GPU 卡,选择 GPU 类型后,平台将自动为节点安装相应的 GPU 驱动和运行时工具

      • pGPU:平台会自动为集群安装 GPUManager 扩展组件,此时可以给负载分配任意整数张卡
      • vGPU:平台会自动为集群安装 Nvidia-k8s-device-plugin,此时GPU可以被虚拟化,可以给负载分配非整数张GPU卡,例如可以给一个负载分配0.3个GPU
    • 容器网络 :将为集群内容器分配在容器网络地址范围内的 IP 地址,您可以自定义三大私有网段作为容器网络, 根据您选择的集群内服务数量的上限,自动分配适当大小的 CIDR 段用于 kubernetes service;根据您选择 Pod 数量上限/节点,自动为集群内每台云服务器分配一个适当大小的网段用于该主机分配 Pod 的 IP 地址。(建议使用默认值

      • CIDR: 集群内 Sevice、 Pod 等资源所在网段,注意:CIDR不能与目标机器IP段重叠, 否则会造成初始化失败
      • Pod数量上限/节点: 决定分配给每个 Node 的 CIDR 的大小
      • Service数量上限/集群:决定分配给 Sevice 的 CIDR 大小
    • Master :输入目标机器信息后单击保存,若保存按钮是灰色,单击网页空白处即可变蓝

      注意:如果在之前选择了高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 脑裂 现象。

      • 目标机器:Master 节点内网 IP,请配置至少 8 Cores & 16G 内存 及以上的机型,否则会部署失败。注意:如上图所示,如果节点密码一样,这里可以通过英文的分号“;”分隔多个 IP 地址实现快速添加多个节点

      • SSH 端口: 请确保目标机器安全组开放 22 端口和 ICMP 协议,否则无法远程登录和 ping 通云服务器。(建议使用默认值22

      • 主机label:给主机设置 Label,可用于指定容器调度。(按需使用

      • 认证方式:连接目标机器的方式

        • 密码认证
          • 密码:目标机器密码
        • 密钥认证
          • 密码:目标机器密码
          • 证书:目标机器登陆证书
      • GPU: 使用 GPU 机器需提前安装驱动和 runtime。(按需使用

        添加机器:可以通过节点下面的**【添加】**蓝色字体增加不同密码的master节点(**按需添加**)

  5. 提交: 集群信息填写完毕后,【提交】按钮变为可提交状态,单击即可提交。

导入已有集群

  1. 登录 TKEStack
  2. 切换至【平台管理】控制台
  3. 在“集群管理”页面,单击【导入集群】,如下图所示: 导入集群
  4. 在“导入集群”页面,填写被导入的集群信息,如下图所示: 导入集群信息
    • 名称: 被导入集群的名称,最长60字符

    • API Server: 被导入集群的 API Server 的域名或 IP 地址

    • CertFile: 输入被导入集群的 CertFile 文件内容

    • Token: 输入被导入集群创建时的 token 值

      注意:若不清楚集群的这些信息如何获取,可以参照下面导入 TKE/ACK/RKE 的方式导入自己的集群。

  5. 单击最下方 【提交】 按钮

TKEStack 导入腾讯的 TKE 集群

  1. 首先需要在 TKE 控制台所要导入的集群“基本信息”页里开启内/外网访问

    image-20200930154323734

  2. APIServer 地址:即上图中的访问地址,也可以根据上图中 kubeconfig 文件里的“server”字段内容填写。

  3. CertFile:集群证书,kubeconfig 中“certificate-authority-data”字段内容。

  4. Token:由于目前 TKE 没有自动创建具有 admin 权限的 token,这里需要手动创建,具体方式如下:

    1. 生成 kubernetes 集群最高权限 admin 用户的 token

      cat <<EOF | kubectl apply -f -
      kind: ClusterRoleBinding
      apiVersion: rbac.authorization.k8s.io/v1beta1
      metadata:
        name: admin
        annotations:
          rbac.authorization.kubernetes.io/autoupdate: "true"
      roleRef:
        kind: ClusterRole
        name: cluster-admin
        apiGroup: rbac.authorization.k8s.io
      subjects:
      - kind: ServiceAccount
        name: admin
        namespace: kube-system
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: admin
        namespace: kube-system
        labels:
          kubernetes.io/cluster-service: "true"
          addonmanager.kubernetes.io/mode: Reconcile
      EOF
      
    2. 创建完成后获取 secret 中 token 的值

      # 获取admin-token的secret名字
      $ kubectl -n kube-system get secret|grep admin-token
      admin-token-nwphb                          kubernetes.io/service-account-token   3         6m
      # 获取token的值
      $ kubectl -n kube-system describe secret admin-token-nwphb | grep token
      Name:         admin-token-w4wcd
      Type:  kubernetes.io/service-account-token
      token:            非常长的字符串
      

TKEStack 中导入 Rancher 的 RKE 集群

特别注意:RKE 集群的 kubeconfig 中 clusters 字段里面的第一个 cluster 一般都是 Rancher 平台,而不是 RKE 集群。输入以下信息时,要确定选择正确的集群。

  1. 获取 RKE 的 kubeconfig 文件

  2. APIServer 地址:获取文件里面的“cluster”字段下“server”的内容。注意是引号里的全部内容

  3. CertFile:集群证书,在上面的“server”地址的正下方,有集群证书字段“certificate-authority-data”。

    注意,Rancher 的 kubeconfig 这里的字段内容默认有“\”换行符,需要手动把内容里的换行符和空格全部去除。

  4. Token:在“user”字段里面拥有用户的 token

TKEStack 中导入阿里的 ACK 集群

  1. 和 TKE 一样,需要获取开启外网访问的 ACK 的 kubeconfig 文件
  2. APIServer 地址:获取文件里面的“cluster”字段下“server”的内容
  3. CertFile:集群证书,在上面的“server”地址正下方有集群证书字段“certificate-authority-data”
  4. Token:获取方式同 TKE,需要手动创建

对集群的操作

基本信息

  1. 登录 TKEStack

  2. 切换至【平台管理】控制台

  3. 在“集群管理”页面中,点击要操作的集群ID,如下图“global”所示:

    Global集群

  4. 点击【基本信息】,可查看集群基础信息

    1. 基本信息
      1. 集群名称:用户自定义,可以通过第3步“集群列表页”中 “ID/名称” 下的笔型图案修改
      2. 集群 ID :TKEStack 自动给每个集群一个唯一的 ID 标识符
      3. 状态:集群运行状态,Running 表示正常运行
      4. Kubernetes 版本:当前集群的 Kubernetes 版本
      5. 网卡名称:当前集群的网卡名称,默认为 eth0
      6. 容器网络:当前集群的容器网络
      7. 集群凭证:可以在本地配置 Kubectl 连接 当前 Kubernetes 集群
      8. 超售比:Kubernetes 对象在申请资源时,如果申请总额大于硬件配置,则无法申请,但是很多时候部分对象并没有占用这么多资源,因此可以设置超售比来扩大资源申请总额,以提高硬件资源利用率
      9. 创建时间:当前集群的创建时间
    2. 组件信息:这里可以开启或关闭集群的 日志采集 和 监控告警 功能
      1. 监控告警:通过在集群安装 prometheus 实现,可以在【监控&告警】下的【告警设置】进一步设置
      2. 日志采集:通过在集群安装 logagent 实现,可以在【运维中心】下的【日志采集】进一步设置

节点管理

节点是容器集群组成的基本元素。节点取决于业务,既可以是虚拟机,也可以是物理机。每个节点都包含运行 Pod 所需要的基本组件,包括 Kubelet、Kube-proxy 等。

添加节点

  1. 登录 TKEStack

  2. 切换至【平台管理】控制台

  3. 在“集群管理”页面中,点击要操作的集群ID,如下图“global”所示:

    Global集群

  4. 点击【节点管理】中的【节点】,可查看当前集群的“节点列表”

  5. 点击蓝色【添加节点】按钮可增加当前集群的 Worker 节点

    1. 目标机器:建议内网地址,要求添加的节点和当前集群的其他机器在同一内网。注意:如果节点密码一样,这里可以通过英文的分号“;”分隔多个 IP 地址实现快速添加多个节点
    2. SSH端口:默认 22
    3. 主机label:按需添加,给主机设置 Label,可用于指定容器调度
    4. 认证方式:连接目标机器的方式,根据实际情况设置
    5. 用户名:默认 root
    6. 密码:目标机器用户名为 root 的密码
    7. GPU:按需选择,使用 GPU 机器需提前安装驱动和 runtime
    8. 添加机器:可以通过节点下面的**【添加】**蓝色字体增加不同密码的节点(按需添加)

节点监控

点击上图中的蓝色【监控】按钮可监控节点,可以从Pod、CPU、内存、硬盘、网络等维度监控。

前提:在集群的 基本信息 页里开启了 监控告警

节点操作

对节点的可以的操作如下图所示:

  1. 移出:仅针对 worker 节点,将节点移出集群

  2. 驱逐:节点驱逐后,将会把节点内的所有 Pod(不包含 DaemonSet 管理的 Pod)从节点中驱逐到集群内其他节点,并将节点设置为封锁状态

    注意:本地存储的 Pod 被驱逐后数据将丢失,请谨慎操作

  3. 编辑标签:编辑节点标签

  4. 编辑 Taint:编辑 Taint 后,新的 pod 不能被调度到该节点,但可以通过编辑 pod 的 toleration 使其可以调度到具有匹配的 taint 节点上

  5. 封锁:封锁节点后,将不接受新的Pod调度到该节点,需要手动取消封锁的节点

节点 Pod 管理

点击其中一个节点名,例如上图中的【172.19.0.154】,可以看到该节点更多的信息,具体包括:

  1. Pod 管理:可查看当前节点下的 pod
    1. 销毁重建:销毁该 pod,重新新建该 pod
    2. 远程登录:登录到该 pod 里
  2. 事件:关于该节点上资源的事件,资源事件只在 ETCD 里保存最近1小时内发生的事件,请尽快查阅
  3. 详情:包括节点主机信息以及 Kubernetes 信息
  4. YAML:此处可以查看节点的 YAML 文件,点击【编辑YAML】可以手动修改节点的 YAML 文件

其他操作

注意:由于【平台管理】控制台下对集群的大多数操作与【业务管理】控制台完全一致,因此除了集群的【基本信息】和【节点管理】之外,其他栏目(包括 命名空间、负载、服务、配置、存储、日志、事件)请参考【业务管理】控制台下【应用管理】的相应部分。

3 - 业务管理

业务管理

概念

在这里用户可以管理线上业务。

操作步骤

新建业务

注:业务可以实现跨集群资源的使用

  1. 登录 TKEStack。

  2. 在【平台管理】控制台的【业务管理】中,单击 【新建业务】。如下图所示:

    新建业务

  3. 在“新建业务”页面,填写业务信息。如下图所示: 业务信息

  4. 业务名称:不能超过63个字符,这里以my-business为例

  5. 业务成员【访问管理】中【用户管理】中的用户,这里以admin例,即该用户可以访问这个业务。

  6. 集群

    • 【集群管理】中的集群,这里以gobal集群为例
    • 【填写资源限制】可以设置当前业务使用该集群的资源上限(可不限制)
    • 【新增集群】可以添加多个集群,此业务可以使用多个集群的资源(按需添加)
  7. 上级业务:支持多级业务管理,按需选择(可不选)

  8. 单击最下方 【完成】 按钮即可创建业务。

添加业务成员

  1. 登录 TKEStack。

  2. 切换至 【平台管理】控制台,点击【业务管理】。

  3. 在“业务管理”页面中,可以看到已创建的业务列表。鼠标移动到要修改的业务上(无需点击),成员列会出现修改图标按钮。如下图所示: 修改图标按钮

    注意:修改业务成员仅限状态为Active的业务,这里可以新建和删除成员。

查看业务监控

  1. 登录 TKEStack。

  2. 切换至 【管理】控制台,点击【业务管理】。

  3. 在“业务管理”页面中,可以看到已创建的业务列表。点击监控按钮,如下图所示:

    监控按钮

  4. 在右侧弹出窗口里查看业务监控情况,如下图所示:

    业务监控详情

删除业务

  1. 登录 TKEStack。

  2. 切换至 【平台管理】控制台,点击【业务管理】。

  3. 在“业务管理”页面中,可以看到已创建的业务列表。点击删除按钮,如下图所示:

    删除业务

    注意:删除业务成员仅限状态为Active的业务

对业务的操作

  1. 登录 TKEStack。

  2. 在【平台管理】控制台的【业务管理】中,单击【业务id】。如下图所示: 业务id

    a. 业务信息: 在这里可以对业务名称、关联的集群、关联集群的资源进行限制等操作。

    业务信息

    b. 成员列表: 在这里可以对业务名称、关联的集群、关联集群的资源进行限制等操作。

    业务信息

    c. 子业务: 在这里可以新建本业务的子业务通过导入子业务将已有业务变成本业务的子业务

    业务信息

    d. 业务下Namespace列表: 这里可以管理业务下的Namespace

    业务信息

    ​ 单击【新建Namespace】。在“新建Namespace”页面中,填写相关信息。如下图所示:

    新建空间列表

    名称:不能超过63个字符,这里以new-ns为例

    集群my-business业务中的集群,这里以global集群为例

    资源限制*:这里可以限制当前命名空间下各种资源的使用量,可以不设置。

4 - 扩展组件

扩展组件

扩展组件

概念

这里用户可以管理集群扩展组件。

操作步骤

创建组件

  • 登录 TKEStack。
  • 切换至 【平台管理】控制台,选择【扩展组件】页面。
  • 选择需要安装组件的集群,点击【新建】按钮。如下图所示:

新建组件

注意:此页面右边的【删除】按钮可以删除安装了的组件

  • 在弹出的扩展组件列表里,选择要安装的组件。如下图所示:

选择扩展组件

注意:如果选择的是PersistentEvent,需要在下方输入地址和索引。

  • 单击【完成】。

4.1 - TApp 介绍

TApp 介绍

TApp 介绍

Kubernetes 现有应用类型(如:Deployment、StatefulSet等)无法满足很多非微服务应用的需求。比如:操作(升级、停止等)应用中的指定 Pod;应用支持多版本的 Pod。如果要将这些应用改造为适合于这些 Workload 的应用,需要花费很大精力,这将使大多数用户望而却步。

为解决上述复杂应用管理场景,TKEStack 基于 Kubernetes CRD 开发了一种新的应用类型 TApp,它是一种通用类型的 Workload,同时支持 service 和 batch 类型作业,满足绝大部分应用场景,它能让用户更好的将应用迁移到 Kubernetes 集群。

TApp 架构

TAPP 其结构定义见 TAPP struct。TApp Controller 是 TApp 对应的Controller/operator,它通过 kube-apiserver 监听 TApp、Pod 相关的事件,根据 TApp 的 spec 和 status 进行相应的操作:创建、删除pod等。

TApp 使用场景

Kubernetes 凭借其强大的声明式 API、丰富的特性和可扩展性,逐渐成为容器编排领域的霸主。越来越多的用户希望使用 Kubernetes,将现有的应用迁移到 Kubernetes 集群,但 Kubernetes 现有 Workload(如:DeploymentStatefulSet等)无法满足很多非微服务应用的需求,比如:操作(升级、停止等)应用中的指定 Pod、应用支持多版本的 Pod。如果要将这些应用改造为适合于这些 Workload的应用,需要花费很大精力,这将使大多数用户望而却步。

腾讯有着多年的容器编排经验,基于 Kuberentes CRD(Custom Resource Definition,使用声明式API方式,无侵入性,使用简单)开发了一种新的 Workload 类型 TApp,它是一种通用类型的 Workload,同时支持 service 和 batch 类型作业,满足绝大部分应用场景,它能让用户更好的将应用迁移到 Kubernetes 集群。如果用 Kubernetes 的 Workload 类比,TAPP ≈ Deployment + StatefulSet + Job ,它包含了 Deployment、StatefulSet、Job 的绝大部分功能,同时也有自己的特性,并且和原生 Kubernetes 相同的使用方式完全一致。经过这几年用户反馈, TApp 也得到了逐渐的完善。

TApp 特点

  1. 同时支持 service 和 batch 类型作业。通过 RestartPolicy 来对这两种作业进行区分。RestartPolicy值有三种:RestartAlways、Never、OnFailure
    1. RestartAlways:表示 Pod 会一直运行,如果结束了也会被重新拉起(适合 service 类型作业)
    2. Never:表示 Pod 结束后就不会被拉起了(适合 batch 类型作业)
    3. OnFailure:表示 Pod 结束后,如果 exit code 非0,将会被拉起,否则不会(适合 batch 类型作业)
  2. 固定ID:每个实例(Pod)都有固定的 ID(0, 1, 2 … N-1,其中N为实例个数),它们的名字由 TApp 名字+ID 组成,因此名字也是唯一的。 有了固定的ID和名字后,我们便可以实现如下能力:
    1. 将实例用到的各种资源(将实例用到的存储资源(如:云硬盘),或者是IP)和实例一一对应起来,这样即使实例发生迁移,实例对应的各种资源也不会变
    2. 通过固定 ID,我们可以为实例分配固定的 IP(float ip)。
    3. 唯一的实例名字还可用来跟踪实例完整的生命周期,对于同一个实例,可以由于机器故障发生了迁移、重启等操作,虽然不是一个 Pod 了,但是我们用实例 ID 串联起来,就获得了实例真正的生命周期的跟踪,对于判断业务和系统是否正常服务具有特别重要的意义
  3. 操作指定实例:有了固定的 ID,我们就能操作指定实例。我们遵循了 Kubernetes 声明式的 API,在 spec 中 statuses 记录实例的目标状态, instances 记录实例要使用的 template,用于停止、启动、升级指定实例。
  4. 支持多版本实例:在 TApp spec 中,不同的实例可以指定不同的配置(image、resource 等)、不同的启动命令等,这样一个应用可以存在多个版本实例。
  5. 原地更新(in place update):Kubernetes 的更新策略是删除旧 Pod,新建一个 Pod,然后调度等一系列流程,才能运行起来,而且 Pod原先的绑定的资源(本地磁盘、IP 等)都会变化。TApp 对此进行了优化:如果只修改了 container 的 image,TApp 将会对该 Pod 进行本地更新,原地重启受影响的容器,本地磁盘不变,IP 不变,最大限度地降低更新带来的影响,这能极大地减少更新带来的性能损失以及服务不可用。
  6. 云硬盘:云硬盘的底层由分布式存储 Ceph 支持,能很好地支持有状态的作业。在实例发生跨机迁移时,云硬盘能跟随实例一起迁移。TApp 提供了多种云硬盘类型供选择。
  7. 多种升级发布方式:TApp除了支持常规的蓝绿布署、滚动发布、金丝雀部署等升级发布方式,还有其特有的升级发布方式:用户可以指定升级任意的实例。
  8. 自动扩缩容:根据 CPU/MEM/用户自定义指标对 TAPP 进行自动扩缩容。 除了自动扩缩容,我们还开发了周期性扩缩容 CronHPA 支持对 TApp 等(包括 Kubernetes 原生的 Deployment 和 StatefulSet)进行周期性扩缩容,支持 CronTab 语法格式,满足对资源使用有周期性需求的业务。
  9. Gang scheduling:有些应用必须要等到获取到资源能运行的实例达到一定数量后才开始运行,TApp 提供的 Gang scheduling 正是处理这种情况的。

部署在集群内 kubernetes 对象

在集群内部署 TApp Add-on , 将在集群内部署以下 kubernetes 对象

kubernetes 对象名称类型默认占用资源所属Namespaces
tapp-controllerDeployment每节点1核CPU, 512MB内存kube-system
tapps.apps.tkestack.ioCustomResourceDefinition//
tapp-controllerServiceAccount/kube-system
tapp-controllerService/kube-system
tapp-controllerClusterRoleBinding(ClusterRole/cluster-admin)//

TApp 使用方法

安装 TApp 组件

  • 登录 TKEStack
  • 切换至 平台管理 控制台,选择扩展组件页面
  • 选择需要安装组件的集群,点击【新建】按钮。如下图所示:

  • 在弹出的扩展组件列表里,滑动列表窗口找到tapp组件。如下图所示:

  • 单击【完成】

    安装完成后会在刚刚安装了 TApp 扩展组件的集群里 【工作负载】下面出现【TApp】,如下图所示:

使用 TApp 组件

在 TKEStack 控制台上使用 TApp 使用请参考:TApp Workload

对 TApp 架构和命令行使用请参考:TApp Repository

参考

手动部署 TApp

git clone https://github.com/tkestack/tapp.git
cd tapp
make build
bin/tapp-controller --kubeconfig=$HOME/.kube/config

原地升级

修改 spec.templatePool.{templateName}.spec.containers.image 的值实现原地升级。

挂在存储卷后的 Pod 依旧在 image 升级的时候没有任何影响,同时 PVC 也没有改变,唯一改变的只有镜像本身。

部分关键字解释

关键字作用
spec.templatePool模版池
spec.templates以键值对(Pod 序号:模板池中的模板名)的形式具体声明每一个 Pod 的状态
spec.template 等价于 spec.DefaultTemplateName默认模板(在spec.templates中没有定义的 Pod 序号将使用该模板)
updateStrategy.inPlaceUpdateStrategy原地升级策略
spec.updateStrategy保留旧版本 Pod 的数量,默认为 0,类似于灰度发布
spec.updateStrategy.template要设置 maxUnavailable 值的 template 名
spec.updateStrategy.maxUnavailable最大的不可用 Pod 数量(默认为1,可设置成一个自然数,或者一个百分比,例如 50%)
spec.statuses明确 Pod 的状态,TApp 会实现该状态
apiVersion: apps.tkestack.io/v1
kind: TApp
metadata:
  name: example-tapp
spec:
  replicas: 3
  # 默认模板
  template:
    metadata:
      labels:
        app: example-tapp
    spec:
      containers:
      - name: nginx
        image: nginx:latest
  # 模板池
  templatePool:
  	# 模板池中的模板
    "test2":
      metadata:
        labels:
          app: example-tapp
      spec:
        containers:
        - name: nginx
          image: nginx:1.7.9
  # 要使用模板池中模板的 Pod
  templates:
    # Pod 序号:模板池中的模板
    "1": "test2"
    "2": "test2"
  # 更新策略
  updateStrategy:
    # 更新指定模板。test2该模板有过修改,或者是在模板池里新增的,都可以通过 updateStrategy 设置模板来进行滚动更新
    template: test2
    # 使用该模板的 Pod 在更新时最大不可用的数量
    maxUnavailable: 1
  # 明确 Pod 的状态,TApp 会实现该状态
  statuses:
    # 编号为1的 Pod 将被 Kill
    "1": "Killed"

4.2 - CronHPA 介绍

CronHPA 介绍

CronHPA 介绍

Cron Horizontal Pod Autoscaler(CronHPA) 可让用户利用 CronTab 实现对负载(Deployment、StatefulSet、TApp 这些支持扩缩容的资源对象)定期自动扩缩容

CronTab 格式说明如下:

# 文件格式说明
#  ——分钟(0 - 59)
# |  ——小时(0 - 23)
# | |  ——日(1 - 31)
# | | |  ——月(1 - 12)
# | | | |  ——星期(0 - 6)
# | | | | |
# * * * * *

CronHPA 定义了一个新的 CRD,cron-hpa-controller 是该 CRD 对应的 Controller/operator,它解析 CRD 中的配置,根据系统时间信息对相应的工作负载进行扩缩容操作。

CronHPA 使用场景

以游戏服务为例,从星期五晚上到星期日晚上,游戏玩家数量暴增。如果可以将游戏服务器在星期五晚上扩大规模,并在星期日晚上缩放为原始规模,则可以为玩家提供更好的体验。这就是游戏服务器管理员每周要做的事情。

其他一些服务也会存在类似的情况,这些产品使用情况会定期出现高峰和低谷。CronHPA 可以自动化实现提前扩缩 Pod,为用户提供更好的体验。

部署在集群内 kubernetes 对象

在集群内部署 CronHPA Add-on , 将在集群内部署以下 kubernetes 对象:

kubernetes 对象名称类型默认占用资源所属 Namespaces
cron-hpa-controllerDeployment每节点1核 CPU, 512MB内存kube-system
cronhpas.extensions.tkestack.ioCustomResourceDefinition//
cron-hpa-controllerClusterRoleBinding(ClusterRole/cluster-admin)//
cron-hpa-controllerServiceAccount/kube-system

CronHPA 使用方法

安装 CronHPA

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【扩展组件】页面
  • 选择需要安装组件的集群,点击【新建】按钮,如下图所示:

  • 在弹出的扩展组件列表里,滑动列表窗口找到 CronHPA 组件
  • 单击【完成】

在控制台上使用 CronHPA

TKEStack 已经支持在页面多处位置为负载配置 CronHPA

  • 新建负载页(负载包括Deployment、StatefulSet、TApp)这里新建负载时将会同时新建与负载同名的 CronHPA 对象:

每条触发策略由两条字段组成

  1. Crontab :例如 “0 23 * * 5"表示每周五23:00,详见crontab
  2. 目标实例数 :设置实例数量
  • 自动伸缩的 CronHPA 列表页。此处可以查看/修改/新建 CronHPA:

通过 YAML 使用 CronHPA

创建 CronHPA 对象

示例1:指定 Deployment 每周五20点扩容到60个实例,周日23点缩容到30个实例

apiVersion: extensions.tkestack.io/v1
kind: CronHPA
metadata:
  name: example-cron-hpa	# CronHPA 名
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment	# CronHPA 操作的负载类型
    name: demo-deployment	# CronHPA 操作的负载类型名
  crons:
    - schedule: "0 20 * * 5"	# Crontab 语法格式
      targetReplicas: 60			# 负载副本(Pod)的目标数量
    - schedule: "0 23 * * 7"
      targetReplicas: 30

示例2:指定 Deployment 每天8点到9点,19点到21点扩容到60,其他时间点恢复到10

apiVersion: extensions.tkestack.io/v1
kind: CronHPA
metadata:
  name: web-servers-cronhpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-servers
  crons:
    - schedule: "0 8 * * *"
      targetReplicas: 60
    - schedule: "0 9 * * *"
      targetReplicas: 10
    - schedule: "0 19 * * *"
      targetReplicas: 60
    - schedule: "0 21 * * *"
      targetReplicas: 10

查看已有 CronHPA

# kubectl get cronhpa
NAME               AGE
example-cron-hpa   104s

# kubectl get cronhpa example-cron-hpa -o yaml
apiVersion: extensions.tkestack.io/v1
kind: CronHPA
...
spec:
  crons:
  - schedule: 0 20 * * 5
    targetReplicas: 60
  - schedule: 0 23 * * 7
    targetReplicas: 30
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: demo-deployment

删除已有 CronHPA

kubectl delete cronhpa example-cron-hpa

CronHPA 项目请参考 CronHPA Repository

4.3 - 监控组件

监控组件

Prometheus

良好的监控环境为 TKEStack 高可靠性、高可用性和高性能提供重要保证。您可以方便为不同资源收集不同维度的监控数据,能方便掌握资源的使用状况,轻松定位故障。

TKEStack 使用开源的 Prometheus 作为监控组件,免去您部署和配置 Prometheus 的复杂操作,TKEStack 提供高可用性和可扩展性的细粒度监控系统,实时监控 CPU,GPU,内存,显存,网络带宽,磁盘 IO 等多种指标并自动绘制趋势曲线,帮助运维人员全维度的掌握平台运行状态。

TKEStack 使用 Prometheus 的架构和原理可以参考 Prometheus 组件

指标具体含义可参考:监控 & 告警指标列表

TKEStack 通过 Prometheus 组件监控集群状态,Prometheus 组件通过 addon 扩展组件自动完成安装和配置,使用 InfluxDB,ElasticSearch 等存储监控数据。监控数据和指标融入到平台界面中以风格统一图表的风格展示,支持以不同时间,粒度等条件,查询集群,节点,业务,Workload 以及容器等多个层级的监控数据,全维度的掌握平台运行状态。

同时针对在可用性和可扩展性方面,支持使用 Thanos 架构提供可靠的细粒度监控和警报服务,构建具有高可用性和可扩展性的细粒度监控能力。

安装 Prometheus

Prometheus 为 TKEStack 扩展组件,需要在集群的 【基本信息】 页下面开启 “监控告警”。

集群监控

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【集群管理】
  • 点击【监控】图标,如下图所示:

  • 监控数据展示
  • 通过下图中的1可以选择监控数据时间段
  • 通过下图中的2可以选择统计粒度,以下图中“APIServer时延”为例,下图中的每个数据表示前1分钟“APIServer时延”平均数

  • 上下滑动曲线图可以获得更多监控指标
  • 点击曲线图,会弹出具体时间点的具体监控数据

指标具体含义可参考:监控 & 告警指标列表

节点监控

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【集群管理】
  • 点击【集群 ID】 -> 【节点管理】->【节点】->【监控】图标,如下图所示:

  • 具体查看方式和集群监控完全一致

    指标具体含义可参考:监控 & 告警指标列表

  • 此处还可以查看节点下的 Pod 监控

    1. 如下图所示,对比维度可选择 节点 或 Pod
    2. 选择 Pod ,需要在其右侧选择 Pod 所属节点

节点下的 Pod & Container 监控

有两种方式

  • 节点监控 下选择 Pod 进行监控
  • 在节点列表里,点击节点名,进入节点的 Pod 管理页,如下图所示,点击上方的【监控】按钮,实现对节点下的 Pod 监控

注意:此处还可以查看节点下的 Container 监控

  1. 如下图所示,对比维度可选择 Pod 或 Container
  2. 选择 Container ,需要在其右侧选择 Container 所属 Pod

指标具体含义可参考:监控 & 告警指标列表

负载监控

  • 登录 TKEStack

  • 切换至【平台管理】控制台,选择【集群管理】

  • 点击【集群 ID】 -> 【工作负载】->【选择一种负载,例如 Deployment】->【监控】图标,如下图所示:

  • 具体查看方式和集群监控完全一致

    指标具体含义可参考:监控 & 告警指标列表

负载下 Pod & Container 监控

  1. 登录 TKEStack
  2. 切换至【平台管理】控制台,选择【集群管理】
  3. 点击【集群 ID】 -> 【工作负载】->【选择一种负载】,例如 Deployment】->【点击一个负载名】->【监控】图标,如下图所示:

注意:此处还可以查看负载下的 Container 监控

  1. 如下图所示,对比维度可选择 Pod 或 Container
  2. 选择 Container ,需要在其右侧选择 Container 所属 Pod 指标具体含义可参考:监控 & 告警指标列表

TKEStack 使用 Prometheus 的架构和原理可以参考 Prometheus 组件

4.4 - LogAgent 介绍

LogAgent 介绍

日志采集

LogAgent 介绍

TKESTack 通过 logagent 提供的集群内日志采集功能,支持将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch 等消费端,支持采集容器标准输出日志,容器内文件日志以及主机内文件日志。更提供事件持久化、审计等功能,实时记录集群事件及操作日志记录,帮助运维人员存储和分析集群内部资源生命周期、资源调度、异常告警等情况。

TKEStack 老版本日志使用 LogCollector 扩展组件。LogAgent 用于替换 LogCollector,新版本统一用 LogAgent 完成日志采集功能。

日志收集功能需要为每个集群手动开启。日志收集功能开启后,日志收集组件 logagent 会在集群内以 Daemonset 的形式运行。用户可以通过日志收集规则配置日志的采集源和消费端,日志收集 Agent 会从用户配置的采集源进行日志收集,并将日志内容发送至用户指定的消费端。需要注意的是,使用日志收集功能需要您确认 Kubernetes 集群内节点能够访问日志消费端。

  • 采集容器标准输出日志 :采集集群内指定容器的 Stderr 和 Stdout 日志。,采集到的日志信息将会以 JSON 格式输出到用户指定的消费端,并会自动附加相关的 Kubernetes metadata, 包括容器所属 Pod 的 label 和 annotation 等信息。
  • 采集容器内文件日志 :采集集群内指定容器内文件路径的日志,用户可以根据自己的需求,灵活的配置所需的容器和路径,采集到的日志信息将会以 JSON 格式输出到用户指定的消费端, 并会附加相关的 Kubernetes metadata,包括容器所属 Pod 的 label 和 annotation 等信息。
  • 采集主机内文件日志 :采集集群内所有节点的指定主机文件路径的日志,logagent 会采集集群内所有节点上满足指定路径规则的文件日志,以 JSON 格式输出到用户指定的输出端, 并会附加用户指定的 metadata,包括日志来源文件的路径和用户自定义的 metadata。

部署在集群内 kubernetes 对象

在集群内部署 logagent Add-on , 将在集群内部署以下 kubernetes 对象

kubernetes 对象名称类型默认占用资源所属Namespaces
logagentDaemonSet每节点0.3核 CPU, 250MB 内存kube-system
logagentServiceAccountkube-system

使用日志采集服务

注意:日志采集对接外部 Kafka 或 Elasticsearch,该功能需要额外开启,位置在集群 基本信息 下面,点击开启“日志采集”服务。

业务管理侧

  • 登录 TKEStack
  • 切换至【业务管理】控制台,选择 【运维中心】->【日志采集】
  • 选择相应【业务】和【命名空间】,单击【新建】按钮,如下图所示:

  • 在“新建日志采集”页面填写日志采集信息,如下图所示:

  • 收集规则名称: 输入规则名,1~63字符,只能包含小写字母、数字及分隔符("-"),且必须以小写字母开头,数字或小写字母结尾
  • 业务: 选择所属业务(业务管理侧才会出现)
  • 集群: 选择所属集群(平台管理侧才会出现)
  • 类型: 选择采集类型
    • 容器标准输出: 容器 Stderr 和 Stdout 日志信息采集
      • 日志源: 可以选择所有容器或者某个 Namespace 下的所有容器/工作负载
        • 所有容器: 所有容器
        • 指定容器: 某个 Namespace 下的所有容器或者工作负载
    • 容器文件路径: 容器内文件内容采集
      • 日志源: 可以采集具体容器内的某个文件路径下的文件内容

        • 工作负载选项: 选择某个 Namespace 下的某种工作负载类型下的某个工作负载
        • 配置采集路径: 选择某个容器下的某个文件路径
        • 文件路径若输入stdout,则转为容器标准输出模式
        • 可配置多个路径。路径必须以/开头和结尾,文件名支持通配符(*)。文件路径和文件名最长支持63个字符
        • 请保证容器的日志文件保存在数据卷,否则收集规则无法生效,详见指定容器运行后的日志目录
    • 节点文件路径: 收集节点上某个路径下的文件内容,不会重复采集,因为采集器会记住之前采集过的日志文件的位点,只采集增量部分
      • 日志源: 可以采集具体节点内的某个文件路径下的文件内容
        • 收集路径: 节点上日志收集路径。路径必须以/开头和结尾,文件名支持通配符(*)。文件路径和文件名最长支持63个字符
        • metadata: key:value 格式,收集的日志会带上 metadata 信息上报给消费端
  • 消费端: 选择日志消费端
    • Kafka:
      • 访问地址: Kafka IP 和端口
      • 主题(Topic): Kafka Topic 名
    • Elasticsearch:
      • Elasticsearch 地址: ES 地址,如:http://190.0.0.1:200

        注意:当前只支持未开启用户登录认证的 ES 集群

      • 索引: ES索引,最长60个字符,只能包含小写字母、数字及分隔符("-"、"_"、"+"),且必须以小写字母开头

  • 单击【完成】按钮

平台管理侧

在平台管理侧也支持日志采集规则的创建,创建方式和业务管理处相同。详情可点击平台侧的日志采集

指定容器运行后的日志目录

LogAgent 除了支持日志规则的创建,也支持指定容器运行后的日志目录,可实现日志文件展示和下载。

前提:需要在创建负载时挂载数据卷,并指定日志目录

创建负载以后,在容器内的/data/logdir目录下的所有文件可以展示并下载,例如我们在容器的/data/logdir下新建一个名为a.log的文件,如果有内容的话,也可以在这里展示与下载:

4.5 - GPUManager 介绍

GPUManager 介绍

GPUManager 介绍

GPUManager 提供一个 All-in-One 的 GPU 管理器, 基于 Kubernets Device Plugin 插件系统实现,该管理器提供了分配并共享 GPU,GPU 指标查询,容器运行前的 GPU 相关设备准备等功能,支持用户在 Kubernetes 集群中使用 GPU 设备。

GPU-Manager 包含如下功能:

  • 拓扑分配:提供基于 GPU 拓扑分配功能,当用户分配超过1张 GPU 卡的应用,可以选择拓扑连接最快的方式分配GPU设备
  • GPU 共享:允许用户提交小于1张卡资源的的任务,并提供 QoS 保证
  • 应用 GPU 指标的查询:用户可以访问主机的端口(默认为5678)的/metrics 路径,可以为 Prometheus 提供 GPU 指标的收集功能,/usage 路径可以提供可读性的容器状况查询

GPU-Manager 使用场景

在 Kubernetes 集群中运行 GPU 应用时,可以解决 AI 训练等场景中申请独立卡造成资源浪费的情况,让计算资源得到充分利用。

GPU-Manager 限制条件

  1. 该组件基于 Kubernetes DevicePlugin 实现,只能运行在支持 DevicePlugin 的 kubernetes版本(Kubernetes 1.10 之上的版本)

  2. 使用 GPU-Manager 要求集群内包含 GPU 机型节点

  3. TKEStack 的 GPU-Manager 将每张 GPU 卡视为一个有100个单位的资源

    特别注意:

    1. 当前仅支持 0-1 的小数张卡,如 20、35、50;以及正整数张卡,如200、500等;不支持类似150、250的资源请求
    2. 显存资源是以 256MiB 为最小的一个单位的分配显存

部署在集群内 kubernetes 对象

在集群内部署 GPU-Manager,将在集群内部署以下 kubernetes 对象:

kubernetes 对象名称类型建议预留资源所属 Namespaces
gpu-manager-daemonsetDaemonSet每节点1核 CPU, 1Gi内存kube-system
gpu-quota-admissionDeployment1核 CPU, 1Gi内存kube-system

GPU-Manager 使用方法

安装 GPU-Manager

集群部署阶段选择 vGPU,平台会为集群部署 GPU-Manager ,如下图新建独立集群所示,Global 集群的也是如此安装。

在节点安装 GPU 驱动

集群部署阶段添加 GPU 节点时有勾选 GPU 选项,平台会自动为节点安装 GPU 驱动,如下图所示:

注意:如果集群部署阶段节点没有勾选 GPU,需要自行在有 GPU 的节点上安装 GPU 驱动

工作负载使用 GPU

通过控制台使用

在安装了 GPU-Manager 的集群中,创建工作负载时可以设置 GPU 限制,如下图所示:

注意:

  1. 卡数只能填写 0.1 到 1 之间的两位小数或者是所有自然数,例如:0、0.3、0.56、0.7、0.9、1、6、34,不支持 1.5、2.7、3.54
  2. 显存只能填写自然数 n,负载使用的显存为 n*256MiB

通过 YAML 使用

如果使用 YAML 创建使用 GPU 的工作负载,提交的时候需要在 YAML 为容器设置 GPU 的使用资源。

  • CPU 资源需要在 resource 上填写tencent.com/vcuda-core
  • 显存资源需要在 resource 上填写tencent.com/vcuda-memory

例1:使用1张卡的 Pod

apiVersion: v1

kind: Pod

...

spec:

  containers:

    - name: gpu

      resources:
        limits: 
          tencent.com/vcuda-core: 100
        requests:
          tencent.com/vcuda-core: 100

例2,使用 0.3 张卡、5GiB 显存的应用(5GiB = 20*256MB)

apiVersion: v1

kind: Pod

...

spec:

  containers:

  - name: gpu

    resources:
      limits:
        tencent.com/vcuda-core: 30
        tencent.com/vcuda-memory: 20
      requests:
        tencent.com/vcuda-core: 30
        tencent.com/vcuda-memory: 20

GPU 监控数据查询

通过控制台查询

前提:在集群的【基本信息】页里打开“监控告警”

可以通过集群多个页面的监控按钮里查看到 GPU 的相关监控数据,下图以 集群管理 页对集群的监控为例:

通过后台手动查询

手动获取 GPU 监控数据方式(需要先安装 socat):

kubectl port-forward svc/gpu-manager-metric -n kube-system 5678:5678 &
curl http://127.0.0.1:5678/metric

结果示例:

GPUManager 项目请参考:GPUManager Repository

4.6 - CSIOperator 介绍

CSIOperator 介绍

CSIOperator

CSIOperator 介绍

Container Storage Interface Operator(CSIOperator)用于部署和更新 Kubernetes 集群中的 CSI 驱动和外部存储组件。

CSIOperator 使用场景

CSIOperator 用于支持集群方便的使用存储资源,当前支持的存储插件包括 RBD、CephFS、TencentCBS 和 TencentCFS(TencentCFS 正在测试中)

  • 其中 RBD 和 CephFS 主要用于部署在 IDC 环境的集群
  • TencentCBS 和 TencentCFS 用于部署在腾讯云环境的集群

部署在集群内 kubernetes 对象

在集群内部署 CSIOperator,将在集群内部署以下 kubernetes 对象

kubernetes 对象名称类型默认占用资源所属 Namespaces
csi-operatorDeployment每节点0.2核 CPU, 256MB内存kube-system

CSIOperator 使用方法

安装 CSIOperator

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【扩展组件】 页面
  • 选择需要安装组件的集群,点击【新建】按钮。如下图所示:

  • 在弹出的扩展组件列表里,滑动列表窗口找到 CSIOperator
  • 单击【完成】进行安装

通过 CSIOperator 使用腾讯云存储资源

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【集群管理】 页面,如下图1所示:
  • 点击安装了 CSIOperator 组件的【集群ID】,进入要管理的集群,如下图2所示:
  • 点击【YAML创建资源】,如下图3所示:

  • 文件中指定各自存储插件镜像的名称,这里以tencentcbs的 YAML 为例:(前提:需要拥有腾讯云账号)

    apiVersion: storage.tkestack.io/v1
    kind: CSI
    metadata:
      name: tencentcbsv1
      namespace: kube-system
    spec:
      driverName: com.tencent.cloud.csi.cbs
      version: "v1"
      parameters:
        secretID: "xxxxxx"
        secretKey: "xxxxxx"
    
    • secretID、secretKey 来源于 腾讯云控制台 -> 账号中心 -> 访问管理 -> 访问秘钥 -> API密钥管理
  • 创建完 CSIOperator 的 CRD 对象,同时会为每个存储插件创建默认的 StorageClass 对象(tencentcbs 的 StorageClass 对象名为 cbs-basic-prepaid),如下图:

其 YAML 如下:

  • tencentcbs 的 provisioner 名称指定为:com.tencent.cloud.csi.cbs

  • tencentcfs 的 provisioner 名称指定为:com.tencent.cloud.csi.cfs,tencentcfs 仍在测试中,目前仅支持 tencentcbs

  • 对于磁盘类型(在 StorageClass 的 diskType 中指定)和大小的限制:

    • 普通云硬( CLOUD_BASIC )盘提供最小 100 GB 到最大 16000 GB 的规格选择,支持 40-100MB/s 的 IO 吞吐性能和 数百-1000 的随机 IOPS 性能
    • 高性能云硬盘(CLOUD_PREMIUM)提供最小 50 GB 到最大 16000 GB 的规格选择
    • SSD 云硬盘(CLOUD_SSD)提供最小 100 GB 到最大 16000 GB 的规格选择,单块 SSD 云硬盘最高可提供 24000 随机读写IOPS、260MB/s吞吐量的存储性能
  • 默认创建的磁盘类型为普通云硬盘,如果用户希望使用该 StorageClass,可以直接创建使用了该 StorageClass 的 PVC 对象:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-tencentcbs
      namespace: kube-system
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: cbs-basic-prepaid
      resources:
        requests:
          storage: 10Gi
    

详情请见 CSIOperator Example

5 - 组织资源

组织资源

组织资源

概念

这里用户可以管理镜像仓库和凭据。

5.1 - 镜像仓库管理

镜像仓库管理

镜像仓库管理

镜像仓库概述

镜像仓库:用于存放 Docker 镜像,Docker 镜像可用于部署容器服务,每个镜像有特定的唯一标识(镜像的 Registry 地址+镜像名称+镜像 Tag)

镜像类型:目前镜像支持 Docker Hub 官方镜像和用户私有镜像

镜像生命周期:主要包含镜像版本的生成、上传和删除

新建命名空间

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【组织资源】->【镜像仓库管理】
  • 点击【新建】按钮,如下图所示:

  • 在弹出的“新建命名空间”页面,填写命名空间信息,如下图所示:

  • 名称: 命名空间名字,不超过63字符
  • 描述: 命名空间描述信息(可选)
  • 权限类型: 选择命名空间权限类型
    • 公有: 所有人均可访问该命名空间下的镜像
    • 私有: 个人用户命名空间
  • 单击【确认】按钮

删除命名空间

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】->【镜像仓库管理】。点击列表最右侧【删除】按钮,如下图所示:

镜像上传

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】->【镜像仓库管理】,查看命名空间列表,点击列表中命名空间【名称】,如下图所示:

  • 此时进入了“镜像列表”页面,点击【镜像上传指引】按钮,如下图所示:

    注意:此页面可以通过上传的镜像最右边的【删除】按钮来删除上传的镜像

  • 根据指引内容,在物理节点上执行相应命令,如下图所示:

5.2 - Helm模板

Helm模板

应用功能是 TKEStack 集成的 Helm 3.0 相关功能,为您提供创建 helm chart、容器镜像、软件服务等各种产品和服务的能力。已创建的应用将在您指定的集群中运行,为您带来相应的能力。

模板

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】->【 Helm模板】,点击【模板】

image-20201203144524973

  1. 所有模板:包含下列所有模板
  2. 用户模板:权限范围为“指定用户”的仓库下的所有模板
  3. 业务模板:权限范围为“指定业务”的仓库下的所有模板
  4. 公共模板:权限范围为“公共”的仓库下的所有模板

仓库

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】->【 Helm模板】,点击【仓库】
  • 点击【新建】按钮,如下图所示:

新建Chart包命名空间

  • 在弹出的 “新建仓库” 页面,填写 仓库 信息,如下图所示:

image-20201203144754466

  • 仓库名称: 仓库名字,不超过60个字符

  • 权限访问

    • 指定用户:选择当前仓库可以被哪些平台的用户访问
    • 指定业务:选择当前仓库可以被哪些平台的业务访问,业务下的成员对该仓库的访问权限在【业务管理】中完成
    • 公共:平台所有用户都能访问该仓库
  • 导入第三方仓库: 若已有仓库想导入 TKEStack 中使用,请勾选

    • 第三方仓库地址:请输入第三方仓库地址
    • 第三方仓库用户名:若第三方仓库开启了鉴权,需要输入第三方仓库的用户名
    • 第三方仓库密码:若第三方仓库开启了鉴权,需要输入第三方仓库的密码
  • 仓库描述: 请输入仓库描述,不超过255个字符

  • 单击【确认】按钮

    删除仓库

  • 登录 TKEStack

  • 切换至 【平台管理】控制台,选择 【组织资源】-> 【 Helm 模板】,点击【仓库】,查看 “helm模板仓库”列表

  • 点击列表最右侧【删除】按钮,如下图所示:

Chart包命名空间删除按钮

Chart 上传指引

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】-> 【 Helm模板】,点击【仓库】,查看 “helm模板仓库”列表
  • 点击列表最右侧【上传指引】按钮,如下图所示:

Chart包命名空间名称

  • 根据指引内容,在物理节点上执行相应命令,如下图所示:

Chart上传指引内容

同步导入仓库

  1. 登录 TKEStack
  2. 切换至 【平台管理】控制台,选择 【组织资源】->【 Helm模板】,点击【仓库】
  3. 点击导入仓库的【同步仓库】按钮,如下图所示:

image-20201203151341971

5.3 - 访问凭证

访问凭证

访问凭证

这里用户可以管理自己的凭据,用来登陆平台创建的镜像仓库应用仓库

新建访问凭证

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】下的【访问凭证】,点击【新建】按钮,如下图所示:

  • 在弹出创建访问凭证页面,填写凭证信息,如下图所示:

  • 凭证描述: 描述当前凭证信息
  • 过期时间: 填写过期时间,选择小时/分钟为单位
  • 单击【确认】按钮

使用指引

  • 登录 TKEStack
  • 切换至 【平台管理】控制台,选择 【组织资源】下的【访问凭证】,点击【新建】按钮,如下图所示:

  • 根据指引内容,在物理节点上执行相应命令

停用/启用/删除访问凭证

  • 登录 TKEStack

  • 切换至 【平台管理】控制台,选择 【组织资源】-> 【访问凭证】,查看“访问凭证”列表,单击列表右侧【禁用】/【启用】/【删除】按钮。如下图所示:

    注意:点击【禁用】之后,【禁用】按钮就变成了【启用】

  • 单击【确认】按钮

6 - 访问管理

访问管理

6.1 - 策略管理

策略管理

策略管理

平台策略

新建策略

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【策略管理】
  • 点击【新建】按钮,如下图所示:

  • 在弹出的新建策略窗口输入策略信息。如下图所示:

  • 策略名称: 长度需要小于256个字符
  • 效果: 策略动作,允许/拒绝
  • 服务: 选择策略应用于哪项服务
  • 操作: 选择对应服务的各项操作权限
  • 资源: 输入资源label,支持模糊匹配,策略将应用于匹配到的资源
  • 描述: 输入策略描述
  • 单击【保存】按钮

关联用户和用户组

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【策略管理】,查看策略列表
  • 点击列表中最右侧【关联用户】或【关联用户组】按钮,如下图所示:

  • 在弹出的关联用户窗口选择用户或用户组,这里以用户组为例。如下图所示:

  • 单击【确定】按钮

编辑策略基本信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【策略管理】,查看策略列表
  • 点击列表中的策略名称,如下图所示:

  • 在策略基本信息页面,单击 “基本信息” 旁的【编辑】按钮,如下图所示:

  • 在弹出的信息框内编辑策略名称和描述
  • 单击【保存】按钮

业务策略

新建策略

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【策略管理】->【业务策略】
  • 点击【新建】按钮,如下图所示:

  • 在弹出的新建策略窗口输入策略信息,如下图所示:

  • 策略名称: 长度需要小于256个字符
  • 效果: 策略动作,允许/拒绝
  • 服务: 选择策略应用于哪项服务
  • 操作: 选择对应服务的各项操作权限
  • 资源: 输入资源label,支持模糊匹配,策略将应用于匹配到的资源
  • 描述: 输入策略描述
  • 单击【保存】按钮

编辑策略基本信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【策略管理】,查看策略列表
  • 点击列表中的策略名称,如下图所示:

  • 在策略基本信息页面,单击 “基本信息” 旁的【编辑】按钮,如下图所示:

  • 在弹出的信息框内编辑策略名称和描述
  • 单击【保存】按钮
  • 此页面还可以编辑策略语法

6.2 - 用户管理

用户管理

用户管理

用户

新建用户

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户管理】
  • 点击【新建】按钮,如下图所示:

  • 在弹出的添加用户窗口填写用户信息,如下图所示:

  • 用户账号: 长度3~32位字符,小写字母或数字开头结尾,中间包含小写字母、数字、-
  • 用户名称: 长度需小于256字符,用户名称会显示在页面右上角
  • 用户密码: 10~16位字符,需包括大小写字母及数字
  • 确认密码: 再次输入密码
  • 手机号: 输入用户手机号
  • 邮箱: 输入用户邮箱
  • 平台角色:
    • 管理员: 平台预设角色,允许访问和管理所有平台和业务的功能和资源
    • 平台用户: 平台预设角色,允许访问和管理大部分平台功能,可以新建集群及业务
    • 租户: 平台预设角色,不绑定任何平台权限,仅能登录
    • 自定义: 通过勾选下面的策略给用户自定义独立的权限
  • 单击【保存】按钮

修改密码

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户管理】,查看用户列表
  • 点击用户列表最右侧的【修改密码】按钮,如下图所示:

  • 在弹出的修改密码窗口里输入新的密码并确认,如下图所示:

  • 单击【保存】按钮

编辑用户基本信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户管理】,查看用户列表
  • 点击列表中的用户名称,如下图所示:

  • 在用户基本信息页面,单击 基本信息 旁的【编辑】按钮,如下图所示:

  • 在弹出的用户信息框内编辑用户信息
  • 单击【保存】按钮
  • 此页面下面可以查看当前用户的 已管理策略、已关联用户组 和 已关联角色

用户组

新建用户组

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户管理】-> 【用户组】
  • 点击【新建】按钮,如下图所示:

  • 在弹出的添加用户窗口填写用户信息,如下图所示:

  • 用户组名称: 长度需小于60位字符,小写字母或数字开头结尾,中间包含小写字母、数字、-
  • 用户组描述: 长度需小于255字符
  • 关联用户: 点按用户ID/名称前面的方框可以关联相应的用户,支持全选和按住shift键多选
  • 平台角色:
    • 管理员: 平台预设角色,允许访问和管理所有平台和业务的功能和资源
    • 平台用户: 平台预设角色,允许访问和管理大部分平台功能,可以新建集群及业务
    • 租户: 平台预设角色,不绑定任何平台权限,仅能登录
    • 自定义: 通过勾选下面的策略给用户自定义独立的权限
  • 单击【提交】按钮

编辑用户组基本信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户组管理】,查看用户组列表
  • 点击列表中的用户组名称,如下图1所示:

此界面也可以更改关联用户,如上图中的2所示,和 新建用户组 ->添加用户组 中一样的步骤来关联用户

  • 在用户组基本信息页面,单击 基本信息 旁的【编辑】按钮,如下图1所示:

  • 在弹出的信息框内可以编辑 用户组名称 和 用户组描述,此时会出现【提交】按钮,点击后可更改用户组基本信息。

    如上图中的2所示,此界面也可以更改关联用户,点击蓝色【关联用户】按钮后,和 新建用户组 ->添加用户组 中一样的操作来关联用户。这里还可以点击查看【已关联角色】和【已关联策略】

删除用户组

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【访问管理】->【用户组管理】,查看用户组列表
  • 点击用户组列表最右侧的【删除】按钮,如下图所示:

  • 在弹出的确认删除窗口,单击【确认】

7 - 监控&告警

监控&告警

7.1 - 告警记录

告警记录

概念

这里可以查看历史告警记录

查看历史告警记录

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【告警记录】查看“历史告警记录”列表,如下图所示:

删除接收组

7.2 - 通知设置

通知设置

通知设置

概念

这里用户配置平台通知

通知渠道

新建通知渠道

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知渠道】,查看“通知渠道”列表
  • 点击【新建】按钮,如下图所示:

  • 在“新建通知渠道”页面填写渠道信息,如下图所示:

  • 名称: 填写渠道名称
  • 渠道: 选择渠道类型,输入渠道信息
    • 邮件: 邮件类型
      • email: 邮件发送放地址
      • password: 邮件发送方密码
      • smtpHost: smtp IP 地址
      • smtpPort: smtp 端口
      • tls: 是否使用tls加密
    • 短信: 短信方式
      • appKey: 短信发送方的 appKey
      • sdkAppID: sdkAppID
      • extend: extend 信息
    • 微信公众号: 微信公众号方式
      • appID: 微信公众号 appID
      • appSecret: 微信公众号 appSecret
    • Webhook: Webhook 方式
      • URL:Webhook 的 URL
      • Headers: 自定义 Header
  • 单击【保存】按钮

编辑通知渠道

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知渠道】,查看“通知渠道”列表
  • 单击渠道名称,如下图所示:

  • 在“基本信息”页面,单击【基本信息】右侧的【编辑】按钮,如下图所示:

  • 在“更新渠道通知”页面,编辑渠道信息
  • 单击【保存】按钮

删除通知渠道

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知渠道】,查看“通知渠道”列表
  • 选择要删除的渠道,点击【删除】按钮,如下图所示:

  • 单击删除窗口的【确定】按钮

通知模板

新建通知模版

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知模板】,查看“通知模板”列表
  • 点击【新建】按钮,如下图所示:

  • 在“新建通知模版”页面填写模版信息,如下图所示:

  • 名称: 模版名称
  • 渠道: 选择已创建的渠道
  • body: 填写消息 body
  • header: 填写消息 header
  • 单击【保存】按钮

编辑通知模版

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知模板】,查看“通知模板”列表
  • 单击模版名称,如下图所示:

  • 在基本信息页面,单击【基本信息】右侧的【编辑】按钮,如下图所示:

  • 在“更新通知模版”页面,编辑模版信息
  • 单击【保存】按钮

删除通知模版

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【通知模板】,查看"通知模板"列表
  • 选择要删除的模版,点击【删除】按钮,如下图所示:

  • 单击删除窗口的【确定】按钮

接收人

新建接收人

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收人】,查看"接收人"列表
  • 点击【新建】按钮,如下图所示:

  • 在“新建接收人”页面填写模版信息,如下图所示:

  • 显示名称: 接收人显示名称
  • 用户名: 接收人用户名
  • 移动电话: 手机号
  • 电子邮件: 接收人邮箱
  • 微信OpenID: 接收人微信ID
  • 单击【保存】按钮

编辑接收人信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收人】,查看“接收人”列表
  • 单击接收人名称,如下图所示:

  • 在“基本信息”页面,单击【基本信息】右侧的【编辑】按钮,如下图所示:

  • 在“更新接收人”页面,编辑接收人信息
  • 单击【保存】按钮

删除接收人

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收人】,查看“接收人”列表
  • 选择要删除的接收人,点击【删除】按钮,如下图所示:

  • 单击删除窗口的【确定】按钮

接收组

新建接收组

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收组】,查看“接收组”列表
  • 点击【新建】按钮,如下图所示:

  • 在“新建接收组”页面填写模版信息,如下图所示:

  • 名称: 接收组显示名称
  • 接收组: 从列表里选择接收人。如没有想要的接收人,请在接收人里创建
  • 单击【保存】按钮

编辑接收组信息

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收组】,查看“接收组”列表
  • 单击接收组名称,如下图所示:

  • 在“基本信息”页面,单击【基本信息】右侧的【编辑】按钮,如下图所示:

  • 在“更新接收组”页面,编辑接收组信息
  • 单击【保存】按钮

删除接收组

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】->【通知设置】->【接收组】,查看“接收组”列表
  • 选择要删除的接收组,点击【删除】按钮,如下图所示:

  • 单击删除窗口的【确定】按钮

7.3 - 告警设置

告警设置

告警设置

概念

这里用户配置平台告警

前提条件

需要设置告警的集群应该先在其 基本信息 页里开启监控告警

新建告警设置

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】下的【告警设置】,查看“告警设置”列表
  • 选择相应【集群】,点击【新建】按钮,如下图所示:

  • 在“新建策略”页面填写告警策略信息,如下图所示:

  • 告警策略名称: 输入告警策略名称,最长60字符
  • 策略类型: 选择告警策略应用类型
    • 集群: 集群监控告警
    • Pod: Pod 监控告警
      • 告警对象: 选择 Pod 相关的告警对象,支持对 namespace 下不同的 deployment、stateful和daemonset 进行监控报警
        • 按工作负载选择: 选择 namespace 下的某个工作负载
        • 全部选择: 不区分 namespace,全部监控
    • 节点: 节点监控告警
  • 统计周期: 选择数据采集周期,支持1、2、3、4、5分钟
  • 指标: 选择告警指标,支持对监测值与指标值进行【大于/小于】比较,选择结果持续周期,如下图。指标具体含义可参考:[监控&告警指标含义](../../../../FAQ/Platform/alert&monitor-metrics)

  • 接收组: 选择接收组,当出现满足条件当报警信息时,向组内人员发送消息。接收组需要先在 用户管理 创建
  • 通知方式: 选择通知渠道和消息模版。通知渠道 和 消息模版需要先在 通知设置 创建
    • 添加通知方式 :如需要添加多种通知方式,点击该按钮
  • 单击【提交】按钮

复制告警设置

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】下的【告警设置】,查看“告警设置”列表
  • 选择相应【集群】,点击告警设置列表最右侧的【复制】按钮,如下图所示:

  • 在“复制策略”页面,编辑告警策略信息
  • 单击【提交】按钮

编辑告警设置

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】下的【告警设置】,查看“告警设置”列表
  • 选择相应【集群】,点击【告警名称】,如下图所示:

  • 在“告警策略详情”页面,单击【基本信息】右侧的【编辑】按钮,如下图所示:

  • 在“更新策略”页面,编辑策略信息
  • 单击【提交】按钮

删除告警设置

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】下的【告警设置】,查看“告警设置”列表
  • 选择相应【集群】,点击列表最右侧的【删除】按钮,如下图所示:

  • 在弹出的删除告警窗口,单击【确定】按钮

批量删除告警设置

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【监控&告警】下的【告警设置】,查看“告警设置”列表
  • 选择相应【集群】,选择多个告警策略,单击告警设置下方的【删除】按钮。如下图所示:

  • 在弹出的删除告警窗口,单击【确定】按钮

8 - 运维中心

运维中心

运维中心

概念

这里用户可以管理 Helm 应用、日志和集群事件持久化。

8.1 - Helm应用

Helm应用

应用功能是 TKEStack 集成的 Helm 3.0 相关功能,为您提供创建 helm chart、容器镜像、软件服务等各种产品和服务的能力。已创建的应用将在您指定的集群中运行,为您带来相应的能力。

新建 Helm 应用

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【运维中心】->【 Helm 应用】
  • 选择相应【集群】,单击【新建】按钮,如下图所示:

新建 Helm 按钮

  • 在“新建 Helm 应用”页面填写Helm应用信息,如下图所示:

新建 Helm 应用

  • 应用名称: 输入应用名,1~63字符,只能包含小写字母、数字及分隔符("-"),且必须以小写字母开头,数字或小写字母结尾
  • 运行集群: 选择应用所在集群
  • 命名空间: 选择应用所在集群的命名空间
  • 类型: 当前仅支持 HelmV3
  • Chart: 选择需要部署的 chart
  • Chart版本: 选择 chart 的版本
  • 参数: 更新时如果选择不同版本的 Helm Chart,参数设置将被覆盖
  • 拟运行: 会返回模板渲染清单,即最终将部署到集群的 YAML 资源,不会真正执行安装
  • 单击【完成】按钮

删除 Helm 应用

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【运维中心】->【 Helm 应用】
  • 点击【删除】

image-20201203150729694

查看 Helm 应用资源列表

  1. 登录 TKEStack
  2. 切换至【平台管理】控制台,选择【运维中心】->【 Helm 应用】
  3. 点击【应用名】后,点击【资源列表】,可查看该应用所有 Kubernetes 资源对象

查看 Helm 应用详情

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【运维中心】->【 Helm 应用】
  • 点击【应用名】后,点击【应用详情】

image-20201203150904452

查看 Helm 应用版本历史

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择【运维中心】->【 Helm 应用】
  • 点击【应用名】后,点击【版本历史】,可查看该应用所部署的历史版本。可以通过选择不同的版本进行参数对比查看其版本区别

image-20201203151027616

8.2 - 日志采集

日志采集

日志采集

概念

TKESTack 提供的集群内日志采集功能,支持将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch 等消费端,支持采集容器标准输出日志,容器内文件日志以及主机内文件日志。更提供事件持久化、审计等功能,实时记录集群事件及操作日志记录,帮助运维人员存储和分析集群内部资源生命周期、资源调度、异常告警等情况。

日志收集功能需要为每个集群手动开启。日志收集功能开启后,日志收集组件 logagent 会在集群内以 Daemonset 的形式运行。用户可以通过日志收集规则配置日志的采集源和消费端,日志收集 Agent 会从用户配置的采集源进行日志收集,并将日志内容发送至用户指定的消费端。需要注意的是,使用日志收集功能需要您确认 Kubernetes 集群内节点能够访问日志消费端。

  • 采集容器标准输出日志 :采集集群内指定容器的标准输出日志,采集到的日志信息将会以 JSON 格式输出到用户指定的消费端,并会自动附加相关的 Kubernetes metadata, 包括容器所属 pod 的 label 和 annotation 等信息。
  • 采集容器内文件日志 :采集集群内指定 pod 内文件的日志,用户可以根据自己的需求,灵活的配置所需的容器和路径,采集到的日志信息将会以 JSON 格式输出到用户指定的消费端, 并会附加相关的 Kubernetes metadata,包括容器所属 pod 的 label 和 annotation 等信息。
  • 采集主机内文件日志 :采集集群内所有节点的指定主机路径的日志,logagent 会采集集群内所有节点上满足指定路径规则的文件日志,以 JSON 格式输出到用户指定的输出端, 并会附加用户指定的 metadata,包括日志来源文件的路径和用户自定义的 metadata。

注意:日志采集对接外部 Kafka 或 Elasticsearch,该功能需要额外开启,位置在集群 基本信息 下面,点击开启“日志采集”服务。

新建日志采集规则

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【运维中心】->【日志采集】
  • 选择相应【集群】和【命名空间】,单击【新建】按钮,如下图所示:

  • 在“新建日志采集”页面填写日志采集信息,如下图所示:

  • 收集规则名称: 输入规则名,1~63字符,只能包含小写字母、数字及分隔符("-"),且必须以小写字母开头,数字或小写字母结尾
  • 所属集群: 选择所属集群
  • 类型: 选择采集类型
    • 容器标准输出: 容器Stdout信息采集
      • 日志源: 可以选择所有容器或者某个namespace下的所有容器/工作负载
        • 所有容器: 所有容器
        • 指定容器: 某个Namespace下的所有容器或者工作负载
    • 容器文件路径: 容器内文件内容采集
      • 日志源: 可以采集具体容器内的某个文件路径下的文件内容
        • 工作负载选项: 选择某个namespace下的某种工作负载类型下的某个工作负载
        • 配置采集路径: 选择某个容器下的某个文件路径
    • 节点文件路径: 收集节点上某个路径下的文件内容
      • 日志源:
        • 收集路径: 节点上日志收集路径
        • metadata: key:value格式,收集的日志会带上metadata信息上报给消费端
  • 消费端: 选择日志消费端
    • Kafka:

      • 访问地址: kafka ip 和端口
      • 主题(Topic): kafka topic 名
    • Elasticsearch:

      注意:当前只支持未开启用户登录认证的 ES 集群

      • Elasticsearch地址: ES 地址,如:http://190.0.0.1:200
      • 索引: ES索引,最长60个字符,只能包含小写字母、数字及分隔符("-"、"_"、"+"),且必须以小写字母开头
  • 单击【完成】按钮

指定容器运行后的日志目录

LogAgent 除了支持日志规则的创建,也支持指定容器运行后的日志目录,可实现日志文件展示和下载。

前提:需要在创建负载时挂载数据卷,并指定日志目

创建负载以后,在/data/logdir目录下的所有文件可以展示并下载,不仅是日志文件,例如我们在容器的/data/logdir下新建一个名为a.log的文件,如果有内容的话,也可以在这里展示与下载

8.3 - 审计记录

审计记录

简介

TKEStack 集群审计是基于 Kubernetes Audit 对 kube-apiserver 产生的可配置策略的 JSON 结构日志的记录存储及检索功能。本功能记录了对 kube-apiserver 的访问事件,会按顺序记录每个用户、管理员或系统组件影响集群的活动。

功能优势

集群审计功能提供了区别于 metrics 的另一种集群观测维度。开启 TKEStack 集群审计后,会在集群里的 tke 命名空间下生成 tke-audit-api 的 Deployment,Kubernetes 可以记录每一次对集群操作的审计日志。每一条审计日志是一个 JSON 格式的结构化记录,包括元数据(metadata)、请求内容(requestObject)和响应内容(responseObject)三个部分。其中元数据(包含了请求的上下文信息,例如谁发起的请求、从哪里发起的、访问的 URI 等信息)一定会存在,请求和响应内容是否存在取决于审计级别。通过日志可以了解到以下内容:

  • 集群里发生的活动
  • 活动的发生时间及发生对象。
  • 活动的触发时间、触发位置及观察点
  • 活动的结果以及后续处理行为

阅读审计日志

{
  "kind":"Event",
  "apiVersion":"audit.k8s.io/v1",
  "level":"RequestResponse",
  "auditID":0a4376d5-307a-4e16-a049-24e017******,
  "stage":"ResponseComplete",
  // 发生了什么
  "requestURI":"/apis/apps/v1/namespaces/default/deployments",
  "verb":"create",
  // 谁发起的
  "user":{
    "username":"admin",
      "uid":"admin",
      "groups":[
        "system:masters",
        "system:authenticated"
      ]
  },
  // 从哪里发起
  "sourceIPs":[
    "10.0.6.68"
  ],
  "userAgent":"kubectl/v1.16.3 (linux/amd64) kubernetes/ald64d8",
  // 发生了什么
  "objectRef":{
    "resource":"deployments",
    "namespace":"default",
    "name":"nginx-deployment",
    "apiGroup":"apps",
    "apiVersion":"v1"
  },
  // 结果是什么
  "responseStatus":{
    "metadata":{
    },
    "code":201
  },
  // 请求及返回具体信息
  "requestObject":Object{...},
  "responseObject":Object{...},
  // 什么时候开始/结束
  "requestReceivedTimestamp":"2020-04-10T10:47:34.315746Z",
  "stageTimestamp":"2020-04-10T10:47:34.328942Z",
  // 请求被接收/拒绝的原因是什么
  "annotations":{
    "authorization.k8s.io/decision":"allow",
    "authorization.k8s.io/reason":""
  }
}

前提条件

Installer 安装页面的控制台安装的第5步中,如下图所示,已经开启平台审计功能,并配置好 ElasticSearch:

查看审计

  1. 登录 TKEStack
  2. 切换至【平台管理】控制台,选择 【运维中心】->【审计记录】,查看审计列表:

参考

TKEStack 关于审计的相关配置:

# kube-apiserver 地址:/etc/kubernetes/manifests/kube-apiserver.yaml

--audit-policy-file=/etc/kubernetes/audit-policy.yaml # 审计策略
--audit-webhook-config-file=/etc/kubernetes/audit-api-client-config.yaml # 指定 Webhook backend 的配置文件

# 获取 TKEStack 审计组件的详细信息
kubectl describe deploy -ntke tke-audit-api 

# 获取 TKEStack 审计的相关配置
kubectl describe cm -ntke tke-audit-api 

8.4 - 事件持久化

事件持久化

PersistentEvent

PersistentEvent 介绍

Kubernetes Events 包括了 Kuberntes 集群的运行和各类资源的调度情况,对维护人员日常观察资源的变更以及定位问题均有帮助。TKEStack 支持为您的所有集群配置事件持久化功能,开启本功能后,会将您的集群事件实时导出到 ElasticSearch 的指定索引。

PersistentEvent 使用场景

Kubernetes 事件是集群内部资源生命周期、资源调度、异常告警等情况产生的记录,可以通过事件深入了解集群内部发生的事情,例如调度程序做出的决策或者某些pod从节点中被逐出的原因。

kubernetes 默认仅提供保留一个小时的 kubernetes 事件到集群的 ETCD 里。 PersistentEvent 提供了将 Kubernetes 事件持久化存储的前置功能,允许您通过PersistentEvent 将集群内事件导出到您自有的存储端。

PersistentEvent 限制条件

  1. 注意:当前只支持版本号为5的 ElasticSearch,且未开启 ElasticSearch 集群的用户登录认证
  2. 安装 PersistentEvent 将占用集群0.2核 CPU,100MB 内存的资源
  3. 仅在1.8版本以上的 kubernetes 集群支持

部署在集群内kubernetes对象

在集群内部署PersistentEvent Add-on , 将在集群内部署以下kubernetes对象

kubernetes对象名称类型默认占用资源所属Namespaces
tke-persistent-eventdeployment0.2核CPU,100MB内存kube-system

PersistentEvent 使用方法

在 扩展组件 里使用

  1. 登录 TKEStack

  2. 切换至【平台管理】控制台,选择 【扩展组件】,选择需要安装事件持久化组件的集群,安装 PersistentEvent 组件,注意安装 PersistentEvent 时需要在页面下方指定 ElasticSearch 的地址和索引

    注意:当前只支持版本号为5,且未开启用户登录认证的 ES 集群

在 运维中心 里使用

  • 登录 TKEStack
  • 切换至【平台管理】控制台,选择 【运维中心】->【事件持久化】,查看事件持久化列表
  • 单击列表最右侧【设置】按钮,如下图所示:

  • 在“设置事件持久化”页面填写持久化信息
    • 事件持久化存储: 是否进行持久化存储

      注意:当前只支持版本号为5,且未开启用户登录认证的 ES 集群

    • Elasticsearch地址: ES 地址,如:http://190.0.0.1:200

    • 索引: ES索引,最长60个字符,只能包含小写字母、数字及分隔符("-"、"_"、"+"),且必须以小写字母开头

  • 单击【完成】按钮