华为云用户手册

  • 节点标签使用场景 节点标签的主要使用场景有两类。 节点管理:通过节点标签管理节点,给节点分类。 工作负载与节点的亲和与反亲和: 有的工作负载需要的CPU大,有的工作负载需要的内存大,有的工作负载需要IO大、可能会影响其他工作负载正常工作等等,此时建议给节点添加不同标签。在部署工作负载的时候,就可以选择相应标签的节点亲和部署,保证系统正常工作;反之,可以使用节点的反亲和部署。 一个系统可以分为多个模块,每个模块由多个微服务组成,为保证后期运维的高效,可以将节点打上对应模块的标签,让各模块部署到各自的节点模块上,互不干扰、方便开发到各自节点上去维护。
  • Job和CronJob Job和CronJob是负责批量处理短暂的一次性任务(short lived one-off tasks),即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束。 Job:是Kubernetes用来控制批处理型任务的资源对象。批处理业务与长期伺服业务(Deployment、Statefulset)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。 CronJob:是基于时间的Job,就类似于Linux系统的crontab文件中的一行,在指定的时间周期运行指定的Job。 任务负载的这种用完即停止的特性特别适合一次性任务,比如持续集成。
  • Pod Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。 Pod使用主要分为两种方式: Pod中运行一个容器。这是Kubernetes最常见的用法,您可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。 Pod中运行多个需要耦合在一起工作、需要共享资源的容器。通常这种场景下应用包含一个主容器和几个辅助容器(SideCar Container),如图1所示,例如主容器为一个web服务器,从一个固定目录下对外提供文件服务,而辅助容器周期性的从外部下载文件存到这个固定目录下。 图1 Pod 实际使用中很少直接创建Pod,而是使用Kubernetes中称为Controller的抽象层来管理Pod实例,例如Deployment和Job。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力。通常,Controller会使用Pod Template来创建相应的Pod。
  • Deployment Pod是Kubernetes创建或部署的最小单位,但是Pod是被设计为相对短暂的一次性实体,Pod可以被驱逐(当节点资源不足时)、随着集群的节点崩溃而消失。Kubernetes提供了Controller(控制器)来管理Pod,Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力,其中最为常用的就是Deployment。 图2 Deployment 一个Deployment可以包含一个或多个Pod副本,每个Pod副本的角色相同,所以系统会自动为Deployment的多个Pod副本分发请求。 Deployment集成了上线部署、滚动升级、创建副本、恢复上线的功能,在某种程度上,Deployment实现无人值守的上线,大大降低了上线过程的复杂性和操作风险。
  • StatefulSet Deployment控制器下的Pod都有个共同特点,那就是每个Pod除了名称和IP地址不同,其余完全相同。需要的时候,Deployment可以通过Pod模板创建新的Pod;不需要的时候,Deployment就可以删除任意一个Pod。 但是在某些场景下,这并不满足需求,比如有些分布式的场景,要求每个Pod都有自己单独的状态时,比如分布式数据库,每个Pod要求有单独的存储,这时Deployment就不能满足需求了。 详细分析下有状态应用的需求,分布式有状态的特点主要是应用中每个部分的角色不同(即分工不同),比如数据库有主备,Pod之间有依赖,对应到Kubernetes中就是对Pod有如下要求: Pod能够被别的Pod找到,这就要求Pod有固定的标识。 每个Pod有单独存储,Pod被删除恢复后,读取的数据必须还是以前那份,否则状态就会不一致。 Kubernetes提供了StatefulSet来解决这个问题,其具体如下: StatefulSet给每个Pod提供固定名称,Pod名称增加从0-N的固定后缀,Pod重新调度后Pod名称和HostName不变。 StatefulSet通过Headless Service给每个Pod提供固定的访问域名,Service的概念会在后面章节中详细介绍。 StatefulSet通过创建固定标识的PVC保证Pod重新调度后还是能访问到相同的持久化数据。
  • 工作负载生命周期说明 表1 状态说明 状态 说明 运行中 所有实例都处于运行中才是运行中。 未就绪 容器处于异常、实例数为0或pending状态时显示此状态。 升级/回滚中 触发升级或回滚动作后,工作负载会处于升级/回滚中。 可用 当多实例无状态工作负载运行过程中部分实例异常,可用实例不为0,工作负载会处于可用状态。 执行完成 任务执行完成,仅普通任务存在该状态。 已停止 触发停止操作后,工作负载会处于停止状态,实例数变为0。v1.13之前的版本存在此状态。 删除中 触发删除操作后,工作负载会处于删除中状态。 暂停中 触发暂停操作后,工作负载会处于暂停中状态。
  • 注意事项 重置节点功能不会重置控制节点,仅能对工作节点进行重置操作,如果重置后节点仍然不可用,请删除该节点重新创建。 重置节点将对节点操作系统进行重置安装,节点上已运行的工作负载业务将会中断,请在业务低峰期操作。 节点重置后系统盘和docker数据盘将会被清空,重置前请事先备份重要数据。 用户节点如果有自行挂载了数据盘,重置完后会清除挂载信息,请事先备份重要数据,重置完成后请重新执行挂载行为,数据不会丢失。 节点上的工作负载实例的IP会发生变化,但是不影响容器网络通信。 云硬盘必须有剩余配额。 操作过程中,后台会把当前节点设置为不可调度状态。
  • 集群的网络 从网络的角度看,集群的节点都位于VPC之内,节点上又运行着容器,每个容器都需要访问,节点与节点、节点与容器、容器与容器都需要访问。 集群的网络可以分成三个网络来看。 节点网络:为集群内节点分配IP地址。 容器网络:为集群内容器分配IP地址,负责容器的通信,当前支持多种容器网络模型,不同模型有不同的工作机制。 服务网络:服务(Service)是用来解决访问容器的Kubernetes对象,每个Service都有一个固定的IP地址。 在创建集群时,您需要为各个网络选择合适的网段,确保各网段之间不存在冲突,每个网段下有足够的IP地址可用。集群创建后不支持修改容器网络模型,您需要在创建前做好规划和选择。 强烈建议您在创建集群前详细了解集群的网络以及容器网络模型,具体请参见网络概述。
  • 创建Deployment挂载已有数据卷 新建一个deployment的yaml文件,deployment-test.yaml。 配置示例: apiVersion: apps/v1kind: Deploymentmetadata: name: test-turbo-subpath-example namespace: default generation: 1 labels: appgroup: ''spec: replicas: 1 selector: matchLabels: app: test-turbo-subpath-example template: metadata: labels: app: test-turbo-subpath-example spec: containers: - image: nginx:latest name: container-0 volumeMounts: - mountPath: /tmp name: pvc-sfs-turbo-example restartPolicy: Always imagePullSecrets: - name: default-secret volumes: - name: pvc-sfs-turbo-example persistentVolumeClaim: claimName: sfs-turbo-test 其中: name:创建的工作负载名称。 image:工作负载的镜像。 mountPath:容器内挂载路径,示例中挂载到“/tmp”路径。 claimName:已有的pvc名称。 kubectl create -f deployment-test.yaml创建deployment负载。
  • Statefulset动态创建subpath模式的数据卷 新建一个statefulset的yaml文件,statefulset-test.yaml。 配置示例: apiVersion: apps/v1kind: StatefulSetmetadata: name: test-turbo-subpath namespace: default generation: 1 labels: appgroup: ''spec: replicas: 2 selector: matchLabels: app: test-turbo-subpath template: metadata: labels: app: test-turbo-subpath annotations: metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]' pod.alpha.kubernetes.io/initialized: 'true' spec: containers: - name: container-0 image: 'nginx:latest' env: - name: PAAS_APP_NAME value: deploy-sfs-nfs-rw-in - name: PAAS_NAMESPACE value: default - name: PAAS_PROJECT_ID value: 8190a2a1692c46f284585c56fc0e2fb9 resources: {} volumeMounts: - name: sfs-turbo-160024548582479676 mountPath: /tmp terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: IfNotPresent restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst securityContext: {} imagePullSecrets: - name: default-secret affinity: {} schedulerName: default-scheduler volumeClaimTemplates: - metadata: name: sfs-turbo-160024548582479676 namespace: default annotations: {} spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: sfsturbo-sc-test serviceName: wwww podManagementPolicy: OrderedReady updateStrategy: type: RollingUpdate revisionHistoryLimit: 10 其中: name:创建的工作负载名称。 image:工作负载的镜像。 mountPath:容器内挂载路径,示例中挂载到“/tmp”路径。 “spec.template.spec.containers.volumeMounts.name ”和 “spec.volumeClaimTemplates.metadata.name”有映射关系,必须保持一致。 storageClassName: 填写自建的sc名称。 kubectl create -f statefulset-test.yaml创建statefulset负载。
  • Kubernetes集群架构 Kubernetes集群包含Master节点(控制节点)和Node节点(计算节点/工作节点),应用部署在Node节点上,且可以通过配置选择应用部署在某些特定的节点上。 通过云容器引擎服务创建的集群,Master节点将由云容器引擎服务托管,您只需创建Node节点。 Kubernetes集群的架构如下所示: 图1 Kubernetes集群架构 Master节点 Master节点是集群的控制节点,由API Server、Scheduler、Controller Manager和ETCD四个组件构成。 API Server:各组件互相通讯的中转站,接受外部请求,并将信息写到ETCD中。 Controller Manager:执行集群级功能,例如复制组件,跟踪Node节点,处理节点故障等等。 Scheduler:负责应用调度的组件,根据各种条件(如可用的资源、节点的亲和性等)将容器调度到Node上运行。 ETCD:一个分布式数据存储组件,负责存储集群的配置信息。 在生产环境中,为了保障集群的高可用,通常会部署多个Master,如CCE的集群高可用模式就是3个Master节点。 Node节点 Node节点是集群的计算节点,即运行容器化应用的节点。 kubelet:kubelet主要负责同Container Runtime打交道,并与API Server交互,管理节点上的容器。 kube-proxy:应用组件间的访问代理,解决节点上应用的访问问题。 Container Runtime:容器运行时,如Docker,最主要的功能是下载镜像和运行容器。
  • 创建subpath类型SFS Turbo存储卷 subpath模式的卷请勿通过前端进行“扩容”、“解关联”、“删除”等操作。 创建SFS turbo资源,选择网络时,请选择与集群相同的vpc与子网。 新建一个sc的yaml文件,例如sfsturbo-sc-test.yaml。 配置示例: apiVersion: storage.k8s.io/v1allowVolumeExpansion: truekind: StorageClassmetadata: name: sfsturbo-sc-testmountOptions:- lockparameters: csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io csi.storage.k8s.io/fstype: nfs everest.io/archive-on-delete: "true" everest.io/share-access-to: 7ca2dba2-1234-1234-1234-626371a8fb3a everest.io/share-expand-type: bandwidth everest.io/share-export-location: 192.168.1.1:/sfsturbo/ everest.io/share-source: sfs-turbo everest.io/share-volume-type: STANDARD everest.io/volume-as: subpath everest.io/volume-id: 0d773f2e-1234-1234-1234-de6a35074696provisioner: everest-csi-provisionerreclaimPolicy: DeletevolumeBindingMode: Immediate 其中: name:storageclass的名称。 mountOptions:选填字段;mount挂载参数。 everest 1.2.8以下,1.1.13以上版本仅开放对nolock参数配置,mount操作默认使用nolock参数,无需配置。nolock=false时,使用lock参数。 everest 1.2.8及以上版本支持更多参数,默认使用如下所示配置,具体请参见设置挂载参数。此处不能配置为nolock=true,会导致挂载失败。 mountOptions:- vers=3- timeo=600- nolock- hard everest.io/volume-as:该参数需设置为“subpath”来使用subpath模式。 everest.io/share-access-to:选填字段。subpath模式下,填写SFS Turbo资源的所在VPC的ID。 everest.io/share-expand-type:选填字段。若SFS Turbo资源存储类型为增强版(标准型增强版、性能型增强版),设置为bandwidth。 everest.io/share-export-location:挂载根配置。由SFS Turbo共享路径和子目录组成,共享路径可至SFS Turbo服务页面查询,子路径由用户自定义,后续指定该sc创建的pvc均位于该子目录下。 everest.io/share-volume-type:选填字段。填写SFS Turbo的类型。标准型为STANDARD,性能型为PERFORMANCE。对于增强型需配合“everest.io/share-expand-type”字段使用,everest.io/share-expand-type设置为“bandwidth”。 everest.io/zone:选填字段。指定SFS Turbo资源所在的可用区。 everest.io/volume-id:SFS Turbo资源的卷ID,可至SFS Turbo界面查询。 everest.io/archive-on-delete:若该参数设置为“true”,在回收策略为“Delete”时,删除pvc会将pv的原文档进行归档,归档目录的命名规则“archived-$pv名称.时间戳”,为“false”时,会将pv对应的SFS Turbo子目录删除。默认进行归档。 执行kubectl create -f sfsturbo-sc-test.yaml。 新建一个pvc的yaml文件,sfs-turbo-test.yaml。 配置示例: apiVersion: v1kind: PersistentVolumeClaimmetadata: name: sfs-turbo-test namespace: defaultspec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: sfsturbo-sc-test volumeMode: Filesystem 其中: name: PVC的名称。 storageClassName:SC的名称。 storage:subpath模式下,该参数无实际意义,容量受限于Turbo资源的总容量,若Turbo资源总容量不足,请及时到Turbo界面扩容。 执行kubectl create -f sfs-turbo-test.yaml。 对subpath类型的SFS Turbo扩容时,没有实际的扩容意义。该操作不会对SFS Turbo资源进行实际的扩容,需要用户自行保证Turbo的总容量不被耗尽。
  • 查看/切换视图 登录CCE控制台,单击集群名称进入集群详情页。 在左侧导航栏中选择“容器智能分析”,单击“仪表盘”页签,默认展示集群视图。 设置查看视图的相关参数。各个视图可供设置的参数不同,请参见表1。 设置视图的时间窗。 在页面右上角处,选择时间段,或者自定义时间,并单击刷新界面。 容器智能分析仪表盘提供了预置视图,您可单击视图名称边上的“切换视图”按钮,选择需要的视图查看监控数据。系统预置视图如表1所示。 表1 预置视图 视图名称 视图参数 视图中包含的监控指标 集群视图(默认视图) 集群 节点数 磁盘不可用节点数 不可用节点数 CPU使用率 CPU Requests水位 CPU Limits水位 内存使用率 内存Requests水位 内存Limits水位 Pod数 容器数 CPU使用量 内存使用量 网络接收速率 网络发送速率 网络平均接收速率 网络平均发送速率 接收数据包速率 发送数据包速率 丢包速率(接收) 丢包速率(发送) 磁盘读写IO速率(读+写) 磁盘读写吞吐量(读+写) APIServer视图 集群 实例 存活数 QPS 请求成功率(读) 处理中请求数 请求速率(读) 请求错误率(读) 请求时延(读)(P99) 请求速率(写) 请求错误率(写) 请求时延(写)(P99) 工作队列增加速率 工作队列深度 工作队列时延(P99) 内存使用量 CPU使用量 Go routine数 Pod视图 集群 命名空间 pod 容器数 运行中容器数 Pod状态 容器重启次数 CPU使用量 CPU Throttling 内存使用量 网络接收速率 网络发送速率 接收数据包速率 发送数据包速率 丢包速率(接收) 丢包速率(发送) Pod磁盘读写IO速率(读+写) Pod磁盘读写吞吐量(读+写) 容器磁盘读写IO速率(读+写) 容器磁盘读写吞吐量(读+写) 文件系统使用率 文件系统使用量 主机视图 集群 节点 CPU使用率 平均负载 内存使用量 内存使用率 磁盘写入速率 磁盘读取速率 磁盘空间使用 磁盘IO TCP连接 UDP使用情况 最大文件描述符 已使用文件描述符 Socket使用情况 文件系统异常 磁盘速率 IO延迟 IO队列数 进程状态 Node视图 集群 节点 CPU使用率 CPU Requests水位 CPU Limits水位 内存使用率 内存Requests水位 内存Limits水位 内存使用量 网络接收速率 网络发送速率 网络接收速率(Pod) 网络发送速率(Pod) 接收数据包速率 发送数据包速率 丢包速率(接收) 丢包速率(发送) 节点磁盘读写IO速率(读+写) 节点磁盘读写吞吐量(读+写) CoreDNS视图 集群 实例 请求速率 请求速率(记录类型) 请求速率(区域) 请求速率(DO标志位) 请求数据包(UDP) 请求数据包(TCP) 响应速率(响应状态码) 响应时延 响应数据包(UDP) 响应数据包(TCP) 缓存记录数 缓存命中率 PVC视图 集群 命名空间 PV PVC PV状态 PVC状态 PVC使用量 PVC使用率 PVC inodes PVC inodes使用率 PVC每小时使用量 PVC每天使用量 PVC每周使用量 一周后PVC使用量 Kubelet 集群 实例 运行中Kubelet 运行中Pod 运行中容器 实际卷数量 期望卷数量 配置错误数量 操作速率 操作错误率 操作时延 Pod启动速率 Pod启动时延(99分位) 存储操作速率 存储操作错误率 存储操作时延(99分位) 控制组管理器操作速率 控制组管理器操作时延(99分位) PLEG relist速率 PLEG relist间隔 PLEG relist时延(99分位) RPC速率 请求时延(99分位) 内存使用量 CPU使用量 Go routine数 Prometheus 集群 job instance Target同步 Target数量 平均抓取间隔 抓取失败 Samples添加速率 Head中Series数量 Head块数量 查询速率 P90查询耗时 Prometheus Remote Write 集群 实例 url 远端样本滞后比率 远程写流量 当前队列数 最大队列数 最小队列数 期望队列数 队列容量 挂起中的样本数 TSDB当前段 远程写入当前段 样本丢弃率 样本失败率 样本重试率 入队失败重试率 节点池视图 集群 节点池 节点池CPU分配率 节点CPU分配率 节点池内存分配率 节点内存分配率 节点数量趋势
  • VPC内访问 根据集群容器网络模型不同,从容器访问内部网络有不同表现。 容器隧道网络 容器隧道网络在节点网络基础上通过隧道封装网络数据包,容器访问同VPC下其他资源时,只要节点能访问通,容器就能访问通。如果访问不通,需要确认对端资源的安全组配置是否能够允许容器所在节点访问。 云原生网络2.0 云原生网络2.0模型下,容器直接从VPC网段内分配IP地址,容器网段是节点所在VPC的子网,容器与VPC内其他地址天然能够互通。如果访问不通,需要确认对端资源的安全组配置是否能够允许容器网段访问。 VPC网络 VPC网络使用了VPC路由功能来转发容器的流量,容器网段与节点VPC不在同一个网段,容器访问同VPC下其他资源时,需要对端资源的安全组能够允许容器网段访问。 例如如下集群,集群节点所在网段为192.168.10.0/24,容器网段为172.16.0.0/16。 VPC下(集群外)有一个地址为192.168.10.52的ECS,其安全组规则仅允许集群节点的IP网段访问。 此时如果从容器中ping 192.168.10.52,会发现无法ping通。 kubectl exec test01-6cbbf97b78-krj6h -it -- /bin/sh/ # ping 192.168.10.25PING 192.168.10.25 (192.168.10.25): 56 data bytes^C--- 192.168.10.25 ping statistics ---104 packets transmitted, 0 packets received, 100% packet loss 在安全组放通容器网段172.16.0.0/16访问。 此时再从容器中ping 192.168.10.52,会发现可以ping通。 $ kubectl exec test01-6cbbf97b78-krj6h -it -- /bin/sh/ # ping 192.168.10.25PING 192.168.10.25 (192.168.10.25): 56 data bytes64 bytes from 192.168.10.25: seq=0 ttl=64 time=1.412 ms64 bytes from 192.168.10.25: seq=1 ttl=64 time=1.400 ms64 bytes from 192.168.10.25: seq=2 ttl=64 time=1.299 ms64 bytes from 192.168.10.25: seq=3 ttl=64 time=1.283 ms^C--- 192.168.10.25 ping statistics ---4 packets transmitted, 4 packets received, 0% packet loss
  • 跨VPC访问 跨VPC访问通常采用对等连接等方法打通VPC。 容器隧道网络只需将节点网络与对端VPC打通,容器自然就能访问对端VPC。 云原生网络2.0与容器隧道网络类似,将容器所在子网网段与对端VPC打通即可。 VPC网络由于容器网段独立,除了要打通VPC网段,还要打通容器网段。 例如有如下两个VPC。 vpc-demo:网段为192.168.0.0/16,集群在vpc-demo内,容器网段为10.0.0.0/16。 vpc-demo2:网段为10.1.0.0/16。 创建一个名为peering-demo的对等连接(本端为vpc-demo,对端为vpc-demo2),注意对端VPC的路由添加容器网段,如下所示。 这样配置后,在vpc-demo2中就能够访问容器网段10.0.0.0/16。具体访问时要关注安全组配置,打通端口配置。
  • 访问其他云服务 与CCE进行内网通信的与服务常见服务有:RDS、DCS、Kafka、RabbitMQ、ModelArts等。 访问其他云服务除了上面所说的VPC内访问和跨VPC访问的网络配置外,还需要关注所访问的云服务是否允许外部访问,如DCS的Redis实例,需要添加白名单才允许访问。通常这些云服务会允许同VPC下IP访问,但是VPC网络模型下容器网段与VPC网段不同,需要特殊处理,将容器网段加入到白名单中。
  • 容器访问内网不通的定位方法 如前所述,从容器中访问内部网络不通的情况可以按如下路径排查: 查看要访问的对端服务器安全组规则,确认是否允许容器访问。 容器隧道网络模型需要放通容器所在节点的IP地址 VPC网络模型需要放通容器网段 云原生网络2.0需要放通容器所在子网网段 查看要访问的对端服务器是否设置了白名单,如DCS的Redis实例,需要添加白名单才允许访问。添加容器和节点网段到白名单后可解决问题。 查看要访问的对端服务器上是否安装了容器引擎,是否存在与CCE中容器网段冲突的情况。如果有网络冲突,会导致无法访问。
  • 查看巡检详情 在页面的顶部,您可以看到集群健康诊断的总体情况,其中包括风险等级,高危、中危、低危和正常检查项的数量,正常检查项占比,以及需要重点关注的检查项数据。此外,系统还会根据检查结果提供巡检问题和修复建议,供您参考。 图1 健康诊断总体情况 页面中还展示了Master、集群、节点、工作负载和外部依赖多个维度的所有巡检项,包括检查项、状态、诊断结果、说明和恢复建议。您可以单击相应检查项的“查看详情”按钮,以查看预警说明和恢复建议。 图2 诊断详情
  • 操作步骤 使用"kubernetes.io/elb.health-check-options"注解的示例如下: apiVersion: v1kind: Servicemetadata: name: nginx namespace: default labels: {} annotations: kubernetes.io/elb.class: union kubernetes.io/elb.id: 038ffbda-bd3a-48bb-8b8c-a8582601fd97 kubernetes.io/elb.lb-algorithm: ROUND_ROBIN kubernetes.io/elb.health-check-flag: 'on' kubernetes.io/elb.health-check-options: '{ "target_service_port": "TCP:80", //【必填】spec.ports添加健康检查的目标端口,由协议、端口号组成,如:TCP:80 "monitor_port": "", //【可选】重新指定的健康检查端口,不指定时默认使用业务端口。请确保该端口在Pod所在节点已被监听,否则会影响健康检查结果 "protocol":"TCP", "delay":"5", "timeout":"10", "max_retries":"3", "path":"/" }'spec: selector: {} externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 80 protocol: TCP type: LoadBalancer loadBalancerIP: **.**.**.** 表1 elb.health-check-options字段数据结构说明 参数 是否必填 参数类型 描述 target_service_port 是 String spec.ports添加健康检查的目标端口,由协议、端口号组成,如:TCP:80 monitor_port 否 String 重新指定的健康检查端口,不指定时默认使用业务端口。 说明: 请确保该端口在Pod所在节点已被监听,否则会影响健康检查结果。 delay 否 String 开始健康检查的初始等待时间(秒) 默认值:5,取值范围:1-50 timeout 否 String 健康检查的超时时间(秒) 默认值:10,取值范围1-50 max_retries 否 String 健康检查的最大重试次数 默认值:3,取值范围1-10 protocol 否 String 健康检查的协议 默认值:取关联服务的协议 取值范围:“TCP”、“UDP”或者“HTTP” path 否 String 健康检查的URL,协议是“HTTP”时配置 默认值:“/” 取值范围:1-10000字符
  • 通过kubectl命令行设置 您可以通过对StatefulSet添加annotations来设置是否开启Pod固定EIP功能,同时需要开启随Pod创建EIP功能,如下所示。 apiVersion: apps/v1kind: StatefulSetmetadata: name: nginxspec: serviceName: nginx replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: pod.alpha.kubernetes.io/initialized: 'true' yangtse.io/static-eip: 'true' yangtse.io/static-eip-expire-no-cascading: 'false' yangtse.io/static-eip-expire-duration: 5m yangtse.io/pod-with-eip: 'true' yangtse.io/eip-bandwidth-size: '5' yangtse.io/eip-network-type: 5_bgp yangtse.io/eip-charge-mode: bandwidth yangtse.io/eip-ip-version: '4' 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固定EIP的annotation配置 annotation 默认值 参数说明 取值范围 yangtse.io/static-eip false 是否开启Pod固定EIP,只有StatefulSet类型的Pod或无ownerReferences的Pod支持,默认不开启。 "false"或"true" yangtse.io/static-eip-expire-duration 5m 删除固定EIP的Pod后,对应的固定EIP过期回收的时间间隔。 支持时间格式为Go time type,例如1h30m、5m。关于Go time type,请参见Go time type。 yangtse.io/static-eip-expire-no-cascading false 是否关闭StatefulSet工作负载的级联回收。 默认为false,表示StatefulSet删除后,会级联删除对应的固定EIP。如果您需要在删除StatefulSet对象后,在EIP过期回收时间内保留对应的固定EIP,用于下一次重建同名的StatefulSet再次使用对应的固定EIP,请将该参数设为true。 "false"或"true" 表2 EIP跟随Pod创建的annotation配置 annotation 默认值 参数说明 取值范围 yangtse.io/pod-with-eip false 是否需要跟随Pod创建EIP并绑定到该Pod。 "false"或"true" yangtse.io/eip-bandwidth-size 5 带宽大小,单位为Mbit/s。 默认1Mbit/s~2000Mbit/s 具体范围以各区域配置为准,详情请参见弹性公网IP控制台。 yangtse.io/eip-network-type 5_bgp 公网IP类型。 5_bgp 5_union 5_sbgp 具体类型以各区域配置为准,详情请参见弹性公网IP控制台。 yangtse.io/eip-charge-mode bandwidth 按流量计费或按带宽计费。 默认取值为traffic,表示按流量计费。 bandwidth:按带宽计费 traffic:按流量计费 yangtse.io/eip-ip-version 4 公网EIP的版本,例如IPv4,IPv6。 默认取值为4,即表示IPv4。 4 6 yangtse.io/eip-bandwidth-id 空 已有的带宽ID,填写该值时会忽略其他自动创建EIP相关的annotation。 - yangtse.io/eip-bandwidth-name Pod名称 带宽名称。 1-64个字符,支持数字、字母、中文、_(下划线)、-(中划线)、.(点) 最小长度:1 最大长度:64
  • 转包周期 如果您在购买按需计费集群后,想更换为包周期计费,可按如下步骤进行操作: 登录CCE控制台,在左侧导航栏中选择“集群管理”。 单击需要转包周期集群后的。 图1 转包周期 在转包周期页面中,选择需要转包周期的集群控制节点和工作节点。 图2 集群及集群下的工作节点转包周期 单击“确定”,等待生成订单并完成支付即可。 在支付时,如果弹出“当前用户无对该资源API访问权限”,请退回重新操作一次即可。
  • 使用场景 快照功能可以帮助您实现以下需求: 日常备份数据 通过对云硬盘定期创建快照,实现数据的日常备份,可以应对由于误操作、病毒以及黑客攻击等导致数据丢失或不一致的情况。 快速恢复数据 更换操作系统、应用软件升级或业务数据迁移等重大操作前,您可以创建一份或多份快照,一旦升级或迁移过程中出现问题,可以通过快照及时将业务恢复到快照创建点的数据状态。 例如,当由于云服务器 A的系统盘 A发生故障而无法正常开机时,由于系统盘 A已经故障,因此也无法将快照数据回滚至系统盘A。此时您可以使用系统盘 A已有的快照新创建一块云硬盘 B并挂载至正常运行的云服务器 B上,从而云服务器 B能够通过云硬盘 B读取原系统盘 A的数据。 当前CCE提供的快照能力与K8s社区CSI快照功能一致:只支持基于快照创建新云硬盘,不支持将快照回滚到源云硬盘。 快速部署多个业务 通过同一个快照可以快速创建出多个具有相同数据的云硬盘,从而可以同时为多种业务提供数据资源。例如数据挖掘、报表查询和开发测试等业务。这种方式既保护了原始数据,又能通过快照创建的新云硬盘快速部署其他业务,满足企业对业务数据的多元化需求。
  • 创建快照 使用控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“容器存储”,在右侧选择“快照与备份”页签。 单击右上角“创建快照”,在弹出的窗口中设置相关参数。 快照名称:填写快照的名称。 选择存储:选择要创建快照的PVC,仅能创建云硬盘类型PVC。 单击“创建”。 使用YAML创建 kind: VolumeSnapshotapiVersion: snapshot.storage.k8s.io/v1beta1metadata: finalizers: - snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection - snapshot.storage.kubernetes.io/volumesnapshot-bound-protection name: cce-disksnap-test namespace: defaultspec: source: persistentVolumeClaimName: pvc-evs-test # PVC的名称,仅能创建云硬盘类型PVC volumeSnapshotClassName: csi-disk-snapclass
  • 使用快照创建PVC 通过快照创建云硬盘PVC时,磁盘类型、磁盘模式、加密属性需和快照源云硬盘保持一致。 使用控制台创建 登录CCE控制台。 单击集群名称进入集群,在左侧选择“容器存储”,在右侧选择“快照与备份”页签。 找到需要创建PVC的快照,单击“创建存储卷声明”,并在弹出窗口中指定PVC的名称。 单击“创建”。 使用YAML创建 apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-test namespace: default annotations: everest.io/disk-volume-type: SSD # 云硬盘类型,需要与快照源云硬盘保持一致 labels: failure-domain.beta.kubernetes.io/region: cn-north-4 failure-domain.beta.kubernetes.io/zone: cn-north-4bspec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: csi-disk dataSource: name: cce-disksnap-test # 快照的名称 kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io
  • 使用须知 快照功能仅支持v1.15及以上版本的集群,且需要安装基于CSI的Everest插件才可以使用。 基于快照创建的云硬盘,其子类型(普通IO/高IO/超高IO)、是否加密、磁盘模式(VBD/SCSI)、共享性(非共享/共享)、容量等都要与快照关联母盘保持一致,这些属性查询和设置出来后不能够修改。 只有可用或正在使用状态的磁盘能创建快照。快照免费试用期间,单个磁盘最大支持创建7个快照。 创建快照功能仅支持使用everest插件提供的存储类(StorageClass名称以csi开头)创建的PVC。使用Flexvolume存储类(StorageClass名为ssd、sas、sata)创建的PVC,无法创建快照。 加密磁盘的快照数据以加密方式存放,非加密磁盘的快照数据以非加密方式存放。
  • default-secret default-secret的类型为kubernetes.io/dockerconfigjson,其data内容是登录SWR镜像仓库的凭据,用于从SWR拉取镜像。在CCE中创建工作负载时如果需要从SWR拉取镜像,需要配置imagePullSecrets的取值为default-secret,如下所示。 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret default-secret的data数据会定期更新,且当前的data内容会在一定时间后会过期失效。您可以使用describe命令在default-secret的中查看到具体的过期时间,如下所示。 在使用时请直接使用default-secret,而不要拷贝secret内容重新创建,因为secret里面的凭据会过期,从而导致无法拉取镜像。 $ kubectl describe secret default-secretName: default-secretNamespace: defaultLabels: secret-generated-by=cceAnnotations: temporary-ak-sk-expires-at: 2021-11-26 20:55:31.380909 +0000 UTCType: kubernetes.io/dockerconfigjsonData====.dockerconfigjson: 347 bytes
  • EmptyDir的类型 CCE提供了如下两种EmptyDir类型: 临时路径:Kubernetes原生的EmptyDir类型,生命周期与容器实例相同,并支持指定内存作为存储介质。容器实例消亡时,EmptyDir会被删除,数据会永久丢失。 本地临时卷:本地临时存储卷将节点的本地数据盘通过LVM组成存储池(VolumeGroup),然后划分LV作为EmptyDir的存储介质给容器挂载使用,相比原生EmptyDir默认的存储介质类型性能更好。
  • 临时卷介绍 当有些应用程序需要额外的存储,但并不关心数据在重启后是否仍然可用。 例如,缓存服务经常受限于内存大小,而且可以将不常用的数据转移到比内存慢的存储中,对总体性能的影响并不大。另有些应用程序需要以文件形式注入的只读数据,比如配置数据或密钥。 Kubernetes中的临时卷(Ephemeral Volume),就是为此类场景设计的。临时卷会遵从Pod的生命周期,与 Pod一起创建和删除。 Kubernetes中常用的临时卷: EmptyDir:Pod启动时为空,存储空间来自本地的kubelet根目录(通常是根磁盘)或内存。EmptyDir是从节点临时存储中分配的,如果来自其他来源(如日志文件或镜像分层数据)的数据占满了临时存储,可能会发生存储容量不足的问题。 ConfigMap:将ConfigMap类型的Kubernetes数据以数据卷的形式挂载到Pod中。 Secret:将Secret类型的Kubernetes数据以数据卷的形式挂载到Pod中。
  • 约束与限制 安全容器不支持使用对象存储卷。 OBS限制单用户创建100个桶,但是CCE使用OBS桶为单个工作负载挂载一个桶,当工作负载数量较多时,容易导致桶数量超过限制,OBS桶无法创建。此种场景下建议直接调用OBS的API或SDK使用OBS,不在工作负载中挂载OBS桶。 使用并行文件系统和对象桶时,挂载点不支持修改属组和权限。 CCE支持通过OBS SDK方式和PVC挂载方式使用OBS并行文件系统,其中PVC挂载方式是通过OBS服务提供的obsfs工具实现。关于obsfs工具的介绍和详细使用方法请参见obsfs简介。每挂载一个并行文件系统对象存储卷,就会产生一个obsfs常驻进程。如下图所示: 图1 obsfs常驻进程 建议为每个obsfs进程预留1G的内存空间,例如4U8G的节点,则建议挂载obsfs并行文件系统的实例不超过8个。 obsfs常驻进程是直接运行在节点上,如果消耗的内存超过了节点上限,则会导致节点异常。例如在4U8G的节点上,运行的挂载并行文件系统卷的实例超过100+,有极大概率会导致节点异常不可用。因此强烈建议控制单个节点上的挂载并行文件系统实例的数量。
  • 节点系统参数可优化列表 CCE提供默认的节点系统参数在某些用户场景下可能出现性能瓶颈,因此用户可对部分节点系统参数进行自定义优化,节点系统参数如节点系统参数可优化列表所示。 修改节点系统参数具有一定的风险,需要您对Linux命令和Linux系统知识具有较高程度的了解,避免误操作引起节点故障。 表1中的参数已经过测试验证,请勿自行修改其他参数以免引起节点故障。 修改节点系统参数的命令仅在使用公共镜像时有效,使用私有镜像时本文中提供的命令仅供参考。 节点重启后需执行sysctl -p用于刷新参数值。 表1 系统参数可优化列表 参数名称 参数位置 说明 参考文档 kernel.pid_max /etc/sysctl.conf 节点进程 ID数量上限。 查看参数: sysctl kernel.pid_max 修改节点进程 ID数量上限kernel.pid_max RuntimeMaxUse /etc/systemd/journald.conf 节点日志缓存内存占用量上限,若不配置长时间运行会占用较大内存。 查看参数: cat /etc/systemd/journald.conf | grep RuntimeMaxUse 修改节点日志缓存内存占用量上限RuntimeMaxUse Openfiles /etc/security/limits.conf 节点单进程最大文件句柄数,可视业务情况调整。 查看参数: ulimit -n 修改节点单进程最大文件句柄数 (Openfiles容器内部) LimitNOFILE LimitNPROC CentOS/EulerOS系统: /usr/lib/systemd/system/docker.service Ubuntu系统: /lib/systemd/system/docker.service 容器内部单进程最大文件句柄数,可视业务情况调整。 查看参数: cat /proc/`pidof dockerd`/limits | grep files 修改容器单进程最大文件句柄数 file-max /etc/sysctl.conf 系统整体最大文件句柄数,可视业务情况调整。 查看参数: sysctl fs.file-max 修改节点系统级最大文件句柄数 nf_conntrack_buckets nf_conntrack_max /etc/sysctl.conf 连接跟踪表容量,可视业务场景调整。 计算桶占用率= [nf_conntrack_count] / [nf_conntrack_buckets]。 通过调整buckets值,将占用率调整至0.7以下。 查看参数: sysctl net.netfilter.nf_conntrack_countsysctl net.netfilter.nf_conntrack_bucketssysctl net.netfilter.nf_conntrack_max 修改节点内核参数 net.netfilter.nf_conntrack_tcp_timeout_close /etc/sysctl.conf 连接跟踪表里处于close状态连接的表项的过期时间,缩短过期时间可加快回收。 查看参数: sysctl net.netfilter.nf_conntrack_tcp_timeout_close net.netfilter.nf_conntrack_tcp_be_liberal /etc/sysctl.conf 参数值为0或1。 0:表示关闭,所有不在TCP窗口中的RST包都被标志为无效。 1:表示开启,只有不在TCP窗口内的RST包被标志为无效。容器场景下,开启这个参数可以避免NAT过的TCP连接带宽受限。 查看参数: sysctl net.netfilter.nf_conntrack_tcp_be_liberal tcp_keepalive_time /etc/sysctl.conf TCP超时时长,即发送keepalive探测消息的间隔时间。参数值过大可能导致TCP挥手时间过长,长时间下造成大量连接卡在Close_wait阶段,耗尽系统资源。 查看参数: sysctl net.ipv4.tcp_keepalive_time tcp_max_syn_backlog /etc/sysctl.conf TCP最大半连接数,SYN_RECV 队列中的最大连接数。 查看参数: sysctl net.ipv4.tcp_max_syn_backlog tcp_max_tw_buckets /etc/sysctl.conf 指定任何时候允许存在的处于“time-wait”状态的最大套接字数,参数值过大时易耗尽节点资源。 查看参数: sysctl net.ipv4.tcp_max_tw_buckets net.core.somaxconn /etc/sysctl.conf TCP最大连接数,ESTABLISHED 队列的最大大小,参数值过小时极易不足。 查看参数: sysctl net.core.somaxconn max_user_instances /etc/sysctl.conf 每个用户允许的最大 inotify 实例数,参数值过小时容器场景下极易不足。 查看参数: sysctl fs.inotify.max_user_instances max_user_watches /etc/sysctl.conf 所有监视实例的最大目录数,参数值过小时容器场景极易不足。 查看参数: sysctl fs.inotify.max_user_watches netdev_max_backlog /etc/sysctl.conf 网络协议栈收包队列大小,参数值过小时极易不足。 查看参数: sysctl net.core.netdev_max_backlog net.core.wmem_max net.core.rmem_max /etc/sysctl.conf 收发缓冲区内存大小(字节),参数值过小时大文件场景下易不足。 查看参数: sysctl net.core.wmem_maxsysctl net.core.rmem_max net.ipv4.neigh.default.gc_thresh1 net.ipv4.neigh.default.gc_thresh2 net.ipv4.neigh.default.gc_thresh3 /etc/sysctl.conf ARP表项的垃圾回收调优。 查看参数: sysctl net.ipv4.neigh.default.gc_thresh1sysctl net.ipv4.neigh.default.gc_thresh2sysctl net.ipv4.neigh.default.gc_thresh3 vm.max_map_count /etc/sysctl.conf 参数值过小时,安装elk时会提示不足。 查看参数: sysctl vm.max_map_count 父主题: 节点系统参数优化
共100000条