容器云

容器云服务介绍

容器云服务是对容器进行创建、编排、删除、状态查看操作于一体的一站式服务平台。

容器服务接入指南

容器服务接入流程大致如下:

根据需要在paas控制台创建对应的项目;

根据需要在天枢平台选择对应的项目创建资源组;

打开容器云服务选择对应的项目和资源组开通服务。

容器云使用指南


项目概览

项目概览模块提供了丰富、完善的容器概览数据说明,通过该页面,用户可以快速查看当前项目的组件配置数量、跳转组件页面、资源组cpu 分时使用量、资源组内存分时使用量等的使用情况。

使用说明

概览模块展示了各种类型的容器组件、资源组cpu使用量以及资源组内存使用量,可以通过点击组件模块跳转到相应的组件展示页面。

image

节点列表

image

一个节点可以是VM或物理机。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy。

应用

应用编排

这里展示空间下的资源使用概况,并通过拓扑图,直观展示路由与服务等关联资源的拓扑关系。

Helm应用部署

目前支持在容器编排页面上进行helm应用部署,helm charts包上传。

首先上传chart文件到指定的镜像仓库,可以到镜像仓库页面查到你上传好的chart包

image-20220727112012808

上传以后可以直接点击部署,我们支持在部署的时候,重新编辑values.yaml,此页面下展示的就是chart包中的values.yaml

image-20220727112350182

部署完成以后,可以回到helm应用列表,查到你创建好的helm应用,注意查看状态信息,deployed是指部署完成,如果是fail则需要排查chart规范写法。

image-20220727112644530

应用概览

应用概览展示当前资源组下DeploymentConfig,Deployment,StatefulSet,DaemonSet四种类型所有应用。

image

在概览页面可以选择拓扑图上的单个组件配置进行编辑保存,也提供编辑yaml方式对组件进行更细致化编辑。

新增应用

为了实现更直观的容器应用部署,该功能提供可视化的应用新增编排,用户通过操作拓扑图即可完成对容器应用的所有组件的一体化部署。

image

image

image

image

备注:个组件关联关系目前只有这三种形式。

负载(存储卷,配置,密钥)《-服务《-路由

负载(存储卷,配置,密钥)《-服务

负载(存储卷,配置,密钥)

点击选中组件,再点击右侧弹窗箭头,对组件进行设置。

image

(1)路由设置

选择路由类型;输入/更改路由名称、域名、路径;选择主服务,并输入相应权重(可添加多个服务),配置端口号。

image

(2)服务设置

输入/更改服务名称;选择访问类型(生成内部集群IP、直接访问容器组两种);选择端口(有默认值,也可以自定义协议名称容器端口)。

注意:服务端口号唯一,名称唯一。

image

(2)容器设置

image

(3)基本配置

image

输入/更改容器名称;选择容器类型(工作容器、初始化容器两种,默认工作容器);选择镜像拉取策略(优先使用本地镜像、总是拉取新镜像、从不拉取镜像三种,默认总是拉取新镜像);镜像:默认为上一步填写的镜像地址。

镜像拉取策略说明:

优先使用本地镜像 (ifNotPresent):只有本地不存在镜像时才会拉取镜像。

尝试重新下载镜像 (Always):只要启动 Pod 就会拉取镜像。

仅使用本地镜像 (Never):无论镜像是否存在都不会拉取镜像。

(4)网络配置:为容器 配置主机暴露端口。

image

(5)环境变量配置:以键值对形式为 Pod 配置环境变量。填写环境的名称,选择对应的密钥值。

image

(6)启动命令配置:配置运行命令、参数。默认情况下,容器会运行默认镜像命令。image

(7)资源配置:有自定义、小型、中型、大型三种资源配置,可以通过应用程序能使用的资源上限(包括 CPU 和内存)来选择配置,防止占用过多资源。

image

超出资源限制:

实际用量可以短时间超过 CPU 限制,容器不会被停止。

实际用量不能超过内存限制,如果超过了,容器可能会被停止或者被调度到其他资源充足的机器上。

(8)存活探针配置:使用存活探针检测容器是否在运行。

(9)就绪探针配置:使用就绪探针检测容器是否准备好处理请求。

image

点击右上角编辑探针详情,可选择“HTTP请求检查、TCP端口检查、执行命令检查”其一来进行配置。

(10)HTTP请求检查:在容器 IP 地址的指定端口和路径上执行 HTTP Get 请求,如果响应状态码大于等于 200 且小于 400,则认为诊断成功。

image

参数:

方案:HTTP 或 HTTPS。

路径:访问 HTTP 服务器的路径。

端口:访问端口或端口名由容器暴露。端口号必须在 1 和 65535 之间。

初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。

执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。

超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。

健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。

不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。

(11)TCP端口检查:在容器 IP 地址的指定端口上执行 TCP 检查。如果该端口打开,则认为诊断成功。

image

参数:

端口:访问端口或端口名由容器暴露。端口号必须在 1 和 65535 之间。

初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。

执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。

超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。

健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。

不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。

(12)执行命令检查:在容器中执行指定命令。如果命令退出时返回代码为 0,则认为诊断成功。

image

参数:

命令:用于检测容器健康状态的检测命令。

初始延迟:容器启动后,存活探针启动之前等待的秒数,由 initialDelaySeconds 指定。默认为 0。

执行探测频率:探测频率(以秒为单位),由 periodSeconds 指定。默认为 10,最小值为 1。

超时时间:探针超时的秒数,由 timeoutSeconds 指定。默认为 1,最小值为 1。

健康阈值:探测失败后,视为探测成功的最小连续成功次数,由 successThreshold 指定。默认为 1,存活探针和启动探针的该值必须为 1。最小值为 1。

不健康阈值:探测成功后,视为探测失败的最小连续失败次数,由 failureThreshold 指定。默认为 3,最小值为 1。

(13)配置:输入配置名称、挂载路径;可以勾选只读或配置子路径。

image

(14)密钥:输入密钥名称、挂载路径;可以勾选只读或配置子路径。

image

(15)存储卷:输入储存卷名称、挂载路径;可以勾选只读或配置子路径。

image

(16)配置(configmap)

ConfigMap 以键值对的形式存放配置数据。ConfigMap 资源可用于向 Pod 中注入配置数据。存放在 ConfigMap 对象中的数据可以由 configMap 类型的存储卷引用,并由 Pod 中运行的容器化应用使用。

image

ConfigMap 通常用于以下场景:

设置环境变量。

设置容器中的命令参数。

创建存储卷中的配置文件。

(17)密钥

Secrets用于为 Pod 提供密码、OAuth 凭证、SSH 密钥等敏感信息(健值对的形式)。密钥存储卷由 tmpfs(基于 RAM 的文件系统)支持,所以数据不会写入非易失性存储中。

image

(18)存储(pvc)

输入/更改存储名称;选择存储类型;选择访问模式(允许单节点读写,允许多节点读写,允许多节点只读三种模式,默认为允许单节点读写);输入储存卷容量。

image

(19)负载

可更改副本数;设置默认镜像 Pull 密钥/密码;设置主机名查询静态表(/etc/hosts);选择更新策略;设置容器组最大不可用;设置容器组最大峰值。

image

应用编辑

可以对应用创建的应用进行再编辑,编排方式同新增应用页面。

image

注:同1.3.3.4 介绍的相关参数编辑。

负载

负载面板简介

image

(1)部署(Deployment)

应用负载通常是访问服务的实际载体,也是对节点日志的收集、监控等系统应用的实际运行载体,是对一组容器组(Pod)的抽象模型。

(2)有状态副本集(StatefulSet)

有状态副本集是用于管理有状态应用的工作负载 API 对象,负责一组容器组的部署和扩缩,并保证这些容器组的顺序性和唯一性。

与部署类似,有状态副本集管理基于相同容器规范的容器组。与部署不同的是,有状态副本集为其每个容器组维护一个粘性身份。这些容器组根据相同的规范而创建,但不能相互替换:每个容器组都有一个持久的标识符,无论容器组如何调度,该标识符均保持不变。

如果您想使用存储卷为工作负载提供持久化存储,可以使用有状态副本集作为解决方案的一部分。尽管有状态副本集中的单个容器组容易出现故障,但持久的容器组标识符可以更容易地将现有存储卷匹配到替换任意故障容器组的新容器组。

对于需要满足以下一个或多个需求的应用程序来说,有状态副本集非常有用。

稳定性、唯一的网络标记符。

稳定的、持久的存储。

有序的、优雅的部署和扩容。

有序的、自动的滚动更新。

(3)守护进程集(DaemonSet)

守护进程集管理多组容器组副本,确保所有(或某些)节点运行一个容器组的副本。集群添加节点时,守护进程集会根据需要自动将容器组添加到新节点。

新建负载

新增时会有示例模版,如下所示:

apiVersion: apps/v1

kind: Deployment

metadata:

name: example

namespace: grd-paas-portal

spec:

replicas: 3

selector:

matchLabels:  

  app: hello-world  

template:

metadata:  

  labels:  

    app: hello-world  

spec:  

  containers:  

    - image: 'registry-c.cmft.com/library/hello-world:latest'  

      name: hello-world  

      ports:  

        - containerPort: 8080  

负载操作详情

(1)部署创建后会显示在下方的列表中。点击右边的 image,在弹出菜单中选择操作,修改部署。

步骤1:编辑YAML

image

步骤2:事件查看

image

按照事件分类,分为正常及异常事件。

步骤3:删除

image

任务jobs

image

任务负责批量处理短暂的一次性的任务,它保证批量处理任务的一个或多个容器组成功结束。定时任务(CronJob)管理基于事件的任务,例如在给定时间点只运行一次,或周期性地再给定时间点运行。

任务会创建一个或者多个 Pod,并确保指定数量的 Pod 成功结束。随着 Pod 成功结束,任务跟踪记录成功结束的 Pod 数量。当达到指定的成功结束数量时,任务(即 Job)完成。删除任务的操作会清除其创建的全部 Pod。

在简单的使用场景中,您可以创建一个任务对象,以便可靠地运行一个 Pod 直到结束。当第一个 Pod 故障或者被删除(例如因为节点硬件故障或者节点重启)时,任务对象会启动一个新的 Pod。您也可以使用一个任务并行运行多个 Pod。

新增任务

image

备注:

模板说明:不同应用的yaml模板不一样,具体可详看链接 (https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)

镜像仓库(容器镜像产品线中获取)

任务详情

任务创建后会显示在下方的列表中。点击右边的image操作,编辑任务。

步骤1:编辑YAML

步骤2:事件查看

步骤3:删除

点击具体任务,可查看任务的详细日志,耗时时间。(右上角为启动服务的log)

image

定时任务

image

定时任务 (CronJob) 对于创建周期性和重复性任务非常有用,例如运行备份或发送电子邮件。定时任务还可以在特定时间或间隔执行单个任务,例如在集群可能处于空闲状态时执行任务。

Cron Job 创建是基于时间调度的 Jobs;

一个 CronJob 对象就像 crontab (cron table) 文件中的一行;

它用 Cron 格式进行编写,并周期性地在给定的调度时间执行 Job;

使用案例:1、在给定时间点调度Job 2、创建周期性运行的Job。如:数据备份、数仓导数、执行任务、邮件发送、数据拉取、数据推送。

容器组Pods

容器组是容器云集群应用程序的基本执行单元,是您创建或部署的应用实际运行的实例的最小单元。

image

详情页面为容器组详情、各个资源的使用情况(从应用负载的详情界面点击对应容器组也可跳转至此页面)。

image

服务services

Service 从逻辑上定义了运行在集群中的一组 Pod,这些 Pod 提供了相同的功能。 当每个 Service 创建时,会被分配一个唯一的 IP 地址(也称为 clusterIP)。 这个 IP 地址与一个 Service 的生命周期绑定在一起,当 Service 存在的时候它也不会改变。 可以配置 Pod 使它与 Service 进行通信,Pod 知道与 Service 通信将被自动地负载均衡到该 Service 中的某些 Pod 上。

image

新增服务

image

image

image

编辑服务

方法1:表单编辑(内容和新增相同)

image

image

方法2:yaml编辑

image

image

删除服务

image

路由Ingress

路由,支持 Route 和 Ingress 规则,提供一种聚合服务的方式,您可以将集群的内部服务通过一个外部可访问的域名暴露给集群外部。该页面包含tab页面Route & Ingress。

image

新增路由(Route&Ingress)

新增Route(ocp)

image

新增Ingress (原生 k8s )

image

编辑路由

方法1 :编辑 Route

image

方法1 :编辑 Ingress

image

方法2 : yaml 编辑( Route 与 Ingress 都可以通过 yaml 编辑)

image

删除路由

image

配置ConfigMap&密钥Secret

用作负载所需的配置信息,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。密钥(Secret)是一种包含敏感信息的资源对象,例如密码、token等,以键值对形式保存并且可以在容器组中使用。

配置Configmaps

image

创建Configmaps

image

image

添加Secrets

image

选择不同Secrets类型

image

存储PV&PVC

存储卷请求(PVC)为用户提交的存储申请,系统分配后可供用户创建的负载使用,是将负载数据持久化的一种资源对象。

三个步骤创建存储卷

步骤1 : 管理门户创建存储卷类型

高级-> 存储 -> 存储类型

image

新增存储类型,填写基本信息

示例:

名称:dynamic

需要添加的存储类型:Ceph RBD

存储类型设置:略

image

image

步骤2 : 自助门户或者管理门户创建存储卷声明

(1)管理门户创建

示例:

命名空间:cmhk-qa-test2-test-ocp4

名称:test-pv-001

类型:dynamic

存储卷容量:50Gi

访问模式:允许单节点读写:动创建存储卷

image

(2)自助门户创建

示例:

名称:test-pv-001

存储类型:dynamic

存储卷容量:50Gi

访问模式:允许单节点读写

image

步骤3:自动随机命名生成存储卷

全自动部署

开通容器集群项目

1、登录 https://paas.cmft.com/paas-caas-cluster/#/cluster

2、选择对应的项目

image

3、点击 “开通服务”,按照提示,开通服务

image

点击“添加集群”,按照提示完成集群安装即可。

image

image

image

点击“开始安装”可进入安装界面或到集群列表首页,查看安装进度及终止安装。

image

(a)集群安装进度详情页
image

(b)集群列表页

边缘云平台

普通用户ITSM提单向运维人员申请集群token

当用户提单完成拿到集群token,集群地址以后,可以使用config.txt访问集群了

如下举例:

kubectl --kubeconfig=./config.txt get pods

image-20230110165830798

运维管理员使用边缘云指南

应用管理

在Paas管理控制台,针对用户ITSM提单需求,为用户创建应用,应用只是负责记录appkey所属的项目、人员信息

image-20230110164516933

AKSK管理

根据serviceaccount创建AKSK

image-20230110164820663

AKSK下的token管理

在限定的serviceaccount绑定的角色权限下创建token

token支持设置有效期,可以为用户创建短期token,或者较长期token,当用户申请长期token时,运维人员需谨慎评估授权行为,以防权限泄露

支持token撤销授权,一旦token状态关闭或者AKSK状态关闭,token会马上失效。

token有效需满足三个条件:

1、AKSK状态打开

2、token状态打开

3、token处于有效期,未过期

image-20230110165024530

用于集群监控的token角色

若用户想申请一个用于集群监控的token,可以使用角色cluster-monitoring-view绑定的serviceaccount(不建议使用admin角色用于集群监控)

image-20230110170342356

常见问题

  1. 无法拉取容器镜像,报无权限

    如果该镜像仓库已配置为私有项目(仓库),则需为应用拉取镜像配置账号密码(密钥),这里可参考如下步骤:

    【获取仓库账号密码】https://paas.cmft.com/paas-registry/#/space

    img

    img

    配置默认拉取镜像密钥https://paas.cmft.com/paas-caas/#/config

    img

    img

  2. root 用户无法正常启动或者报文件无权限

    一般,这里为文件权限导致。考虑安全原因,命名空间内启动应用时,将为应用分配一个临时的用户,一般 PID 为:,作为程序的启动用户,如果应用程序要操作容器中的文件,可能遇到该问题,此时,可检查 Dockerfile,修改文件或目录,通过命令 chmod a+rwx,将其授权为允许任意用户启动、使用。

  3. 没有配置健康检查,有时候应用运行正常,但是服务无法访问

    由于节点,可能存在内存或者磁盘 IO 过高,此时系统会自动将该节点上的应用标记为非就绪(UnReady)状态,目的是让 Service 不再将请求发到该容器组上,但当节点资源不再紧张,而应用未配置健康检查,应用将一直处于非就绪(UnReady)状态。此时,建议应用添加健康检查。

  4. 容器应该遵守什么规范

    • 容器&镜像规范,总结如下几点

      • 不要使用 root 用户启动应用,应允许任意用户启动应用。

      • 不要监听 1024 以下端口号(linux 限制,监听 1024 以下端口号,需要 root 权限)。

      • 指定工作目录,程序应将临时数据,写入到该目录或该目录的子目录下。

      • 需要配置健康检查,包括 存活检查(失败,将重启饮用),就绪检查(失败,将自动从负载中摘除,防止业务请求落到有问题的实例上)。推荐健康检查不要做简单页面检查,需要能确保业务正常的健康检查。

      • 为持久化数据,存储在数据库,或者存储卷中。

      • 注意镜像时区修改,一般应用官方镜像,默认为 UTC 时区,与中国时区相差 8 个小时,可通过修改 /etc/localtime,指向 /usr/share/zoneinfo/posix/Asia/Shanghai,修改为中国时间。

      • 容器镜像尽量小。可加快容器镜像构建速度,加快拉取容器镜像时间,从而缩短应用启动时间。

    • 程序设计,可参考 《容器化应用的设计原则》

      https://dcc.cm-worklink.com/docs/913JVWoDebtLPj3E/ 《容器化应用在容器平台上的最佳实践》

  5. Nginx 应用,无法访问服务

    有一些应用,针对容器服务,有专门的设置推荐,建议参考官方推荐。比如 nginx 建议不在 pass_proxy 中直接使用服务名,而是通过 upstream,将服务名配置在 upstream 中。

  6. 通过云桌面,无法访问 OCP console

    临时处理方式,通过无痕浏览器访问。

  7. 程序运行过程中需要修改到镜像文件,报权限不足

    1)需要进入容器终端,查看文件权限:ls -al <文件路径>,比如此时查询到文件创建用户id 为:1001;

    img

    2)修改程序启动用户到 1001。

    spec:
      ...
      template:
        ...
        spec:
          containers:
            - image: 'harbor.uat.cmft.com/openshift4/ose-jenkins:v4.7.0'
              name: jenkins
              ...
              securityContext:
                runAsUser: 1001
    
  8. 应用部署范例(已有镜像)

    1. 进入负载页面;

      img

    2. 点击新增按钮,进入yaml编辑页面;

      img

    3. 编辑yaml文件;

      img

      示例如下,依据需求修改

      apiVersion: apps.openshift.io/v1                                                                     #默认
      kind: DeploymentConfig                                                                                         #默认
      metadata:
        name: example                                                                                                     #此处填写应用名 如demo-app
        namespace: cmft-cp-monitor-cmsk-di                                                             #此处不能修改 默认值即可
      spec:
        replicas: 1                                                                                                         #部署的实例数 根据需求调整
        selector:
          app: hello-openshift                                                                                     #默认
        template:
          metadata:
            labels:
              app: hello-openshift                                                                          #默认
          spec:
            containers:
              - image: openshift/hello-openshift                                                 #此处填写镜像信息
                name: hello-openshift                                                                     #此处填写应用名 可以与metadata.name一致
                ports:
                  - containerPort: 8080                                                                 #应用暴露的端口
      
    4. 等待应用正常启动;

      img

    5. 进入左侧网络-服务一栏, 点击新增,按下图配置服务;

      img

    6. 进入左侧网络-路由一栏, 点击Route-新增,按下图配置访问;

      img

      img

    7. 正确配置时页面显示

      img

  9. 无法挂存储卷,报 mount.nfs: Protocol not supported

    Create NFS Persistent Volume with specific mount options:

    参考:https://access.redhat.com/solutions/5846071

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv0003
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: slow
      mountOptions:
        - hard
        - nfsvers=3        # Replace the supported NFS version which is offered by the NFS server. 
      nfs:
        path: /tmp
        server: 10.X.X.X
    

    检查 IaaS,是否已给对应的主机授权

    img

  10. 无法下载 registry.redhat.io/redhat/redhat-operator-index:v4.6 镜像

    登陆到该主机

    修改配置

    修改 /etc/containers/registries.conf

    将 registry.redhat.io 对应的 "mirror-by-digest-only = true" 修改为 "mirror-by-digest-only = false"

    执行如下命令重新加载 crio 配置

    systemctl daemon-reload && systemctl reload crio
    

    验证

    crictl --debug pull registry.redhat.io/redhat/redhat-operator-index:v4.6
    
  11. 如何开通镜像仓库

    1)登陆 https://paas.cmft.com/paas-registry/#/space

    2)选择对应的项目

    img

    3)点击 “开通服务”,按照提示,开通服务

    img

    4)点击“申请空间”,并选择要预留的空间配额,点击“申请”

    image-20211019154536143

    5)点击“使用说明”,查看账号密码

    image-20211019154629929

    image-20211019154639488

results matching ""

    No results matching ""