华为云用户手册

  • 删除备份 删除集群中创建的备份对象及其相关对象(比如: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桶)中的内容不要人为进行手动删除。
  • 创建存储库 这里的备份存储库是指 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的日志即可。
  • 周期备份 操作后会基于配置以一定的周期重复性地执行备份过程,比较适用于容灾。 编辑 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可进行访问。
  • 约束限制 仅以下指定版本的 CCE Turbo 集群支持用户配置Pod固定IP: v1.19集群:v1.19.16-r6及以上版本 v1.21集群:v1.21.9-r0及以上版本 v1.23集群:v1.23.7-r0及以上版本 v1.25集群:v1.25.3-r0及以上版本 v1.25以上版本集群 目前只支持StatefulSet类型的Pod或无ownerReferences的Pod固定IP,暂不支持Deployment、DaemonSet等其他类型的工作负载配置Pod固定IP,且不支持已设置HostNetwork的Pod配置固定IP。 对Pod的IP地址无明确要求的业务不建议配置固定IP,因为配置了固定IP的Pod,Pod重建的耗时会略微变长同时IP地址的利用率会下降。 暂不支持CCE Turbo集群中BMS节点上的Pod配置固定IP。在BMS节点(使用弹性网卡)跟E CS 节点(使用辅助弹性网卡)混合使用的CCE Turbo集群中,需要为Pod设置节点亲和性调度,以保证Pod不会调度到BMS节点,否则将导致固定IP无法保留。 暂不支持CCE Turbo集群的边缘节点上的Pod配置固定IP。在边缘节点跟中心侧节点混合使用的CCE Turbo集群中,需要为Pod设置节点亲和性调度,以保证Pod不会调度到边缘节点,否则将导致固定IP无法保留。 不支持直接修改Pod对象的固定IP的annotations的值,如果直接修改的话,后台不会生效;如有修改诉求,请直接修改对应的StatefulSet工作负载spec.template字段下的annotations配置。 当固定IP的Pod重建调度时,如果待调度的节点上没有剩余的网卡配额(预绑定的网卡会占用节点的网卡配额),固定IP的网卡会尝试抢占预绑定的网卡,此时固定IP的Pod启动会略微变慢。使用固定IP的节点,请合理配置节点网卡动态预热以确保不会全预热网卡。
  • 通过kubectl命令行设置 您可以通过对StatefulSet添加annotations来设置是否开启Pod固定IP功能,如下所示。 apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: serviceName: nginx replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: pod.alpha.kubernetes.io/initialized: 'true' yangtse.io/static-ip: 'true' yangtse.io/static-ip-expire-no-cascading: 'false' yangtse.io/static-ip-expire-duration: 5m spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret 表1 Pod固定IP的annotation配置 annotation 默认值 参数说明 取值范围 yangtse.io/static-ip false 是否开启Pod固定IP,只有StatefulSet类型的Pod或无ownerReferences的Pod支持,默认不开启。 "false"或"true" yangtse.io/static-ip-expire-duration 5m 删除固定IP的Pod后,对应的固定IP网卡过期回收的时间间隔。 支持时间格式为Go time type,例如1h30m、5m。关于Go time type,请参见Go time type。 yangtse.io/static-ip-expire-no-cascading false 是否关闭StatefulSet工作负载的级联回收。 默认为false,表示StatefulSet删除后,会级联删除对应的固定IP网卡。如果您需要在删除StatefulSet对象后,在网卡过期回收时间内保留对应的固定IP,用于下一次重建同名的StatefulSet再次使用对应的固定IP,请将该参数设为true。 "false"或"true"
  • 指标清单 Prometheus Server视图使用的指标清单如下: 表2 Prometheus Server指标说明 指标 类型 描述 prometheus_target_sync_length_seconds_sum Summary 不同的target的采集时延 prometheus_sd_discovered_targets Gauge 不同的target采集的指标数 prometheus_target_interval_length_seconds_sum Summary 指标采集间隔 prometheus_target_scrapes_exceeded_body_size_limit_total Counter 采集失败的次数 prometheus_tsdb_head_samples_appended_total Counter head中添加的samples的总数 prometheus_tsdb_head_series Gauge head中保存的series数量 prometheus_tsdb_head_chunks Gauge head中存放的chunk数量 prometheus_engine_query_duration_seconds_count Counter 查询普罗query的次数 prometheus_engine_query_duration_seconds Counter 不同分片的响应时间耗时 prometheus_remote_storage_highest_timestamp_in_seconds Gauge 远程存储里最新的时间戳 prometheus_remote_storage_queue_highest_sent_timestamp_seconds Gauge 普罗分片里最新的时间戳 prometheus_remote_storage_bytes_total Counter 压缩后队列发送的数据(非元数据)的总字节数 prometheus_remote_storage_shards Gauge 当前用于并行发送到远程存储的分片数 prometheus_remote_storage_shards_max Gauge 可用于并行发送到远程存储的分片数的最大值 prometheus_remote_storage_shards_min Gauge 可用于并行发送到远程存储的分片数的最小值 prometheus_remote_storage_shards_desired Gauge 分片队列期望基于输入样本和输出样本的比率运行的分片数 prometheus_remote_storage_shard_capacity Gauge 用于并行发送到远程存储的队列中每个分片的容量 prometheus_remote_storage_pending_samples Gauge 要发送到远程存储的队列分片中挂起的样本数 prometheus_tsdb_wal_segment_current Gauge TSDB当前正在写入的WAL段索引 prometheus_wal_watcher_current_segment Gauge WAL正在从中读取记录的当前段 prometheus_remote_storage_dropped_samples_total Gauge 在通过远程写入发送之前,从WAL读取后丢弃的样本速率。 prometheus_remote_storage_failed_samples_total Gauge 发送到远程存储时失败的样本失败速率,不可恢复的错误的次数。 prometheus_remote_storage_retried_samples_total Gauge 在发送到远程存储时失败但由于发送错误可恢复而重试的次数 prometheus_remote_storage_enqueue_retries_total Gauge 由于分片队列已满而入队失败重试的次数
  • 插件卸载 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“插件中心”,进入插件中心首页。 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“卸载”。 表2 特殊场景说明 特殊场景描述 场景现象 场景说明 CCE集群无节点,卸载插件。 插件卸载失败。 bursting插件卸载时会在集群中启动Job用于清理资源,卸载插件时请保证集群中至少有一个可以调度的节点。 用户直接删除集群,未卸载插件。 用户在CCI侧的命名空间中有资源残留,如果命名空间有计费资源,会造成额外计费。 由于直接删除集群,没有执行插件的资源清理Job,造成资源残留。用户可以手动清除残留命名空间及其下的计费资源来避免额外计费。 关于CCE突发弹性引擎(对接CCI)更多内容详情请参见:CCE突发弹性引擎(对接CCI)。
  • 工作负载下发 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“工作负载”,进入工作负载首页。 单击“创建工作负载”,具体操作步骤详情请参见创建工作负载。 填写基本信息。“CCI弹性承载”选择“强制调度策略”。关于调度策略更多信息,请参考调度负载到CCI。 进行容器配置。 配置完成后,单击“创建工作负载”。 在工作负载页面,选择工作负载名称,单击进入工作负载管理界面。 工作负载所在节点为CCI集群,说明负载成功已调度到CCI。
  • 版本记录 表3 CCE突发弹性引擎(对接CCI)插件版本记录 插件版本 支持的集群版本 更新特性 1.5.2 v1.21 v1.23 v1.25 v1.27 v1.28 支持弹性至CCI 2.0。 1.3.57 v1.21 v1.23 v1.25 v1.27 v1.28 适配CCE v1.28集群。 1.3.54 v1.21 v1.23 v1.25 v1.27 修复部分问题。 1.3.48 v1.21 v1.23 v1.25 v1.27 支持v1.25、v1.27版本集群 支持JuiceFS类型的存储 1.3.44 v1.17 v1.19 v1.21 v1.23 支持Pod配置全域弹性公网IP 1.3.35 v1.17 v1.19 v1.21 v1.23 支持原地升级镜像 支持ReadinessGates 1.3.25 v1.17 v1.19 v1.21 v1.23 支持DownwardAPI Volume 支持Projected Volume 支持自定义StorageClass 1.3.19 v1.17 v1.19 v1.21 v1.23 支持schedule profile 1.3.7 v1.17 v1.19 v1.21 v1.23 支持v1.21、v1.23版本集群 1.2.12 v1.13 v1.15 v1.17 v1.19 新增了部分metrics指标 支持HPA与CustomedHPA 支持将弹性到CCI的Pod中的hostPath转换为其它类型存储 修复Kubernetes Dashboard无法使用终端问题 1.2.5 v1.13 v1.15 v1.17 v1.19 支持CCE Turbo集群 自动清理CCI中不再被Pod依赖的资源 支持配置Requests与Limits不相等,弹性到CCI时的资源申请量以Limits为准 修复CCI命名空间不存在时插件卸载失败问题 增加对Pod规格超过CCI限制的创建请求的拦截 1.2.0 v1.13 v1.15 v1.17 v1.19 支持v1.19版本集群 支持SFS、SFS Turbo类型存储 支持CronJob 支持配置envFrom 日志文件自动转储 屏蔽TCPSocket类型健康检查 支持配置资源标签(pod-tag) 提升了性能和可靠性 修复了一些已知问题 1.0.5 v1.13 v1.15 v1.17 支持v1.17版本集群
  • 安装插件 登录CCE控制台。 选择CCE集群,单击进入CCE集群总览页面。 在导航栏左侧单击“插件中心”,进入插件中心首页。 选择“CCE 突发弹性引擎 (对接 CCI)”插件,单击“安装”。 配置插件参数。 表1 插件参数说明 插件参数 说明 选择版本 插件的版本。插件版本和CCE集群存在配套关系,更条信息可以参考CCE突发弹性引擎(对接CCI)插件版本记录。 规格配置 用于配置插件负载的实例数。 网络互通 勾选后将开启CCE集群和CCI两侧pod互访的功能,用户可以根据自身业务选择是否打开。详细功能介绍请参考网络。
  • 容器IP地址管理 容器隧道网络按如下规则分配容器IP: 容器网段需单独分配,与节点网段无关 节点维度划分地址段,集群的所有节点从容器网段中分配一个或多个固定大小(默认16)的IP网段 当节点上的IP地址使用完后,可再次申请分配一个新的IP网段 容器网段依次循环分配IP网段给新增节点或存量节点 调度到节点上的Pod依次循环从分配给节点的一个或多个IP网段内分配IP地址 图2 容器隧道网络IP地址分配 按如上IP分配,容器隧道网络的集群最多能创建节点数量 = 容器网段IP数量 ÷ 节点从容器网段中一次分配的IP网段大小(默认为16) 比如容器网段为172.16.0.0/16,则IP数量为65536,一次分配16,则最多可创建节点数量为65536/16=4096。这是一种极端情况,如果创建4096个节点,则每个节点最多只能创建16个Pod,因为给每个节点只分配了16个IP的网段。另外集群能创建多少节点,还受节点网络和集群规模的影响。 图3 网络模型选择(创建集群时配置)
  • 容器隧道网络模型 容器隧道网络在节点网络基础上通过隧道封装构建的独立于节点网络平面的容器网络平面,CCE集群容器隧道网络使用的封装协议为VXLAN,后端虚拟交换机采用的是Open vSwitch,VXLAN是将以太网报文封装成UDP报文进行隧道传输。容器隧道网络具有付出少量隧道封装性能损耗,即可获得通用性强、互通性强、高级特性支持全面(例如NetworkPolicy网络隔离)的优势,可以满足大多数性能要求不高的场景。 图1 容器隧道网络 说明如下: 节点内Pod间通信:同节点的Pod间通信直接通过本节点的OVS网桥直接转发。 跨节点Pod间通信:所有跨节点Pod间的通信通过OVS隧道网桥进行封装后,转发到对端节点上。
  • 应用场景 对性能要求不高:由于需要额外的VXLAN隧道封装,相对于另外两种容器网络模式,性能存在一定的损耗。大概有5%-15%的性能损失。所以容器隧道网络适用于对性能要求不是特别高的业务场景,比如:Web应用、访问量不大的数据中台、后台服务等。 大规模组网:相比VPC路由网络受限于VPC路由条目配额的限制,容器隧道网络没有网络基础设施的任何限制;同时容器隧道网络把广播域控制到了节点级别,容器隧道网络最大可支持2000节点规模。
  • 网段规划建议 在集群网络构成中介绍集群中网络地址可分为节点网络、容器网络、服务网络三块,在规划网络地址时需要从如下方面考虑: 三个网段不能重叠,否则会导致冲突。且集群所在VPC下所有子网(包括扩展网段子网)不能和容器网段、服务网段冲突。 保证每个网段有足够的IP地址可用。 节点网段的IP地址要与集群规模相匹配,否则会因为IP地址不足导致无法创建节点。 容器网段的IP地址要与业务规模相匹配,否则会因为IP地址不足导致无法创建Pod。每个节点上可以创建多少Pod还与其他参数设置相关,具体请参见节点可创建的最大Pod数量说明。
  • 组件介绍 工作负载弹性组件介绍 表1 工作负载弹性组件 类型 组件名称 组件介绍 参考文档 HPA Kubernetes Metrics Server Kubernetes内置组件,实现Pod水平自动伸缩的功能,即Horizontal Pod Autoscaling。在kubernetes社区HPA功能的基础上,增加了应用级别的冷却时间窗和扩缩容阈值等功能。 HPA策略 CustomedHPA CCE容器弹性引擎 自研的弹性伸缩增强能力,主要面向无状态工作负载进行弹性扩缩容。能够基于指标(CPU利用率、内存利用率)或周期(每天、每周、每月或每年的具体时间点)。 CustomedHPA策略 Prometheus(停止维护) 云原生监控插件 一套开源的系统监控报警框架,负责采集kubernetes集群中kubelet的公开指标项(CPU利用率、内存利用率)。 CronHPA CCE容器弹性引擎 CronHPA可以实现在固定时间段对集群进行扩缩容,并且可以和HPA策略共同作用,定时调整HPA伸缩范围,实现复杂场景下的工作负载伸缩。 CronHPA定时策略 节点弹性伸缩组件介绍 表2 节点弹性组件 组件名称 组件介绍 适用场景 参考文档 CCE集群弹性引擎 Kubernetes社区开源组件,用于节点水平伸缩,CCE在其基础上提供了独有的调度、弹性优化、成本优化的功能。 全场景支持,适合在线业务、深度学习、大规模成本算力交付等。 节点自动伸缩 CCE突发弹性引擎(对接CCI) 将Kubernetes API扩展到无服务器的容器平台(如CCI),无需关心节点资源。 适合在线突增流量、CI/CD、大数据作业等场景。 CCE容器实例弹性伸缩到CCI服务
  • 背景介绍 随着Kubernetes已经成为云原生应用编排、管理的事实标准,越来越多的应用选择向Kubernetes迁移,用户也越来越关心在Kubernetes上应用如何快速扩容面对业务高峰,以及如何在业务低谷时快速缩容节约资源与成本。 在Kubernetes的集群中,“弹性伸缩”一般涉及到扩缩容Pod个数以及Node个数。Pod代表应用的实例数(每个Pod包含一个或多个容器),当业务高峰的时候需要扩容应用的实例个数。所有的Pod都是运行在某一个节点(虚机或裸机)上,当集群中没有足够多的节点来调度新扩容的Pod,那么就需要为集群增加节点,从而保证业务能够正常提供服务。 弹性伸缩在CCE上的使用场景非常广泛,典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理、定时周期性负载变化等。
  • CCE弹性伸缩 CCE的弹性伸缩能力分为如下两个维度: 工作负载弹性伸缩:即调度层弹性,主要是负责修改负载的调度容量变化。例如,HPA是典型的调度层弹性组件,通过HPA可以调整应用的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。 节点弹性伸缩:即资源层弹性,主要是集群的容量规划不能满足集群调度容量时,会通过弹出ECS或CCI等资源的方式进行调度容量的补充。CCE容器实例弹性到CCI服务的方法请参见CCE容器实例弹性伸缩到CCI服务。 两个维度的弹性组件与能力可以分开使用,也可以结合在一起使用,并且两者之间可以通过调度层面的容量状态进行解耦,详情请参见使用HPA+CA实现工作负载和节点联动弹性伸缩。
  • 安装插件 登录CCE控制台,单击CCE Turbo集群名称进入集群,单击左侧导航栏的“插件中心”。 在“插件中心”页面右侧找到云原生监控插件,单击“安装”。 在监控CCE Turbo集群容器网络扩展指标的场景下,建议您关注以下配置。该插件的其他配置可按需进行设置,详情请参见云原生监控插件。 部署模式:此处选择“Server模式”,使用本地存储监控数据,监控数据可选择是否对接AOM或三方监控平台。如果使用“Agent模式”,则指标必须对接AOM或第三方监控平台,您可根据需求进行选择。 自定义指标采集:该配置在本实践中必须选择开启,否则将无法采集容器网络扩展指标。 (可选)安装Grafana:选择安装Grafana后,可以使用图表查看指标。 该配置在3.9.0以下版本的插件中支持。对于3.9.0及以上版本的插件,如果存在使用Grafana的需求,请单独安装Grafana。 在“插件中心”页面右侧找到CCE容器网络扩展指标插件,单击“安装”。 当前该插件无可配置参数。 (可选)对于3.9.0及以上版本的云原生监控插件,不再默认提供Grafana组件。您可以在“插件中心”页面右侧找到独立的Grafana插件,单击“安装”。 选择“开启节点访问”,将会在monitoring命名空间创建一条名为grafana-oss的Nodeport类型的Service。在Node绑定EIP的情况下,可直接使用浏览器输入“eip:port”地址进行访问。 开启节点访问将会把开源Grafana服务暴露至公网访问,建议评估安全风险并做好访问策略的管控。
  • 监控容器网络扩展指标 编辑容器网络扩展指标插件的DaemonSet配置,添加Ports信息。 1.3.10以下版本的容器网络扩展指标插件需手动操作,1.3.10及以上版本自动添加该配置,可跳过此步骤。 kubectl edit ds -nkube-system dolphin 添加如下配置: ... spec: containers: - name: dolphin ports: - containerPort: 10001 name: dolphin protocol: TCP ... 配置PodMonitor后,Prometheus就会自动采集CCE容器网络扩展指标。 pod-monitor.yaml文件配置参考如下: apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: dolphin namespace: monitoring spec: namespaceSelector: matchNames: - kube-system jobLabel: podmonitor-dolphin podMetricsEndpoints: - interval: 15s path: /metrics port: dolphin tlsConfig: insecureSkipVerify: true selector: matchLabels: app: dolphin 创建PodMonitor资源: kubectl apply -f pod-monitor.yaml
  • 通过Prometheus查看指标 创建一个示例监控任务,详情请参见下发监控任务。 apiVersion: crd.dolphin.io/v1 kind: MonitorPolicy metadata: name: example-task #监控任务名 namespace: kube-system #必填,namespace必须为kube-system spec: selector: #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器 matchLabels: app: nginx matchExpressions: - key: app operator: In values: - nginx podLabel: [] #选填,用户标签 ip4Tx: #选填,ipv4发送报文数和发送字节数这两个指标的开关,默认不开 enable: true ip4Rx: #选填,ipv4接收报文数和接收字节数这两个指标的开关,默认不开 enable: true ip4TxInternet: #选填,ipv4发送公网报文数和发送公网字节数这两个指标的开关,默认不开 enable: true healthCheck: #选填,本地节点 Pod 健康检查任务中最近一次健康检查是否健康、健康检查总健康&不健康次数这三个指标开关,默认不开 enable: true # true false failureThreshold: 3 #选填,健康检查不健康判定失败次数,默认1次健康检查失败即判定不健康 periodSeconds: 5 #选填,健康检查任务检查间隔时间,单位秒,默认60 command: "" #选填,健康检查任务检查命令,支持:ping、arping、curl,默认 ping ipFamilies: [""] #选填,健康检查IP地址族,支持:ipv4,默认ipv4 port: 80 #选填,使用curl时必选,端口号 path: "" #选填,使用curl时必选,http api 路径 monitor: ip: ipReceive: aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 ipSend: aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcp: tcpReceive: aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpSend: aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpRetrans: aggregateType: flow #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控 tcpRtt: aggregateType: flow #选填,支持填写"flow",表示流粒度监控,单位:微秒 tcpNewConnection: aggregateType: pod #选填,支持填写"pod",表示pod粒度监控 为Prometheus创建一个公网LoadBalancer类型的Service,提供公网访问。 apiVersion: v1 kind: Service metadata: name: prom-lb #服务名称,可自定义 namespace: monitoring labels: app: prometheus component: server annotations: kubernetes.io/elb.id: 038ff*** #请替换为集群所在VPC下的ELB实例ID,且ELB实例为公网访问类型 spec: ports: - name: cce-service-0 protocol: TCP port: 88 #服务端口号,可自定义 targetPort: 9090 #Prometheus的默认端口号,无需更改 selector: #标签选择器可根据Prometheus Server实例的标签进行调整 app.kubernetes.io/name: prometheus prometheus: server type: LoadBalancer 创建完成后在浏览器访问“负载均衡公网IP地址:服务端口”,访问Prometheus。您可以在Prometheus页面中搜索支持的监控项,验证指标是否采集成功。 图1 访问Prometheus
  • (可选)通过Grafana查看图表 在集群中安装Grafana后,在“插件中心”页面右侧找到Grafana插件,单击“访问”。 输入您的Grafana登录账号及密码。 单击Grafana页面左侧导航栏中的“Explore”,然后在页面上方选择“Prometheus”,输入PromQL查询指令,例如“rate(dolphin_ip4_send_pkt_internet[5m])”,然后单击右上角“Run query”即可获取指标图表。 图2 Grafana图表 您也可以将常用图表固定为Grafana Dashboard,详情请参见Create a dashboard。
  • 约束与限制 建议其他资源不要使用Ingress自动创建的ELB实例,否则在删除Ingress时,ELB实例会被占用,导致资源残留。 添加Ingress后请在CCE页面对所选ELB实例进行配置升级和维护,不可在ELB页面对配置进行更改,否则可能导致Ingress服务异常。 Ingress转发策略中注册的URL需与后端应用提供访问的URL一致,否则将返回404错误。 IPVS模式集群下,Ingress和Service使用相同ELB实例时,无法在集群内的节点和容器中访问Ingress,因为kube-proxy会在ipvs-0的网桥上挂载LB类型的Service地址,Ingress对接的ELB的流量会被ipvs-0网桥劫持。建议Ingress和Service使用不同ELB实例。 请勿将Ingress与使用HTTP的Service对接同一个ELB下的同一个监听器,否则将产生端口冲突。 独享型ELB规格必须支持应用型(HTTP/HTTPS),且网络类型必须支持私网(有私有IP地址)。 同集群使用多个Ingress对接同一个ELB端口时,监听器的配置项(例如监听器关联的证书、监听器HTTP2属性等)均以首次创建监听器的Ingress配置为准。
  • Cluster Autoscaler工作原理 Cluster Autoscaler主要流程包括两部分: ScaleUp流程: Autoscaler会每隔10s检查一次所有未调度的Pod,根据用户设置的策略,选择出一个符合要求的节点池进行扩容。 Autoscaler检测未调度Pod进行扩容时,使用的是与Kubernetes社区版本一致的调度算法进行模拟调度计算,若应用调度采用非内置kube-scheduler调度器或其他非Kubernetes社区调度策略,此类应用使用Autoscaler扩容时可能因调度算法不一致出现无法扩容或多扩风险。 ScaleDown流程:Autoscaler每隔10s会扫描一次所有的Node,如果该Node上所有的Pod Requests少于用户定义的缩容百分比时,Autoscaler会模拟将该节点上的Pod是否能迁移到其他节点,如果可以的话,当满足不被需要的时间窗以后,该节点就会被移除。 当集群节点处于一段时间空闲状态时(默认10min),会触发集群缩容操作(即节点会被自动删除)。当节点存在以下几种状态的Pod时,不可缩容: Pod有设置Pod Disruption Budget(即干扰预算),当移除Pod不满足对应条件时,节点不会缩容。 Pod由于一些限制,如亲和、反亲和等,无法调度到其他节点,节点不会缩容。 Pod拥有cluster-autoscaler.kubernetes.io/safe-to-evict: 'false'这个annotations时,节点不缩容。 节点上存在kube-system命名空间下的Pod(除kube-system命名空间下由DaemonSet创建的Pod),节点不缩容。 节点上如果有非controller(Deployment/ReplicaSet/Job/StatefulSet)创建的Pod,节点不缩容。 当节点符合缩容条件时,Autoscaler将预先给节点打上DeletionCandidateOfClusterAutoscaler污点,限制Pod调度到该节点上。当autoscaler插件被卸载后,如果节点上依然存在该污点请您手动进行删除。
  • 使用kubectl自动创建本地持久卷 使用kubectl连接集群。 使用StorageClass动态创建PVC及PV。 创建pvc-local.yaml文件。 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-local namespace: default annotations: everest.io/csi.volume-name-prefix: test # 可选字段,定义自动创建的底层存储名称前缀 spec: accessModes: - ReadWriteOnce # 本地持久卷必须为ReadWriteOnce resources: requests: storage: 10Gi # 本地持久卷大小 storageClassName: csi-local-topology # StorageClass类型为本地持久卷 表2 关键参数说明 参数 是否必选 描述 everest.io/csi.volume-name-prefix 否 可选字段,集群版本为v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上时支持,且集群中需安装2.4.15及以上版本的Everest插件。 定义自动创建的底层存储名称,实际创建的底层存储名称为“存储卷名称前缀”与“PVC UID”的拼接组合,如果不填写该参数,默认前缀为“pvc”。 取值范围:参数值长度为1~26,且必须是小写字母、数字、中划线,不能以中划线开头或结尾。 例如,存储卷名称前缀设置为“test”,则实际创建的底层存储名称test-{uid}。 storage 是 PVC申请容量,单位为Gi。 storageClassName 是 存储类名称,本地持久卷对应的存储类名称为csi-local-topology。 执行以下命令,创建PVC。 kubectl apply -f pvc-local.yaml 创建应用。 创建web-local.yaml文件,本示例中将本地持久卷挂载至/data路径。 apiVersion: apps/v1 kind: StatefulSet metadata: name: web-local namespace: default spec: replicas: 1 selector: matchLabels: app: web-local serviceName: web-local # Headless Service名称 template: metadata: labels: app: web-local spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: pvc-disk #卷名称,需与volumes字段中的卷名称对应 mountPath: /data #存储卷挂载的位置 imagePullSecrets: - name: default-secret volumes: - name: pvc-disk #卷名称,可自定义 persistentVolumeClaim: claimName: pvc-local #已创建的PVC名称 --- apiVersion: v1 kind: Service metadata: name: web-local # Headless Service名称 namespace: default labels: app: web-local spec: selector: app: web-local clusterIP: None ports: - name: web-local targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: ClusterIP 执行以下命令,创建一个挂载本地持久存储的应用。 kubectl apply -f web-local.yaml 工作负载创建成功后,容器挂载目录下的数据将会持久化保持,您可以参考验证数据持久化中的步骤进行验证。
  • 相关操作 您还可以执行表3中的操作。 表3 其他操作 操作 说明 操作步骤 事件 查看PVC或PV的事件名称、事件类型、发生次数、Kubernetes事件、首次和最近发生的时间,便于定位问题。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“事件”,即可查看1小时内的事件(事件保存时间为1小时)。 查看YAML 可对PVC或PV的YAML文件进行查看、复制和下载。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”或“存储卷”页签。 单击目标实例操作列的“查看YAML”,即可查看或下载YAML。
共100000条