引言:用 Bash 将 Kubernetes 粘合在一起
- 先决条件
- 为什么选择 Bash?
- 我们要构建什么
- 入口点: setup.sh
- 启动 datacenter.sh
- 动手练习
安 全 设 置、初 始 化 和 生 命 周 期 钩 子
- 全 局 Set 选 项
- 使 用 shellcheck 检 查 Shell 脚 本
- 脚 本 初 始 化
- 主 控 制 器
- 错 误 处 理 器
- 退 出 处 理 器
- 汇 总
- 动 手 练 习
退 出 码 与 受 控 退 出
- script_exit 函 数
- 退 出 码 约 定
- Bash 安 全 模 式 回 顾
- 更 新 后 的 脚 本
- 动 手 练 习
Cron 模 式 与 IO 重 定 向
- Cron 模 式 的 作 用
- 文 件 描 述 符
- 为 Cron 模 式 重 定 向
- 更 新 错 误 处 理 函 数
- 更 新 退 出 处 理 函 数
- 在 main 中 注 册 cron_init
- 更 新 后 的 脚 本
- 动 手 练 习
库 模 式:组 织 Bash 代 码 库
- lib/目 录
- 在 main 中 加 载 库
- 编 写 库 文 件
- 命 名 约 定
- 依 赖 关 系 图
- 两 个 现 在 值 得 了 解 的 实 用 库
- 动 手 练 习
终 端 颜 色 与 日 志 记 录
- 日 志 库
- 颜 色 初 始 化
- log 函 数
- verbose_print——详 细 模 式 输 出
- 更 新 init
- 更 新 main
- 更 新 错 误 处 理 函 数
- 动 手 练 习
验 证 辅 助 函 数 与 二 进 制 检 查
- lib/script.sh
- check_binary——必 需 工 具 检 测
- check_required_binaries——系 统 前 提 条 件
- is_kind——模 式 检 测
- check_arguments——变 量 存 在 性 验 证
- check_directories——路 径 验 证
- check_files——文 件 存 在 性 验 证
- check_repos——仓 库 存 在 性 守 卫
- build_path——PATH 构 建
- 在 init 链 中 使 用 辅 助 函 数
- 动 手 练 习
配 置 管 理
- 配 置 文 件
- lib/config.sh
- get_configurations — 交 互 式 设 置
- 在 main 中 读 取 配 置
- Docker 网 络 模 式
- 动 手 练 习
脚 本 锁 定:防 止 并 发 运 行
- 为 什 么 用 目 录 而 非 文 件
- lock_init
- 过 期 锁 处 理
- 动 手 练 习
完 整 参 数 解 析
- parse_params
- script_usage — 帮 助 文 本
- 连 接 parse_params 到 main
- 动 手 练 习
本 地 模 式 与 Kind 集 群 管 理
- 为 什 么 选 择 Kind
- lib/kind.sh
- start_env — 创 建 Kind 集 群
- stop_env — 停 止 集 群
- delete_env — 销 毁 集 群
- 加 载 镜 像 到 Kind
- 无 Docker 环 境 切 换
- 动 手 练 习
Docker 操 作
- lib/docker.sh
- safe_docker — 基 础 包 装
- safe_docker_build — 构 建 镜 像
- safe_docker_run — 运 行 容 器
- 加 载 镜 像 到 Kind
- Docker Compose 操 作
- docker_cleanup — 移 除 死 亡 容 器 和 镜 像
- 动 手 练 习
使 用 kubectl 管 理 Kubernetes
- lib/kubectl.sh
- safe_kubectl — 基 础 包 装
- kubectl_install_resource_from_file
- kubectl_install_database — PostgreSQL 设 置
- kubectl_restart — 滚 动 重 启
- DNS 管 理
- 重 新 启 动 所 有 Deployment
- 动 手 练 习
Helm: Kubernetes 的 包 管 理
- lib/helm.sh
- safe_helm — 基 础 包 装
- k8s/ 中 的 Helm 图 表
- helm_install_service — 通 用 服 务 安 装 器
- helm_install_core_service — 基 于 模 板 的 服 务
- 安 装 配 置 Release
- 更 新 函 数 — 原 位 升 级
- Traefik — 入 口 控 制 器
- 动 手 练 习
构 建 服 务
- 构 建 管 道
- lib/build.sh
- build_service — 核 心 构 建 函 数
- 服 务 组 函 数
- build_images_init — 构 建 分 派 器
- lib/install_deps.sh
- check_registry
- 动 手 练 习
从 零 开 始 部 署
- 系 统 架 构
- 完 整 部 署 序 列
- 逐 步 说 明
- 支 持 函 数
- Kubernetes 集 群 参 数
- Kubernetes 清 单 参 考
- 动 手 练 习
- 成 功 的 样 子
重 载 和 恢 复 操 作
- lib/reload_services.sh
- reload_services — 轻 量 级 服 务 刷 新
- reload_services_init — 重 载 分 派 器
- lib/reload_kubernetes.sh
- reload_all_kubernetes — 完 整 集 群 重 建
- 动 手 练 习
拆 除 和 清 理
- 停 止 环 境
- 删 除 环 境
- 完 整 Kubernetes 拆 除
- Docker 清 理
- 退 出 处 理 器:完 整 版 本
- 汇 总 完 整 脚 本
- 完 整 的 main() 函 数
- 完 整 的 init 函 数
- 完 整 生 命 周 期
- 你 构 建 的 开 发 者 体 验
- 动 手 练 习
使用 ArgoCD 的 GitOps
- lib/argocd.sh
- safe_argocd — 基础封装
- helm_install_argocd — 安装控制器
- argocd_wait_ready — 确认启动
- argocd_login — 为 CLI 认证
- argocd_create_app — 注册应用
- argocd_sync — 触发同步
- argocd_wait_healthy — 等待同步完成
- argocd_delete_app — 移除应用
- 把 ArgoCD 集成进 datacenter.sh
- 关于 OpenShift 的说明
- 动手练习
使用 Prometheus 和 Grafana 的指标与仪表板
- lib/monitoring.sh
- helm_install_monitoring — 完整技术栈
- monitoring_wait_ready — 确认启动
- monitoring_port_forward — 本地访问
- monitoring_apply_servicemonitor — 抓取你的服务
- monitoring_get_grafana_password — 获取凭据
- 把监控集成进 datacenter.sh
- kube-prometheus-stack 为你提供什么
- 动手练习
使用 OpenTelemetry 的分布式追踪
- lib/otel.sh
- safe_otel — 基础封装
- helm_install_otel_operator — 安装 Operator
- otel_wait_ready — 确认 Operator 正在运行
- otel_apply_collector — 部署 Collector
- otel_apply_instrumentation — 零代码自动插桩
- otel_wait_collector_ready — 确认 Collector
- Grafana Tempo — 追踪后端
- 把 OTel 集成进 datacenter.sh
- 把追踪、指标和日志连起来
- 动手练习
附 录: datacenter.sh 命 令 参 考
- setup.sh
- datacenter.sh
- 退 出 码
- 可 链 接 与 不 可 链 接 参 数
- 常 见 工 作 流
- 故 障 排 除