Kubernetesをローカル環境に構築する

Kubernetes(k8s)とは

コンテナ化されたアプリケーションのデプロイ、スケーリングなどの管理を自動化するプラットフォーム。 k8sでは、コンテナが起動するノードをk8sノードと呼び、それらを管理するノードk8sマスターと呼ぶ。ノードの集合体がk8sクラスターである。

Minikube

MinikubeはSIG-Cluster-Lifecycleで作られた簡単にローカルにk8sクラスターを構築・実行できるツールである。 Minikubeではローカルの仮装マシン上にk8sをインストールするため、ハイパーバイザーが必要となる。

ハイパーバイザーごとに応じたDriverを使用して操作することで、自動的にホストとなるコンテナや仮想マシンを作成し、 その環境上にk8sをインストールする。

macOSにおけるハイパーバイザーにはDocker/HyperKit driver/VirtualBox/Parallels/Vmware/Fusion/Podmanなどがある。

現状、M1macではdockerしか対応してなさそう、、?

Minikubeのインストール

$ brew install minikube
==> Downloading https://ghcr.io/v2/homebrew/core/kubernetes-cli/manifests/1.25.0
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:e10
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/minikube/manifests/1.26.1
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:ae9660e6a
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sh
######################################################################## 100.0%
==> Installing dependencies for minikube: kubernetes-cli
==> Installing minikube dependency: kubernetes-cli
==> Pouring kubernetes-cli--1.25.0.arm64_monterey.bottle.tar.gz
🍺  /opt/homebrew/Cellar/kubernetes-cli/1.25.0: 228 files, 52.8MB
==> Installing minikube
==> Pouring minikube--1.26.1.arm64_monterey.bottle.tar.gz
==> Caveats
zsh completions have been installed to:
  /opt/homebrew/share/zsh/site-functions
==> Summary
🍺  /opt/homebrew/Cellar/minikube/1.26.1: 9 files, 70.6MB
==> Running `brew cleanup minikube`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> minikube
zsh completions have been installed to:
  /opt/homebrew/share/zsh/site-functions

Minikubeを使用してk8s環境を構築する

$ minikube start
😄  Darwin 12.5.1 (arm64) 上の minikube v1.26.1
✨  docker ドライバーが自動的に選択されました
📌  root 権限を持つ Docker Desktop ドライバーを使用
👍  minikube クラスター中のコントロールプレーンの minikube ノードを起動しています
🚜  ベースイメージを取得しています...
💾  ロード済み Kubernetes v1.24.3 をダウンロードしています...
    > preloaded-images-k8s-v18-v1...:  342.82 MiB / 342.82 MiB  100.00% 20.69 M
    > gcr.io/k8s-minikube/kicbase:  348.00 MiB / 348.00 MiB  100.00% 10.00 MiB 
    > gcr.io/k8s-minikube/kicbase:  0 B [________________________] ?% ? p/s 27s
🔥  docker container (CPUs=2, Memory=2200MB) を作成しています...
🐳  Docker 20.10.17 で Kubernetes v1.24.3 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ コントロールプレーンを起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass
🏄  終了しました!kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました

Contextの切り替え

複数のk8sクラスタを利用している場合はk8sのContextを切り替える必要がある。

$ kubectl config use-context minikube
Switched to context "minikube".

ノードの確認

minikubeがk8sノードとして認識されている。

$ kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
minikube   Ready    control-plane   4m41s   v1.24.3

minikubeクラスタの削除

$ minikube delete
🔥  docker の「minikube」を削除しています...
🔥  コンテナー「minikube」を削除しています...
🔥  /Users/yuhi-sa/.minikube/machines/minikube を削除しています...
💀  クラスター「minikube」の全てのトレースを削除しました。

参考

Tags: