基础设施 (infrastructure)
infrastructure 是组件数量最多的一类,囊括了让整个 yldm 集群得以运行的所有支撑性服务:GitOps 编排、密钥与证书管理、CI/CD runner、策略准入、集群级 DNS/存储/备份。每个组件都是 applications/infrastructure/<service>/ 下的一个 kustomize 目录,由 ArgoCD app-of-apps 根应用自动发现并同步。
infra 层组件 2026-06 起统一改用
workload: infra 节点标签(PR #888),调度到 worker3。早先用的是单值 node-role 标签,但单值标签无法让一个节点同时承担数据库层(node-role=database)和 infra 层两种角色,所以 infra 调度键从 node-role: infra 迁移到了 workload: infra。worker3(12c/48GB/500GB,192.168.88.113)因此身兼双职:有状态数据库 + 全部 infra 组件。详见 节点与调度。调度约定
worker3 是配置最高的 worker,承载数据库 StatefulSet(PV 钉在本地盘)与全部 infrastructure 组件。这也意味着 worker3 是集群里影响面最大的单点——它宕机时哪些组件能随 Pod 漂移、哪些需要人工恢复,参见仓库的 infra 节点宕机应急 runbook。
GitOps 与编排
这组组件负责把仓库变成运行中的集群,并把镜像更新反向回写到仓库。
- Name
- argocd
- Description
- GitOps 控制器,从
k8s-config仓库main分支持续同步整个集群。镜像quay.io/argoproj/argocd:v3.4.3,application-controller 为 StatefulSet,server/repo-server/applicationset-controller/notifications-controller 为独立 Deployment,配 redis(redis:8-alpine)。Web UI 经 ingressargocd.yldm.tech暴露。详见 ArgoCD 与 GitOps 工作流。
- Name
- argocd-image-updater
- Description
- 镜像
quay.io/argoprojlabs/argocd-image-updater:v1.2.1,按 semver 策略检测新镜像 tag 并 git commit 回写到各 app 的 kustomization(即仓库里build: automatic update of …这类提交)。每个 app 的更新规则在imageupdaters/<app>.yaml。
- Name
- argo-workflows
- Description
- 基于 Argo Workflows(
quay.io/argoproj/workflow-controller:v4.0.6+argocli:v4.0.6)的工作流引擎,namespaceargo-workflows,Web UI 经 ingressargo-workflows.yldm.tech暴露,含 cronworkflows、clustertemplates 等。
- Name
- reloader
- Description
ghcr.io/stakater/reloader:v1.4.17,监听 ConfigMap/Secret 变更并自动滚动重启引用它们的工作负载。
密钥与证书
集群里没有明文 Secret——全部由 external-secrets 从 Vault 拉取,TLS 证书由 cert-manager 签发。
- Name
- vault
- Description
- 单副本、
storage "file"、Shamir 封印的 HashiCorp Vault(hashicorp/vault:2.0.2),是所有密钥的源头。Pod 重启时 postStart 钩子自动 unseal。经 ingressvault.yldm.tech暴露。详见 Vault。
- Name
- external-secrets
- Description
- External Secrets Operator(
oci.external-secrets.io/external-secrets/external-secrets:v0.20.4),含 controller、webhook、cert-controller。通过 ClusterSecretStorevault-backend把各 app 的 ExternalSecret 解析成集群里的 Secret。详见 External Secrets。
- Name
- cert-manager
- Description
- 证书签发与续期(
quay.io/jetstack/cert-manager-*:v1.20.2,含 controller/cainjector/webhook)。配 Let's Encrypt prod ClusterIssuer,DNS-01 校验走 Cloudflare API token(由 ExternalSecret 注入)。
- Name
- dex
- Description
- OIDC 身份代理(
ghcr.io/dexidp/dex:v2.45.1),namespacedex,经 ingressdex.yldm.tech暴露,上游对接 Google OAuth,为集群内服务提供统一登录。
CI/CD 与 Runner
自托管 CI 由 Gitea(自建 Git 服务)和多套 GitHub Actions / Gitea Actions runner 组成。
- Name
- gitea
- Description
- 自托管 Git 服务(
gitea/gitea:1.26.2-rootless),单副本 StatefulSet,后端postgres:18-alpine,经 ingressgitea.yldm.tech暴露,另有 SSH Service,配 ServiceMonitor。
- Name
- github-runner
- Description
- ARC v2(gha-runner-scale-set)自托管 GitHub Actions runner,自建运行器镜像
ghcr.io/yldm-tech/actions-runner-with-gh,scale-set 名yldm-backend-runners。一个共享的 ARC 控制器在arc-systems管理所有 scale-set。
- Name
- actions-runner-system
- Description
- ARC 的系统 namespace(
actions-runner-system)资源配额/限额定义所在,承载共享的 gha-runner-scale-set-controller。
- Name
- kamify-runner
- Description
- 另一套 ARC v2 gha-runner-scale-set 安装,与 github-runner 共用
arc-systems控制器。
- Name
- everyapi-runner
- Description
- 第三套 ARC v2 gha-runner-scale-set 安装,同样由共享控制器管理。
- Name
- gitea-runner
- Description
- Gitea Actions 的 act_runner(
gitea/runner:1.0.8-dind),单副本 StatefulSet,含 dind sidecar,供 Gitea 仓库的流水线使用。
三套 ARC runner 与共享控制器的关系敏感:控制器会删除版本标签与自身不匹配的 AutoscalingRunnerSet,升级控制器版本时必须把控制器镜像、
CONTROLLER_MANAGER_CONTAINER_IMAGE 环境变量、以及三套 runner 的 app.kubernetes.io/version 一起改齐。详见 Runner 自托管运行器。策略与配置
- Name
- kyverno
- Description
- 策略引擎(
reg.kyverno.io/kyverno/*:v1.18.1,含 admission/background/cleanup/reports 四个 controller)。当前策略含protect-core-infrastructure、protect-kubernetes-service两条 ClusterPolicy,保护核心基础设施资源不被误删/误改。
集群基础组件
每节点都需要的 DaemonSet 级基础能力——本地 DNS 缓存与 NFS 客户端。
- Name
- nodelocaldns
- Description
- NodeLocal DNSCache(
registry.k8s.io/dns/k8s-dns-node-cache:1.26.8),每节点一个 DaemonSet,监听本地169.254.20.10:53,上游指向集群 kube-dns Service10.43.0.10,减少跨节点 DNS 查询延迟。
- Name
- node-nfs-client
- Description
- 每节点的 NFS 客户端初始化 DaemonSet(
debian:13-slim),确保各节点具备挂载 nfs-client 存储类所需的 NFS 客户端环境。
备份与告警
etcd 快照、卷备份、异地拉取与心跳告警,构成集群的灾备与监控兜底。
- Name
- velero
- Description
- 集群备份/恢复(
velero/velero:v1.18.1+velero-plugin-for-aws:v1.14.1),namespacevelero,含 node-agent DaemonSet,按 namespace 配置 backupStorageLocation 与定时备份计划,备份落在集群内 MinIO。
- Name
- k3s-etcd-backup
- Description
- K3s 嵌入式 etcd 快照备份(
alpine:3.24),每 6 小时(0 */6 * * *)一次,并把 master1 的快照上传到 MinIO;GPG passphrase 经 ExternalSecret 注入。
- Name
- oracle-backup
- Description
- 异地备份同步(
alpine:3.24):oracle-backup-pull每日 04:30 UTC 从 Oracle 主机拉取,nas-backup-sync每日 05:30 UTC 同步到 NAS,凭据走 Secret 挂载。
- Name
- deadman-switch
- Description
- 死人开关心跳(
curlimages/curl:8.20.0),每分钟(* * * * *)向集群外 Oracle 主机上的 Uptime Kuma push URL 发送心跳;心跳停止即触发告警。固定调度到 worker3。
所有上述组件的 Secret 均不入 git,由 External Secrets 从 Vault 拉取;镜像 tag 由 argocd-image-updater 管理,但对自托管基础设施而言,版本 bump 常是破坏性变更(需要配套的 CRD/probe/env/数据迁移),不要单独合并裸 tag 升级。