Docker Desktopを使ってKubernetesでNginxを立ててみる
はじめに
こんにちは、SHIFTの長岡です。
Docker DesktopにはKubernetesがバンドルされているため手軽に試すことができます。本記事ではDocker Desktop for Windowsを使ってKubernetesを試してみたいと思います。
環境
OS:Windows 11 Home
Docker Desktop for Windows:4.9.0
Kubernetes:1.24.0
1. Kubernetesの有効化
Docker Desktopの設定画面からKubernetesを選択し、Enable Kubernetesにチェックを入れます。Kubernetesクラスターをインストールするか確認のメッセージが表示されるのでInstallをクリックします。しばらく待つとKubernetesがインストールされ左下のKubernetesアイコンが緑(Kubernetes RUNNING)になるのでこれでKubernetesが利用できる状態になります。
2. マニフェストファイルの作成
Kubernetesはマニフェストファイルと呼ばれる定義ファイルに記載された内容に沿ってPod等のリソースを制御します。そのため、まずは自分が構築したい環境構成に従ってマニフェストファイルを作る必要があります。マニフェストファイルはリソースごとに分割することもできますし、1つのマニフェストファイルに全て宣言することも可能です。本記事ではリソースごとに分割する形でマニフェストファイルを作成していきます。
2-1. マニフェストファイルの作成(Deployment)
Deploymentとは、PodやReplicaSetを制御するためのリソースになります。Deploymentを作成することで実際にPodが作成されます。
apiVersion: apps/v1 # Deploymentの場合は「apps/v1」固定
kind: Deployment # Deploymentを指定
metadata:
name: nginx-deploy # Deploymentの名前(任意の名前を付与)を指定
spec: # ReplicaSetの定義
replicas: 3 # Podの数を指定
selector:
matchLabels:
app: nginx
template: # 作成するPodの情報
metadata:
labels:
app: nginx # 生成するPodの名前(任意の名前を付与)を指定
spec:
containers: # 本セクションにコンテナイメージを記述
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
2-2. マニフェストファイルの作成(Service)
Serviceとは、構成が同じPodのセットにアクセスするためのポリシーを定義したリソースです。Serviceを作成することで定義したポリシーに則って環境が構築されます。
apiVersion: v1 # Serviceの場合は「v1」固定
kind: Service # Serviceを指定
metadata:
name: nginx-service # Serviceの名前(任意の名前を付与)を指定
spec: # Podのポリシーの定義
type: NodePort
ports:
- port: 80
nodePort: 30000
selector:
app: nginx # Deploymentで指定したPodの名前を指定
3. Deploymentの作成
以下のコマンドでDeploymentを作成します。-fの後ろはDeploymentファイルのパスを指定します。
$ kubectl apply -f C:/kubernetes/deployment.yaml
deployment.apps/nginx-deploy created ←このように出力されればコマンド実行は成功です
コマンド実行は成功したので、以下のコマンドでPodが作成されているかを確認します。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-544dc8b7c4-2c2hj 1/1 Running 0 10h
nginx-deploy-544dc8b7c4-fkbjh 1/1 Running 0 10h
nginx-deploy-544dc8b7c4-jfbd6 1/1 Running 0 10h
Deploymentファイルで指定した通り、Podが3つ作成されていることを確認できました。
4. Serviceの作成
以下のコマンドでServiceを作成します。-fの後ろはServiceファイルのパスを指定します。
$ kubectl apply -f C:/kubernetes/service.yaml
service/nginx-service created ←このように出力されればコマンド実行は成功です
コマンド実行は成功したので、以下のコマンドでServiceが作成されているかを確認します。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 41d
nginx-service NodePort 10.96.63.255 80:30000/TCP 9h
5. 動作確認
http://localhost:30000/ にアクセスして確認します。
上記の通り無事KubernetesでNginx環境が構築できました。
6. Podの自動復旧の確認
KubernetesではPodが何らかの障害により壊れた場合でも自動復旧の機能があります。本節ではそれを試してみます。 まずは、Podの確認を再度行います。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-544dc8b7c4-2c2hj 1/1 Running 0 10h
nginx-deploy-544dc8b7c4-fkbjh 1/1 Running 0 10h
nginx-deploy-544dc8b7c4-jfbd6 1/1 Running 0 10h
次に一番上の「nginx-deploy-544dc8b7c4-2c2hj」というPodを以下のコマンドで削除してみます。
$ kubectl delete pod nginx-deploy-544dc8b7c4-2c2hj
pod "nginx-deploy-544dc8b7c4-2c2hj" deleted ←このように出力されればコマンド実行は成功です
再度Podの確認を行います。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-544dc8b7c4-5b9m7 1/1 Running 0 87s ←AGEを見ると新しくPodが作成されていることが確認できる
nginx-deploy-544dc8b7c4-fkbjh 1/1 Running 0 10h
nginx-deploy-544dc8b7c4-jfbd6 1/1 Running 0 10h
上記の通り、AGEを見ると新しくPodが作成されていることが確認できます。つまり、Podが壊れても自動復旧していることが確認できました。
最後に
今回は自身のローカル環境上でKubernetesを試してみましたが、実際の開発の現場ではEKS(AWS)やGKE(GCP)といったクラウドサービス上で利用されるケースがほとんどです。クラウドサービス上ではノードが複数あったり複数のサービスを組み合わせて使われるといったことが多く、ローカル環境上での構築とは全く別物になります。とはいえ、マニフェストファイルをいかに定義するかという点では、ローカル環境でも同じです。クラウドサービスを利用する前にローカル環境でどんなものかを試すだけでも充分基礎的なところや雰囲気は掴めると思います。興味のある方は是非ローカル環境で手軽に試してみてはいかがでしょうか。
以上です。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/