GCP GKE Autopilot 集成¶
选择一种采集模式,再选择 Helm 或 YAML 安装,避免重复采集。
选择采集模式¶
| 对比项 | Partner | Cloud API |
|---|---|---|
| 工作负载 | DaemonSet,每个节点运行 DataKit | Deployment,默认单副本 |
| Helm Chart | datakit,加载包内 Partner values |
datakit-gke-autopilot |
| 容器指标来源 | 节点 containerd | Cloud Monitoring |
| 容器日志来源 | 节点上的 Kubernetes Pod stdout/stderr 日志 | Cloud Logging |
| 接入前提 | 同步 Google 正式 V2 allowlist | GCP API、IAM 权限和 Workload Identity |
| YAML 部署 | 本地从 Chart 渲染完整清单 | 下载专用 Deployment YAML |
两种模式均通过 Kubernetes API 采集资源数据,默认启用 dk,container 和 election。Cloud API 模式要求 DataKit 2.3.0 及以上版本。
公共准备¶
- 已有 GKE Autopilot 集群,本地
kubectl的 context 指向该集群,账号有部署工作负载和 RBAC 资源的权限。 - DataKit 能访问包含有效工作空间 token 的 DataWay 地址,节点能拉取对应镜像。
- 示例使用
datakitnamespace 和资源名,确认没有其它安装占用同名工作负载、Service、ClusterRole 或 ClusterRoleBinding。 - Helm 安装和 Partner YAML 渲染需要本地 Helm 3;Cloud API 的 IAM 配置需要
gcloud。
在新工作目录准备以下 Helm 用户配置,替换 DataWay 地址和集群名。文件含 token,须妥善保管。Cloud API YAML 安装跳过下面的 Helm 配置,直接进入 Cloud API 部署。
umask 077
cat > datakit-user-values.yaml <<'VALUES'
datakit:
dataway_url: "https://openway.guance.com?token=<YOUR-TOKEN>"
cluster_name_k8s: "my-autopilot-cluster"
VALUES
添加仓库并查看可用版本,将 CHART_VERSION 替换为所选 Chart 版本。Partner 要求包内包含下文的两个配置文件。
helm repo add truewatch https://pubrepo.truewatch.com/chartrepo/truewatch
helm repo update truewatch
helm search repo truewatch/datakit --versions
CHART_VERSION="<本次正式发布的 Chart 版本>"
Partner 部署¶
Partner V2 仅支持 TrueWatch,最低 GKE 版本为 1.35.6-gke.1258000。 使用 TrueWatch 的 datakit Chart 和 pubrepo.truewatch.com/truewatch/datakit 镜像;部署前确认两者均已发布。
保持 image.tag 为空,镜像自动跟随 Chart 的 appVersion。完成下载和 allowlist 同步后,选择 Helm 或 YAML 安装。
获取 Partner 配置¶
下载普通 datakit Chart,检查 Partner 文件:
helm pull truewatch/datakit --version "$CHART_VERSION" --untar
test -f datakit/values-gke-autopilot-partner.yaml
test -f datakit/gke-autopilot-partner-allowlist.yaml
同步 V2 allowlist¶
账号需要管理 AllowlistSynchronizer 的权限。集群须允许 gke://TrueWatch/datakit/truewatch-datakit-autopilot-v2.yaml;GKE 默认允许 gke://*。如果管理员限制过来源,需保留已有路径并加入此路径,参见 Google allowlist 安装说明。
每个集群安装一次同步器。以下命令用于新建同步器;已有管理同一路径的同步器时,跳过 apply,并将检查命令中的 truewatch-datakit 替换为已有同步器名称。Partner 的 Helm 和 YAML 安装均须先完成同步。
kubectl apply -f datakit/gke-autopilot-partner-allowlist.yaml
kubectl wait --for=condition=Ready allowlistsynchronizer/truewatch-datakit --timeout=10m
kubectl get allowlistsynchronizer truewatch-datakit -o yaml
kubectl get workloadallowlist truewatch-datakit-autopilot-v2
确认 Ready=True、V2 文件在 status.managedAllowlistStatus 中为 Installed,且对应 WorkloadAllowlist 存在,再安装 DataKit。
Partner Helm 安装¶
helm upgrade --install datakit ./datakit \
--namespace datakit --create-namespace \
-f datakit/values-gke-autopilot-partner.yaml \
-f datakit-user-values.yaml --wait --timeout 15m
Chart 创建 datakit-dataway Secret,通过 secretKeyRef 将 DataWay 地址传给 DataKit。
Partner YAML 安装¶
与 Helm 安装二选一。本方式使用 Helm 3 在本地渲染,之后由 kubectl 管理资源,不创建 Helm release。--no-hooks 排除 Chart 的 Helm 测试 Pod。
umask 077
helm template datakit ./datakit --namespace datakit --no-hooks \
-f datakit/values-gke-autopilot-partner.yaml \
-f datakit-user-values.yaml > datakit-partner.yaml
kubectl create namespace datakit --dry-run=client -o yaml | kubectl apply -f -
kubectl apply --namespace datakit -f datakit-partner.yaml
渲染清单包含完整工作负载和 Secret,须妥善保管。静态 datakit.yaml 用于普通节点,datakit-gke-autopilot.yaml 用于 Cloud API;Partner 使用此处渲染的清单。
Partner 配置范围¶
Partner 预设将 fullnameOverride 固定为 datakit,仅修改 Helm release 名不会改变资源名。需要与集群中已有同名资源区分时,在用户 values 中设置其它 fullnameOverride(例如 datakit-autopilot),并使用独立 namespace;同步替换本文命令中的 namespace 和 DaemonSet 名。每个 namespace 内的兼容 Service 名仍为 datakit-service。
V2 仅只读挂载 /var/run/containerd、/proc 和 /var/log/pods,不支持 eBPF、任意宿主机文件采集或完整宿主机监控。缓存使用 emptyDir,Pod 重建会丢失本地缓存。
可在 datakit-user-values.yaml 中添加 extraEnvs,例如将运行日志输出到 stdout,方便使用 kubectl logs 排查:
变量名须匹配 ^ENV_[A-Z0-9_]+$,可通过 valueFrom 引用同 namespace 中已有的 Secret/ConfigMap。已有 extraEnvs 时追加条目;DataWay、集群名等使用 datakit.* 设置。保持预设的镜像来源、allowlist、挂载和安全配置,不启用 iploc、dkconfig、Git SSH key 挂载或附加采集器 Chart。
Cloud API 部署¶
Cloud API 通过 Cloud Monitoring/Logging 采集,无宿主机访问;不支持本地文件日志、宿主机监控或 eBPF。指标可能延迟数分钟,Pod 或 leader 切换可能导致近期日志重复。
配置 GCP 权限¶
使用有权启用 API、创建服务账号和配置 IAM 的账号执行。设置集群所属项目,启用 API 并通过 Workload Identity 绑定服务账号;已有服务账号时复用其名称并跳过创建命令。
PROJECT_ID="my-project"
GSA_NAME="datakit-cloud-monitor"
gcloud services enable monitoring.googleapis.com logging.googleapis.com \
iam.googleapis.com iamcredentials.googleapis.com --project "$PROJECT_ID"
gcloud iam service-accounts create "$GSA_NAME" --project "$PROJECT_ID"
gcloud projects add-iam-policy-binding "$PROJECT_ID" \
--member "serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role roles/monitoring.viewer
gcloud projects add-iam-policy-binding "$PROJECT_ID" \
--member "serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role roles/logging.viewer
gcloud iam service-accounts add-iam-policy-binding \
"${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" --project "$PROJECT_ID" \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:${PROJECT_ID}.svc.id.goog[datakit/datakit]"
示例绑定 datakit namespace 中的 datakit Kubernetes ServiceAccount;覆盖 namespace 或 fullnameOverride 时,须同步修改绑定。
Cloud API Helm 安装¶
在 datakit-user-values.yaml 中追加实际 GCP Service Account 邮箱:
serviceAccountAnnotations:
iam.gke.io/gcp-service-account: "datakit-cloud-monitor@my-project.iam.gserviceaccount.com"
helm upgrade --install datakit truewatch/datakit-gke-autopilot \
--version "$CHART_VERSION" --namespace datakit --create-namespace \
-f datakit-user-values.yaml --wait --timeout 15m
Cloud API YAML 安装¶
与 Cloud API Helm 安装二选一。下载专用 Deployment YAML:
umask 077
curl -f -o datakit-gke-autopilot.yaml \
https://static.guance.com/datakit-v2/datakit-gke-autopilot.yaml
下载后设置 ENV_DATAWAY(含 token)、ENV_CLUSTER_NAME_K8S,并将 ServiceAccount 的现有 annotation 替换为实际邮箱;此路径不读取 Helm 用户 values:
metadata:
annotations:
iam.gke.io/gcp-service-account: "datakit-cloud-monitor@my-project.iam.gserviceaccount.com"
Cloud API 配置¶
GCP project、cluster 和 location 默认从 GKE metadata server 发现。需要覆盖时,在 Helm 用户 values 中加入以下完整列表。extraEnvs 会替换 Chart 默认列表,必须保留前三项,否则 Cloud API 采集将被关闭。
extraEnvs:
- name: ENV_NAMESPACE
value: "datakit"
- name: ENV_INPUT_CONTAINER_GCP_CLOUD_API_ENABLED
value: "true"
- name: ENV_INPUT_CONTAINER_ENABLE_K8S_NODE_LOCAL
value: "false"
- name: ENV_INPUT_CONTAINER_GCP_PROJECT_ID
value: "my-project"
- name: ENV_INPUT_CONTAINER_GCP_CLUSTER_NAME
value: "my-cluster"
- name: ENV_INPUT_CONTAINER_GCP_CLUSTER_LOCATION
value: "asia-southeast1"
YAML 安装直接修改容器 env。默认单副本;扩容时保持 election 开启,并让所有副本使用同一套选举配置。可选非 root 运行:Helm 设置 gkeAutopilot.runAsNonRoot=true;YAML 按文件中的 securityContext 注释配置,确保挂载目录对 UID/GID 10001 可写。
验证运行与数据¶
按所选模式检查 rollout:
# Partner
kubectl -n datakit rollout status daemonset/datakit --timeout=15m
# Cloud API
kubectl -n datakit rollout status deployment/datakit --timeout=15m
随后检查 Pod 和健康接口:
kubectl -n datakit get daemonset,deployment,pods -o wide
kubectl get --raw '/api/v1/namespaces/datakit/services/http:datakit-service:9529/proxy/v1/health'
确认工作负载 desired 数大于 0、ready 数等于 desired 数,实际 Pod 持续正常运行,健康接口返回 live=true。Partner 在没有节点的集群中可能显示 DaemonSet 0/0,此时 Helm 安装成功不代表 DataKit 已运行;先部署业务工作负载,等待 Autopilot 创建节点,再检查 DataKit Pod 和健康接口。
在平台按 cluster_name_k8s 和部署时间检查容器指标、Kubernetes 对象及已启用采集的业务 Pod 日志,确认数据属于目标集群且时间持续更新。DataWay 地址须包含有效 token;仅提供域名无法完成数据上报验收。Pod Ready 只表示运行就绪。
Partner V2 禁止 exec、attach 和 port-forward;排查使用 Pod 状态、Events、kubectl logs 和 Service proxy。分享日志前移除 token 和完整 DataWay 地址。
升级、回退和卸载¶
Helm 安装:保存当前 Chart 版本和用户配置,选择目标版本,重复对应模式的安装命令并重新验收。Partner 先在另一个目录下载目标 Chart,每次显式传入 Partner 和用户两个 values 文件,保持 image.tag 为空,使镜像跟随目标 appVersion。Cloud API 的用户配置须包含 Workload Identity annotation。
Partner Chart 管理的 DataWay Secret 更新会触发 DaemonSet 滚动更新。更新 extraEnvs.valueFrom 引用的外部 Secret/ConfigMap 后,执行 kubectl -n datakit rollout restart daemonset/datakit 重新加载环境变量。
按需执行下列命令,将 <REVISION> 替换为历史版本编号;回退后复核镜像和外部配置:
helm history datakit --namespace datakit
helm rollback datakit <REVISION> --namespace datakit --wait --timeout 15m
helm uninstall datakit --namespace datakit
YAML 安装:保留旧清单,使用新版本重新渲染 Partner 清单或下载 Cloud API 清单,补齐配置后 apply;回退时 apply 旧清单。新版移除的资源需单独核对并删除。卸载使用 kubectl delete -n datakit -f <安装时使用的清单>。Cloud API 清单包含 Namespace;如果 namespace 中还有其它资源,先从卸载清单中移除该对象。YAML 中的 Secret 或 DataWay 地址需按敏感信息保管。
仅在集群中已没有使用此 allowlist 的工作负载时,按需删除 Partner 同步器;保留其它部署共享的 namespace 和配置:
故障排查¶
- Partner 包内缺少配置:确认下载了包含本功能的正式 Chart,更新仓库索引后重新下载。
- allowlist 未同步:检查同步器的
status.managedAllowlistStatus错误、完整 GKE 版本及集群允许的路径。以Ready=True和文件Installed为准。 - Partner 被拒绝:检查 DaemonSet Events、Pod 的
cloud.google.com/matching-allowlist=truewatch-datakit-autopilot-v2,以及是否注入 sidecar、增加挂载或替换镜像。参见 Google 准入故障排查。 - Partner 报
Image Mismatch:将用户 values 的image.repository恢复为pubrepo.truewatch.com/truewatch/datakit,保持image.tag为空;YAML 安装从同版本 Chart 重新渲染并 apply。报ErrImagePull或ImagePullBackOff时,检查对应 TrueWatch 镜像是否已发布,以及节点到仓库的网络和拉取权限。 - 日志出现
dataway.emptyToken或token missing:补齐 DataWay 地址中的有效工作空间 token,再按原安装方式更新。空 token 会导致上报被拒绝、数据丢弃和选举失败,即使 Pod Ready、健康检查正常也不能视为采集验收通过。 - Cloud API 被拒绝或无数据:检查是否引入宿主机权限,以及 GCP IAM 权限、ServiceAccount annotation 和 Workload Identity 的 namespace/name 是否一致。
- Pod 正常但数据缺失或重复:检查 DataWay 连通性、配置、Kubernetes API 权限、业务 Pod 日志采集设置及 election;非 root 写入失败时检查目录权限。
kubectl logs只有启动日志:在 Partner 用户配置中设置ENV_LOG=stdout(见配置示例),再按原方式升级;YAML 需重新渲染后 apply。