Docker Desktop for Mac/Win で始める Kubernetes 入門
はじめに
Kubernetes (k8s) はコンテナオーケストレーションのデファクトスタンダードですが、学習を始めるには環境構築のハードルが高いと感じる方も多いでしょう。しかし、Docker Desktop for Mac/Windows
には、ローカルマシンで手軽に Kubernetes クラスタを有効化する機能が組み込まれています。
この記事では、Docker Desktop を使って Kubernetes を有効化し、基本的なリソース(Deployment, Service)を作成して、Nginx サーバーを動かすまでの一連の流れを解説します。
準備:Kubernetes を有効化する
- Docker Desktop を起動します。
-
Settings
(歯車アイコン) >Kubernetes
を開きます。 -
Enable Kubernetes
のチェックボックスをオンにします。 -
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 でアプリケーションを動かす基本的な流れは以下の通りです。
- 構成を考える: どのようなアプリケーションを、どのように連携させて動かすかを設計します。
- マニフェストファイル (YAML) を作成する: Kubernetes に「どういう状態になってほしいか」を指示するための設定ファイルを YAML 形式で記述します。
-
マニフェストファイルを適用する:
kubectl apply
コマンドで、YAML ファイルの内容をクラスタに反映させます。 -
状態を確認・調整する:
kubectl get
,kubectl describe
などのコマンドでリソースの状態を確認し、必要に応じて調整します。
Hello, Kubernetes! (Nginx を動かしてみる)
1. 構成を考える
今回は、外部からのリクエストを受け付けるロードバランサー (Service) と、そのリクエストを処理する Nginx のコンテナ (Pod) 2つ、というシンプルな構成を目指します。
2. マニフェストファイル (YAML) を作成する
1つの 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-service
の EXTERNAL-IP
が localhost
になっていることがわかります。
ブラウザで 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 の学習を始めることができます。この記事で紹介した Deployment
と Service
は、Kubernetes の中でも最も基本的で重要なリソースです。まずはこの2つを基本として、ConfigMap
や Secret
、PersistentVolume
など、他のリソースについても学び進めていくのが良いでしょう。
この記事はAIによって修正・追記されました。
Discussion