华为云用户手册

  • 验证数据持久化及共享性 查看部署的应用及文件。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-mjhm9 1/1 Running 0 46s web-demo-846b489584-wvv5s 1/1 Running 0 46s 依次执行以下命令,查看Pod的/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data kubectl exec web-demo-846b489584-wvv5s -- ls /data 两个Pod均无返回结果,说明/data路径下无文件。 执行以下命令,在/data路径下创建static文件。 kubectl exec web-demo-846b489584-mjhm9 -- touch /data/static 执行以下命令,查看/data路径下的文件。 kubectl exec web-demo-846b489584-mjhm9 -- ls /data 预期输出如下: static 验证数据持久化 执行以下命令,删除名称为web-demo-846b489584-mjhm9的Pod。 kubectl delete pod web-demo-846b489584-mjhm9 预期输出如下: pod "web-demo-846b489584-mjhm9" deleted 删除后,Deployment控制器会自动重新创建一个副本。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下,web-demo-846b489584-d4d4j为新建的Pod: web-demo-846b489584-d4d4j 1/1 Running 0 110s web-demo-846b489584-wvv5s 1/1 Running 0 7m50s 执行以下命令,验证新建的Pod中/data路径下的文件是否更改。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: static static文件仍然存在,则说明数据可持久化保存。 验证数据共享性 执行以下命令,查看已创建的Pod。 kubectl get pod | grep web-demo 预期输出如下: web-demo-846b489584-d4d4j 1/1 Running 0 7m web-demo-846b489584-wvv5s 1/1 Running 0 13m 执行以下命令,在任意一个Pod的/data路径下创建share文件。本例中选择名为web-demo-846b489584-d4d4j的Pod。 kubectl exec web-demo-846b489584-d4d4j -- touch /data/share 并查看该Pod中/data路径下的文件。 kubectl exec web-demo-846b489584-d4d4j -- ls /data 预期输出如下: share static 由于写入share文件的操作未在名为web-demo-846b489584-wvv5s的Pod中执行,在该Pod中查看/data路径下是否存在文件以验证数据共享性。 kubectl exec web-demo-846b489584-wvv5s -- ls /data 预期输出如下: share static 如果在任意一个Pod中的/data路径下创建文件,其他Pod下的/data路径下均存在此文件,则说明两个Pod共享一个存储卷。
  • 约束与限制 使用SFS 3.0容量型时,集群中需要安装2.0.9及以上版本的CCE容器存储(Everest)。 使用SFS 3.0存储卷时,挂载点不支持修改属组和权限,挂载点默认属主为root。 使用SFS 3.0存储卷时,创建、删除PVC和PV过程中可能存在时延,实际计费时长请以SFS侧创建、删除时刻为准。 SFS 3.0存储卷使用Delete回收策略时,需要挂载文件系统手动删除所有文件后才可以正常删除PV和PVC。
  • 相关操作 您还可以执行表3中的操作。 表3 其他操作 操作 说明 操作步骤 事件 查看PVC或PV的事件名称、事件类型、发生次数、Kubernetes事件、首次和最近发生的时间,便于定位问题。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“事件”,即可查看1小时内的事件(事件保存时间为1小时)。 查看YAML 可对PVC或PV的YAML文件进行查看、复制和下载。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“查看YAML”,即可查看或下载YAML。
  • 常见问题 挂载SFS 3.0存储时,出现挂载超时的问题,报错如下: MountVolume.SetUp failed for volume "***" : rpc error: code = Internal desc = [30834707-b8fc-11ee-ba7a-fa163eaacb17] failed to execute cmd: "systemd-run --scope mount -t nfs -o proto=tcp -o vers=3 -o timeo=600 -o noresvport -o nolock ***.sfs3.cn-east-3.myhuaweicloud.com:/*** /mnt/paas/kubernetes/kubelet/pods/add9a323-10e2-434f-b151-42675f83860e/volumes/kubernetes.io~csi/***/mount". outputs: Running scope as unit run-1597979.scope.; error: signal: killed. please check whether the volumeAttributes of related PersistentVolume of the volume is correct and whether it can be mounted. 解决方案 使用SFS 3.0文件存储前,需要提前创建VPC终端节点。如果未创建VPC终端节点,集群会无法访问SFS 3.0文件存储导致挂载超时失败。配置VPC终端节点的方法请参见配置VPC终端节点。
  • 前提条件 您已经创建好一个集群,并且在该集群中安装CCE容器存储(Everest)。 如果您需要通过命令行创建,需要使用kubectl连接到集群,详情请参见通过kubectl连接集群。 您已经创建好一个文件存储,并且文件存储与集群在同一个VPC内。 使用SFS 3.0文件存储时,您需要提前在集群所在VPC创建一个VPC终端节点,集群需要通过VPC终端节点访问SFS 3.0容量型文件系统。配置VPC终端节点的方法请参见配置VPC终端节点。
  • 操作步骤 本节以计费模式为“包年/包月”的集群为例,介绍如何为购买的集群续费。 包周期的集群超期未续费将会被系统删除,删除后集群内的节点以及运行的业务都将销毁,请务必及时续费或开通自动续费。 登录CCE控制台,在左侧导航栏中选择“集群管理”。 找到需要续费的集群,查看集群的更多操作,并单击“续费”。 图1 续费集群 在弹出的“续费”页面中,根据系统提示进行续费操作。 您已选择操作的资源(高亮显示)和其他资源有关联关系,请确认是否同时操作。 在资源续费周期生效前,若您变更了该资源的配置,您将不能退订未生效的续费周期。 生效的续费周期不能享受5天无理由退订。 单击“去支付”,在打开的支付页面中核对订单金额,并选择支付方式后单击“确认付款”。 完成付款后,可单击“返回我的订单”或“返回续费管理”页面查看和管理订单信息。
  • 开通监控中心 购买集群时开通 登录云容器引擎控制台,购买集群。 在“插件选择”页面,勾选云原生监控插件。 在“插件配置”页面,选择云原生监控插件需要对接的AOM实例。如AccessCode未创建,请先创建AccessCode。 图1 启用容器监控 集群创建完成后,在“节点管理”中创建节点。待节点创建成功后,云原生监控插件将自动部署至节点上。 在监控中心页面开通 在目标集群左侧导航栏选择“监控中心”。 单击“立即开通”,并选择指标上报的AOM实例。 图2 开通监控中心 开通成功后,等待3-5分钟,监控数据将上报至AOM实例,随即可以使用监控中心相关功能。 在插件管理页面开通 在目标集群左侧导航栏选择“插件中心”。 选择云原生监控插件,单击“安装”。 按需选择Agent模式或Server模式的云原生监控插件,并开启对接AOM开关,指标将上报至AOM实例。 图3 安装云原生监控插件 插件安装完成3-5分钟后,监控数据将上报至AOM实例,随即可以使用监控中心相关功能。 如需关闭监控中心,请前往CCE控制台“插件管理”页面卸载云原生监控插件,或关闭AOM对接,即可以停止使用该功能。
  • 约束与限制 集群版本仅支持v1.17及以上。 使用监控中心前,用户需要使用具有admin用户组的账户完成对CCE及其依赖服务的委托授权。授权完成后,拥有CCE Administrator角色或CCE FullAccess权限的用户可进行监控中心所有操作;拥有CCE ReadOnlyAccess权限的用户可以查看所有资源信息,但是无法进行任何操作。 集群中未安装用户自建的Prometheus或Prometheus(停止维护)插件。
  • 常见问题 监控中心开通失败,插件状态异常。 解决方案:请前往“插件管理”页面查看已安装插件列表,单击云原生监控插件名称,展开实例列表,检查状态为异常的Pod的事件,根据界面报错信息排查异常原因。 图4 插件状态异常 成功进入监控中心页面,但页面数据为空。 解决方案: 请前往“插件中心”页面查看已安装插件列表,单击云原生监控插件名称,展开实例列表,检查Prometheus的实例是否正常运行。如果未正常运行,请查询Pod的事件,获取异常信息。 例如:报错信息为实例调度失败:0/6 nodes are available: 1 Insufficient cpu, 2 node(s) had taint {cie.manage: proxy}, that the pod didn't tolerate, 3 node(s) had taint {node.kubernetes.io/unreachable: }, that the pod didn't tolerate,说明当前集群中总共6台节点,1台节点CPU不足,剩下的5台节点标记有污点,导致Pod无法调度。 如果插件状态正常,则可以查询prometheus实例的日志,检查日志中是否存在报错日志。如果日志中含有remote_write相关的报错信息,则表示指标上报时失败,请检查指标上报的网络是否通畅。
  • 通过kubectl命令行创建 以关联已有ELB为例,Service配置HTTP/HTTPS头字段的YAML文件配置如下: apiVersion: v1 kind: Service metadata: name: test labels: app: nginx namespace: default annotations: kubernetes.io/elb.class: performance # ELB类型,仅支持performance,即独享型ELB kubernetes.io/elb.id: 35cb350b-23e6-4551-ac77-10d5298f5204 # 已有ELB的ID kubernetes.io/elb.x-forwarded-port: 'true' # 获取监听器端口号 kubernetes.io/elb.x-forwarded-for-port: 'true' # 获取客户端请求端口号 kubernetes.io/elb.x-forwarded-host: 'true' # 重写X-Forwarded-Host spec: selector: app: nginx externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: LoadBalancer loadBalancerIP: **.**.**.** # ELB的IP 表2 关键参数说明 参数 参数类型 描述 kubernetes.io/elb.x-forwarded-port String ELB可通过X-Forwarded-Port头字段获取监听器的端口号,传输到后端服务器的报文中。 true:开启获取监听器端口号开关。 false:关闭获取监听器端口号开关。 kubernetes.io/elb.x-forwarded-for-port String ELB可通过X-Forwarded-For-Port头字段获取客户端请求的端口号,传输到后端服务器的报文中。 true:开启获取客户端请求端口号开关。 false:关闭获取客户端请求端口号开关。 kubernetes.io/elb.x-forwarded-host String true:开启重写X-Forwarded-Host开关,ELB以客户端请求头的Host重写X-Forwarded-Host传递到后端服务器。 false:关闭重写X-Forwarded-Host开关,ELB透传客户端的X-Forwarded-Host到后端服务器。
  • 通过控制台创建 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。 设置Service参数。本示例中仅列举必选参数,其余参数可根据需求参考创建LoadBalancer类型Service进行设置。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“负载均衡”。 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 负载均衡器:选择弹性负载均衡的类型、创建方式。 类型:本例中仅支持选择“独享型”,且需选择“应用型(HTTP/HTTPS)”或“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”,否则监听器端口将无法启用HTTP或HTTPS。 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表1。 端口配置: 协议:请选择TCP协议,选择UDP协议将无法启用HTTP或HTTPS。 服务端口:Service使用的端口,端口范围为1-65535。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。 监听器前端协议:本例中Service需选择HTTP或HTTPS协议。 监听器配置: 高级配置:选择合适的头字段进行设置。 配置 说明 使用限制 获取监听器端口号 开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。 独享型ELB实例的端口启用HTTP/HTTPS时支持配置。 获取客户端请求端口号 开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。 独享型ELB实例的端口启用HTTP/HTTPS时支持配置。 重写X-Forwarded-Host 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。 独享型ELB实例的端口启用HTTP/HTTPS时支持配置。 图1 配置HTTP/HTTPS头字段 单击“确定”,创建Service。
  • 命名空间维度 命名空间维度支持对选中的命名空间、以及命名空间下的工作负载进行成本优化分析,识别开销较大,利用率较低的工作负载进行优化调整。 图5 命名空间维度的成本总览 名称 含义 本月至今成本 环比上月 本月至今:选择命名空间从月初到最新账单日期产生的成本。如果本月开通服务,则为开通时到最新账单日期产生的成本。 环比上月:(本月至今成本 - 上月同期成本)/ 上月同期成本 月末预测成本 环比上月 月末预测成本:到本月月末,选中命名空间整月预估产生的总成本开销 环比上月:(月末预测成本 - 上月整月成本)/ 上月整月成本 CPU利用率 CPU使用量 CPU申请量 CPU利用率:当前时间所选命名空间 CPU 的平均利用率。 CPU 利用率 = 所选命名空间 CPU 使用总量 / 所选命名空间 CPU 申请总量 * 100% 内存利用率 内存使用量 内存申请量 当前时间所选命名空间内存的平均利用率。 内存利用率 = 所选命名空间内存使用总量 / 所选命名空间内存申请总量 * 100% 成本分布 选中时间内选中命名空间Top5的成本分布 成本趋势 选中命名空间每天的成本分布趋势,可以识别成本较高的命名空间。 图6 命名空间成本构成统计 名称 含义 资源成本构成 所选命名空间、所选时间周期的成本构成。成本由CPU成本、内存成本、存储成本组成 核时单价走势 所选命名空间下工作负载所在节点的平均核时单价走势。 Top5 运行总核时 所选命名空间、所选时间周期的 Top5 命名空间总消耗的核时资源数。 CPU 所选命名空间的CPU使用量、申请量、限制量走势。 内存 所选命名空间的内存使用量、申请量、限制量走势。 资源利用率 所选命名空间的CPU利用率、内存利用率走势。 图7 工作负载成本估计明细 名称 含义 工作负载名称 工作负载名称 估算成本 根据工作负载资源用量(CPU、Memory)占整体节点资源比例计算出来的成本,并结合了工作负载关联存储的成本构成 运行总核时 所选时间周期内,工作负载总消耗的核时资源数。用于指导资源使用情况。 核时单价 CPU 每核每小时价格,体现了工作负载所在节点的单位价钱,可用于指导进行节点机型优化。 所属命名空间 工作负载归属命名空间 CPU平均利用率 所选时间周期内,工作负载的 CPU 平均利用率。CPU 利用率 = CPU 使用量 / CPU 申请量 * 100% CPU平均使用量 所选时间周期内,工作负载的 CPU 平均使用量 CPU申请量 所选时间周期最后一天,工作负载的 CPU Request 内存平均利用率 所选时间周期内,工作负载的内存平均利用率。内存利用率 = 内存使用量 / 内存申请量 * 100% 内存平均使用量 所选时间周期内,工作负载的内存平均使用量 内存申请量 所选时间周期最后一天,工作负载的内存 Request
  • 集群维度 集群维度是单集群视角成本洞察的总览界面,涵盖了命名空间、工作负载、节点池等维度的成本开销和资源消耗情况,帮助运维人员识别成本开销大、资源利用率低的应用。 您可以在右上角进行时间过滤。 图2 单集群视角的成本总览 名称 含义 本月至今成本 环比上月 本月至今:集群从月初到最新账单日期产生的成本。如果本月开通服务,则为开通时到最新账单日期产生的成本。 环比上月:(本月至今成本 - 上月同期成本)/ 上月同期成本 月末预测成本 环比上月 月末预测成本:到本月月末,整月预估产生的总成本开销 环比上月:(月末预测成本 - 上月整月成本)/ 上月整月成本 CPU使用率 CPU使用量 CPU总量 CPU使用率:当前时间集群所有节点的 CPU 平均使用率 CPU 使用率 = 所有节点 CPU 使用总量 / 所有节点 CPU 总量 * 100% 内存使用率 内存使用量 内存总量 内存使用率:当前时间集群所有节点的内存平均使用率 内存使用率 = 所有节点内存使用量 / 所有节点内存总量 * 100% 成本分布 选中时间内成本分布。当前资源涵盖范围有:ECS成本、EVS成本、CCE集群管理成本 成本趋势 每天的成本分布趋势。从中可以看出,集群内成本开销趋势,可识别花费较高的资源 图3 集群各维度成本分析 名称 含义 命名空间 命名空间总成本:按命名空间聚合工作负载的成本,包括 CPU 成本(ECS)、内存成本(ECS)、EVS 成本。资源总成本:为计算资源总成本,包括集群所有 ECS 成本,以及 EVS 成本。 资源总成本 = 命名空间总成本 + 未被分配资源成本 如果灰色区域占用过大,则表示未被使用的资源过多,有资源浪费的现象。 工作负载 Top5 成本开销Top5的工作负载,便于识别大应用 节点池 Top5 成本开销Top5的节点池 图4 成本估算&资源消耗汇总 功能 名称 含义 命名空间估算成本&资源消耗汇总 命名空间名称 命名空间名称 估算成本 命名空间成本,计算方式:根据命名空间资源用量(CPU、Memory)占整体节点资源比例计算出来的成本,结合命名空间中工作负载关联存储的成本 运行总核时 所选时间周期内,命名空间总消耗的核时资源数 CPU平均利用率 所选时间周期内,命名空间的 CPU 平均利用率。CPU 利用率 = CPU 使用量 / CPU 申请量 * 100% CPU平均使用量 所选时间周期内,命名空间的 CPU 平均使用量 CPU申请量 所选时间周期最近账单日期,命名空间下工作负载的CPU申请量的累加 内存平均利用率 所选时间周期内,命名空间的内存平均利用率。内存利用率 = 内存使用量 / 内存申请量 * 100% 内存平均使用量 所选时间周期内,命名空间的内存平均使用量 内存申请量 所选时间周期最近账单日期,命名空间下工作负载的内存申请量的累加 工作负载估算成本&资源消耗Top5 工作负载名称 工作负载名称 估算成本 工作负载成本,计算方式:根据工作负载资源用量(CPU、Memory)占整体节点资源比例计算出来的成本,结合工作负载关联存储的成本 运行总核时 所选时间周期内,工作负载总消耗的核时资源数 核时单价 CPU 每核每小时价格。 用来指导您工作负载所在节点对应的机型的CPU核时单价。如果工作负载或者命名空间对应核时单价很贵,则可以通过变更节点类型等方式进行降本增效。 所属命名空间 工作负载所在命名空间 CPU平均利用率 所选时间周期内,工作负载的 CPU 平均利用率,用来指导您工作负载的CPU资源使用效率。 CPU 利用率 = CPU 使用量 / CPU 申请量 * 100% CPU平均使用量 所选时间周期内,工作负载的 CPU 平均使用量 CPU申请量 所选时间周期最近账单日期,工作负载的 CPU Request 内存平均利用率 所选时间周期内,工作负载的内存平均利用率,用来指导您工作负载的内存资源使用效率。 内存利用率 = 内存使用量 / 内存申请量 * 100% 内存平均使用量 所选时间周期内,工作负载的内存平均使用量 内存申请量 所选时间周期最近账单日期,工作负载的内存 Request 节点池成本&资源消耗汇总 节点池名称 节点池名称 成本 所选时间周期内,节点池中节点的成本开销 CPU平均使用率 所选时间周期内,节点池的平均 CPU 使用率。 CPU 使用率 = 节点池中节点 CPU 使用总量 / 节点池中节点 CPU 总量 * 100% CPU平均使用量 所选时间周期内,节点池的 CPU 平均使用量 CPU闲置|申请量|总量 CPU 闲置:所选时间周期最后一天,节点池中节点的闲置 CPU 之和 CPU 申请量:所选时间周期最后一天,节点池中节点的申请 CPU 之和 CPU 总量:所选时间周期最后一天,节点池中节点的 CPU 总量之和 内存平均使用率 所选时间周期内,节点池的平均内存使用率。 内存使用率 = 节点池中节点内存使用总量 / 节点池中节点内存总量 内存平均使用量 所选时间周期内,节点池的内存平均使用量 内存闲置|申请量|总量 内存闲置:所选时间周期最后一天,节点池中节点的闲置内存之和 内存申请量:所选时间周期最后一天,节点池中节点的申请内存之和 内存总量:所选时间周期最后一天,节点池中节点的内存总量之和
  • 版本记录 表4 NGINX Ingress控制器插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 2.6.4 v1.25 v1.27 v1.28 v1.29 适配CCE v1.29集群 1.9.3 2.5.6 v1.25 v1.27 v1.28 修复部分问题 1.9.3 2.5.4 v1.25 v1.27 v1.28 同一集群支持安装多套NGINX Ingress控制器 支持通过控制台配置nginx-ingress默认证书 支持将NGINX Ingress控制器指标上报至Prometheus 1.9.3 2.4.6 v1.25 v1.27 v1.28 适配CCE v1.28集群 支持开启准入校验 支持优雅退出、无损升级能力 插件多可用区部署模式支持选择均匀分布 修复CVE-2023-44487漏洞 1.9.3 2.3.5 v1.27 - 1.8.0 2.3.3 v1.27 适配CCE v1.27集群 1.8.0 2.2.52 v1.23 v1.25 同一集群支持安装多套NGINX Ingress控制器 支持通过控制台配置nginx-ingress默认证书 1.5.1 2.2.42 v1.23 v1.25 支持优雅退出、无损升级能力 插件多可用区部署模式支持选择均匀分布 1.5.1 2.2.9 v1.25 - 1.5.1 2.2.7 v1.25 插件挂载节点时区 支持双栈 1.5.1 2.2.3 v1.25 支持插件实例AZ反亲和配置 对创建临时存储卷的POD添加不可调度容忍时间 默认污点容忍时长修改为60s 1.5.1 2.2.1 v1.25 适配CCE v1.25集群 更新至社区v1.5.1版本 1.5.1 2.1.33 v1.19 v1.21 v1.23 支持优雅退出、无损升级能力 插件多可用区部署模式支持选择均匀分布 1.2.1 2.1.10 v1.19 v1.21 v1.23 支持插件实例AZ反亲和配置 默认污点容忍时长修改为60s 插件挂载节点时区 支持双栈 1.2.1 2.1.9 v1.19 v1.21 v1.23 支持插件实例AZ反亲和配置 默认污点容忍时长修改为60s 插件挂载节点时区 支持双栈 1.2.1 2.1.5 v1.19 v1.21 v1.23 支持插件实例AZ反亲和配置 默认污点容忍时长修改为60s 1.2.1 2.1.3 v1.19 v1.21 v1.23 nginx-ingress支持开启publishService开关 1.2.1 2.1.1 v1.19 v1.21 v1.23 更新至社区v1.2.1版本 1.2.1 2.1.0 v1.19 v1.21 v1.23 更新至社区v1.2.0版本 修复CVE-2021-25746漏洞,新增规则禁用一些存在越权风险的Anntotations值 修复CVE-2021-25745漏洞,新增规则禁用一些存在越权风险的访问路径 1.2.0 2.0.1 v1.19 v1.21 v1.23 适配CCE v1.23集群 更新至社区v1.1.1版本 1.1.1 1.3.2 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 同步至社区v0.49.3版本 0.49.3 1.2.6 v1.15 v1.17 v1.19 配置seccomp默认规则 0.46.0 1.2.5 v1.15 v1.17 v1.19 同步至社区v0.46.0版本 0.46.0 1.2.3 v1.15 v1.17 v1.19 适配CCE v1.19集群 0.43.0 1.2.2 v1.15 v1.17 同步至社区v0.43.0版本 0.43.0
  • 安装多个NGINX Ingress控制器 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到已经安装的NGINX Ingress控制器插件,单击“新增”。 在安装插件页面,重新配置NGINX Ingress控制器参数,参数说明详情请参见安装插件。 参数配置完成后,单击“安装”。 等待插件安装指令下发完成,您可以返回“插件中心”,单击“管理”,在插件详情页查看已安装的控制器实例。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到NGINX Ingress控制器插件,单击“安装”。 在安装插件页面,设置“规格配置”。 表1 nginx-ingress插件规格配置 参数 参数说明 插件规格 该插件支持自定义资源规格部署。 实例数 您可根据需求调整插件实例数。 实例数为1时插件不具备高可用能力,当插件实例所在节点异常时可能导致插件功能无法正常使用,请谨慎选择。 容器 您可根据需求调整插件实例的容器规格。 设置插件支持的“参数配置”。 控制器名称:自定义控制器名称,该名称为Ingress控制器的唯一标识,同一个集群中不同的控制器名称必须唯一,且不能设置为cce(cce是ELB Ingress Controller的唯一标识)。创建Ingress时,可通过指定控制器名称,声明该Ingress由此控制器进行管理。 命名空间:选择Ingress控制器所在的命名空间。 负载均衡器:支持对接共享型或独享型负载均衡实例,如果无可用实例,请先创建。负载均衡器需要拥有至少两个监听器配额,且端口 80 和 443 没有被监听器占用。 开启准入校验:针对Ingress资源的准入控制,以确保控制器能够生成有效的配置。开启后将会对Nginx类型的Ingress资源配置做准入校验,若校验失败,请求将被拦截。关于准入校验详情,请参见准入控制。 开启准入校验后,会在一定程度上影响Ingress资源的请求响应速度。 仅2.4.1及以上版本的插件支持开启准入校验。 nginx配置参数:配置nginx.conf文件,将影响管理的全部Ingress,相关参数可通过ConfigMaps查找,如果您配置的参数不包含在ConfigMaps所列出的选项中将不会生效。 此处以设置keep-alive-requests参数为例,设置保持活动连接的最大请求数为100。 { "keep-alive-requests": "100" } 开启指标采集:插件版本不低于2.4.12时,支持采集Prometheus监控指标。具体操作详情请参见监控NGINX Ingress控制器指标。 自定义服务器证书:选择一个IngressTLS或kubernetes.io/tls类型的密钥,用于配置Nginx Ingress控制器启动时的默认证书。如果无可选密钥,您可以单击“创建TLS类型的密钥证书”进行新建,详情请参见创建密钥。关于默认证书更多说明请参见Default SSL Certificate。 默认404服务:默认使用插件自带的404服务。支持自定义404服务,填写“命名空间/服务名称”,如果服务不存在,插件会安装失败。 添加TCP/UDP服务:Nginx Ingress默认仅支持转发外部HTTP和HTTPS流量,通过添加TCP/UDP端口映射,可实现转发外部TCP/UDP流量到集群内服务。关于添加TCP/UDP服务的更多信息,请参见暴露TCP/UDP服务。 协议:选择TCP或UDP。 访问端口:ELB监听器使用的端口,端口范围为1-65535。 目标服务命名空间:请选择Service所在的命名空间。 目标服务名称:请选择已有Service。页面列表中的查询结果已自动过滤不符合要求的Service。 目标服务访问端口:可选择目标Service的访问端口。 集群版本为v1.19.16-r5、v1.21.8-r0、v1.23.6-r0及以上时,支持设置TCP/UDP混合协议能力。 集群版本为v1.19.16-r5、v1.21.8-r0、v1.23.6-r0、v1.25.2-r0及以上时,支持设置TCP/UDP混合协议使用相同的对外端口。 设置插件实例的“调度策略”。 调度策略对于DaemonSet类型的插件实例不会生效。 设置多可用区部署或节点亲和策略时,需保证集群中存在满足调度策略的节点且拥有足够的资源,否则插件实例将无法运行。 表2 插件调度配置 参数 参数说明 多可用区部署 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区。 均分模式:插件Deployment实例均匀调度到当前集群下各可用区,增加新的可用区后建议扩容插件实例以实现跨可用区高可用部署;均分模式限制不同可用区间插件实例数相差不超过1,单个可用区资源不足会导致后续其他实例无法调度。 强制模式:插件Deployment实例强制调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将无法全部运行。 节点亲和 不配置:插件实例不指定节点亲和调度。 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。 同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。 容忍策略 容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。 插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。 详情请参见容忍策略。 单击“安装”。
  • 组件说明 表3 nginx-ingress组件 容器组件 说明 资源类型 cceaddon-nginx-ingress-controller 基于Nginx的Ingress控制器,为集群提供灵活的路由转发能力。 Deployment cceaddon-nginx-ingress-default-backend Nginx的默认后端。返回“default backend - 404”。 Deployment
  • 工作负载与nginx-ingress-controller反亲和部署 运行nginx-ingress-controller的节点以及该节点上运行的容器,无法访问Nginx Ingress,为避免这个问题发生,需要将工作负载与nginx-ingress-controller反亲和部署,即工作负载Pod无法调度至nginx-ingress-controller运行的节点。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx:aplpine imagePullPolicy: IfNotPresent name: nginx imagePullSecrets: - name: default-secret affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: #通过nginx-ingress-controller的标签实现反亲和 - key: app operator: In values: - nginx-ingress - key: component operator: In values: - controller namespaces: - kube-system topologyKey: kubernetes.io/hostname
  • 工作原理 Nginx Ingress由资源对象Ingress、Ingress控制器、Nginx三部分组成,Ingress控制器用以将Ingress资源实例组装成Nginx配置文件(nginx.conf),并重新加载Nginx使变更的配置生效。当它监听到Service中Pod变化时通过动态变更的方式实现Nginx上游服务器组配置的变更,无须重新加载Nginx进程。工作原理如图1所示。 Ingress:一组基于域名或URL把请求转发到指定Service实例的访问规则,是Kubernetes的一种资源对象,Ingress实例被存储在对象存储服务etcd中,通过接口服务被实现增、删、改、查的操作。 Ingress控制器(Ingress Controller):用以实时监控资源对象Ingress、Service、End-point、Secret(主要是TLS证书和Key)、Node、ConfigMap的变化,自动对Nginx进行相应的操作。 Nginx:实现具体的应用层负载均衡及访问控制。 图1 Nginx Ingress工作原理
  • 使用约束 仅支持在1.15及以上版本的集群中安装此插件。 对于v1.23版本前的集群,通过API接口创建的Ingress在注解中必须添加kubernetes.io/ingress.class: "nginx"。如果集群中安装了多套NGINX Ingress控制器,需将nginx替换为自定义的控制器名称。 独享型ELB规格必须支持网络型(TCP/UDP),且网络类型必须支持私网(有私有IP地址)。 运行nginx-ingress-controller的节点以及该节点上运行的容器,无法访问Nginx Ingress,请将工作负载Pod与nginx-ingress-controller进行反亲和部署,具体操作步骤请参见工作负载与nginx-ingress-controller反亲和部署。 nginx-ingress在升级时会预留10s的宽限时间,用于删除ELB后端的nginx-ingress控制器。 nginx-ingress-controller的优雅退出时间为300s,若nginx-ingress升级时存在超过300s的长连接,长连接会被断开,出现服务短暂中断。
  • 插件简介 Kubernetes通过kube-proxy服务实现了Service的对外发布及负载均衡,它的各种方式都是基于传输层实现的。在实际的互联网应用场景中,不仅要实现单纯的转发,还有更加细致的策略需求,如果使用真正的负载均衡器更会增加操作的灵活性和转发性能。 基于以上需求,Kubernetes引入了资源对象Ingress,Ingress为Service提供了可直接被集群外部访问的虚拟主机、负载均衡、SSL代理、HTTP路由等应用层转发功能。 Kubernetes官方发布了基于Nginx的Ingress控制器,CCE的NGINX Ingress控制器插件直接使用社区模板与镜像。Nginx Ingress控制器会将Ingress生成一段Nginx的配置,并将Nginx配置通过ConfigMap进行储存,这个配置会通过Kubernetes API写到Nginx的Pod中,然后完成Nginx的配置修改和更新,详细工作原理请参见工作原理。 开源社区地址:https://github.com/kubernetes/ingress-nginx 2.3.3及以上版本的Nginx Ingress默认仅支持TLS v1.2及v1.3版本,如果客户端TLS版本低于v1.2,会导致客户端与Nginx Ingress协商时报错。如果需要支持更多TLS版本,请参见TLS/HTTPS。 安装该插件时,您可以通过“nginx配置参数”添加配置,此处的设置将会全局生效,该参数直接通过配置nginx.conf生成,将影响管理的全部Ingress,相关参数可通过ConfigMaps查找,如果您配置的参数不包含在ConfigMaps所列出的选项中将不会生效。 安装该插件后,您在CCE控制台创建Ingress时可以选择对接Nginx控制器,并通过“注解”设置Nginx Ingress功能,支持的注解字段详情请参见Annotations。 请勿手动修改和删除CCE自动创建的ELB和监听器,否则将出现工作负载异常;若您已经误修改或删除,请卸载Nginx Ingress插件后重装。
  • 创建存储库 这里的备份存储库是指 E-Backup 用于获取和检测后端对象存储服务相关信息的 K8s 资源对象。 apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: backup-location-001 namespace: velero #必须和E-Backup处于同一namespace spec: config: endpoint: obs.{regionname}.myhuaweicloud.com # OBS的endpoint credential: name: secret-secure-opaque # 此前创建的secret的名字 key: cloud # secret.data中的key值 objectStorage: bucket: tools-cce # OBS中的桶名 prefix: for-backup # 子路径名 provider: huawei # 使用OBS服务 除了 prefix 字段为选填外,其他字段必填。provider 为固定值 huawei。 endpoint 可以到地区和终端节点获取,都需要保证集群内各节点可访问该地址。当endpoint 不带协议头时(http或者https),默认启用 https。 credential中的 name 和 key 需要配置正确,否则 E-Backup 无法访问后端存储库。 创建完成后等待30s用于备份存储库的检查和同步等工作,随后查看该备份存储库状态是否可用,PHASE 为 Available 表示可用,其他表示不可用。 $ kubectl get backupstoragelocations.velero.io backup-location-001 -n velero NAME PHASE LAST VALIDATED AGE DEFAULT backup-location-001 Available 23s 23m 此处如果PHASE 长时间没有Available,可通过查看E-Backup的日志定位问题。E-Backup安装后会在velero命名空间创建一个名为velero的工作负载,查看velero的日志即可。
  • 准备密钥 获取访问密钥。 登录CCE控制台,在右上角用户名下选择“我的凭证”,在左侧选择“访问密钥”,单击“新增访问密钥”。 创建密钥文件,并通过 base64 格式化成字符串。 # 创建密钥文件 $ vi credential-for-huawei-obs HUAWEI_CLOUD_ACCESS_KEY_ID=your_access_key HUAWEI_CLOUD_SECRET_ACCESS_KEY=your_secret_key # 使用 base64 格式化字符串 $ base64 -w 0 credential-for-huawei-obs XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHWOBS 创建Secret。 按如下YAML文件创建Secret。 apiVersion: v1 kind: Secret metadata: labels: secret.everest.io/backup: 'true' #标识该secret用于E-Backup访问备份存储库 name: secret-secure-opaque namespace: velero #必须和E-Backup置于同一namespace,取值必须为velero type: cfe/secure-opaque data: # credential文件经过base64编码后得到的字符串 cloud: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHWOBS secret 所在 namespace 必须和 E-Backup 实例所在namespace一致,即 velero。 secret.data 中存储的是访问对象存储服务的密钥,其中 key 必须为 cloud,而 value 为2中通过 base64 编码得到的字符串。一般通过 base64 编码后显示的字符串会有换行符,请在写入 secret.data 中时手动去除这些换行符。 secret 需要打上标签“secret.everest.io/backup: true”,标识该 secret 是用于备份存储库的管理。
  • 删除备份 删除集群中创建的备份对象及其相关对象(比如:Backup/Restore/Schedule等),并且将后端存储库中的备份内容删除,适用于产生大量备份数据时进行的清理工作。 编辑 DeleteBackupRequest 模板,如下所示,随后通过 kubectl create 命令创建。 apiVersion: velero.io/v1 kind: DeleteBackupRequest metadata: name: backup-001-delete namespace: velero spec: backupName: backup-001 # 指定要删除的备份名 查看状态。 $ kubectl -n velero get deletebackuprequests backup-001-delete -o yaml | grep " phase" phase: InProgress InProgress:删除任务正在进行中。 Processed:删除任务已经被处理过。 Processed 状态只意味着 E-Backup 处理过该任务,但是不一定能够完成该任务。可以通过查看 deletebackuprequest.status.errors 字段查看执行删除任务期间出现的错误。如果 E-Backup 正确完整地处理完删除任务,则该 deletebackuprequest 对象本身也会被删除。 后端存储库(OBS桶)中的内容不要人为进行手动删除。
  • 周期备份 操作后会基于配置以一定的周期重复性地执行备份过程,比较适用于容灾。 编辑 Schedule 模板,如下所示,随后通过 kubectl create 命令创建。用户可以自行按照需要给 Schedule 模板打上 label,Schedule 上的 label 都会打到通过 schedule 创建的 backup 上。Schedule 创建到集群后,会立即执行一次备份,后续按照设定的定时周期重复执行备份过程。 apiVersion: velero.io/v1 kind: Schedule metadata: name: schedule-backup-001 namespace: velero spec: schedule: 0 */10 * * * template: runMode: Normal hooks: {} includedNamespaces: - nginx - mysql labelSelector: matchExpressions: - key: direction operator: In values: - back - front matchLabels: app: nginx backup: velero storageLocation: backup-location-001 ttl: 720h0m0s 参数说明如下。 schedule:创建的定时表达式,指定备份的周期执行时间。支持 @every格式 和 Linux标准cron表达式。 @every NUnit:其中N表示一个正整数,Unit可以为s, m, h,表示每隔N个Unit时间触发一次,例如:@every 2h30m,每隔2小时30分执行一次。 标准cron表达式:采用五子表达式,分别是 Minute,Hour,Day-of-Month,Month,Day-of-Week。 template:备份的模板,与备用应用(立即备份)中spec一致。
  • 设置可用区亲和性 在Autopilot集群中,您可以通过设置工作负载注解实现可用区亲和,将Pod调度到指定的可用区。 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。 在“高级配置”中,选择“标签与注解”,并填写以下注解。 键:node.cce.io/node-az-list 值:可用区名称,多个可用区间使用英文逗号隔开。 不同区域的可用区名称请参见地区和终端节点。 图1 设置可用区亲和性 填写其他工作负载参数后,单击“创建工作负载”。
  • Kubernetes事件上报云日志服务(LTS) 集群未安装云原生日志采集插件 安装CCE 云原生日志采集插件时,可通过勾选采集Kubernetes事件,创建默认日志采集策略,采集所有事件上报到LTS。安装方法见:收集容器日志。 集群已安装云原生日志采集插件 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 右上角单击“日志采集策略”,将显示当前集群所有上报LTS的日志策略。 单击上方“创建日志策略”,输入要采集的配置信息。 策略模板:若安装插件时未勾选采集Kubernetes事件,或者删除了对应的日志策略,可通过该方式重新创建默认事件采集策略。 事件查看:可直接在“日志中心”页面查看,选择日志策略配置的日志流名称,即可查看上报到云日志服务(LTS)的事件。
  • Kubernetes事件上报应用运维管理(AOM) 安装云原生日志采集插件后,默认会将上报所有Warning级别事件以及部分Normal级别事件到应用运维管理(AOM),上报的事件可用于配置告警。 自定义事件上报 若已上报的事件不能满足需求,可通过修改配置,修改需要上报到应用运维管理(AOM)的事件。 在集群上执行以下命令,编辑当前的事件采集配置。 kubectl edit logconfig -n kube-system default-event-aom 根据需要修改事件采集配置。 apiVersion: logging.openvessel.io/v1 kind: LogConfig metadata: annotations: helm.sh/resource-policy: keep name: default-event-aom namespace: kube-system spec: inputDetail: #采集端配置 type: event #采集端类型,请勿修改 event: normalEvents: #Normal级别事件采集配置 enable: true #是否开启Normal级别事件采集 includeNames: #需要采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp excludeNames: #不采集的事件名,不指定则采集所有事件 - ScaleDown warningEvents: #Warning级别事件采集配置 enable: true #是否开启Warning级别事件采集 includeNames: #需要采集的事件名,不指定则采集所有事件 - NotTriggerScaleUp excludeNames: #不采集的事件名,不指定则采集所有事件 - ScaleDown outputDetail: type: AOM #输出端类型,请勿修改 AOM: events: - name: DeleteNodeWithNoServer #事件名,必选 nameCn: 废弃节点清理 #事件对应的中文名,不填则上报的事件直接显示英文 resourceType: Namespace #事件对应的资源类型 severity: Major #事件上报到AOM后的事件级别,默认Major。可选值:Critical:紧急;Major:重要;Minor:次要;Info:提示
  • 操作步骤 登录CCE控制台,在左侧导航栏中选择“集群管理”。 找到需要变更规格的集群,查看集群的更多操作,并选择“规格变更”。 图1 变更规格 在弹出的页面中,根据实际需求选择新的“集群规模”。 单击“下一步”进行规格确认,并单击“确定”。 您可以在控制台右上角单击“操作记录”查看集群变更记录。状态从“执行中”变为“成功”,表示集群规格变更成功。 当集群规格变更为1000节点及以上时,为了保证集群性能,集群部分参数值会根据集群的规格进行自动调整,详情请参见集群配置管理。 图2 操作记录
  • 使用场景 在云原生网络2.0下,会为每个Pod分配用户VPC网络下的一张网卡,支持为StatefulSet工作负载的Pod(容器网卡)固定IP,适用于需要针对具体IP地址做访问控制、服务注册、服务发现、日志审计等场景。 例如,当有一个需要访问云上数据库的StatefulSet类型业务,需要在对云上数据库进行严格的访问控制,只允许该业务进行访问,则可固定该业务的Pod IP,配置云上数据库的安全组只允许该业务的容器IP可进行访问。
共100000条