7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プログラミング初心者でも出来た!とにかくローカル環境でk8sを動かしてみよう

Last updated at Posted at 2024-05-14

参考記事

https://kubernetes.io/ja/docs/setup/learning-environment/minikube/
https://minikube.sigs.k8s.io/docs/start/

はじめに

「Kubernetes(k8s)って何? 何から手をつけたらいいの?」と疑問を持つ初学者の方々に向けて、この記事では実際に手を動かしながらKubernetesの基本を学ぶ方法を紹介します。

社内のKubernetes勉強会で、プログラミング初心者から業務でKubernetesを使用している経験者まで、5名の幅広いメンバーと共にこの活動を行いました。

今回は、Minikubeを使用してローカル環境でKubernetesを動かす方法を中心に解説します。

必要なツールのインストール

Docker

Dockerはコンテナを作成・管理するために必要です。以下のリンクから自分の環境に合わせてインストールしてください。

自分の環境に合うリンクをクリックします。
CleanShot 2024-05-14 at 16.29.30@2x.png (651.4 kB)

Macの場合:Appleシリコンチップを搭載しているか、インテルチップを搭載しているかを確認する方法

CleanShot 2024-05-14 at 16.30.55@2x.png (543.4 kB)

クリックすると、Docker Desktopのインストーラーのダウンロードが開始されます。

CleanShot 2024-05-14 at 16.33.38@2x.png (76.9 kB)

ダブルクリックしてDocker.dmgインストーラーを開き、Docker アイコンをアプリケーションフォルダーにドラッグします。
CleanShot 2024-05-14 at 16.34.18@2x.png (203.4 kB)

アプリケーション.png (316.4 kB)

アプリを開いてアプリを使用する目的を入力して「finish」を選択し、下記の画面に遷移します。
Containers_-_Docker_Desktop.png (354.1 kB)

Minikube

Minikubeはローカル環境で簡単にKubernetesクラスタを立ち上げるツールです。以下のコマンドでインストールできます。

brew install minikube

Kubernetesクラスタの起動

Minikubeを使ってクラスタを起動するには、ターミナルで以下のコマンドを実行します。

minikube start

なお、Dockerをインストールせずにminikube startを実行すると、以下のようなエラーが表示されます。

😄  Darwin 13.2.1 (arm64) 上の minikube v1.33.1
👎  デフォルトドライバーを採用できませんでした。こちらが可能性の高い順に考えられる事です:
💡  代わりに、これらのドライバーのいずれかをインストールすることもできます:
    ▪ docker: Not installed: exec: "docker": executable file not found in $PATH
    ▪ hyperkit: Not installed: exec: "hyperkit": executable file not found in $PATH
    ▪ parallels: Not installed: exec: "prlctl": executable file not found in $PATH
    ▪ qemu2: Not installed: exec: "qemu-system-aarch64": executable file not found in $PATH
    ▪ virtualbox: Not installed: unable to find VBoxManage in $PATH
    ▪ podman: Not installed: exec: "podman": executable file not found in $PATH

❌  DRV_NOT_DETECTED が原因で終了します: 利用可能なドライバーが検出されませんでした。--driver 指定を試すか、https://minikube.sigs.k8s.io/docs/start/ を参照してください

問題なくMinikubeがスタートされると以下のように表示されます。

- 😄  Darwin 13.2.1 (arm64) 上の minikube v1.33.1
✨  docker ドライバーが自動的に選択されました
📌  root 権限を持つ Docker Desktop ドライバーを使用
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🚜  Pulling base image v0.0.44 ...
💾  ロード済み Kubernetes v1.30.0 をダウンロードしています...
    > preloaded-images-k8s-v18-v1...:  319.81 MiB / 319.81 MiB  100.00% 3.03 Mi
    > gcr.io/k8s-minikube/kicbase...:  435.76 MiB / 435.76 MiB  100.00% 3.35 Mi
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...
🐳  Docker 26.1.1 で Kubernetes v1.30.0 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ コントロールプレーンを起動しています...
    ▪ RBAC のルールを設定中です...
🔗  bridge CNI (コンテナーネットワークインターフェース) を設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass
🏄  終了しました!kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました

Kubectlを使ってPodを一覧表示する

kubectlを使用して、全namespaceのPodを一覧表示することができます。

# 全namespaceに存在するPodを一覧表示する
$ kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-787d4945fb-8c9fq           1/1     Running   0          12s
kube-system   coredns-787d4945fb-q6r8p           1/1     Running   0          12s
kube-system   etcd-minikube                      1/1     Running   0          27s
kube-system   kube-apiserver-minikube            1/1     Running   0          27s
kube-system   kube-controller-manager-minikube   1/1     Running   0          25s
kube-system   kube-proxy-krj5b                   1/1     Running   0          12s
kube-system   kube-scheduler-minikube            1/1     Running   0          27s
kube-system   storage-provisioner                1/1     Running   0          24s

アプリケーションをデプロイする

サンプル Deploymentを作成し、ポート 8080 で公開します。

kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080

しばらく時間がかかることもありますが、以下を実行するとすぐにデプロイメントが表示されます。

kubectl get services hello-minikube

このサービスにアクセスするために、minikube に Web ブラウザを起動させます。

minikube service hello-minikube

kubectl を使用してポートを転送します。

kubectl port-forward service/hello-minikube 7080:8080

やったー!ローカル環境でk8sを動かしてアプリケーションがデプロイされました。

Minikubeクラスターを停止&削除

ローカル環境のMinikubeクラスターを停止します。

minikube stop

ローカルのMinikubeクラスターを削除します。

minikube delete --all

番外編

Podの数を増やしたい

Deploymentで管理されているPodの個数を増やす方法を紹介します。

$ kubectl edit deployment hello-minikube
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-minikube
  labels:
    app: nginx
spec:
  replicas: 3 # 希望のPod数に変更します
$ kubectl get deployment
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
hello-minikube   3/3     3            3           16m

$ kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS      AGE
default                hello-minikube-7ddcbc9b8b-4trx6              1/1     Running   0             51s
default                hello-minikube-7ddcbc9b8b-gqzq6              1/1     Running   0             7m26s
default                hello-minikube-7ddcbc9b8b-xqfbl              1/1     Running   0             51s
kube-system            coredns-565d847f94-6thzk                     1/1     Running   0             31m

Podを消してもPodが再作成される!

Podを取得します。

$ kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-77b6f68484-zbb9f   1/1     Running   0          22s

Podを削除します。

$ kubectl delete pod hello-minikube-77b6f68484-zbb9f

Podが削除されているか確認します。

$ kubectl delete pod hello-minikube-77b6f68484-6tlkp

なぜPodが削除されないのでしょうか?
それは、PodがDeploymentで管理されているからです。

KubernetesではPodを直接削除しても、そのPodがDeploymentなどのコントローラによって管理されている場合、Deploymentの設定に基づいて自動的に新しいPodが再作成されます。

この挙動は、システムの可用性と耐障害性を確保するために重要です。

もしPodを削除したい場合にPodが自動的に再作成されるのを防ぎたいなら、そのPodを管理しているDeploymentやReplicaSetを削除する必要があります。

kubectl delete deployment <deployment-name>
名称未設定2.png (30.0 kB)

やってみた感想

全くプログラミングを触れずに来た人でも社内のKubernetesの勉強会を通じて、チーム制であれば、記事に記載された一通りの内容を実施することができました!
触れる前はターミナルを開く機会もあまりなく抵抗感がありましたが、実際に触れてみるとよりKubernetesがどのようなシステムなのかを理解することができ、とても勉強になりました!

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?