2024年01月10日
JENNIFER Kubernetes
テクニカルノート
1. EKSブログ連載の目的
最近の企業の最も重要な命題は、顧客の多様なリクエストに素早く安定的に応えることです。つまり、素早い対応と安定的な運用を両立するという難しい問題を解決する必要があります。
クバネティスは、このような要求を最も満足させるコンテナオーケストレーションソリューションです。また、殆どの会社で少なくともテスト用では使用していて、特に新しいプロジェクトでは普通に採用される標準的なソリューションとなっています。
しかし、企業の現場ではクバネティスの導入はハードルが高いため、実際にはそれほど進んでいません。高価なコストを払って外部のソリューションを導入したり、プロジェクトを外注で進めたりするケースも多いです。
しかし、クバネティスのような核心的なソリューションは内製化が重要です。単純に導入して終わりではなく、企業のアプリケーション特性に合わせて継続的に変化し、多数の選択肢があるソリューションであるため、外部に依存することで今後の運用環境に多くの課題や、問題点が予想されます。
今回のブログシリーズでは、企業がEKS(ネイティブクバネティス)を導入し、運用するために必要で全体的な技術スタックを、実習形式で提供することを目的とします。
EKSを最も効果的に学べる方法は、実際に企業で利用しているレベルの技術を繰り返し実習する方法です。
クバネティスは企業アプリケーションの配布からハードウェアインフラの運用と範囲が広いため、現場の担当者が最初から原理や理論を学ぶには時間的に制約されます。即座に実務に適用できるレベルの全体的な関連技術を実習で素速く習得して、足りない部分或いは必要な部分は再度勉強する方法が効果的であると考えます。
先ず、最後まで1度経験してみると、2度目からは自信と興味が生まれ、学習が楽しくなります。
読者がクバネティス担当者と仮定して、クバネティス新規構築に必要な作業を共有します。実際の経験をベースに現場で必要な作業を実習ベースで提供します。また、現場のDevOps※1で検証された経験と様々なヒントを提供します。実サービスに適用可能なレベルの高可用性、利便性、コスト削減等の要素を考慮してモデルシステムを構成しました。クバネティスのみならずCI/CD、モニタリング等の多様なエコシステム(Helm、ArgoCD、Ingress、CSI Driver)の構成が含まれています。
全ての過程を実習できるように関連ソースコードをギットハブ(GitHub)で共有できるようにしました。ギットハブコードを参考にしてインストールを進めると、1日で運用可能なレベルのクラスターを構築できます。
2. 対象読者と事前に準備する環境
Linuxとネットワークの理解と、クバネティスの基本概念を理解している読者を対象とします。
また、一人或いは二人以下の小規模スタートアップ、中小企業或いは研究所/大企業R&Dのクバネティス担当者が対象です。
事前に準備する事柄として、AWSアカウントとCredential等のAWSを利用できる環境と個人PCにVisual Studio Code + Windowsユーザ(Windows Subsystem for Linux WSL、Windows Terminal)、Macユーザ(iTerm2)等の開発環境の構築が必要です。
3. 目次
- クバネティスの特徴とネイティブクバネティスvsマネージドクバネティスの比較
1.1 Desired State(望ましい状態)の維持
1.2 コードを利用したリソースの管理
1.3 高可用性な構成 – ペットと家畜(Pet vs Cattle)の概念
1.4 ネイティブvsマネージドクバネティスソリューションの比較 - Terraformを利用したEKSのインストールとローカル管理環境の構築
2.1 コードを利用したクバネティスのインストールのメリット
2.2 Terraformの理解とTerraformを利用したEKSのインストール
2.3 ローカルKubectl運用環境の設定 – Krewプラグインの活用とクバネティス環境ファイル(~/.kube/config)の構成 - Argo-CDを利用したGitOpsシステムの構築
3.1 GitOpsとSSOT(Single Source of Truth、信頼できる唯一の情報源)の定義
3.2 ArgoCDのインストール
3.3 Port-forwardを利用したポッド(Pod)の接続
3.4 ArgoCDを利用したHelm NGINXアプリケーションの配布 - クバネティスネットワークの理解
4.1 従来のVMとクバネティス環境のネットワークの差
4.2 CNI(Container Network Interface)の理解
4.3 クバネティスリソースサービスの主要機能の実習: サービスディスカバリー、ロードバランシング - クバネティスIngressの理解
5.1 AWSロードバランサーコントローラ + External DNS コントローラの活用
5.2 AWS IRSA(Identity and Access Management Roles for Service Accounts)の理解
5.3 AWS LB コントローラとExternal DNSコントローラのインストールと実習- A) ArgoCDのApp of Appsパターンを利用したアプリケーションのインストール
- B) Ingress活用の実習
- CSI ドライバーを利用したクバネティスストレージの構成
6.1 クバネティスエフェメラルボリューム(Ephemeral Volume)の理解
6.2 EKS CSI(Container Storage Interface)構成によるストレージの実習- A) Persistent Volume、Persistent Volume Claim、 Storage Classの設定
- ポッド(Pod)のオートスケーリング – メトリクスサーバとHPA
7.1 オートスケーリングの理解
7.2 メトリクスサーバのインストールによるリソース使用量の確認
7.3 HPA(Horizontal Pod Autoscaler)の実習 - ノード(Node)のオートスケーリング – Karpenter
8.1 Cluster AutoScaler vs Karpenterのメリットの比較
8.2 Karpenterのインストール
8.3 Karpenterの利用とノードのオートスケーリングの実習
8.4 Karpenterダッシュボードを利用した詳細状況の把握 - 安全にKarpenterを使用する方法
9.1 Graceful Shutdown – 安定的なコンテナの終了設定
9.2 PodDisruptionBudget – ポッド(Pod)の終了ポリシーの設定
9.3 ノードスケジューリングの設定 – Drain、ordon/Uncordon - アドバンスドPODのスケジューリング
10.1 Taint、Tolerations、Node Affinityの設定
10.2 Pod Anti-Affinityの設定 - Helmを利用したパブリックアプリケーションのインストール
11.1 Helmの3つの構成要素: Chart、Templatesディレクト リ、Value File
11.2 Helmアプリケーションのインストールプロセス
11.3 Helmチャートを利用したRedisのインストール - Helmテンプレートを利用したIn-Houseカスタムアプリケーションのインストール
12.1 デフォルト設定でHelmチャートの生成 – Helm Create
12.2 Helm Starter Packsを利用したカスタムアプリケーションのインストールの実習 - クバネティス環境変数の使用とProbeの設定
13.1 クバネティスConfigMap、Secretの理解と実習
13.2 Secretを安全に保管するSealed Secretの実習
13.3 Readiness & Liveness Probeの実習 - prometheus – クバネティスモニタリングメトリクスシステム
14.1 prometheusのアーキテクチャー
14.2 All-In-One Prometheus – スタックを利用したソリューションのインストール
14.3 prometheus GUI Webコンソールの理解 - Grafanaを利用したモニタリングダッシュボードシステムの構築
15.1 Grafanaの基本的な使用方法の理解
15.2 ConfigMapを利用したダッシュボードの管理
15.3 多様なコミュニティーGrafanaダッシュボードの追加
15.4 Alertシステムの構成 - Loki – クバネティスログシステム
16.1 CLI基盤の簡単なポッド(Pod)ログの確認 – Stern
16.2 システム構造とS3を利用したLoki MSAのインストール
16.3 LogQLを利用したクバネティスログの検索 - ギットハブ(GitHub)アクションを利用したCIシステム構築
17.1 Self-HostedギットハブRunnersの追加
17.2 ギットハブアクションファイルの設定
17.3 コンテナイメージのBuildとPushの設定 - EKSバージョンアップグレード
18.1 クバネティスとEKSバージョンのポリシー
18.2 マルチノード構成とRollout Restartを利用したEKSを無停止でのアップグレード - クバネティスセキュリティの設定
19.1Polarisを利用したコンテナ、ポッド(Pod)セキュリティのウィークポイントの確認
19.2 クバネティス API Server のアクセス制限の設定 - 便利な運用に必要なツールの紹介
20.1 K8s – コマンド基盤のクバネティスのモニタリング
20.2 Kubecost – FinOpsのためのクバネティスのリソース使用量とコストの確認
※内容を効果的に伝えるために、目次は変更することがあります。
※1 DevOpsとは開発担当者と運用担当者がスムーズに協調して開発や運用をすすめ、システムの価値を継続的に向上させる方法論や概念。