🐳

Docker Desktop for Mac/Win で始める Kubernetes 入門

に公開

はじめに

Kubernetes (k8s) はコンテナオーケストレーションのデファクトスタンダードですが、学習を始めるには環境構築のハードルが高いと感じる方も多いでしょう。しかし、Docker Desktop for Mac/Windows には、ローカルマシンで手軽に Kubernetes クラスタを有効化する機能が組み込まれています。

この記事では、Docker Desktop を使って Kubernetes を有効化し、基本的なリソース(Deployment, Service)を作成して、Nginx サーバーを動かすまでの一連の流れを解説します。

準備:Kubernetes を有効化する

  1. Docker Desktop を起動します。
  2. Settings (歯車アイコン) > Kubernetes を開きます。
  3. Enable Kubernetes のチェックボックスをオンにします。
  4. Apply & Restart をクリックします。

初回は必要なイメージのダウンロードに数分かかります。完了すると、kubectl コマンドが利用できるようになり、コンテキストが docker-desktop に設定されます。

ターミナルで以下のコマンドを実行し、クラスタが利用可能な状態か確認してみましょう。

kubectl get nodes
# NAME             STATUS   ROLES           AGE   VERSION
# docker-desktop   Ready    control-plane   15h   v1.25.2 (例)

kubectl get all -n kube-system
# kube-system 名前空間で Kubernetes のシステムコンポーネントが動いているのがわかる

Kubernetes でアプリケーションを動かす手順

Kubernetes でアプリケーションを動かす基本的な流れは以下の通りです。

  1. 構成を考える: どのようなアプリケーションを、どのように連携させて動かすかを設計します。
  2. マニフェストファイル (YAML) を作成する: Kubernetes に「どういう状態になってほしいか」を指示するための設定ファイルを YAML 形式で記述します。
  3. マニフェストファイルを適用する: kubectl apply コマンドで、YAML ファイルの内容をクラスタに反映させます。
  4. 状態を確認・調整する: kubectl get, kubectl describe などのコマンドでリソースの状態を確認し、必要に応じて調整します。

Hello, Kubernetes! (Nginx を動かしてみる)

1. 構成を考える

今回は、外部からのリクエストを受け付けるロードバランサー (Service) と、そのリクエストを処理する Nginx のコンテナ (Pod) 2つ、というシンプルな構成を目指します。

シンプルな構成図

2. マニフェストファイル (YAML) を作成する

1つの YAML ファイルに、複数のリソース定義を --- で区切って記述できます。

nginx-deployment.yaml
# --- Deployment: Podを管理するためのリソース ---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment # Deploymentの名前
spec:
  replicas: 2 # 同じPodを2つ作成する
  selector:
    matchLabels:
      app: nginx # このラベルを持つPodを管理対象とする
  template: # これがPodの設計図
    metadata:
      labels:
        app: nginx # Podに付けるラベル
    spec:
      containers:
      - name: nginx-container
        image: nginx:latest # 使用するDockerイメージ
        ports:
        - containerPort: 80 # コンテナが公開するポート

---
# --- Service: Podへのアクセスを管理するリソース ---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service # Serviceの名前
spec:
  selector:
    app: nginx # このラベルを持つPodにトラフィックを転送する
  ports:
  - protocol: TCP
    port: 80       # Serviceが公開するポート
    targetPort: 80 # 転送先のPodのポート
  type: LoadBalancer # 外部に公開するためのServiceタイプ
  • Deployment: 指定した数の Pod のレプリカが常に実行されている状態を維持します。セルフヒーリングやローリングアップデートなどの機能を提供します。
  • Service: Pod へのネットワークアクセスを提供します。type: LoadBalancer を指定すると、外部からアクセス可能な IP アドレス(この場合は localhost)を割り当ててくれます。

3. マニフェストファイルを適用する

作成した YAML ファイルを kubectl で適用します。

kubectl apply -f nginx-deployment.yaml
# deployment.apps/nginx-deployment created
# service/nginx-service created

4. 状態を確認する

kubectl get all コマンドで、作成されたリソースの状態を確認できます。

kubectl get all
# NAME                                  READY   STATUS    RESTARTS   AGE
# pod/nginx-deployment-574d...-abcde   1/1     Running   0          60s
# pod/nginx-deployment-574d...-fghij   1/1     Running   0          60s
#
# NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
# service/kubernetes      ClusterIP      10.96.0.1       <none>        443/TCP        16h
# service/nginx-service   LoadBalancer   10.108.216.3    localhost     80:30001/TCP   60s
#
# NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
# deployment.apps/nginx-deployment   2/2     2            2           60s
#
# NAME                                        DESIRED   CURRENT   READY   AGE
# replicaset.apps/nginx-deployment-574d...   2         2         2       60s

service/nginx-serviceEXTERNAL-IPlocalhost になっていることがわかります。

ブラウザで http://localhost:80 にアクセスすると、Nginx のウェルカムページが表示されるはずです。

5. スケールアウトしてみる

kubectl scale コマンドで、Pod の数を簡単に変更できます。

# nginx-deployment のレプリカ数を5に増やす
kubectl scale --replicas=5 deployment/nginx-deployment
# deployment.apps/nginx-deployment scaled

# Podが増えていることを確認
kubectl get pods
# NAME                                  READY   STATUS    RESTARTS   AGE
# pod/nginx-deployment-574d...-12345   1/1     Running   0          10s
# pod/nginx-deployment-574d...-67890   1/1     Running   0          10s
# pod/nginx-deployment-574d...-abcde   1/1     Running   0          5m
# pod/nginx-deployment-574d...-fghij   1/1     Running   0          5m
# pod/nginx-deployment-574d...-klmno   1/1     Running   0          10s

片付け

作成したリソースを削除するには kubectl delete コマンドを使います。

kubectl delete -f nginx-deployment.yaml
# deployment.apps "nginx-deployment" deleted
# service "nginx-service" deleted

まとめ

Docker Desktop を使えば、複雑な環境構築なしに、すぐにでも Kubernetes の学習を始めることができます。この記事で紹介した DeploymentService は、Kubernetes の中でも最も基本的で重要なリソースです。まずはこの2つを基本として、ConfigMapSecretPersistentVolume など、他のリソースについても学び進めていくのが良いでしょう。


この記事はAIによって修正・追記されました。

Discussion