環境
- Windows11
- PowerShell
- Scoop
MinikubeをScoopでインストール
> scoop install minikube > minikube version minikube version: v1.34.0
kubectlをScoopでインストール
kubectlというのも必要らしいのでインストールします。
> scoop install kubectl > kubectl version Client Version: v1.29.2
Minikubeはk8sの1ノードを簡単に立ち上げられるアプリだそうです。 k8sのほとんどの機能を網羅しているけどノードは1つに限定されていて、インストールも超簡単なので学習・開発に使われるそうです。 kubectlはk8sの各種操作を実行できるCLIのアプリです。
Minikubeをスタートしてみる
Dockerドライバというのでスタートしてみます。
> minikube start --driver=docker 😄 Microsoft Windows 11 Pro 10.0.22631.4602 Build 22631.4602 上の minikube v1.34.0 ✨ ユーザーの設定に基づいて docker ドライバーを使用します 📌 root 権限を持つ Docker Desktop ドライバーを使用 👍 Starting "minikube" primary control-plane node in "minikube" cluster 🚜 Pulling base image v0.0.45 ... 💾 ロード済み Kubernetes v1.31.0 をダウンロードしています... > preloaded-images-k8s-v18-v1...: 326.69 MiB / 326.69 MiB 100.00% 22.72 M > gcr.io/k8s-minikube/kicbase...: 487.90 MiB / 487.90 MiB 100.00% 12.99 M 🔥 Creating docker container (CPUs=2, Memory=32700MB) ... ❗ Failing to connect to https://registry.k8s.io/ from inside the minikube container 💡 外部イメージを取得するためには、プロキシーを設定する必要があるかも知れません: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/ 🐳 Docker 27.2.0 で Kubernetes v1.31.0 を準備しています... ▪ 証明書と鍵を作成しています... ▪ コントロールプレーンを起動しています... ▪ RBAC のルールを設定中です... 🔗 bridge CNI (コンテナーネットワークインターフェース) を設定中です... 🔎 Kubernetes コンポーネントを検証しています... ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています 🌟 有効なアドオン: storage-provisioner, default-storageclass ❗ C:\Program Files\Docker\Docker\resources\bin\kubectl.exe のバージョンは 1.29.2 で、Kubernetes 1.31.0 と互換性がない かもしれません。 ▪ kubectl v1.31.0 が必要ですか? 'minikube kubectl -- get pods -A' を試してみてください 🏄 終了しました!kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました
kubectlが古いかもよみたいなメッセージがありますね。とりあえず何も分かってないので次に進みます。
kubectlでMinikubeが動いてるか確認してみる
> kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready control-plane 5m44s v1.31.0
とりあえず動いているようです。
Deploymentを作る
apiVersion: apps/v1 kind: Deployment metadata: name: hello-deployment spec: replicas: 2 selector: matchLabels: app: hello template: metadata: labels: app: hello spec: containers: - name: hello-container image: nginx:latest ports: - containerPort: 80
Serviceを作る
apiVersion: v1 kind: Service metadata: name: hello-service spec: selector: app: hello type: NodePort ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30080
DeploymentはどんなコンテナのPodを何個作るかみたいな設定だそうです。 ServiceはPodのネットワーク接続に関する設定だそうです。
Deployment, Serviceを適用する
kubectl apply -f deployment.yaml kubectl apply -f service.yaml
ファイルの設定を適用する場合 -f
オプションを付ける必要があり、-f
はファイル名のことだそうです。
色々確認する
> kubectl get pods NAME READY STATUS RESTARTS AGE hello-deployment-6c9c7b86b9-2k8cj 1/1 Running 0 5m5s hello-deployment-6c9c7b86b9-2tgv5 1/1 Running 0 5m5s > kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready control-plane 82m v1.31.0 > kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-service NodePort 10.105.1.202 <none> 80:30080/TCP 5m11s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 82m > minikube ip 192.168.49.2 > wget http://192.168.49.2:30080 wget : リモート サーバーに接続できません。 発生場所 行:1 文字:1 + wget + ~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand > minikube service hello-service |-----------|---------------|-------------|---------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|---------------|-------------|---------------------------| | default | hello-service | 80 | http://192.168.49.2:30080 | |-----------|---------------|-------------|---------------------------| 🏃 hello-service サービス用のトンネルを起動しています。 |-----------|---------------|-------------|------------------------| | NAMESPACE | NAME | TARGET PORT | URL | |-----------|---------------|-------------|------------------------| | default | hello-service | | http://127.0.0.1:61074 | |-----------|---------------|-------------|------------------------| 🎉 デフォルトブラウザーで default/hello-service サービスを開いています... ❗ Docker ドライバーを windows 上で使用しているため、実行するにはターミナルを開く必要があります。
上記のhttp://127.0.0.1:61074がブラウザで開き、Nginxの画面が表示されました。
スケールアップしてみる
> kubectl scale deployment hello-deployment --replicas=5 deployment.apps/hello-deployment scaled > kubectl get po NAME READY STATUS RESTARTS AGE hello-deployment-6c9c7b86b9-2k8cj 1/1 Running 0 21h hello-deployment-6c9c7b86b9-2tgv5 1/1 Running 0 21h hello-deployment-6c9c7b86b9-ckkhk 1/1 Running 0 9s hello-deployment-6c9c7b86b9-g56kr 1/1 Running 0 9s hello-deployment-6c9c7b86b9-s5v4n 1/1 Running 0 9s
Jobを作ってみる
Jobは一時的な処理を実行するPodを作ることが出きるそうです。
apiVersion: batch/v1 kind: Job metadata: name: test-job spec: template: spec: containers: - name: test-job-container image: busybox command: ["echo", "Hello from Job"] restartPolicy: Never
Jobを適用・実行してみる
> kubectl apply -f job.yml job.batch/test-job created > kubectl get pod NAME READY STATUS RESTARTS AGE hello-deployment-6c9c7b86b9-2k8cj 1/1 Running 0 21h hello-deployment-6c9c7b86b9-2tgv5 1/1 Running 0 21h test-job-hb8lq 0/1 Completed 0 27s > kubectl get jobs NAME STATUS COMPLETIONS DURATION AGE test-job Complete 1/1 9s 35s > kubectl logs test-job-hb8lq Hello from Job