🔰Kubernetes入門 - リソース/ツール解説

# KubernetesでIaCに用いる主なリソースやツール

以下は、KubernetesでIaCを実現する際によく利用されるリソースやツールを、**その定義方法**、**概要**、**意義**、**ない場合の問題点**とともにまとめた一覧です。とりあえず思いついた分だけ。。。

## リソースおよびツール一覧

| **名前**          | **定義方法 (YAML)**                                                                                   | **概要**                                                                                     | **意義**                                                                                                     | **ない場合の問題点**                                                                                  |
|-------------------|-------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| **Namespace**    | ```yaml<br>apiVersion: v1<br>kind: Namespace<br>metadata:<br>  name: my-namespace```                   | Kubernetesリソースを論理的に分割する仕組み。                                                 | リソースの分離、アクセス制御、ポリシー適用を容易にする。                                                   | 複数チームやプロジェクト間でリソース競合や不適切なアクセスが発生する可能性がある。                    |
| **ConfigMap**    | ```yaml<br>apiVersion: v1<br>kind: ConfigMap<br>metadata:<br>  name: my-config<br>data:<br>  key: value``` | 環境設定データを格納するリソース。                                                          | アプリケーションコードから環境設定を分離し、再利用性を向上。                                               | 設定値がハードコーディングされるため、デプロイ環境ごとにコード変更が必要になる。                     |
| **Secret**       | ```yaml<br>apiVersion: v1<br>kind: Secret<br>metadata:<br>  name: my-secret<br>data:<br>  username: bXktdXNlcm5hbWU=``` | 機密情報(パスワード、トークンなど)を格納するリソース。                                         | セキュアに機密情報を管理できる。                                                                           | 機密情報が平文で扱われ、セキュリティリスクが高まる。                                                  |
| **Ingress**      | ```yaml<br>apiVersion: networking.k8s.io/v1<br>kind: Ingress<br>metadata:<br>  name: my-ingress<br>spec:<br>  rules:<br>    - host: example.com``` | HTTP/HTTPSトラフィックをPodにルーティングするリソース。                                        | トラフィック管理を容易にし、外部アクセスをセキュアに構成可能。                                           | 外部からのアクセス設定が複雑になり、管理負荷が増える。                                                |
| **Deployment**   | ```yaml<br>apiVersion: apps/v1<br>kind: Deployment<br>metadata:<br>  name: my-app<br>spec:<br>  replicas: 3``` | アプリケーションの状態(スケール、アップデート戦略など)を管理するリソース。                     | 宣言的なアプリケーション管理を可能にし、スケーラビリティや可用性を向上。                                   | 手動でコンテナを管理する必要があり、運用コストが増大する。                                            |
| **Gateway API**  | ```yaml<br>apiVersion: gateway.networking.k8s.io/v1beta1<br>kind: Gateway<br>metadata:<br>  name: my-gateway<br>spec:<br>  gatewayClassName: my-gateway-class<br>  listeners:<br>  - protocol: HTTP<br>    port: 80``` | Kubernetesのネットワーク層を定義する新しい標準API。Ingressの進化版。                                         | 複雑なネットワークトポロジーやマルチテナント環境での柔軟なトラフィック管理が可能。                      | **Ingress**では対応が難しい高度なルーティング要件や、複数のリスナーの管理が煩雑になる。               |
| **Istio**        | ```yaml<br>apiVersion: networking.istio.io/v1beta1<br>kind: VirtualService<br>metadata:<br>  name: my-service<br>spec:<br>  hosts:<br>  - example.com``` | サービス間通信を制御するサービスメッシュツール。                                            | サービス通信の観測性、セキュリティ、リトライ/フェイルオーバーを提供。                                     | サービス間通信の管理が複雑化し、トラブルシューティングが困難になる。                                  |
| **Gatekeeper**   | ```yaml<br>apiVersion: templates.gatekeeper.sh/v1beta1<br>kind: ConstraintTemplate<br>metadata:<br>  name: k8srequiredlabels<br>spec:<br>  crd:<br>    spec:<br>      names:<br>        kind: K8sRequiredLabels``` | Open Policy Agent (OPA)をKubernetesに統合し、ポリシーの強制を行うツール。                      | CI/CDの一環としてポリシー適用を自動化し、セキュリティやコンプライアンスを向上。                        | ポリシー違反のリソースがデプロイされ、セキュリティや安定性に影響を与える。                            |
| **Helm**         | ```yaml<br>name: my-chart<br>version: 1.0.0<br>dependencies:<br>  - name: redis<br>    repository: https://charts.bitnami.com/bitnami<br>    version: 14.8.8``` | Kubernetesリソースをパッケージ化して管理するツール。                                           | 再利用性とデプロイの簡素化を実現し、複雑なアプリケーションを効率的に管理可能。                           | マニフェスト管理が手作業になるため、ミスや運用コストが増加する。                                      |
| **ArgoCD**       | ```yaml<br>apiVersion: argoproj.io/v1alpha1<br>kind: Application<br>metadata:<br>  name: my-app<br>spec:<br>  source:<br>    repoURL: https://github.com/my-repo<br>    path: ./my-app``` | GitOpsに基づきKubernetesマニフェストを管理するツール。                                          | IaCの自動化とバージョン管理が容易になり、信頼性とスピードが向上。                                       | 手動デプロイが必要となり、人為的なミスや不整合が発生しやすくなる。                                    |
| **Prometheus**   | ```yaml<br>apiVersion: monitoring.coreos.com/v1<br>kind: ServiceMonitor<br>metadata:<br>  name: my-monitor<br>spec:<br>  selector:<br>    matchLabels:<br>      app: my-app``` | メトリクス収集とモニタリングを行うツール。                                                    | クラスタやアプリケーションの可視化と監視を可能にし、障害検知を迅速化。                                   | 障害発生時の原因特定が困難になり、ダウンタイムが長引くリスクが高まる。                                |