健康检查是一种测试和监控现有集群健康的方式。健康检查会自行定期运行。您还可以使用 gkectl diagnose cluster
按需运行健康检查。本文档介绍了每项检查,以及在什么情况下会自动运行、如何以及何时手动运行以及如何解读结果。
检查了什么?
Google Distributed Cloud 健康检查分为两类:
节点机器检查
集群级检查
以下部分概述了每个类别的检查内容。这些检查既可用于定期健康检查,也可用于按需健康检查。
节点机器检查
本部分介绍了节点机器的健康检查会评估哪些内容。这些检查可确认节点机器配置正确,并且具有足够的资源和连接,以便创建集群、升级集群和操作集群。
这些检查对应于在集群命名空间内管理员集群中运行的裸金属 HealthCheck
自定义资源 bm-system-NODE_IP_ADDRESS-machine
(例如 bm-system-192.0.2.54-machine
)。如需详细了解健康检查资源,请参阅 HealthCheck
自定义资源。
常规机器检查包括以下各项:
集群机器使用的是受支持的操作系统 (OS)。
操作系统版本。
操作系统使用的是受支持的内核版本。
内核已启用 BPF 即时 (JIT) 编译器选项 (
CONFIG_BPF_JIT=y
)。对于 Ubuntu,Uncomplicated Firewall (UFW) 已停用。
节点机器满足最低 CPU 要求。
节点机器的可用 CPU 资源超过 20%。
节点机器满足最低内存要求。
节点机器满足最低磁盘存储空间要求。
时间同步是在节点机器上配置的。
节点中存在将数据包路由到默认网关的默认路由。
域名系统 (DNS) 正常运行(如果集群配置为在代理后运行,则跳过此检查)。
如果集群已配置为使用注册表镜像,则可以访问该注册表镜像。
机器 Google Cloud 检查包括以下各项:
Artifact Registry,
gcr.io
可访问(如果集群配置为使用注册表镜像,则跳过此检查)。Google API 可访问。
机器健康检查包括以下各项:
kubelet
处于活动状态,并在节点机器上运行。containerd
处于活动状态,并在节点机器上运行。容器网络接口 (CNI) 健康端点状态为健康。
Pod CIDR 不会与节点机器 IP 地址重叠。
集群级检查
本部分介绍了集群健康检查会评估哪些内容。
默认检查
默认集群检查会在定期健康检查的过程中自动运行,也可以在集群健康检查的过程中按需运行。这些检查可确保 Kubernetes 集群资源配置正确且正常运行。
这些检查对应于在集群命名空间内管理员集群中运行的裸金属 HealthCheck
自定义资源(bm-system-default-*
资源)。如需详细了解健康检查资源,请参阅 HealthCheck
自定义资源。
默认集群检查会审核以下资源类型和条件:
DaemonSet
- 配置有效
- DaemonSet 的运行状况良好
部署
- 配置有效
- 部署健康状况良好
节点(以下是所有节点条件)
- 节点就绪状态
- kubelet 磁盘压力
- kubelet 内存压力
- kubelet 进程 ID (PID) 压力
- kubelet 重启频率
- kubelet 的运行状况良好
- 网络可用性
- containerd 函数
- containerd 重启频率
- Docker Overlay2 函数
- Docker 重启频率
- 网络设备取消注册事件频率
- 内核死锁
- KubeProxy 的运行状况良好
- 只读文件系统
Pod
- 配置有效
- Pod 的健康状况良好
- 容器处于健康状态
PodDisruptionBudget (PDB)
- 配置有效
- PDB 运行时函数
- PDB 与 Pod 匹配
- 不由多个 PDB 管理的 Pod
资源请求量
- 目标节点上的 Pod 设置了 CPU 和内存请求
- 每个节点的平均资源请求量在所跟踪的上限范围内
服务
- 配置有效
- 服务健康状况良好
StatefulSet
- 配置有效
- StatefulSet
网络检查
以下客户端集群节点网络检查会在定期健康检查的过程中自动运行。无法按需运行网络检查。这些检查对应于在集群命名空间内管理员集群中运行的裸金属 HealthCheck
自定义资源 bm-system-network
。如需详细了解健康检查资源,请参阅 HealthCheck
自定义资源。
如果集群使用捆绑式负载均衡,则负载均衡节点池中的节点必须具有第 2 层地址解析协议 (ARP) 连接。ARP 是 VIP 发现所必需的。
控制平面节点已开放端口 8443 和 8444,以供 GKE Identity Service 使用。
控制平面节点已打开端口 2382 和 2383,以供
etcd-events
实例使用。
Kubernetes
Kubernetes 检查会在预检和定期健康检查的过程中自动运行,也可以按需运行。如果列出的任何控制平面组件缺失,这些健康检查不会返回错误。只有在组件存在且在命令执行时存在错误时,检查才会返回错误。
这些检查对应于在集群命名空间内管理员集群中运行的裸金属 HealthCheck
自定义资源(bm-system-kubernetes
资源)。如需详细了解健康检查资源,请参阅 HealthCheck
自定义资源。
API 服务器正常运行。
anetd
Operator 已配置正确。所有控制平面节点均可正常运行。
以下控制平面组件正常运行:
anthos-cluster-operator
controller-manager
cluster-api-provider
ais
capi-kubeadm-bootstrap-system
cert-manager
kube-dns
插件
插件检查会在预检检查和定期健康检查的过程中自动运行,并且可以按需运行。如果列出的任何插件都缺失,此健康检查不会返回错误。只有在插件存在且在命令执行时存在错误时,检查才会返回错误。
这些检查对应于在集群命名空间内管理员集群中运行的裸金属 HealthCheck
自定义资源(bm-system-add-ons*
资源)。如需详细了解健康检查资源,请参阅 HealthCheck
自定义资源。
Cloud Logging Stackdriver 组件和 Connect Agent 可正常运行:
stackdriver-log-aggregator
stackdriver-log-forwarder
stackdriver-metadata-agent
stackdriver-prometheus-k8
gke-connect-agent
Google Distributed Cloud 管理的资源显示未进行任何手动更改(配置偏移):
字段值尚未更新
选填字段尚未添加或移除
资源尚未删除
如果健康检查检测到配置偏移,则 bm-system-add-ons
裸金属 HealthCheck
自定义资源 Status.Pass
值会设置为 false
。Failures
部分中的 Description
字段包含有关已更改的任何资源的详细信息,包括以下信息:
Version
:资源的 API 版本。Kind
:资源的对象架构,例如Deployment
。Namespace
:资源所在的命名空间。Name
:资源的名称。Diff
:以字符串格式比较记录的资源清单与已更改资源的清单之间的差异。
HealthCheck
自定义资源
运行健康检查时,Google Distributed Cloud 会创建 HealthCheck
自定义资源。HealthCheck
自定义资源是持久的,并提供健康检查活动和结果的结构化记录。HeathCheck
自定义资源分为两类:
裸金属
HealthCheck
自定义资源 (API Version: baremetal.cluster.gke.io/v1
):这些资源提供有关定期健康检查的详细信息。这些资源位于管理员集群的集群命名空间中。裸金属HealthCheck
资源负责创建健康检查 Cron 作业和其他作业。这些资源会持续使用最新结果进行更新。Anthos
HealthCheck
自定义资源 (API Version: anthos.gke.io/v1
):这些资源用于报告健康检查指标。这些资源位于每个集群的kube-system
命名空间中。这些资源的更新会尽力而为。如果更新因某个问题而失败(例如临时网络错误),系统会忽略该失败。
下表列出了为两种 HealthCheck
类别创建的资源类型:
裸金属健康检查 | Anthos HealthChecks | 严重程度 |
---|---|---|
类型:默认 名称: 名称: 名称: 名称: 名称: 名称: 名称: 名称: |
类型:默认 名称: 名称: 名称: 名称: 名称: 名称: 名称: 名称: |
严重 |
类型:机器
姓名: |
类型:机器
姓名: |
严重 |
类型:网络
姓名: |
类型:网络
姓名: |
严重 |
类型:Kubernetes
姓名: |
类型:Kubernetes
姓名: |
严重 |
类型:插件
姓名: |
类型:插件
姓名:
姓名: |
可选 |
如需检索 HealthCheck
状态,请执行以下操作:
如需读取定期健康检查的结果,您可以获取关联的自定义资源:
kubectl get healthchecks.baremetal.cluster.gke.io \ --kubeconfig ADMIN_KUBECONFIG \ --all-namespaces
将
ADMIN_KUBECONFIG
替换为管理员集群 kubeconfig 文件的路径。以下示例展示了定期健康检查以及检查在上次运行时是否通过:
NAMESPACE NAME PASS AGE cluster-test-admin001 bm-system-192.0.2.52-machine true 11d cluster-test-admin001 bm-system-add-ons true 11d cluster-test-admin001 bm-system-kubernetes true 11d cluster-test-admin001 bm-system-network true 11d cluster-test-user001 bm-system-192.0.2.53-machine true 56d cluster-test-user001 bm-system-192.0.2.54-machine true 56d cluster-test-user001 bm-system-add-ons true 56d cluster-test-user001 bm-system-kubernetes true 56d cluster-test-user001 bm-system-network true 56d
如需读取特定健康检查的详细信息,请使用
kubectl describe
:kubectl describe healthchecks.baremetal.cluster.gke.io HEALTHCHECK_NAME \ --kubeconfig ADMIN_KUBECONFIG \ --namespace CLUSTER_NAMESPACE
替换以下内容:
HEALTHCHECK_NAME
:健康检查的名称。ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:集群的命名空间。
在您查看资源时,
Status:
部分包含以下重要字段:Pass
:指示上次健康检查作业是否通过。Checks
:包含有关最近一次健康检查作业的信息。Failures
:包含有关最近失败作业的信息。Periodic
:包含上次安排和插桩健康检查作业的时间等信息。
以下
HealthCheck
示例是针对成功的机器检查:Name: bm-system-192.0.2.54-machine Namespace: cluster-test-user001 Labels: baremetal.cluster.gke.io/periodic-health-check=true machine=192.0.2.54 type=machine Annotations: <none> API Version: baremetal.cluster.gke.io/v1 Kind: HealthCheck Metadata: Creation Timestamp: 2023-09-22T18:03:27Z ... Spec: Anthos Bare Metal Version: 1.16.0 Cluster Name: nuc-user001 Interval In Seconds: 3600 Node Addresses: 192.168.1.54 Type: machine Status: Check Image Version: 1.16.0-gke.26 Checks: 192.168.1.54: Job UID: 345b74a6-ce8c-4300-a2ab-30769ea7f855 Message: Pass: true ... Cluster Spec: Anthos Bare Metal Version: 1.16.0 Bypass Preflight Check: false Cluster Network: Bundled Ingress: true Pods: Cidr Blocks: 10.0.0.0/16 Services: Cidr Blocks: 10.96.0.0/20 ... Conditions: Last Transition Time: 2023-11-22T17:53:18Z Observed Generation: 1 Reason: LastPeriodicHealthCheckFinished Status: False Type: Reconciling Node Pool Specs: node-pool-1: Cluster Name: nuc-user001 ... Pass: true Periodic: Last Schedule Time: 2023-11-22T17:53:18Z Last Successful Instrumentation Time: 2023-11-22T17:53:18Z Start Time: 2023-09-22T18:03:28Z Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal HealthCheckJobFinished 6m4s (x2 over 6m4s) healthcheck-controller health check job bm-system-192.0.2.54-machine-28344593 finished
以下
HealthCheck
示例是针对失败的机器检查:Name: bm-system-192.0.2.57-machine Namespace: cluster-user-cluster1 ... API Version: baremetal.cluster.gke.io/v1 Kind: HealthCheck ... Status: Checks: 192.0.2.57: Job UID: 492af995-3bd5-4441-a950-f4272cb84c83 Message: following checks failed, ['check_kubelet_pass'] Pass: false Failures: Category: AnsibleJobFailed Description: Job: machine-health-check. Details: Target: 1192.0.2.57. View logs with: [kubectl logs -n cluster-user-test bm-system-192.0.2.57-machine-28303170-qgmhn]. Reason: following checks failed, ['check_kubelet_pass'] Pass: false Periodic: Last Schedule Time: 2023-10-24T23:04:21Z Last Successful Instrumentation Time: 2023-10-24T23:31:30Z ...
如需获取指标健康检查的列表,请使用以下命令:
kubectl get healthchecks.anthos.gke.io \ --kubeconfig CLUSTER_KUBECONFIG \ --namespace kube-system
将
CLUSTER_KUBECONFIG
替换为目标集群 kubeconfig 文件的路径。以下示例展示了响应格式:
NAMESPACE NAME COMPONENT NAMESPACE STATUS LAST_COMPLETED kube-system bm-system-add-ons-add-ons Healthy 48m kube-system bm-system-add-ons-configdrift Healthy 48m kube-system bm-system-default-daemonset Healthy 52m kube-system bm-system-default-deployment Healthy 52m kube-system bm-system-default-node Healthy 52m kube-system bm-system-default-pod Healthy 52m kube-system bm-system-default-poddisruptionbudget Healthy 52m kube-system bm-system-default-resource Healthy 52m kube-system bm-system-default-service Healthy 52m kube-system bm-system-default-statefulset Healthy 57m kube-system bm-system-kubernetes Healthy 57m kube-system bm-system-network Healthy 32m kube-system component-status-controller-manager Healthy 5s kube-system component-status-etcd-0 Healthy 5s kube-system component-status-etcd-1 Healthy 5s kube-system component-status-scheduler Healthy 5s
健康检查 Cron 作业
对于定期健康检查,每个裸金属 HealthCheck
自定义资源都有一个名称相同的对应 CronJob
。此 CronJob
负责安排相应的健康检查以在设定的间隔时间内运行。CronJob
还包含一个 ansible-runner
容器,该容器通过与节点建立安全 Shell (SSH) 连接来执行健康检查。
如需检索有关 Cron 作业的相关信息,请执行以下操作:
获取已为指定集群运行的 Cron 作业列表:
kubectl get cronjobs \ --kubeconfig ADMIN_KUBECONFIG \ --namespace CLUSTER_NAMESPACE
替换以下内容:
ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:集群的命名空间。
以下示例显示了一个典型响应:
NAMESPACE NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE cluster-test-admin bm-system-10.200.0.3-machine 17 */1 * * * False 0 11m 25d cluster-test-admin bm-system-add-ons 25 */1 * * * False 0 3m16s 25d cluster-test-admin bm-system-kubernetes 16 */1 * * * False 0 12m 25d cluster-test-admin bm-system-network 41 */1 * * * False 0 47m 25d
SCHEDULE
列中的值表示按计划语法运行的每个健康检查作业的计划。例如,bm-system-kubernetes
作业会在每天 (* * *
) 的每个小时 (*/1
) 的第 17 分钟 (17
) 运行。定期健康检查的时间间隔不可修改,但了解它们应该在什么时候运行对于问题排查很有用。检索特定
CronJob
自定义资源的详细信息:kubectl describe cronjob CRONJOB_NAME \ --kubeconfig ADMIN_KUBECONFIG \ --namespace CLUSTER_NAMESPACE
替换以下内容:
ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:集群的命名空间。
以下示例展示了成功的
CronJob
:Name: bm-system-network Namespace: cluster-test-admin Labels: AnthosBareMetalVersion=1.16.1 baremetal.cluster.gke.io/check-name=bm-system-network baremetal.cluster.gke.io/periodic-health-check=true controller-uid=2247b728-f3f5-49c2-86df-9e5ae9505613 type=network Annotations: target: node-network Schedule: 41 */1 * * * Concurrency Policy: Forbid Suspend: False Successful Job History Limit: 1 Failed Job History Limit: 1 Starting Deadline Seconds: <unset> Selector: <unset> Parallelism: <unset> Completions: 1 Active Deadline Seconds: 3600s Pod Template: Labels: baremetal.cluster.gke.io/check-name=bm-system-network Annotations: target: node-network Service Account: ansible-runner Containers: ansible-runner: Image: gcr.io/anthos-baremetal-release/ansible-runner:1.16.1-gke.5 Port: <none> Host Port: <none> Command: cluster Args: -execute-command=network-health-check -login-user=root -controlPlaneLBPort=443 Environment: <none> Mounts: /data/configs from inventory-config-volume (ro) /etc/ssh-key from ssh-key-volume (ro) Volumes: inventory-config-volume: Type: ConfigMap (a volume populated by a ConfigMap) Name: bm-system-network-inventory-bm-system-ne724a7cc3584de0635099 Optional: false ssh-key-volume: Type: Secret (a volume populated by a Secret) SecretName: ssh-key Optional: false Last Schedule Time: Tue, 14 Nov 2023 18:41:00 +0000 Active Jobs: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 48m cronjob-controller Created job bm-system-network-28333121 Normal SawCompletedJob 47m cronjob-controller Saw completed job: bm-system-network-28333121, status: Complete Normal SuccessfulDelete 47m cronjob-controller Deleted job bm-system-network-28333061
健康检查日志
运行健康检查时,系统会生成日志。无论您是使用gkectl diagnose cluster
运行健康检查,还是在定期健康检查期间自动运行健康检查,日志都会发送到 Cloud Logging。按需运行健康检查时,系统会在 /home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log
中创建日志文件。
在本地查看日志
您可以使用 kubectl
查看定期健康检查的日志:
获取 Pod 并查找您感兴趣的特定健康检查 Pod:
kubectl get pods \ --kubeconfig ADMIN_KUBECONFIG \ --namespace CLUSTER_NAMESPACE
替换以下内容:
ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:集群的命名空间。
以下示例响应显示了一些健康检查 pod:
NAME READY STATUS RESTARTS AGE bm-system-10.200.0.4-machine-28353626-lzx46 0/1 Completed 0 12m bm-system-10.200.0.5-machine-28353611-8vjw2 0/1 Completed 0 27m bm-system-add-ons-28353614-gxt8f 0/1 Completed 0 24m bm-system-check-kernel-gce-user001-02fd2ac273bc18f008192e177x2c 0/1 Completed 0 75m bm-system-cplb-init-10.200.0.4-822aa080-7a2cdd71a351c780bf8chxk 0/1 Completed 0 74m bm-system-cplb-update-10.200.0.4-822aa082147dbd5220b0326905lbtj 0/1 Completed 0 67m bm-system-gcp-check-create-cluster-202311025828f3c13d12f65k2xfj 0/1 Completed 0 77m bm-system-kubernetes-28353604-4tc54 0/1 Completed 0 34m bm-system-kubernetes-check-bm-system-kub140f257ddccb73e32c2mjzn 0/1 Completed 0 63m bm-system-machine-gcp-check-10.200.0.4-6629a970165889accb45mq9z 0/1 Completed 0 77m ... bm-system-network-28353597-cbwk7 0/1 Completed 0 41m bm-system-network-health-check-gce-user05e0d78097af3003dc8xzlbd 0/1 Completed 0 76m bm-system-network-preflight-check-create275a0fdda700cb2b44b264c 0/1 Completed 0 77m
检索 Pod 日志:
kubectl logs POD_NAME \ --kubeconfig ADMIN_KUBECONFIG \ --namespace CLUSTER_NAMESPACE
替换以下内容:
POD_NAME
:健康检查 pod 的名称。ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:集群的命名空间。
以下示例显示了成功的节点机器健康检查 Pod 日志的一部分:
... TASK [Summarize health check] ************************************************** Wednesday 29 November 2023 00:26:22 +0000 (0:00:00.419) 0:00:19.780 **** ok: [10.200.0.4] => { "results": { "check_cgroup_pass": "passed", "check_cni_pass": "passed", "check_containerd_pass": "passed", "check_cpu_pass": "passed", "check_default_route": "passed", "check_disks_pass": "passed", "check_dns_pass": "passed", "check_docker_pass": "passed", "check_gcr_pass": "passed", "check_googleapis_pass": "passed", "check_kernel_version_pass": "passed", "check_kubelet_pass": "passed", "check_memory_pass": "passed", "check_pod_cidr_intersect_pass": "passed", "check_registry_mirror_reachability_pass": "passed", "check_time_sync_pass": "passed", "check_ubuntu_1804_kernel_version": "passed", "check_ufw_pass": "passed", "check_vcpu_pass": "passed" } } ...
以下示例显示了失败的节点机器健康检查 Pod 日志的一部分。示例显示
kubelet
检查 (check_kubelet_pass
) 失败,这表明kubelet
未在此节点上运行。... TASK [Reach a final verdict] *************************************************** Thursday 02 November 2023 17:30:19 +0000 (0:00:00.172) 0:00:17.218 ***** fatal: [10.200.0.17]: FAILED! => {"changed": false, "msg": "following checks failed, ['check_kubelet_pass']"} ...
在 Cloud Logging 中查看日志
健康检查日志会流式传输到 Cloud Logging,您可以在日志浏览器中查看。定期健康检查在控制台日志中被归类为 Pod。
在 Google Cloud 控制台中,前往日志记录菜单中的日志浏览器页面。
在查询字段中,输入以下基本查询:
resource.type="k8s_container" resource.labels.pod_name=~"bm-system.*-machine.*"
查询结果窗口会显示节点机器健康检查的日志。
以下是定期健康检查的查询列表:
默认
resource.type="k8s_container" resource.labels.pod_name=~"bm-system.default-*"
节点机器
resource.type="k8s_container" resource.labels.pod_name=~"bm-system.*-machine.*"
网络
resource.type="k8s_container" resource.labels.pod_name=~"bm-system-network.*"
Kubernetes
resource.type="k8s_container" resource.labels.pod_name=~"bm-system-kubernetes.*"
插件
resource.type="k8s_container" resource.labels.pod_name=~"bm-system-add-ons.*"
定期健康检查
默认情况下,定期健康检查每小时运行一次,并检查以下集群组件:
您可以通过查看管理员集群上的裸金属 HealthCheck
(healthchecks.baremetal.cluster.gke.io
) 自定义资源来检查集群健康。网络、Kubernetes 和插件检查是集群级检查,因此每个检查都有一个单独的资源。系统会针对目标集群中的每个节点运行机器检查,因此每个节点都有一个资源。
如需列出给定集群的裸金属
HealthCheck
资源,请运行以下命令:kubectl get healthchecks.baremetal.cluster.gke.io \ --kubeconfig=ADMIN_KUBECONFIG \ --namespace=CLUSTER_NAMESPACE
替换以下内容:
ADMIN_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。CLUSTER_NAMESPACE
:健康检查的目标集群的命名空间。
以下示例响应显示了格式:
NAMESPACE NAME PASS AGE cluster-test-user001 bm-system-192.0.2.53-machine true 56d cluster-test-user001 bm-system-192.0.2.54-machine true 56d cluster-test-user001 bm-system-add-ons true 56d cluster-test-user001 bm-system-kubernetes true 56d cluster-test-user001 bm-system-network true 56d
healthchecks.baremetal.cluster.gke.io
的Pass
字段表示上次健康检查是通过 (true
) 还是失败 (false
)。
如需详细了解如何检查定期健康检查的状态,请参阅 HealthCheck
自定义资源和健康检查日志。
按需健康检查
如需按需运行健康检查,请使用 gkectl diagnose cluster
命令。使用 gkectl diagnose cluster
运行健康检查时,请遵循以下规则:
使用
gkectl diagnose cluster
命令检查用户集群时,请使用--kubeconfig
标志指定管理员集群的 kubeconfig 文件的路径。日志会在管理员工作站上集群日志文件夹(默认情况下为
/home/ubuntu/.config/gke-on-prem/logs/gkectl-$(date).log
)中带时间戳的目录中生成。健康检查日志也会发送到 Cloud Logging。如需详细了解日志,请参阅健康检查日志。
配置偏移检测
运行插件健康检查时,该检查会检查 Google Distributed Cloud 管理的资源是否发生意外更改,以及其他方面。具体而言,该检查会评估这些资源的清单,以确定外部实体是否进行了更改。这些检查有助于提前预警可能对集群健康有害的无意中更改。还提供有价值的问题排查信息。
系统会检查哪些清单
除了少数例外情况外,插件健康检查会检查集群的所有 Google Distributed Cloud 管理资源。这些资源由 Google Distributed Cloud 软件安装和管理。此类资源有数百个,并且系统会检查其中大多数清单是否存在配置漂移。清单适用于所有类型的资源,包括但不限于:
|
|
|
系统不会检查哪些清单
我们会根据设计,排除某些清单以免审核。出于隐私和安全考虑,我们会忽略特定类型的资源,例如证书、密钥和服务账号。该插件检查还会忽略某些资源和资源字段,因为我们预计这些资源和资源字段会发生更改,并且不希望这些更改触发配置漂移错误。例如,该检查会忽略“部署”中的 replicas
字段,因为自动扩缩器可能会修改此值。
如何将其他清单或清单的部分内容从审核中排除
一般来说,我们建议您不要更改 Google Distributed Cloud 管理的资源,也不要忽略对这些资源所做的更改。不过,我们知道资源有时需要修改,以满足特殊情况的要求或解决问题。因此,我们为舰队中的每个集群提供了 ignore-config-drift
ConfigMap。您可以使用这些 ConfigMap 指定要从评估中排除的资源和特定资源字段。
Google Distributed Cloud 会为每个集群创建一个 ignore-config-drift
ConfigMap。这些 ConfigMap 位于管理(管理员或混合)集群的相应集群命名空间下。例如,如果您有一个管理员集群 (admin-one
) 管理两个用户集群 (user-one
和 user-two
),则可以在 cluster-user-one
命名空间的 admin-one
集群中找到 user-one
集群的 ignore-config-drift
ConfigMap。
如需将资源或资源字段从审核中排除,请执行以下操作:
将
data.ignore-resources
字段添加到ignore-config-drift
ConfigMap。此字段接受 JSON 字符串数组,每个字符串都指定一个资源,还可以指定资源中的特定字段(可选)。
在字符串数组中,将资源(以及要忽略的特定字段,可选)指定为 JSON 对象:
资源和字段的 JSON 对象具有以下结构:
{ "Version": "RESOURCE_VERSION", "Kind": "RESOURCE_KIND", "Namespace": "RESOURCE_NAMESPACE", "Name": "RESOURCE_NAME", "Fields": [ "FIELD_1_NAME", "FIELD_2_NAME", ... "FIELD_N_NAME" ] }
替换以下内容:
RESOURCE_VERSION
:(可选)资源的apiVersion
值。RESOURCE_KIND
:(可选)资源的kind
值。RESOURCE_NAMESPACE
:(可选)资源的metadata.namespace
值。RESOURCE_NAME
:(可选)资源的metadata.name
值。FIELD_NAME
:(可选)指定要忽略的一组资源字段。如果您未指定任何字段,则插件检查会忽略对资源的所有更改。
JSON 对象中的每个字段都是可选字段,因此允许进行各种排列组合。您可以排除整个资源类别,也可以非常精确地排除特定资源中的特定字段。
例如,如果您希望插件检查仅忽略对管理员集群上
ais
部署的command
部分所做的任何更改,则 JSON 可能如下所示:{ "Version": "apps/v1", "Kind": "Deployment", "Namespace": "anthos-identity-service", "Name": "ais", "Fields": [ "command" ] }
您可以将此 JSON 对象作为数组中的字符串值添加到
config-drift-ignore
ConfigMap 中的ignore-resources
,如以下示例所示:apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: "2024-09-24T00:39:45Z" name: config-drift-ignore namespace: cluster-example-admin ownerReferences: - apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster name: example-admin ... data: ignore-resources: '[{"Version":"apps/v1","Kind":"Deployment","Namespace":"anthos-identity-service","Name":"ais","Fields":["command"]}]' ...
通过以下 ConfigMap 设置示例,您可以在
ais
部署中添加、移除或修改command
字段,而不会触发任何配置漂移错误。不过,对部署中command
部分以外的字段所做的修改仍会被插件检查检测到,并报告为配置漂移。如果您想排除所有部署,
ignore-resources
值可能如下所示:... data: ignore-resources: '[{"Kind":"Deployment"}]' ...
由于
ignore-resources
接受 JSON 字符串数组,因此您可以指定多个排除模式。如果您正在排查问题或对集群进行实验,并且不想触发配置漂移错误,则可以灵活地将非常具体的资源、资源字段或更广泛的资源类别从漂移检测中排除,这会很有用。