华为云用户手册

  • 弃用和移除 在Kubernetes 1.27版本,针对卷扩展GA特性的以下特性门禁将被移除,且不得再在--feature-gates标志中引用。(Expand CS IVolumes,ExpandInUsePersistentVolumes,ExpandPersistentVolumes) 在Kubernetes 1.27版本,移除--master-service-namespace 命令行参数。该参数支持指定在何处创建名为kubernetes的Service来表示 API服务 器。自v1.26版本已被弃用,1.27版本正式移除。 在Kubernetes 1.27版本,移除ControllerManagerLeaderMigration特性门禁。Leader Migration提供了一种机制,让HA集群在升级多副本的控制平面时通过在kube-controller-manager和cloud-controller-manager这两个组件之间共享的资源锁,安全地迁移“特定于云平台”的控制器。特性自v1.24正式发布,被无条件启用, 在v1.27版本中此特性门禁选项将被移除。 在Kubernetes 1.27版本,移除--enable-taint-manager命令行参数。该参数支持的特性基于污点的驱逐已被默认启用,且在标志被移除时也将继续被隐式启用。 在Kubernetes 1.27版本,移除--pod-eviction-timeout 命令行参数。弃用的命令行参数--pod-eviction-timeout将被从kube-controller-manager中移除。 在Kubernetes 1.27版本,移除CSI Migration特性门禁。CSI migration程序允许从树内卷插件移动到树外CSI驱动程序。CSI迁移自Kubernetes v1.16起正式发布,关联的CSIMigration特性门禁将在v1.27中被移除。 在Kubernetes 1.27版本,移除CSIInlineVolume特性门禁。CSI Ephemeral Volume特性允许在Pod规约中直接指定CSI卷作为临时使用场景。这些CSI卷可用于使用挂载的卷直接在Pod内注入任意状态,例如配置、Secret、身份、变量或类似信息。 此特性在v1.25中进阶至正式发布。因此,此特性门禁CSIInlineVolume将在v1.27版本中移除。 在Kubernetes 1.27版本,移除EphemeralContainers特性门禁。对于Kubernetes v1.27,临时容器的API支持被无条件启用;EphemeralContainers特性门禁将被移除。 在Kubernetes 1.27版本,移除LocalStorageCapacityIsolation特性门禁。Local Ephemeral Storage Capacity Isolation特性在 v1.25 中进阶至正式发布。此特性支持emptyDir卷这类Pod之间本地临时存储的容量隔离,因此可以硬性限制Pod对共享资源的消耗。如果本地临时存储的消耗超过了配置的限制,kubelet将驱逐 Pod。特性门禁LocalStorageCapacityIsolation将在v1.27版本中被移除。 在Kubernetes 1.27版本,移除NetworkPolicyEndPort特性门禁。Kubernetes v1.25版本将NetworkPolicy中的endPort进阶至正式发布。支持endPort字段的NetworkPolicy提供程序可用于指定一系列端口以应用NetworkPolicy。 在Kubernetes 1.27版本,移除StatefulSetMinReadySeconds特性门禁。对于作为StatefulSet一部分的Pod,只有当Pod至少在minReadySeconds中指定的持续期内可用(并通过检查)时,Kubernetes才会将此Pod标记为只读。 该特性在Kubernetes v1.25中正式发布,StatefulSetMinReadySeconds特性门禁将锁定为true,并在v1.27版本中被移除。 在Kubernetes 1.27版本,移除IdentifyPodOS特性门禁。启用该特性门禁,您可以为Pod指定操作系统,此项特性支持自v1.25版本进入稳定。IdentifyPodOS特性门禁将在Kubernetes v1.27中被移除。 在Kubernetes 1.27版本,移除DaemonSetUpdateSurge特性门禁。Kubernetes v1.25版本还稳定了对DaemonSet Pod的浪涌支持,其实现是为了最大限度地减少部署期间DaemonSet的停机时间。DaemonSetUpdateSurge特性门禁将在Kubernetes v1.27中被移除。 在Kubernetes 1.27版本,移除--container-runtime 命令行参数。kubelet 接受一个已弃用的命令行参数--container-runtime, 并且在移除dockershim代码后,唯一有效的值将是remote。 Kubernetes v1.27将移除该参数,该参数自v1.24版本以来已被弃用。
  • 创建Deployment挂载已有数据卷 新建一个Deployment的YAML文件,例如deployment-test.yaml。 配置示例: apiVersion: apps/v1 kind: Deployment metadata: 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名称。 创建Deployment负载。 kubectl create -f deployment-test.yaml
  • StatefulSet动态创建subpath模式的数据卷 新建一个StatefulSet的YAML文件,例如statefulset-test.yaml。 配置示例: apiVersion: apps/v1 kind: StatefulSet metadata: 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' 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-subpath-sc 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名称。 创建StatefulSet负载。 kubectl create -f statefulset-test.yaml
  • 创建subpath类型SFS Turbo存储卷 subpath模式的卷请勿通过前端进行“扩容”、“解关联”、“删除”等操作。 创建SFS Turbo资源,选择网络时,请选择与集群相同的VPC与子网。 新建一个StorageClass的YAML文件,例如sfsturbo-subpath-sc.yaml。 配置示例: apiVersion: storage.k8s.io/v1 allowVolumeExpansion: true kind: StorageClass metadata: name: sfsturbo-subpath-sc mountOptions: - lock parameters: csi.storage.k8s.io/csi-driver-name: sfsturbo.csi.everest.io csi.storage.k8s.io/fstype: nfs 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-de6a35074696 provisioner: everest-csi-provisioner reclaimPolicy: Delete volumeBindingMode: Immediate 其中: name:storageclass的名称。 mountOptions:选填字段;mount挂载参数。 默认使用如下所示配置,具体请参见设置挂载参数。此处不能配置为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服务页面查询,子路径由用户自定义,后续指定该StorageClass创建的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界面查询。 执行kubectl create -f sfsturbo-subpath-sc.yaml。 新建一个PVC的YAML文件,sfs-turbo-test.yaml。 配置示例: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: sfs-turbo-test namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi storageClassName: sfsturbo-subpath-sc volumeMode: Filesystem 其中: name: PVC的名称。 storageClassName:SC的名称。 storage:subpath模式下,该参数无实际意义,容量受限于SFS Turbo资源的总容量,若SFS Turbo资源总容量不足,请及时到SFS Turbo界面扩容。 执行kubectl create -f sfs-turbo-test.yaml。 对subpath类型的SFS Turbo扩容时,没有实际的扩容意义。该操作不会对SFS Turbo资源进行实际的扩容,需要用户自行保证SFS Turbo的总容量不被耗尽。
  • 指标说明 集群视图暴露的指标包括基础资源指标、网络指标和磁盘指标,具体说明如下: 图1 基础资源图表 表1 基础资源图表说明 指标名称 单位 说明 Pod数 个 集群中处在不同运行状态下的Pod个数(状态包含:Failed、Pending、Running、Succeeded、Unknown等) 容器数 个 集群中处在不同运行状态下的容器个数(状态包含:Containers Running、Containers Waiting、Containers Terminated等) CPU使用量 Cores 以命名空间为粒度统计各个命名空间内的所有容器的CPU使用量之和。 内存使用量 字节 以命名空间为粒度统计各个命名空间内的所有容器的内存使用量之和。 图2 网络图表 表2 网络图表说明 指标名称 单位 说明 网络接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的字节数之和。 网络发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒传输的字节数之和。 网络平均接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均接收的字节数。 网络平均发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均传输的字节数。 接收数据包速率 个/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的数据包数之和。 集群发送数据包速率 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据包数之和。 丢包速率(接收) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒接收的数据丢包数之和。 丢包速率(发送) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据丢包数之和。 图3 磁盘图表 表3 磁盘图表说明 指标说明 单位 说明 磁盘读写IO速率(读+写) 次数/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写IO的次数之和。 磁盘读写吞吐量(读+写) 字节/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写字节量之和。
  • 指标清单 集群视图使用的指标清单如下: 表4 集群视图指标清单 指标 指标类型 说明 kube_pod_container_resource_requests gauge 容器请求的请求资源数 kube_pod_container_resource_limits gauge 容器请求的限制资源数 kube_pod_status_phase gauge Pod当前阶段 kube_pod_container_status_waiting gauge 容器是否处在waiting状态 kube_pod_container_status_terminated gauge 容器是否处在终止状态 container_cpu_usage_seconds_total counter 容器CPU累计使用时间 container_memory_rss gauge RSS内存,即常驻内存集。是分配给进程使用的实际物理内存字节数,不是磁盘上缓存的虚机内存。 container_network_receive_bytes_total counter 容器网络累积接收字节数 container_network_transmit_bytes_total counter 容器网络累积传输字节数 container_network_receive_packets_total counter 容器网络收到的累计数据包数 container_network_transmit_packets_total counter 容器网络传输的累计数据包数 container_network_receive_packets_dropped_total counter 容器网络接收时丢失的数据包数 container_network_transmit_packets_dropped_total counter 容器网络传输时丢失的数据包数 container_fs_reads_total counter 容器磁盘读取次数 container_fs_reads_bytes_total counter 容器磁盘读取的总字节数
  • 公共参数说明 表1 公共参数说明 参数 参数说明 检测周期(periodSeconds) 探针检测周期,单位为秒。 例如,设置为30,表示每30秒检测一次。 延迟时间(initialDelaySeconds) 延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。 例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。 超时时间(timeoutSeconds) 超时时间,单位为秒。 例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。 成功阈值(successThreshold) 探测失败后,将状态转变为成功所需要的最小连续成功次数。例如,设置为1时,表明健康检查失败后,健康检查需要连续成功1次,才认为工作负载状态正常。 默认值是 1,最小值是 1。 存活和启动探测的这个值必须是 1。 最大失败次数(failureThreshold) 当探测失败时重试的次数。 存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃Pod会被打上未就绪的标签。 默认值是 3。最小值是 1。
  • YAML示例 apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-http spec: containers: - name: liveness image: nginx:alpine args: - /server livenessProbe: httpGet: path: /healthz port: 80 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 startupProbe: httpGet: path: /healthz port: 80 failureThreshold: 30 periodSeconds: 10
  • 操作场景 健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若不配置健康检查,如果容器内应用程序异常,Pod将无法感知,也不会自动重启去恢复。最终导致虽然Pod状态显示正常,但Pod中的应用程序异常的情况。 Kubernetes提供了三种健康检查的探针: 存活探针:livenessProbe,用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。 就绪探针:readinessProbe,用于检查用户业务是否就绪,如果未就绪,则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。 启动探针:startupProbe,用于探测应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探针不会影响应用程序的启动。 这可以用于对启动慢的容器进行存活性检测,避免它们在启动运行之前就被终止。
  • 检查方式 HTTP请求检查 HTTP请求方式针对的是提供HTTP/HTTPS服务的容器,集群周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败。使用HTTP请求探测必须指定容器监听的端口和HTTP/HTTPS的请求路径。 例如:提供HTTP服务的容器,HTTP检查路径为:/health-check;端口为:80;主机地址可不填,默认为容器实例IP,此处以172.16.0.186为例。那么集群会周期性地对容器发起如下请求:GET http://172.16.0.186:80/health-check。您也可以为HTTP请求添加一个或多个请求头部,例如设置请求头名称为Custom-Header,对应的值为example。 图1 HTTP请求检查 TCP 端口检查 对于提供TCP通信服务的容器,集群周期性地对该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败。选择TCP端口探测方式,必须指定容器监听的端口。 例如:有一个nginx容器,它的服务端口是80,对该容器配置了TCP端口探测,指定探测端口为80,那么集群会周期性地对该容器的80端口发起TCP连接,如果连接成功则证明检查成功,否则检查失败。 图2 TCP 端口检查 执行命令检查 命令检查是一种强大的检查方式,该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果命令的返回结果是0则检查成功,否则检查失败。 对于上面提到的TCP端口检查和HTTP请求检查,都可以通过执行命令检查的方式来替代: 对于TCP端口探测,可以使用程序对容器的端口尝试connect,如果connect成功,脚本返回0,否则返回-1。 对于HTTP请求探测,可以使用脚本命令来对容器尝试使用wget命令进行探测。 wget http://127.0.0.1:80/health-check 并检查response的返回码,如果返回码在200~399 的范围,脚本返回0,否则返回-1。如下图: 图3 执行命令检查 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。 如果执行的命令是一个shell脚本,由于集群在执行容器里的程序时,不在终端环境下,因此不能直接指定脚本为执行命令,需要加上脚本解析器。比如脚本是/data/scripts/health_check.sh,那么使用执行命令检查时,指定的程序应该是sh /data/scripts/health_check.sh。究其原因是集群在执行容器里的程序时,不在终端环境下。 GRPC检查 GRPC检查可以为GRPC应用程序配置启动、活动和就绪探针,而无需暴露任何HTTP端点,也不需要可执行文件。Kubernetes可以通过GRPC连接到工作负载并查询其状态。 使用GRPC检查时,您的应用需支持GRPC健康检查协议。 与HTTP和TCP探针类似,如果配置错误,都会被认作是探测失败,例如错误的端口、应用未实现健康检查协议等。 图4 GRPC检查
  • 文件存储挂载参数 CCE Autopilot在挂载文件存储时默认设置了如表1所示的参数。 表1 文件存储挂载参数 参数 参数值 描述 keep-original-ownership 无需填写 表示是否保留文件挂载点的ownership。 默认为不添加该参数,此时挂载文件存储时将会默认把挂载点的ownership修改为root:root。 如添加该参数,挂载文件存储时将保持文件系统原有的ownership。 vers 3 文件系统版本,目前只支持NFSv3。取值:3 nolock 无需填写 选择是否使用NLM协议在服务器上锁文件。当选择nolock选项时,锁对于同一主机的应用有效,对不同主机不受锁的影响。 timeo 600 NFS客户端重传请求前的等待时间(单位为0.1秒)。建议值:600。 hard/soft 无需填写 挂载方式类型。 取值为hard,即使用硬连接方式,若NFS请求超时,则客户端一直重新请求直至成功。 取值为soft,即软挂载方式挂载系统,若NFS请求超时,则客户端向调用程序返回错误。 默认为hard。 sharecache/nosharecache 无需填写 设置客户端并发挂载同一文件系统时数据缓存和属性缓存的共享方式。设置为sharecache时,多个挂载共享共享同一缓存。设为nosharecache时,每个挂载各有一个缓存。默认为sharecache。 说明: 设置nosharecache禁用共享缓存会对性能产生一定影响。每次挂载都会重新获取挂载信息,会增加与NFS服务器的通信开销和NFS客户端的内存消耗,同时同客户端设置nosharecache存在cache不一致的风险。因此,应该根据具体情况进行权衡,以确定是否需要使用nosharecache选项。 除了以上参数外,您还可以设置其他的文件存储挂载参数,具体请参见挂载NFS文件系统到云服务器(Linux)。
  • 使用云原生日志采集插件采集日志 启用云原生日志采集插件日志采集功能 在集群创建时启用云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台。 在控制台上方导航栏,单击“购买集群”。 在“插件选择”页面中,选择“云原生日志采集插件”。 单击右下角“下一步:插件配置”,根据需求勾选以下配置。 容器日志:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到 云日志 服务(LTS)。 Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 配置完成后,单击右下角“下一步:确认配置”,在弹出的窗口中单击“确定”,完成创建。 为已有集群启用CCE 云原生日志采集插件日志采集 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 未进行授权的用户需要先授权,已授权的用户直接跳转下一步。 在弹出框中单击“确认授权”。 页面单击“一键开启”,等待约30秒后,页面自动跳转。 采集容器标准输出:开启后,将创建名为default-stdout的日志策略,并上报所有命名空间下的标准输出到云日志服务(LTS)。 采集Kubernetes事件:开启后,将创建名为default-event的日志策略,并上报所有命名空间下的Kubernetes事件到云日志服务(LTS)。 查看并配置日志采集策略。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 右上角单击“日志采集策略”,将显示当前集群所有上报LTS的日志策略。 图1 查看日志策略 若启用日志采集功能时勾选了采集容器标准输出和采集Kubernetes事件,将创建两个日志策略,并对接默认的LTS日志组、日志流。 default-stdout 采集标准输出。默认日志组:k8s-logs-{集群ID};默认日志流:stdout-{集群ID} default-event 采集Kubernetes事件。默认日志组:k8s-logs-{集群ID};默认日志流:event-{集群ID} 创建日志策略:单击上方“创建日志策略”,输入要采集的配置信息。 策略模板:若启用日志采集功能时未勾选采集容器标准输出和采集Kubernetes事件,或者删除了对应的日志策略,可通过该方式重新创建默认日志策略。 图2 使用策略模板 自定义策略:用于配置自定义日志策略。 图3 自定义策略 表1 自定义策略参数说明 参数 说明 日志类型 指定采集哪类日志。 容器标准输出:用于采集容器标准输出,可以按命名空间、工作负载名称、实例标签配置采集策略。 容器文件路径:用于采集容器内的日志,可以按工作负载和实例标签配置采集策略。 日志源 采集哪些容器的日志。 所有容器:可以指定采集某个命名空间的所有容器,如不指定则采集所有命名空间的容器。 指定工作负载:指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 指定实例标签:根据标签指定采集哪些工作负载容器的日志,可以指定采集工作负载中具体容器的日志,如不指定则采集所有容器的日志。 路径配置 用于配置需要采集的日志路径。 文件路径必须以/ 开头,只能包含大写字母、小写字母、数字或特殊字符-_/*?,且长度不能超过512个字符。 文件名称只能包含大写字母、小写字母、数字或特殊字符-_*?.。 日志文件夹:请填写绝对路径。日志文件名:不支持.gz、.tar、.zip后缀类型。 最多有三级目录采用通配符匹配,且第一级目录不能使用通配符。 目录名和文件名支持完整名称和通配符模式,通配符只支持星号(*)和半角问号(?)。 星号(*)表示匹配多个任意字符。半角问号(?)表示匹配单个任意字符。例如: 日志路径为/var/logs/* 文件名*.log,表示/var/logs下所有目录中后缀名为.log的文件。 日志路径为 /var/logs/app_* 文件名*.log,表示/var/logs目录下所有符合app_*格式的目录中后缀名为.log的文件。 如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log或/var/log/*将采集不到该目录下的日志,需设置采集目录为/var/log/service。 日志格式 单行文本 每条日志仅包含一行文本,以换行符 \n 作为各条日志的分界线。 多行文本 有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行文本,采用首行正则的方式进行匹配,当选择多行文本时,需填写日志匹配格式。 例如: 需采集的日志格式如下,则需填写时间的正则匹配,在日志匹配格式处填写:\d{4}-\d{2}-\d{2} \d{2}\:\d{2}\:\d{2}.* 则下面以日期开头三行日志会作为一条完整日志。 2022-01-01 00:00:00 Exception in thread "main" java.lang.RuntimeException: Something has gone wrong, aborting! at com.myproject.module.MyProject.badMethod(MyProject.java:22) at com.myproject.module.MyProject.oneMoreMethod(MyProject.java:18) 上报到云日志服务(LTS) 用于配置日志上报的日志组和日志流。 使用默认日志组/日志流:将为您自动选择默认日志组(k8s-log-{集群ID})和默认的日志流(stdout-{集群ID})。 自定义日志组/日志流:可在下拉框选择任意日志组和日志流。 日志组 日志组是云日志服务进行日志管理的基本单位。如果您未创建日志组,CCE会提示您进行创建,默认名称为k8s-log-{集群ID},如 k8s-log-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3。 日志流 日志流(LogStream):日志流是日志读写的基本单位,日志组中可以创建日志流,将不同类型的日志分类存储,方便对日志进一步分类管理。在安装插件或者根据模板创建日志策略时,会自动创建以下日志流: 容器日志:默认名称为stdout-{集群ID},如 stdout-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 k8s事件:默认名称为event-{集群ID},如 event-bb7eaa87-07dd-11ed-ab6c-0255ac1001b3 编辑日志策略:单击“编辑”按钮,可对已经存在的日志策略进行修改。 删除日志策略:单击“删除”按钮,可对已经存在的日志策略进行删除。 查看日志。 登录云容器引擎(CCE)控制台,单击集群名称进入集群,选择左侧导航栏的“日志中心”。 日志中心下有3个页签,支持不同类型日志查看。 容器日志:显示默认日志组(k8s-log-{集群ID})下默认日志流(stdout-{集群ID})中的所有日志数据,支持通过工作负载搜索。 图4 容器日志查询 Kubernetes事件:显示默认日志组(k8s-log-{集群ID})下默认日志流(event-{集群ID})中的所有日志数据,用于查询集群产生的Kubernetes事件。 全局日志查询:支持查看所有日志组日志流下的日志信息。可通过选择日志流查看所选日志流中的日志信息,默认会选择集群默认日志组(k8s-log-{集群ID}),可通过单击切换日志组右侧的图标切换其他日志组。 图5 全局日志查询 单击右上角“日志采集策略”,单击“查看日志”,可以直接跳转至对应日志策略的日志列表。 图6 查看日志
  • 常见问题处理 插件中除log-operator外组件均未就绪,且出现异常事件“实例挂卷失败”。 解决方案:请查看log-operator日志,安装插件时,其余组件所需的配置文件需要log-operator生成,log-operator生成配置出错,会导致所有组件无法正常启动。 日志信息如下: MountVolume.SetUp failed for volume "otel-collector-config-vol":configmap "log-agent-otel-collector-config" not found log-operator标准输出报错:Failed to create log group, the number of log groups exceeds the quota 示例: 2023/05/05 12:17:20.799 [E] call 3 times failed, resion: create group failed, projectID: xxx, groupName: k8s-log-xxx, err: create groups status code: 400, response: {"error_code":"LTS.0104","error_msg":"Failed to create log group, the number of log groups exceeds the quota"}, url: https://lts.cn-north-4.myhuaweicloud.com/v2/xxx/groups, process will retry after 45s 解决方案:LTS日志组有配额限制,如果出现该报错,请前往LTS下删除部分无用的日志组。限制详情见:日志组。 日志无法上报,otel组件标准输出报错:log's quota has full 解决方案: 云日志服务(LTS)有免费赠送的额度,超出后将收费,报错说明免费额度已用完,如果需要继续使用,请前往云日志服务控制台“配置中心”,打开“超额继续采集日志”开关。 图7 配额设置 采集容器内日志,且采集目录配置了通配符,日志无法采集。 排查方法:请检查工作负载配置中Volume挂载情况,如果业务容器的数据目录是通过数据卷(Volume)挂载的,插件不支持采集它的父目录,需设置采集目录为完整的数据目录。例如/var/log/service目录是数据卷挂载的路径,则设置采集目录为/var/log或/var/log/*将采集不到该目录下的日志,需设置采集目录为/var/log/service。 解决方案:若日志生成目录为/application/logs/{应用名}/*.log,建议工作负载挂载Volume时,直接挂载/application/logs,日志策略中配置采集路径为/application/logs/*/*.log
  • 管理内核参数配置 CCE Autopilot是云容器引擎服务推出的Serverless版集群,同物理机系统内核隔离且互不影响。对于资深业务部署场景,内核参数调优是比较通用的方式。在安全范围内,CCE Autopilot服务允许客户根据Kubernetes社区推荐的方案,通过Pod的安全上下文(Security Context)对内核参数进行配置,极大提升用户业务部署的灵活性。如果您对securityContext概念不够熟悉,更多信息可阅读Security Context。 在 Linux 中,最通用的内核参数修改方式是通过sysctl接口进行配置。在Kubernetes中,也是通过Pod的sysctl安全上下文(Security Context)对内核参数进行配置,如果您对sysctl概念不够熟悉,可阅读在 Kubernetes 集群中使用 sysctl。安全上下文(Security Context)作用于同一个Pod内的所有容器。 CCE Autopilot服务支持修改的非安全的sysctl参数范围如下: kernel.shm*, kernel.msg*, kernel.sem, fs.mqueue.*, net.* 为了避免破坏操作系统的稳定性,请您在了解变更后果之后再修改sysctl参数。 有命名空间的sysctl参数,在未来的Linux内核版本中,可能会发生变化。 由于非安全的sysctl参数其本身具有不稳定性,在使用非安全的 sysctl 参数时可能会导致一些严重问题, 如容器的错误行为,用户需自行承担风险。 以下示例中,使用Pod SecurityContext来对两个sysctl参数kernel.msgmax和net.core.somaxconn进行设置。 apiVersion: v1 kind: Pod metadata: name: sysctls-context-example spec: securityContext: sysctls: - name: kernel.msgmax value: "65536" - name: net.core.somaxconn value: "1024" ... 进入容器确认配置生效: kubectl exec -it podname -c container-1 -- /bin/sh 父主题: 工作负载
  • 指标说明 Pod视图暴露的指标包括Pod资源指标、Pod网络指标和Pod磁盘指标,具体说明如下: 图1 Pod资源指标 表1 Pod资源指标说明 指标名称 单位 说明 容器数 个 Pod中的容器总数 运行中容器数 个 Pod中正在运行的容器个数 Pod状态 个 处在不同状态下的Pod个数 容器重启次数 次 容器被重启的次数 CPU使用量 Cores Pod CPU使用量 CPU 有效率&使用率 百分比 有效率:使用量/请求量;使用率:使用量/总量 内存使用量 字节 内存使用量 内存 有效率&使用率 百分比 有效率:使用量/请求量;使用率:使用量/总量 CPU Throttling 百分比 CPU节流周期限制率 图2 Pod网络指标 表2 Pod网络指标说明 指标名称 单位 说明 网络接收速 字节/秒 容器每秒接收的字节数 网络发送速率 字节/秒 容器每秒发送的字节数 接收数据包速率 个/秒 容器每秒接收数据包数 发送数据包速率 个/秒 容器每秒发送数据包数 丢包速率(接收) 个/秒 容器每秒接收的数据丢包数 丢包速率(发送) 个/秒 容器每秒发送的数据丢包数 图3 Pod磁盘指标 表3 Pod磁盘指标说明 指标名称 单位 说明 Pod容器磁盘读写IO速率(读+写) 次数/秒 Pod磁盘每秒读写IO次数 Pod磁盘读写吞吐量(读+写) 字节/秒 Pod磁盘每秒读写字节数 容器磁盘读写IO速率(读+写) 次数/秒 容器磁盘每秒读写IO次数 容器磁盘读写吞吐量(读+写) 字节/秒 容器磁盘每秒读写字节数 文件系统使用率 百分比 文件系统的使用率 文件系统使用量 字节 文件系统已经使用的字节数
  • 指标清单 Pod视图使用的指标清单如下: 表4 Pod视图指标清单 指标 指标类型 说明 kube_pod_container_status_running gauge 容器当前是否在运行中的状态 kube_pod_container_info gauge Pod中的容器信息 kube_pod_status_phase gauge Pod当前的阶段 kube_pod_container_status_restarts_total counter 容器重启次数 container_cpu_usage_seconds_total counter 容器CPU累计使用时间 kube_pod_container_resource_requests gauge 容器请求的请求资源数 container_spec_cpu_quota gauge 容器的CPU配额 container_memory_working_set_bytes gauge 容器内存使用量 container_spec_memory_limit_bytes gauge 容器内存限制量 container_cpu_cfs_throttled_periods_total counter 容器限制周期间隔数 container_cpu_cfs_periods_total counter 容器经过强制限制的周期间隔数 container_network_receive_bytes_total counter 容器接收字节的累计计数 container_network_transmit_bytes_total counter 容器传输字节的累计计数 container_network_receive_packets_total counter 容器接收数据包的累计计数 container_network_transmit_packets_total counter 容器传输数据包的累计计数 container_network_receive_packets_dropped_total counter 容器接收丢失的数据包的累计计数 container_network_transmit_packets_dropped_total counter 容器传输丢失的数据包的累计计数 container_fs_reads_total counter 容器已完成磁盘读取的累计计数 container_fs_writes_total counter 容器已完成磁盘写入的累计计数 container_fs_reads_bytes_total counter 容器读取的累计字节数 container_fs_writes_bytes_total counter 容器写入的累计在节数 container_fs_usage_bytes gauge 文件系统上容器已经使用的字节数 container_fs_limit_bytes gauge 文件系统上容器限制的字节数
  • 操作步骤 登录CCE控制台。 单击集群名称进入集群,在左侧选择“工作负载”,在右上角单击“创建工作负载”。 在创建工作负载时,在“高级设置”中找到“性能管理配置”。探针默认状态为“不启用”,您可选择“ APM 2.0探针”。开启后将会通过 应用性能管理 服务针对JAVA程序提供更精准的问题分析与定位。 启用APM探针后会自动新增一个名为init-javaagent(APM2.0探针)的初始化容器用来初始化探针,并分配0.25Core CPU和250MiB内存供初始化容器使用。 启用APM探针后会给所有业务容器自动添加环境变量:PAAS_MONITORING_GROUP、JAVA_TOOL_OPTIONS、PAAS_CLUSTER_ID、APM_AC CES S_ADDRESS。 启用APM探针后会给所有业务容器自动挂载一个名为paas-apm2(APM2.0 探针)的本地存储卷。 填写探针相关参数。 APM终端节点:Autopilot集群内访问APM需要创建APM终端节点,用于连接VPC网络和APM服务。关于终端节点价格详情请参见价格计算器。 探针版本:选择探针的版本。 “探针升级策略”,默认为“重启自动升级”。 重启自动升级:每次都尝试重新下载镜像。 重启手动升级:如果本地有该镜像,则使用本地镜像,本地不存在时下载镜像。 APM环境:输入APM环境名称,该参数为选填。 APM应用:选择一个已有的APM应用。 子应用:输入APM子应用,该参数为选填。 接入密钥:将会自动获取APM服务的密钥信息,可前往APM控制台查看密钥详情。 关于APM2.0参数概念的详细说明,请参见APM参数说明。 应用启动后,等待约3分钟,应用数据就会呈现在APM界面中,此时登录APM,您可以在APM上通过拓扑、调用链等进行应用性能优化,详细操作请参考应用拓扑。
  • 使用CloudShell连接集群 CloudShell是一款用于管理与运维云资源的网页版Shell工具,CCE支持使用CloudShell连接集群,如图1所示,单击“命令行工具”即可在CloudShell中使用kubectl访问集群。 CloudShell中kubectl证书有效期为1天,从云容器引擎重新跳转可以重置有效期。 集群必须安装CoreDNS才能使用CloudShell。 CloudShell暂不支持委托账号和子项目。 图1 CloudShell 图2 在CloudShell中使用kubectl
  • 约束与限制 cce-hpa-controller需要安装能够提供Metrics API的插件,您可根据集群版本和实际需求选择其中之一: Kubernetes Metrics Server:提供基础资源使用指标,例如容器CPU和内存使用率。所有集群版本均可安装。 云原生监控插件:根据基础资源指标进行弹性伸缩,需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供资源指标。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到CCE容器弹性引擎插件,单击“安装”。 在安装插件页面,设置“规格配置”。 表1 cce-hpa-controller插件规格配置 参数 参数说明 实例数 插件实例的副本数量。 实例数为1时插件不具备高可用能力,当插件实例异常时可能导致插件功能无法正常使用,请谨慎选择。 容器 选择插件规格后,显示插件容器的CPU和内存配额。 您可根据需求调整插件实例的容器规格。 单击“安装”。
  • 解决方案 问题场景: 1.25及以上集群中的service存在废弃的annotation:tolerate-unready-endpoints 报错日志信息如下: some check failed in cluster upgrade: this cluster has deprecated service list: map[***] with deprecated annotation list [tolerate-unready-endpoints] 检查日志信息中所给出的service是否存在"tolerate-unready-endpoints"的annotation,如果存在则将其去掉,并在对应的service的spec中添加下列字段来替代该annotation: publishNotReadyAddresses: true
  • 命名空间使用实践 按照不同环境划分命名空间 一般情况下,工作负载发布会经历开发环境、联调环境、测试环境,最后到生产环境的过程。这个过程中不同环境部署的工作负载相同,只是在逻辑上进行了定义。分为两种做法: 分别创建不同集群。 不同集群之间,资源不能共享。同时,不同环境中的服务互访需要通过负载均衡才能实现。 不同环境创建对应命名空间。 同个命名空间下,通过服务名称(Service name)可直接访问。跨命名空间的可以通过服务名称、命名空间名称访问。 例如下图,开发环境/联调环境/测试环境分别创建了命名空间。 图1 不同环境创建对应命名空间 按照应用划分命名空间 对于同个环境中,应用数量较多的情况,建议进一步按照工作负载类型划分命名空间。例如下图中,按照APP1和APP2划分不同命名空间,将不同工作负载在逻辑上当做一个工作负载组进行管理。且同一个命名空间内的工作负载可以通过服务名称访问,不同命名空间下的通过服务名称、命名空间名称访问。 图2 按照工作负载划分命名空间
  • 通过kubectl使用临时路径 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑nginx-emptydir.yaml文件。 vi nginx-emptydir.yaml YAML文件内容如下: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-emptydir namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-emptydir template: metadata: labels: app: nginx-emptydir spec: containers: - name: container-1 image: nginx:latest volumeMounts: - name: vol-emptydir # 卷名称,需与volumes字段中的卷名称对应 mountPath: /tmp # emptyDir挂载路径 imagePullSecrets: - name: default-secret volumes: - name: vol-emptydir # 卷名称,可自定义 emptyDir: medium: Memory # emptyDir磁盘介质:设置为Memory时,表示开启内存;设置为空时为原生默认的存储介质类型 sizeLimit: 1Gi # 卷容量大小 创建工作负载。 kubectl apply -f nginx-emptydir.yaml
  • 创建ClusterIP类型Service 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。 设置集群内访问参数。 Service名称:自定义服务名称,可与工作负载名称保持一致。 访问类型:选择“集群内访问”。 命名空间:工作负载所在命名空间。 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。 端口配置: 协议:请根据业务的协议类型选择。 服务端口:Service使用的端口,端口范围为1-65535。 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。 单击“确定”,创建Service。
  • 极速文件存储介绍 CCE Autopilot支持将极速文件存储(SFS Turbo)创建的存储卷挂载到容器的某一路径下,以满足数据持久化的需求。极速文件存储具有按需申请,快速供给,弹性扩展,方便灵活等特点,适用于海量小文件业务,例如DevOps、容器微服务、企业办公等应用场景。 SFS Turbo为用户提供一个完全托管的共享文件存储,能够弹性伸缩至320TB规模,具备高可用性和持久性,为海量的小文件、低延迟高IOPS型应用提供有力支持。 符合标准文件协议:用户可以将文件系统挂载给服务器,像使用本地文件目录一样。 数据共享:多台服务器可挂载相同的文件系统,数据可以共享操作和访问。 私有网络:数据访问必须在数据中心内部网络中。 安全隔离:直接使用云上现有IaaS服务构建独享的云文件存储,为租户提供数据隔离保护和IOPS性能保障。 应用场景:适用于多读多写(ReadWriteMany)场景下的各种工作负载(Deployment/StatefulSet)和普通任务(Job)使用,主要面向高性能网站、日志存储、DevOps、企业办公等场景。
  • 查看告警列表 您可以在“告警列表”页面查看最近发送的历史记录。 登录CCE控制台。 在集群列表页面,单击目标集群名称进入详情页。 在左侧导航栏选择“告警中心”,选择“告警列表”页签。 列表中默认展示全部待解决告警,支持按照告警关键字、告警等级,以及告警发生的时间范围筛选。同时支持查看指定筛选条件的告警在不同时间段的分布情况。 如果确认某条告警已排除,可以单击操作列的“清除”,清除后可在历史告警中查询。 图1 告警列表
  • 开启告警中心 在目标集群左侧导航栏选择“告警中心”。 选择“告警规则”页签,单击“开启告警中心”,在弹出的页面中选择一个或多个联系组,以便分组管理订阅终端并接收告警消息。如果当前还没有联系组,请参考配置告警通知人进行创建。 单击“确认”完成功能开启。 告警中心中的指标类告警规则依赖云原生监控插件上报指标数据到 AOM Prometheus实例,需要开通监控中心。当您的集群未安装插件或者在安装插件时未对接AOM Prometheus实例,告警中心将不会创建指标类告警规则。开通监控中心请参考开通监控中心。 表1中的事件类告警依赖日志中心开启收集Kubernetes事件的能力,详情请参见收集Kubernetes事件。
  • 配置告警通知人 联系组是基于 消息通知 服务 SMN 的主题功能实现的,目的是为消息发布者和订阅者提供一个可以相互交流的通道。联系组包含一个或多个订阅终端,您可以通过配置告警联系组,分组管理订阅终端,接收告警信息。联系组创建完成后,需要绑定至告警规则集,这样,当有告警触发时,联系组中的订阅终端就可以收到告警消息了。 登录CCE控制台。 在集群列表页面,单击目标集群名称进入详情页。 在左侧导航栏选择“告警中心”,选择“默认联系组”页签。 单击“新建联系组”,在弹出的页面中输入联系组参数。 联系组名称:输入联系组名称,创建后不可修改。名称只能包含大写字母、小写字母、数字、-和_,且必须由大写字母、小写字母或数字开头,名称长度为1~255字符。 告警消息显示名:即订阅终端接收消息的标题名称。假设订阅终端为邮件,推送邮件消息时,若已设置告警消息显示名,发件人则呈现为“显示名”,若未设置告警消息显示名,发件人呈现为“username@example.com”。支持在联系组创建完成后修改告警消息显示名。 添加订阅终端:您需要添加一个或多个订阅终端来接收告警消息。终端类型包括短信和邮件,选择“短信”时,请输入有效的手机号码;选择“邮件”时,请输入有效的电子邮件地址。 单击“确定”完成联系组的创建。 返回联系组列表,订阅终端状态为“未确认”,您需要继续执行后续操作,向该终端发送订阅请求,以验证终端有效性。 单击操作列“请求订阅”,向该终端发送订阅请求。若终端收到请求,请按照提示进行确认,确认完成后订阅终端状态将变为“已确认”。 联系组创建并确认后,单击图标启用联系组,实现联系组和告警规则集的绑定。 告警规则集最多支持绑定5个联系组。
  • 创建HPA策略 在CCE控制台,单击集群名称进入集群。 单击左侧导航栏的“策略”,切换至“HPA策略”页签,在右上角单击“创建HPA策略”。 填写HPA基本信息。 策略名称:新建策略的名称,请自定义。 命名空间:请选择工作负载所在的命名空间。 关联工作负载:请选择要设置HPA策略的工作负载。 填写HPA策略配置参数。 表1 HPA策略配置 参数 参数说明 实例范围 请输入最小实例数和最大实例数。 策略触发时,工作负载实例将在此范围内伸缩。 伸缩配置 系统默认:采用社区推荐的默认行为进行负载伸缩,详情请参见社区默认行为说明。 自定义:自定义扩/缩容配置的稳定窗口、步长、优先级等策略,实现更灵活的配置。未配置的参数将采用社区推荐的默认值。 禁止扩/缩容:选择是否禁止扩容或缩容。 稳定窗口:需要伸缩时,会在一段时间(设定的稳定窗口值)内持续检测,如在该时间段内始终需要进行伸缩(不满足设定的指标期望值)才进行伸缩,避免短时间的指标抖动造成异常。 步长策略:扩/缩容的步长,可设置一定时间内扩/缩容Pod数量或百分比。在存在多条策略时,可以选择使Pod数量最多或最少的策略。 系统策略 指标:可选择“CPU利用率”或“内存利用率”。 说明: 利用率 = 工作负载容器组(Pod)的实际使用量 / 申请量 期望值:请输入期望资源平均利用率。 期望值表示所选指标的期望值,通过向上取整(当前指标值 / 期望值 × 当前实例数)来计算需要伸缩的实例数。 说明: HPA在计算扩容、缩容实例数时,会选择最近5分钟内实例数的最大值。 容忍范围:指标处于范围内时不会触发伸缩,期望值必须在容忍范围之间。 当指标值大于缩容阈值且小于扩容阈值时,不会触发扩容或缩容。阈值仅在1.15及以上版本的集群中支持。 设置完成后,单击“创建”。
  • Pod注解 CCE提供一些使用Pod的高级功能,这些功能使用时可以通过给YAML添加注解Annotation实现。具体的Annotation如下表所示。 表1 Pod Annotation 注解 说明 默认值 kubernetes.io/ingress-bandwidth Pod的入口带宽 具体使用请参见为Pod配置QoS。 - kubernetes.io/egress-bandwidth Pod的出口带宽 具体使用请参见为Pod配置QoS。 - node.cce.io/node-az-list Pod亲和的可用区列表。 具体使用请参见设置可用区亲和性。 -
共100000条