华为云用户手册

  • 通过界面操作 创建第三方镜像仓库的密钥。 单击集群名称进入集群,在左侧导航栏选择“配置与密钥”,在右侧选择“密钥”页签,单击右上角“创建密钥”,密钥类型必须选择为kubernetes.io/dockerconfigjson。详细操作请参见创建密钥。 此处的“用户名”和“密码”请填写第三方镜像仓库的账号密码。 图1 添加密钥 创建工作负载时,可以在“镜像名称”中直接填写私有镜像地址,填写的格式为domainname/namespace/imagename:tag,并选择1中创建的密钥。 图2 填写私有镜像地址 填写其他参数后,单击“创建工作负载”。
  • 使用kubectl创建第三方镜像仓库的密钥 请参见通过kubectl连接集群,使用kubectl连接集群。 通过kubectl创建认证密钥 ,该密钥类型为kubernetes.io/dockerconfigjson类型。 kubectl create secret docker-registry myregistrykey -n default --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL 其中,myregistrykey为密钥名称,default为密钥所在的命名空间,其余参数如下所示。 DOCKER_REGISTRY_SERVER:第三方镜像仓库的地址,如“www.3rdregistry.com”或“10.10.10.10:443”。 DOCKER_USER:第三方镜像仓库的账号。 DOCKER_PASSWORD:第三方镜像仓库的密码。 DOCKER_EMAIL:第三方镜像仓库的邮箱。 创建工作负载时使用第三方镜像,具体步骤请参见如下。 kubernetes.io/dockerconfigjson类型的密钥作为私有镜像获取的认证方式,以Pod为例,创建的myregistrykey作为镜像的认证方式。 apiVersion: v1 kind: Pod metadata: name: foo namespace: default spec: containers: - name: foo image: www.3rdregistry.com/janedoe/awesomeapp:v1 imagePullSecrets: - name: myregistrykey #使用上面创建的密钥
  • 创建模板实例 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“应用模板”。 在“我的模板”页签中,单击目标模板下的“安装”。 参照表2设置安装工作负载参数。 表2 安装工作负载参数说明 参数 参数说明 实例名称 新建模板实例名称,命名必须唯一。 命名空间 指定部署的命名空间。 选择版本 选择模板的版本。 配置文件 用户可以导入values.yaml文件,导入后可替换模板包中的values.yaml文件;也可直接在配置框中在线编辑模板参数。 说明: 此处导入的values.yaml文件需符合yaml规范,即KEY:VALUE格式。对于文件中的字段不做任何限制。 导入的value.yaml的key值必须与所选的模板包的values.yaml保持一致,否则不会生效。即key不能修改。 单击“添加文件”。 选择对应的values.yaml文件,单击“打开”。 配置完成后,单击“安装”。 在“模板实例”页签下可以查看模板实例的安装情况。
  • 验证数据持久化及共享性 查看部署的应用及文件。 执行以下命令,查看已创建的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共享一个存储卷。
  • 约束与限制 使用对象存储时,挂载点不支持修改属组和权限。 对于并行文件系统,CCE支持通过OBS SDK方式和PVC挂载方式使用,其中PVC挂载方式是通过OBS服务提供的obsfs工具实现。在节点上每挂载一个并行文件系统对象存储卷,就会产生一个obsfs常驻进程。如下图所示: 图1 obsfs常驻进程 建议为每个obsfs进程预留1G的内存空间,例如4U8G的节点,则建议挂载obsfs并行文件系统的实例不超过8个。 obsfs常驻进程是直接运行在节点上,如果消耗的内存超过了节点上限,则会导致节点异常。例如在4U8G的节点上,运行的挂载并行文件系统卷的实例超过100+,有极大概率会导致节点异常不可用。因此强烈建议控制单个节点上的挂载并行文件系统实例的数量。 在使用obsfs工具时,还需遵循obsfs约束与限制。 安全容器不支持使用对象存储。 挂载普通桶时不支持硬链接(Hard Link)。 OBS限制单用户创建100个桶,当动态创建的PVC数量较多时,容易导致桶数量超过限制,OBS桶无法创建。此种场景下建议直接调用OBS的API或SDK使用OBS,不在工作负载中挂载OBS桶。
  • 通过控制台创建 登录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协议。 监听器配置: 高级配置:选择合适的头字段进行设置。 配置 说明 使用限制 数据压缩 开启将对特定文件类型进行压缩;关闭则不会对任何文件类型进行压缩。 Brotli支持压缩所有类型。 Gzip支持压缩的类型如下: text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml application/atom+xml application/xml application/json。 独享型ELB实例的端口启用HTTP/HTTPS时支持配置。 图1 配置TLS 单击“确定”,创建Service。
  • 通过kubectl命令行创建 以关联已有ELB为例,Service配置数据压缩的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.gzip-enabled: 'true' # 开启数据压缩 spec: selector: app: nginx externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: LoadBalancer loadBalancerIP: **.**.**.** # ELB的IP 表1 关键参数说明 参数 参数类型 描述 kubernetes.io/elb.gzip-enabled String true:开启,将对特定文件类型进行压缩。 false:关闭,不会对任何文件类型进行压缩。在默认情况下数据压缩为关闭。 支持的压缩类型如下: Brotli支持压缩所有类型。 Gzip支持压缩的类型包括:text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml application/atom+xml application/xml application/json。 仅独享型ELB的HTTP/HTTPS类型监听器支持配置。
  • 告警中心概述 云原生告警是可观测性体系里面比较重要的一环。在云原生告警中,除了传统的CPU、内存等资源使用量的告警以外,还有容器重启等事件告警、应用访问失败等自定义的监控指标告警。 CCE的云原生告警能力是由AOM服务提供的,支持指标和事件的告警。同时,CCE集群详情中增加了告警中心能力,能支持快速配置资源等常用告警和告警查看。 图1 告警中心架构 告警中心 基于AOM服务的告警能力实现,提供集群内的告警快速检索、告警快速配置的能力。用户可以通过告警中心一键配置常用的告警规则。 AOM服务 华为云应用运维管理服务,是云上应用的一站式立体化运维管理平台,是云上监控、告警的基础。 SMN服务 华为云的消息通知服务,是云上应用发送告警或通知的依赖服务。在云原生场景中,在AOM服务触发的告警将通过SMN里面配置的短信、电子邮件、HTTP等方式发送。 父主题: 告警中心
  • 查看告警列表 您可以在“告警列表”页面查看最近发送的历史记录。 登录CCE控制台。 在集群列表页面,单击目标集群名称进入详情页。 在左侧导航栏选择“告警中心”,选择“告警列表”页签。 列表中默认展示全部待解决告警,支持按照告警关键字、告警等级,以及告警发生的时间范围筛选。同时支持查看指定筛选条件的告警在不同时间段的分布情况。 待解决告警若十分钟内不再触发,则会默认已解决并转换为历史告警。如果提前确认某条告警已解决,也可以单击操作列的“清除”,清除后的告警可在历史告警中查询。 图1 告警列表
  • 配置告警通知人 联系组是基于消息通知服务 SMN的主题功能实现的,目的是为消息发布者和订阅者提供一个可以相互交流的通道。联系组包含一个或多个订阅终端,您可以通过配置告警联系组,分组管理订阅终端,接收告警信息。联系组创建完成后,需要绑定至告警规则集,这样,当有告警触发时,联系组中的订阅终端就可以收到告警消息了。 登录CCE控制台。 在集群列表页面,单击目标集群名称进入详情页。 在左侧导航栏选择“告警中心”,选择“联系组”页签。 单击“新建联系组”,在弹出的页面中输入联系组参数。 联系组名称:输入联系组名称,创建后不可修改。名称只能包含大写字母、小写字母、数字、-和_,且必须由大写字母、小写字母或数字开头,名称长度为1~255字符。 告警消息显示名:即订阅终端接收消息的标题名称。假设订阅终端为邮件,推送邮件消息时,若已设置告警消息显示名,发件人则呈现为“显示名”,若未设置告警消息显示名,发件人呈现为“username@example.com”。支持在联系组创建完成后修改告警消息显示名。 添加订阅终端:您需要添加一个或多个订阅终端来接收告警消息。终端类型包括短信和邮件,选择“短信”时,请输入有效的手机号码;选择“邮件”时,请输入有效的电子邮件地址。 单击“确定”完成联系组的创建。 返回联系组列表,订阅终端状态为“未确认”,您需要继续执行后续操作,向该终端发送订阅请求,以验证终端有效性。 单击操作列“请求订阅”,向该终端发送订阅请求。若终端收到请求,请按照提示进行确认,确认完成后订阅终端状态将变为“已确认”。 联系组创建并确认后,单击图标启用联系组,实现联系组和告警规则集的绑定。 告警规则集最多支持绑定5个联系组。
  • 开启告警中心 CCE Standard集群和CCE Turbo集群均支持开启告警中心。 在目标集群左侧导航栏选择“告警中心”。 选择“告警规则”页签,单击“开启告警中心”,在弹出的页面中选择一个或多个联系组,以便分组管理订阅终端并接收告警消息。如果当前还没有联系组,请参考配置告警通知人进行创建。 单击“确认”完成功能开启。 告警中心中的指标类告警规则依赖云原生监控插件上报指标数据到AOM Prometheus实例,需要开通监控中心。当您的集群未安装插件或者在安装插件时未对接AOM Prometheus实例,告警中心将不会创建指标类告警规则。开通监控中心请参考开通监控中心。 表1中使用problem_gauge指标的指标类告警规则依赖CCE节点故障检测插件(NPD)。如需要使用相关的告警规则,请确保节点故障检测插件(NPD)已安装且正常运行。 表1中的事件类告警依赖日志中心开启收集Kubernetes事件的能力,详情请参见收集Kubernetes事件。
  • 使用kubectl命令登录容器 使用kubectl连接集群,详情请参见通过kubectl连接集群。 执行以下命令,查看已创建的Pod。 kubectl get pod 示例输出如下: NAME READY STATUS RESTARTS AGE nginx-59d89cb66f-mhljr 1/1 Running 0 11m 查询该Pod中的容器名称。 kubectl get po nginx-59d89cb66f-mhljr -o jsonpath='{range .spec.containers[*]}{.name}{end}{"\n"}' 示例输出如下: container-1 执行以下命令,登录到nginx-59d89cb66f-mhljr这个Pod中名为container-1的容器。 kubectl exec -it nginx-59d89cb66f-mhljr -c container-1 -- /bin/sh 如需退出容器,可执行exit命令。
  • 概览 单击Pod名称,您可以方便地查看资源概况,包括Pod状态、容器数量(异常/总数)以及异常事件。此外,还可以浏览Pod及Pod所在节点近一小时的监控概览,其中包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 同时,概览页面还提供了容器使用趋势功能,您可以从中了解Pod中各容器的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表右上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表左上角进行切换)。 如需了解更多指标,请前往监控页面查看。
  • 监控 在此处,您可以方便地查看Pod在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见使用仪表盘。 图4 Pod监控 CPU相关指标 CPU:Pod 的所有容器在不同的时间段 CPU 使用总量占 Pod 的所有容器 CPU Limit 总量的比例。 CPU 使用量:Pod 已经使用的 CPU 核数。 CPU 申请量:Pod CPU Request 值。 CPU 限制量:Pod CPU Limit 值,使用量接近该值时容器的 CPU 资源会被限流,影响容器性能。 内存相关指标 内存使用率:Pod 的所有容器在不同的时间段内存使用总量占 Pod 的所有容器内存 Limit 总量。 内存使用量:Pod 已经使用的内存量。 内存申请量:Pod 内存 Request 值。 内存限制量:Pod 内存 Limit 值,使用量到达该值时会导致容器 OOM。 网络相关指标 网络总流出速率:Pod 的所有容器每秒钟发送的总字节数。 网络总流入速率:Pod 的所有容器每秒钟接收的总字节数。 容器相关指标 容器CPU使用率:Pod 的每个容器在不同的时间段的 CPU 使用量占它们的 CPU Limit 量的比例。 容器内存使用率:Pod 的每个容器在不同的时间段的内存使用量占它们的内存 Limit 量的比例。 容器CPU受限:Pod 的每个容器在不同的时间段的 CPU 受限时间所占的比例。 容器网络丢包率:Pod 的每个的容器在不同的时间段接收丢失的数据包总量占接收的数据包总量的比例。 其他指标 Pod 历史状态:Pod 在不同时间段所处的状态。 容器历史状态:Pod 的每个容器在不同的时间段所处的状态。
  • Pod列表 Pod列表中包含Pod名称、状态、命名空间、Pod IP、所在节点、重启次数、CPU申请/限制、内存申请/限制、CPU使用率,以及内存使用率等信息。 图1 Pod列表 您可以利用列表上方的命名空间,以及搜索栏中的Pod名称、状态、Pod IP和所在节点进行筛选,快速定位所需的Pod。 您也可以单击“导出”按钮来导出全部Pod数据,或者选择部分Pod进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • 部门成本计算原理 部门是一种逻辑的成本归结单元,用于将不同的集群、命名空间的成本聚合分析。为贴合实际的业务场景,一般会按照实际业务部门设立该成本单元,并关联业务部门使用的集群或者命名空间。 单个集群的成本由业务命名空间成本、未被分配的空闲成本、集群管理成本(CCE集群Master成本+系统命名空间成本)组成。其中未被分配空闲成本以及集群管理成本,被定义为公共成本。当部门按照命名空间进行设置时,需要关联业务命名空间,并设置公共成本的分摊比例。 图2 部门成本计算示例 示例中,Cluster1是部门A的专属集群,Cluster2是部门C的专属集群,而Cluster3为部门A和部门C的共享集群,且命名空间NS1属于部门A,NS2属于部门C。在计算部门成本时,可按照如上图将对应集群或命名空间划入对应部门,并将Cluster3中产生的公共成本设置分摊比例,在部门A和部门C中进行分摊。
  • 计算过程常见问题 Pod Request和Used的资源,应该根据哪个来估算成本,进行计算Pod的费用,Pod的CPU、内存使用量等资源指标是动态变化的,如何做到准确的估算? 在计算成本时的Pod使用量取值为Pod申请量(Request)和实际使用量(used)中的最大值。基于普罗监控数据,可以清晰识别分钟级别的应用资源,进行成本计算。 节点中没有被分配的空闲成本,是如何处理的? 节点中的空闲成本不会被分摊到工作负载或者命名空间成本中,可以作为集群的公共成本分摊到部门。空闲成本在各个部门的分摊比例支持设置。
  • 错误处理建议 超卖节点kubelet重启后,由于Volcano调度器和kubelet的资源视图不同步,部分新调度的作业会出现OutOfCPU的情况,属于正常现象,一段时间后会恢复正常,Volcano调度器能够正常调度在/离线作业。 在/离线作业提交后,因当前内核不支持离线作业修改为在线作业,因此不建议动态修改作业类型(添加或者删除Pod的annotation volcano.sh/qos-level: "-1")。 CCE通过cgroups系统中的状态信息收集节点上所有运行的Pod占用的资源量(CPU/内存),可能与用户监控到的资源使用率有所不同,例如使用top命令看到的资源统计。 对于增加超卖资源类型,如超卖资源由cpu变为cpu、memory,此时可以随时添加。 对于减少超卖资源类型,如由cpu、memory变为仅超卖cpu,此时需要在合适的时间进行更改,即分配率不超过100%时才可进行安全更改。 当离线作业先部署到节点,并占用了在线作业的资源,导致资源不足在线作业无法调度时,需要为在线作业设置比离线作业更高的priorityClass。 若节点上只有在线作业,且达到了驱逐水位线,则离线作业调度到当前节点后会很快被驱逐,此为正常现象。
  • kubelet超卖 规格约束 集群版本: v1.19集群:v1.19.16-r4及以上版本 v1.21集群:v1.21.7-r0及以上版本 v1.23集群:v1.23.5-r0及以上版本 v1.25及以上版本 集群类型:CCE Standard集群或CCE Turbo集群。 节点OS:EulerOS 2.9 (内核kernel-4.18.0-147.5.1.6.h729.6.eulerosv2r9.x86_64)或者Huawei Cloud EulerOS 2.0 节点类型:弹性虚拟机。 Volcano插件版本:1.7.0及以上版本。 使用限制 使用超卖特性时,需保证Volcano未启用overcommit插件。 修改超卖节点标签不会影响已经运行的pod。 运行中的pod无法进行在线和离线业务转换,如需转换需要重建pod。 集群中有节点配置超卖标签volcano.sh/oversubscription=true时,Volcano插件必须要增加oversubscription配置,否则会导致超卖节点调度异常。标签配置需要由用户保证,调度器不会对插件和节点配置进行检查。详细标签说明请参见表1。 超卖特性开关目前不支持统一配置,若要关闭超卖特性,需要同时进行以下操作: 去掉超卖节点的volcano.sh/oversubscription标签。 设置节点池的超卖开关over-subscription-resource为false。 修改Volcano调度器的名字为volcano-scheduler-configmap的configmap,并去掉oversubscription插件。 当节点设置cpu-manager-policy为静态绑核时,不允许将离线Pod设置为Guaranteed的Pod,若需要绑核则需要调整Pod为在线Pod,否则可能会发生离线Pod占用在线Pod的CPU导致在线Pod启动失败,以及离线Pod虽然调度成功但仍然启动失败的情况。 当节点设置cpu-manager-policy为静态绑核时,不应对所有在线Pod进行绑核,否则会出现在线Pod占用了所有的CPU或者memory资源导致上报的超卖资源很少的情况。
  • 域名双向认证 CCE当前支持域名双向认证。 集群API Server绑定EIP后,使用kubectl连接集群时域名双向认证默认不开启,可通过 kubectl config use-context externalTLSVerify 命令切换到externalTLSVerify这个context开启使用。 集群绑定或解绑弹性IP、配置或更新自定义域名时,集群服务端证书将同步签入最新的集群访问地址(包括集群绑定的弹性IP、集群配置的所有自定义域名)。 异步同步集群通常耗时约5-10min,同步结果可以在操作记录中查看“同步证书”。 对于已绑定EIP的集群,如果在使用双向认证时出现认证不通过的情况(x509: certificate is valid),需要重新绑定EIP并重新下载kubeconfig.yaml。 早期未支持域名双向认证时,kubeconfig.yaml中包含"insecure-skip-tls-verify": true字段,如图3所示。如果需要使用双向认证,您可以重新下载kubeconfig.yaml文件并配置开启域名双向认证。 图3 未开启域名双向认证
  • 常见问题 Error from server Forbidden 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: # kubectl get deploy Error from server (Forbidden): deployments.apps is forbidden: User "0c97ac3cb280f4d91fa7c0096739e1f8" cannot list resource "deployments" in API group "apps" in the namespace "default" 原因是用户没有操作该Kubernetes资源的权限,请参见命名空间权限(Kubernetes RBAC授权)为用户授权。 The connection to the server localhost:8080 was refused 使用kubectl在创建或查询Kubernetes资源时,显示如下内容: The connection to the server localhost:8080 was refused - did you specify the right host or port? 原因是由于该kubectl客户端未配置集群认证,请参见3进行配置。
  • 使用kubectl连接集群 若您需要从客户端计算机连接到Kubernetes集群,可使用Kubernetes命令行客户端kubectl,您可登录CCE控制台,单击待连接集群名称,在集群总览页面查看访问地址以及kubectl的连接步骤,如图1所示。 CCE支持“内网访问”和“公网访问”两种方式访问集群。 内网访问:访问集群的客户端机器需要位于集群所在的同一VPC内。 公网访问:访问集群的客户端机器需要具备访问公网的能力,并为集群绑定公网地址。 通过“公网访问”方式访问集群,您需要在总览页中的“连接信息”版块为集群绑定公网地址,如图1所示。绑定公网集群的kube-apiserver将会暴露到互联网,存在被攻击的风险,建议对kube-apiserver所在节点的EIP配置DDoS高防服务或设置安全组规则。 图1 集群连接信息 您需要先下载kubectl以及配置文件,复制到您的客户端机器,完成配置后,即可以访问Kubernetes集群。使用kubectl连接集群的步骤如下: 下载kubectl 您需要准备一台可访问公网的客户端计算机,并通过命令行方式安装kubectl。如果已经安装kubectl,则跳过此步骤,您可执行kubectl version命令判断是否已安装kubectl。 本文以Linux环境为例安装和配置kubectl,详情请参考安装kubectl。 登录到您的客户端机器,下载kubectl。 cd /home curl -LO https://dl.k8s.io/release/{v1.25.0}/bin/linux/amd64/kubectl 其中{v1.25.0}为指定的版本号,请根据集群版本进行替换。 安装kubectl。 chmod +x kubectl mv -f kubectl /usr/local/bin 获取kubectl配置文件 在集群总览页中的“连接信息”版块,单击kubectl后的“配置”按钮,查看kubectl的连接信息,并在弹出页面中选择“内网访问”或“公网访问”,然后下载对应的配置文件。 图2 下载配置文件 kubectl配置文件(kubeconfig)用于对接认证集群,请您妥善保存该认证凭据,防止文件泄露后,集群有被攻击的风险。 IAM用户下载的配置文件所拥有的Kubernetes权限与CCE控制台上IAM用户所拥有的权限一致。 如果Linux系统里面配置了KUBECONFIG环境变量,kubectl会优先加载KUBECONFIG环境变量,而不是$home/.kube/config,使用时请注意。 配置kubectl 以Linux环境为例配置kubectl。 登录到您的客户端机器,复制2中下载的配置文件(以kubeconfig.yaml为例)到您客户端机器的/home目录下。 配置kubectl认证文件。 cd /home mkdir -p $HOME/.kube mv -f kubeconfig.yaml $HOME/.kube/config 根据使用场景,切换kubectl的访问模式。 VPC内网接入访问请执行: kubectl config use-context internal 互联网接入访问请执行(集群需绑定公网地址): kubectl config use-context external 互联网接入访问如需开启双向认证请执行(集群需绑定公网地址): kubectl config use-context externalTLSVerify 关于集群双向认证的说明请参见域名双向认证。
  • 权限说明 kubectl访问CCE集群是通过集群上生成的配置文件(kubeconfig)进行认证,kubeconfig文件内包含用户信息,CCE根据用户信息的权限判断kubectl有权限访问哪些Kubernetes资源。即哪个用户获取的kubeconfig文件,kubeconfig就拥有哪个用户的信息,这样使用kubectl访问时就拥有这个用户的权限。 用户拥有的权限请参见集群权限(IAM授权)与命名空间权限(Kubernetes RBAC授权)的关系。
  • 使用NPU 创建工作负载申请NPU资源,可按如下方法配置,指定显卡的数量。 kind: Deployment apiVersion: apps/v1 metadata: name: npu-test namespace: default spec: replicas: 1 selector: matchLabels: app: npu-test template: metadata: labels: app: npu-test spec: containers: - name: container-0 image: nginx:perl resources: limits: cpu: 250m huawei.com/ascend-310: '1' memory: 512Mi requests: cpu: 250m huawei.com/ascend-310: '1' memory: 512Mi imagePullSecrets: - name: default-secret 通过huawei.com/ascend-310指定申请NPU的数量。 使用huawei.com/ascend-310参数指定NPU数量时,requests和limits值需要保持一致。 指定huawei.com/ascend-310后,在调度时不会将负载调度到没有NPU的节点。如果缺乏NPU资源,会报类似“0/2 nodes are available: 2 Insufficient huawei.com/ascend-310.”的Kubernetes事件。 在CCE控制台使用NPU资源,只需在创建工作负载时,勾选NPU配额,并指定使用NPU芯片的数量。 图1 使用NPU
  • 配置重定向规则 表2 重定向规则注解 参数 类型 描述 nginx.ingress.kubernetes.io/permanent-redirect String 将访问请求永久重定向至某个目标网址(状态码为301)。 nginx.ingress.kubernetes.io/permanent-redirect-code String 修改永久重定向的返回状态码为指定值。 nginx.ingress.kubernetes.io/temporal-redirect String 将访问请求临时重定向至某个目标网址(状态码为302)。 nginx.ingress.kubernetes.io/ssl-redirect String 是否只能通过SSL访问(当Ingress包含证书时默认为true),将HTTP请求重定向至HTTPS。 nginx.ingress.kubernetes.io/force-ssl-redirect String 是否强制重定向到HTTPS,即使Ingress未启用TLS,通过HTTP访问时,请求将会被强制重定向(状态码为308)到HTTPS。 具体使用场景和说明请参见Nginx Ingress配置重定向规则。
  • 创建一致性哈希负载均衡规则 表5 一致性哈希负载均衡注解 参数 类型 描述 nginx.ingress.kubernetes.io/upstream-hash-by String 为后端启用一致性哈希进行负载均衡,参数值支持nginx参数、文本值或任意组合,例如: nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri"代表按照请求uri进行hash。 nginx.ingress.kubernetes.io/upstream-hash-by: "$request_uri$host"代表按照请求uri和域名进行hash。 nginx.ingress.kubernetes.io/upstream-hash-by: "${request_uri}-text-value"代表按照请求uri和文本值进行hash。 具体使用场景和说明请参见Nginx Ingress使用一致性哈希负载均衡。
  • Ingress类型 表1 Ingress类型注解 参数 类型 描述 支持的集群版本 kubernetes.io/ingress.class String nginx:表示使用Nginx Ingress。 cce:表示使用自研ELB Ingress。 通过API接口创建Ingress时必须增加该参数。 v1.23及以上集群使用ingressClassName参数代替,详情请参见通过Kubectl命令行创建Nginx Ingress。 仅v1.21及以下集群 上述注解的使用方法详情请参见通过Kubectl命令行创建Nginx Ingress。
  • 自定义Body体大小 表7 自定义Body体大小注解 参数 类型 描述 nginx.ingress.kubernetes.io/proxy-body-size String 当请求中的Body体大小超过允许的最大值时,将向客户端返回413错误,您可通过该参数调整Body体的限制大小。该参数值的基本单位为字节,您可以使用k、m、g等参数单位,换算关系如下: 1g=1024m;1m=1024k;1k=1024字节 例如: nginx.ingress.kubernetes.io/proxy-body-size: 8m
  • 域名正则化 Nginx Ingress支持配置“nginx.ingress.kubernetes.io/server-alias”注解实现域名配置正则表达式。 请参见通过kubectl连接集群,使用kubectl连接集群。 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。 vi ingress-test.yaml 以正则表达式~^www\.\d+\.example\.com$,abc.example.com为例,表示使用www.{一个或多个数字}.example.com和abc.example.com域名也可正常访问Ingress。 1.23及以上版本集群 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/server-alias: '~^www\.\d+\.example\.com$,abc.example.com' name: ingress-test namespace: default spec: rules: - host: foo.bar.com http: paths: - backend: service: name: nginx-93244 #替换为您的目标服务名称 port: number: 80 #替换为您的目标服务端口 path: / pathType: ImplementationSpecific ingressClassName: nginx 1.21及以下版本集群 apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ server-alias: '~^www\.\d+\.example\.com$,abc.example.com' name: ingress-test namespace: default spec: rules: - host: foo.bar.com http: paths: - path: '/' backend: serviceName: nginx-test #替换为您的目标服务名称 servicePort: 80 #替换为您的目标服务端口 执行以下命令,创建Ingress。 kubectl create -f ingress-test.yaml 预期输出: ingress.networking.k8s.io/ingress-test created 查看Nginx Ingress Controller的配置。 执行以下命令,查看Nginx Ingress Controller服务的Pod kubectl get pods -n kube-system | grep nginx-ingress-controller 预期输出: cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx 1/1 Running 0 18h cceaddon-nginx-ingress-controller-68d7bcc67-cxxxx 1/1 Running 0 18h 执行以下命令,查看Nginx Ingress Controller的配置 kubectl exec -n kube-system cceaddon-nginx-ingress-controller-68d7bcc67-dxxxx cat /etc/nginx/nginx.conf | grep -C3 "foo.bar.com" 预期输出: ## start server foo.bar.com server { server_name foo.bar.com abc.example.com ~^www\.\d+\.example\.com$ ; listen 80 ; listen [::]:80 ; -- } } ## end server foo.bar.com 执行以下命令,获取Ingress对应的IP。 kubectl get ingress 预期输出: NAME CLASS HOSTS ADDRESS PORTS AGE nginx-test nginx foo.bar.com 10.3.xx.xx 80 14m 执行以下命令,测试不同规则下的服务访问。 执行以下命令,通过Host: foo.bar.com访问服务。 curl -H "Host: foo.bar.com" 10.3.xx.xx/ 预期可正常访问网页。 执行以下命令,通过Host: www.123.example.com访问服务 curl -H "Host: www.123.example.com" 10.3.xx.xx/ 预期可正常访问网页。 执行以下命令,通过Host: www.321.example.com访问服务 curl -H "Host: www.321.example.com" 10.3.xx.xx/ 预期可正常访问网页。
  • 约束与限制 单个GPU卡最多虚拟化成20个GPU虚拟设备。 使用GPU虚拟化后,不支持init容器。 GPU虚拟化支持显存隔离、显存与算力隔离两种隔离模式。单个GPU卡仅支持调度同一种隔离模式的工作负载。 使用GPU虚拟化后,不支持使用Autoscaler插件自动扩缩容GPU虚拟化节点。 XGPU服务的隔离功能不支持以UVM的方式申请显存,即调用CUDA API cudaMallocManaged(),更多信息,请参见NVIDIA官方文档。请使用其他方式申请显存,例如调用cudaMalloc()等。 受GPU虚拟化技术的限制,容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。
共100000条