はじめに:Bash で Kubernetes を 接着する
- 前提条件
- なぜ Bash なのか
- 私たちが 構築するもの
- エントリー ポイント:setup.sh
- datacenter.sh の 開始
- ハンズオン 演習
セーフティ 設定、初期化、および ライフサイクル フック
- グローバル set オプション
- シェル スクリプトの lint: shellcheck
- スクリプトの 初期化
- メイン コントローラ
- エラー ハンドラ
- 終了 ハンドラ
- まとめ
- 実践 演習
終了 コードと 制御された 終了
- script_exit 関数
- 終了 コードの 規約
- Bash 安全 パターンの 復習
- 更新 された スクリプト
- 実践 演習
Cron モードと IO リダイレクション
- Cron モードの 動作
- ファイル 記述子
- Cron モードの ための リダイレクト
- エラー ハンドラの 更新
- 終了 ハンドラの 更新
- main への cron_init の 登録
- 更新 された スクリプト
- 実践 演習
ライブラリ パターン: Bash コード ベースの 整理
- lib/ ディレクトリ
- main での ライブラリ 読み込み
- ライブラリ ファイルの 書き方
- 命名 規則
- 依存 関係 グラフ
- 今 知って おく 価値の ある 2 つの ユーティリティ ライブラリ
- 実践 演習
端末の 色と ログ 出力
- ログ ライブラリ
- 色の 初期化
- 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 — テンプレート ベース サービス
- Config リリース の インストール
- 更新 関数 — その場 アップグレード
- Traefik — Ingress コントローラー
- 実践 演習
サービス の ビルド
- ビルド パイプライン
- 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 — コレクターのデプロイ
- otel_apply_instrumentation — コードを変更しない自動計装
- otel_wait_collector_ready — コレクターの確認
- Grafana Tempo — トレースのバックエンド
- OTel を datacenter.sh に組み込む
- トレース、メトリクス、ログをつなぐ
- 実践演習
付録 : datacenter.sh コマンド リファレンス
- setup.sh
- datacenter.sh
- 終了 コード
- チェーン 可能 vs チェーン 不可 パラメータ
- 一般的 な ワークフロー
- トラブルシューティング