【Docker】Kubernetes入門・実践ガイド - j-komatsu/myCheatSheet GitHub Wiki

Kubernetes入門・実践ガイド

1. Kubernetesとは?

Kubernetes(K8s)は、コンテナ化されたアプリケーションを自動的にデプロイ、スケール、運用するためのオープンソースのプラットフォームです。

🎯 Kubernetesの主な特徴

特徴 説明
自動スケーリング 負荷に応じて自動的にスケール
自己修復機能 コンテナがクラッシュしても自動で復旧
ローリングアップデート ダウンタイムなしでアプリを更新
サービスディスカバリ ネットワークの構成なしで通信可能
ストレージ管理 各種ストレージ(NFS, Ceph, AWS S3等)と統合
graph LR;
    A[Kubernetes] -->|マニフェスト適用| B[コンテナ管理];
    B -->|スケール管理| C[負荷分散];
    B -->|障害対応| D[自己修復];
    B -->|自動更新| E[ローリングアップデート];

2. 基本コンポーネント

Kubernetesの主なコンポーネントは以下の通りです。

コンポーネント 説明
Pod 1つ以上のコンテナをまとめた最小単位
Node Kubernetesクラスタを構成するマシン(VM/物理)
Cluster 全体のコンテナオーケストレーションの単位
Service Pod間の通信を管理する抽象化レイヤー
Deployment アプリのデプロイ戦略(ローリングアップデート等)
Container 実際のアプリケーションが動作する環境(例: Docker)
graph TD;
    A[Kubernetes Cluster] --> B[Node];
    B --> C[Pod];
    C --> D[コンテナ];

🎯 KubernetesとDockerの関係

項目 Kubernetes Docker
役割 コンテナオーケストレーション コンテナ実行環境
管理対象 Pod(複数コンテナをまとめる) 個々のコンテナ
スケーリング 自動スケーリング可能 手動スケーリングが必要
ネットワーク Serviceを介して通信 Docker Composeなどを利用

3. 各クラウドプロバイダでのKubernetes利用

3.1 AWS - Amazon EKS

  • 概要: AWSが提供するフルマネージドKubernetesサービス。
  • 利用方法:
    aws eks --region ap-northeast-1 create-cluster --name my-cluster
    
  • 特徴:
    • IAM統合でセキュリティ管理が容易
    • Fargateを利用可能(サーバレス)

3.2 GCP - Google Kubernetes Engine (GKE)

  • 概要: Googleが提供するフルマネージドKubernetes。
  • 利用方法:
    gcloud container clusters create my-cluster --zone=asia-northeast1-a
    
  • 特徴:
    • Google Cloud Load Balancerと統合
    • AutoPilotモードあり(管理負担が少ない)

3.3 Azure - Azure Kubernetes Service (AKS)

  • 概要: MicrosoftのフルマネージドKubernetes。
  • 利用方法:
    az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 3
    
  • 特徴:
    • Azure ADと統合しセキュアな認証
    • Windowsコンテナ対応

4. Kubernetesを使ったアプリケーションデプロイ

4.1 デプロイの基本(YAMLマニフェスト)

以下はNginxをKubernetes上にデプロイする基本的なマニフェストです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
# デプロイ適用
kubectl apply -f nginx-deployment.yaml

5. 専門者向けトピック

5.1 Helmを使ったデプロイの自動化

Helmは、Kubernetesのパッケージマネージャーです。

# Helmインストール
helm install my-release bitnami/nginx

5.2 KubernetesとCI/CDの連携

KubernetesをGitHub Actionsと連携する設定例:

name: Deploy to Kubernetes

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2
    - name: Set up kubectl
      uses: azure/setup-kubectl@v1
    - name: Deploy to Kubernetes
      run: |
        kubectl apply -f deployment.yaml

6. まとめ

  • Kubernetesはコンテナ管理を自動化する強力なツール
  • Dockerはコンテナを実行する技術であり、Kubernetesと組み合わせて利用される
  • AWS/GCP/Azureでの利用方法を理解
  • 実際のデプロイにはYAMLマニフェストを活用
  • CI/CDを組み合わせると効率的な運用が可能

これで、基本から専門的な内容まで幅広くカバーしました。