ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

SuperPlane Terraform 工具镜像:用容器化环境统一管理 GKE 与 EKS 基础设施

SuperPlane Terraform 工具镜像:用容器化环境统一管理 GKE 与 EKS 基础设施 【免费下载链接】superplaneOpen source factory for one-shot engineering项目地址https://gitcode.com/gh_mirrors/su/superplane点击查看免费下载本篇技术指南讲解 SuperPlane 开源仓库中 release/terraform/utils 目录下的运维工具镜像terraform-utils它把 Terraform、Helm、kubectl、gcloud、AWS CLI、eksctl 等云基础设施工具固化进一个可复现的容器镜像并借助make gke.shell/make eks.shell两个入口让开发者无需在宿主机安装任何云 CLI即可在一致的容器环境中管理 SuperPlane 的 GKE 与 EKS 两套 Terraform 安装栈。读完本文你将掌握该镜像的完整工具清单与固定版本、两个 shell 入口的挂载语义、容器内执行 Terraform 的标准工作流以及配套的make check/make format校验机制。一、工具镜像的定位一个镜像、两套安装栈SuperPlane 的 Terraform 安装方案分为两个独立栈详见 release/terraform/README.md平台目录状态Google Kubernetes Engine (GKE)release/terraform/gke✅ ReadyAmazon Elastic Kubernetes Service (EKS)release/terraform/eks✅ Readyrelease/terraform/utils目录就是为这两套栈服务的工具箱它构建的 Docker 镜像用于在 GKE 和 EKS 上管理 SuperPlane 基础设施。其核心思路可以从 release/terraform/AGENTS.md 中的一句规范看出Do not install Terraform on the host不要在宿主机上安装 Terraform——所有 Terraform 操作都在镜像容器内完成保证团队成员与 CI 使用完全一致的工具版本消除在我机器上能跑的环境漂移问题。该目录结构非常精简仅四个文件职责清晰Dockerfile定义镜像内容与固定版本Makefile提供build、gke.shell、eks.shell三个目标check_terraform.sh在容器内对 gke/eks 两栈执行格式与校验README.md使用说明本文主体。二、镜像内容内置工具与固定版本清单镜像的基础镜像选用pinned锁定摘要的 Helm 发行版即alpine/helm:4.3.0并通过 digest 精确锁定FROM alpine/helm:4.3.0sha256:a6cf54599ccb99d90cf0712b30f03fdb3cab062e6b94e0418cc4db7e8a1464b2由于 Helm 官方镜像的入口命令是helm而本镜像定位是交互式 shellDockerfile 显式将入口覆盖为空# The Helm image entrypoint is helm. This image is a shell. ENTRYPOINT []2.1 内置工具及其固定版本镜像在基础镜像之上安装了以下工具各工具版本均可在 Dockerfile 中核实工具版本安装方式Helm4.3.0基础镜像自带digest 锁定Terraform1.16.4从 releases.hashicorp.com 下载 zip 并校验 SHA-256kubectlv1.36.5从 dl.k8s.io 下载二进制并校验 SHA-256gcloud (Google Cloud CLI)586.0.0下载 google-cloud-cli tarball 并校验 SHA-256gke-gcloud-auth-plugin随 gcloud 组件安装gcloud components installAWS CLIapk 最新版apk add aws-clieksctlv0.230.0GitHub Release 下载并校验 SHA-256vim / jqapk 最新版apk add vim jq除以上核心工具外Dockerfile 还通过apk add --no-cache安装了bash、curl、gzip、libc6-compat、openssl、py3-crcmod、py3-openssl、python3、tar、unzip等依赖——其中libc6-compat与py3-crcmod是 gcloud 在 Alpine 上正常运行所需的关键兼容层。2.2 关键环境配置与供应链安全Dockerfile 中三处值得注意的细节PATH 与环境变量将 gcloud 目录加入 PATH并指定 Python 相关环境变量保证 gcloud 组件可正常运行ENV PATH/google-cloud-sdk/bin:${PATH} \ CLOUDSDK_PYTHONpython3 \ CLOUDSDK_PYTHON_SITEPACKAGES1gcloud 出厂配置关闭用量上报与组件更新检查避免交互式提示干扰脚本化运行RUN gcloud config set core/disable_usage_reporting true \ gcloud config set component_manager/disable_update_check trueSHA-256 校验gcloud、kubectl、Terraform、eksctl 四个下载产物全部在安装前通过sha256sum -c校验确保构建结果可复现且未被篡改。构建收尾阶段Dockerfile 会逐一执行各工具的版本命令作为冒烟验证任何工具安装失败都会导致镜像构建失败RUN helm version --short \ terraform version \ kubectl version --clienttrue \ gcloud version \ gke-gcloud-auth-plugin --version \ aws --version \ eksctl version三、两个交互入口make gke.shell与make eks.shell从release/terraform/utils目录运行两个 Make 目标即可进入容器 shellmake gke.shell make eks.shell两者构建同一个镜像terraform-utils:latest区别只在于挂载的云凭证目录make gke.shell将 gcloud 凭证卷挂载到容器内/root/.config/gcloudmake eks.shell将 AWS 凭证卷挂载到容器内/root/.aws。两者的安装栈release/terraform/gke与release/terraform/eks都统一挂载到容器内/workspace目录。完整的 Makefile 实现如下release/terraform/utils/Makefilebuild: docker build --platform linux/amd64 -f Dockerfile -t terraform-utils:latest . gke.shell: build docker run -it --rm \ -v config:/root/.config/gcloud \ -v $(shell cd .. pwd):/workspace \ -w /workspace \ terraform-utils:latest /bin/bash eks.shell: build docker run -it --rm \ -v aws-config:/root/.aws \ -v $(shell cd .. pwd):/workspace \ -w /workspace \ terraform-utils:latest /bin/bash其中几个参数值得展开说明参数含义--platform linux/amd64固定构建 linux/amd64 架构保证所有开发机与 CI 产物一致-v config:/root/.config/gcloud命名卷config持久化 gcloud 凭证多次进入容器无需重新登录-v aws-config:/root/.aws命名卷aws-config持久化 AWS 凭证-v $(shell cd .. pwd):/workspace将release/terraform目录挂载为/workspace容器内可直接操作 gke/eks 两套栈-w /workspace容器启动后工作目录即安装栈根目录-it --rm交互式终端退出即自动删除容器使用命名卷而非绑定挂载宿主机路径存放凭证意味着凭证生命周期与容器解耦换一台机器、重建镜像只要命名卷仍在凭证明细就不会丢失且不会把敏感文件直接暴露在仓库工作区。四、容器内执行 Terraform 的标准工作流进入gke.shell或eks.shell后工作目录即为挂载的release/terraform根目录可切换到对应安装栈执行标准 Terraform 流程。4.1 GKE 部署流程Cloud SQL PostgreSQLGKE 栈的完整说明见 release/terraform/gke/README.md。前置条件包括Terraform 1.5.0镜像内置 1.16.4 满足要求、已认证的 gcloud CLI、已开通结算的 GCP 项目。在容器内依次执行cd /workspace/gke cp terraform.tfvars.example terraform.tfvars # 编辑 terraform.tfvars 填入你的值 terraform init terraform applyGKE 部署的必填变量与常用可选变量默认值可核对 release/terraform/gke/variables.tf变量默认值说明project_id必填GCP 项目 IDdomain_name必填SuperPlane 域名须提前配置 DNS 指向静态 IPstatic_ip_name必填预创建的全局静态 IP 名称letsencrypt_email必填Lets Encrypt 证书通知邮箱region/zoneus-central1/us-central1-aGCP 区域与可用区cluster_namesuperplaneGKE 集群名cluster_version1.36Kubernetes 版本node_count2节点数machine_typee2-medium节点机型db_versionPOSTGRES_17Cloud SQL PostgreSQL 版本db_tierdb-custom-2-4096Cloud SQL 机型2 vCPU / 4GB RAMgke_deletion_protection/sql_deletion_protectiontrue删除保护开关销毁前须置为 falseenable_private_nodestrue私网节点master_ipv4_cidr_block172.16.0.0/28私网集群的 master CIDR部署完成后在容器内配置 kubectl 并验证gcloud container clusters get-credentials superplane --zoneus-central1-a --projectYOUR_PROJECT_ID kubectl get pods -n superplane kubectl get certificate -n superplane4.2 EKS 部署流程RDS PostgreSQLEKS 栈完整说明见 release/terraform/eks/README.mdcd /workspace/eks cp terraform.tfvars.example terraform.tfvars # 编辑 terraform.tfvars 填入你的值 terraform init terraform apply # 整个部署约需 15-20 分钟EKS 侧的关键变量默认值可核对 release/terraform/eks/variables.tfregion默认us-east-1availability_zones默认[us-east-1a, us-east-1b]AWS 要求 EKS/RDS 至少两个可用区cluster_version默认1.36instance_type默认t3.mediumdb_instance_class默认db.t3.mediumdb_allocated_storage默认20GBrds_deletion_protection默认true。此外 EKS 栈还提供enable_secrets_encryptionKMS 加密 Kubernetes Secret注意不能在既有集群上启用与vpn_cidr_blocks/enable_public_access限制 EKS API Server 访问来源等安全选项。EKS 部署完成后通过 ALB 配置 DNSaws eks update-kubeconfig --region us-east-1 --name superplane kubectl get ingress -n superplane # 获取 ALB DNS 名然后在 DNS 服务商处为域名创建指向 ALB DNS 名的CNAME 记录不是 A 记录。验证方式与 GKE 相同kubectl get pods -n superplane。4.3 销毁部署GKE 与 EKS 栈均默认开启删除保护。销毁前须先在terraform.tfvars中将对应开关置为false并重新 apply再执行terraform destroy# GKE: gke_deletion_protection false 且 sql_deletion_protection false # EKS: rds_deletion_protection false需要注意GKE 的静态 IP 不是 Terraform 资源销毁后需手动清理gcloud compute addresses delete superplane-ip --globalEKS 的 RDS 在销毁时会保留一份最终快照快照名带随机后缀且当某个会导致实例重建的参数变化时后缀会改变。五、基础设施校验check_terraform.sh与make check除交互式 shell 外该镜像还承担 SuperPlane Terraform 配置的自动化校验职责。check_terraform.sh 是一个不调用任何云厂商 API 的纯本地校验脚本#!/usr/bin/env bash # Format-check and validate the install stacks next to this directory. # Does not call AWS or GCP. terraform init only downloads providers. set -euo pipefail terraform_root$(cd $(dirname $0)/.. pwd) cd $terraform_root if ! command -v terraform /dev/null 21; then echo terraform is not on PATH. From release/terraform, run make check. 2 exit 1 fi export TF_IN_AUTOMATION1 echo terraform fmt terraform fmt -check -recursive -diff . for dir in gke eks; do echo terraform validate ${dir} terraform -chdir$dir init -backendfalse -inputfalse -no-color terraform -chdir$dir validate -no-color done脚本要点set -euo pipefail任何一步失败即中断退出terraform fmt -check -recursive -diff检查格式并输出差异对gke、eks两栈分别执行init -backendfalse仅下载 provider、不触碰远程状态与validate全程不调用 AWS/GCPTF_IN_AUTOMATION1以自动化模式运行屏蔽交互提示。在release/terraform根目录make check与make format会先构建 utils 镜像再在容器内运行上述校验release/terraform/Makefilerun docker run --rm \ --user $(shell id -u):$(shell id -g) \ -e HOME/tmp \ -e TF_IN_AUTOMATION1 \ -v $(REPO_ROOT):/workspace \ -w /workspace \ terraform-utils:latest format: image $(run) /bin/bash -c terraform fmt -recursive release/terraform check: image $(run) /bin/bash -c bash release/terraform/utils/check_terraform.sh这里同样贯彻了宿主机不装 Terraform的原则并且通过--user $(shell id -u):$(shell id -g)以当前用户身份运行容器避免文件属主漂移。仓库根目录的 Makefile 进一步封装为make terraform.format与make terraform.check两个顶层入口分别代理到release/terraform下的对应目标CI 会在release/terraform目录内容变更时执行make terraform.check。六、小结与最佳实践综合本仓库的文档与实现release/terraform/utils这个不到百行的工具集体现了三类值得复用的实践环境固化以 digest 锁定的 Helm 基础镜像叠加 SHA-256 校验的 Terraform/kubectl/gcloud/eksctl配合--platform linux/amd64让团队与 CI 在任何机器上都拿到字节级一致的运维环境凭证隔离用命名卷承载 gcloud/AWS 凭证分别通过make gke.shell与make eks.shell按目标平台注入凭证既不落仓库、也不随容器销毁校验左移make check将terraform fmt与terraform validate搬进容器执行且不触碰任何云厂商 API可在本地与 CI 低成本地拦截配置错误再配合删除保护、私网部署等默认安全项形成一套完整的 SuperPlane 基础设施交付闭环。赞分享【免费下载链接】superplaneOpen source factory for one-shot engineering项目地址https://gitcode.com/gh_mirrors/su/superplane点击查看免费下载相关推荐Paddle-Lite C 预测库测试指南用 test_libs 全量验证 light/full 库的动静态链接与推理精度Paddle Lite C 预测库测试指南用 test_libs 全量验证 light/full 库的动静态链接与推理精度 导读 lite/demo/cxKitematic与Terraform集成基础设施即代码管理容器环境Kitematic与Terraform集成基础设施即代码管理容器环境 你还在手动配置Docker容器吗面对复杂的端口映射、网络配置和环境变量是否感到力不从桌面应用Amlogic S9XXX 盒子刷Armbian完整指南6 条命令从安卓走到 LinuxAmlogic S9XXX 盒子刷Armbian完整指南6 条命令从安卓走到 Linux 本文讲 Amlogic S9XXX 盒子刷Armbian 的完整流嵌入式开发工具构建工具操作系统上一篇终极文献引用解析利器快速智能的学术助手下一篇Syncthing Windows Setup 安装与配置完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表