Kubernetes入門 — 練習用Webサーバーを2つ動かしてみよう
窓口と、2つのWebサーバー
- 身近な例から役割をつかむ
- 確認できる結果と成立条件を区別する
- 次の学習や導入判断につなげる
最初のゴールと準備
今回はminikubeの練習用プロファイルlearning-shopだけを操作します。Docker入門が次の準備に役立ちます。
- 公式手順でminikubeとkubectlをOSに合わせてインストールします。
- Docker driverを使うため、DockerのLinuxコンテナ環境を起動しておきます。
- minikubeの最低条件はCPU 2個、空きメモリ2GB、空きディスク20GBなどです。OSや他のアプリの分も含めて余裕を見てください。
練習用のクラスタを起動する
minikube start -p learning-shop --driver=docker
minikube -p learning-shop status
kubectl --context learning-shop get nodes
kubectl --context learning-shop create namespace learning-shop
NodeがReadyになったら次へ進みます。以降も--context learning-shopで操作先を指定します。本番クラスタの設定と取り違えないためです。既にこの名前の環境がある場合は、新規の練習用か確認してください。
「2つ欲しい」と窓口をYAMLで伝える
learning.yamlに保存します。nginx:stableは安定系列の更新に伴って中身が変わるタグです。運用では確認した版やdigestへの固定と更新手順を検討してください。
apiVersion: apps/v1
kind: Deployment
metadata:
name: learning-web
namespace: learning-shop
spec:
replicas: 2
selector:
matchLabels:
app: learning-web
template:
metadata:
labels:
app: learning-web
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
---
apiVersion: v1
kind: Service
metadata:
name: learning-web
namespace: learning-shop
spec:
type: ClusterIP
selector:
app: learning-web
ports:
- port: 80
targetPort: 80
DeploymentのラベルとServiceのselectorが一致することが大切です。readinessProbeはHTTPで応答できるかを確かめますが、アプリ全体の正しさを保証するテストではありません。
kubectl --context learning-shop apply -f learning.yaml
kubectl --context learning-shop -n learning-shop rollout status deployment/learning-web
kubectl --context learning-shop -n learning-shop get pods
完了後にPodが2件、各READYが1/1、STATUSがRunningなら次へ進みます。待ち続ける場合はdescribe pod Pod名やlogs Pod名を同じcontext・namespace指定で実行し、イメージ取得、資源不足、起動エラーを調べます。
ブラウザーから表示する
別のターミナルで次を実行したまま、http://127.0.0.1:8080/を開きます。
kubectl --context learning-shop -n learning-shop port-forward service/learning-web 8080:80 --address 127.0.0.1
NGINXのWelcomeページが表示されれば成功です。このport-forwardはServiceに対応する1つのPodへ転送します。ブラウザーを更新しても、2つのPodへの負荷分散を確認する実験にはなりません。外部向けの公開には、環境に応じてIngressやLoadBalancerなど別の設定が必要です。
数を変え、練習環境を片付ける
kubectl --context learning-shop -n learning-shop scale deployment/learning-web --replicas=3で希望数を変え、get podsで状態を確認します。YAMLは2のままなので、再適用すると希望数も2へ戻り得ます。
表示用ターミナルはCtrl+Cで終了します。今回の2種類のリソースだけを消すには、同じファイルでkubectl --context learning-shop delete -f learning.yamlを使います。その後minikube stop -p learning-shopで練習環境を停止できます。名前だけで他の環境をまとめて削除しないでください。
次はKubernetesとDocker Composeの比較で、用途に合わせた選び方を考えましょう。
参考資料
-
minikubeの準備と起動 — 必要な環境とプロファイル
-
Pod — 配置単位とコンテナ
-
Deployment — 希望数と状態確認
-
Service — selectorとClusterIP
-
port-forwardの手順 — Service経由のローカル転送
-
kubectl port-forward — アドレス指定
-
Namespace — 名前と管理範囲
-
Readiness probe — 受付可能な状態の確認