🏡
Azure の仮想マシンに minikube を使って Kubernetes 構築
この文書は何か
手軽に自前の Kubernetes クラスタを構築したいけど、ローカル環境だとスペックの問題で辛い...
そこで、Azure の無料クレジット枠を使い仮想マシン(Ubuntu20)を立てて、その中に minikube でクラスタ構築を行ったのでその方法を紹介します。
実施手順
Azure で VM(Ubuntu)作成
- まずは Azure にアカウントを作ります
- リソースの作成 > 仮想マシンの作成
- 基本設定
- サブスクリプション:
無料枠を選択(例:Azure subscription 1)
- インスタンスの詳細 ※ 一例です
- 仮想マシン名:
azure-kubernetes-zenn
- 地域:
(Asia Pacific)Japan East
- 可用性オプション:
インフラストラクチャ冗長は必要ありません
- イメージ:
Ubuntu Server 20.04 LTS - Gen2(利用可能な無料サービス)
- 仮想マシン名:
- サイズ:
Standard_D2s_v3 - 2 vcpu 数、8 GiB のメモリ
現状これで足りてます - 管理者アカウント
- 認証の種類:
SSH 公開キー
- ユーザー名:
azureuser-zenn
- キーの組名:
azure-kubernetes-key.pem
- 認証の種類:
- 受信ポートを選択:
HTTP(80), HTTPS(443), SSH(22)
- サブスクリプション:
- ディスク:
デフォルト設定にしました
- ネットワーク:
- VM が削除されたときにパブリック IP と NIC を削除する:
チェックしました
- VM が削除されたときにパブリック IP と NIC を削除する:
- 管理 / Monitoring / 詳細 / タグ :
デフォルト設定にしました
- 基本設定
- 上記設定で、仮想マシンの
作成
ボタンを押下 => 仮想マシンがデプロイされます- SSH キーペアはローカルにダウンロードしておきます
Ubuntu の環境整備
作成した Ubuntu のパブリック IP に ssh して、CLI 上で minikube 環境を整備していきます。
- Ubuntu へ SSH
❯ chmod 400 <秘密キーのパス> ❯ ssh -i <秘密キーのパス> <上で作成したユーザー名>@<パブリック IP> azureuser-zenn@azure-kubernetes-zenn:~$ # Ubuntu に SSH できました
- Ubuntu に Docker Engine をインストールしていきます
docker docks: https://docs.docker.com/engine/install/ubuntu/ に従いコマンド実行# Update the apt package index and install packages to allow apt to use a repository over HTTPS: ❯ sudo apt-get update ❯ sudo apt-get install ca-certificates curl gnupg lsb-release # Add Docker’s official GPG key: ❯ sudo mkdir -p /etc/apt/keyrings ❯ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Use the following command to set up the repository: ❯ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker Engine ❯ sudo apt-get update ❯ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Y/n で Y を選択 # List the versions available in your repo: ❯ apt-cache madison docker-ce # Install a specific version using the version string from the second column, for example, 5:20.10.16~3-0~ubuntu-jammy ❯ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin # Verify that Docker Engine is installed correctly ❯ sudo service docker start ❯ docker version # docker が入りました。次に一般 User Group に追加していきます Client: Docker Engine - Community Version: 20.10.18 API version: 1.41 Go version: go1.18.6 Git commit: b40c2f6 Built: Thu Sep 8 23:11:45 2022 OS/Arch: linux/amd64 Context: default Experimental: true Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied
- 一般ユーザーに docker を使えるように設定
❯ sudo groupadd docker ❯ sudo usermod -g docker azureuser-zenn ❯ sudo /bin/systemctl restart docker.service ❯ exit # 再度ログインする # 確認 ❯ docker info # permission error が出なければ OK
-
minikube
のインストールと起動❯ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 ❯ chmod +x minikube ❯ sudo mkdir -p /usr/local/bin/ ❯ sudo install minikube /usr/local/bin/ ❯ minikube start ❯ minikube status # minikube が起動しました minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured
- kubectl インストールと実行
❯ curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" ❯ chmod +x ./kubectl ❯ sudo mv ./kubectl /usr/local/bin/kubectl ❯ kubectl get pod # kubernetes に接続できました No resources found in default namespace.
ローカルから Ubuntu の Kubernetes にアクセスする
こちら が参考になりました。
- minikubeapi-server の認証情報を控える
@ Ubuntu
❯ kubectl config view # certificate-authority -> ca-zenn.crt # client-certificate -> client-zenn.crt # client-key -> client-zenn.key # を確認し Local 環境に控える。server: https://192.168.49.2:8443 も使うのでメモ
- minikube クラスタ情報の設定
@ ローカル環境
❯ kubectl config set-context \ azure-kubernetes-zenn \ --namespace=default \ --cluster=minikube-zenn \ --user=minikube-zenn ❯ kubectl config set-cluster minikube-zenn \ --server=https://127.0.0.1:8443 \ --certificate-authority=ca-zenn.crt ❯ 認証情報の設定 $ kubectl config set-credentials \ minikube-zenn \ --client-certificate=client-zenn.crt \ --client-key=client-zenn.key
- context のスイッチ
@ ローカル環境
❯ kubectl config use-context azure-kubernetes-zenn
- Ubuntu の Public IP を踏み台にして、minikube の kubeapi-server に接続
❯ ssh -L 8443:192.168.49.2:8443 -i <秘密キーのパス> <上で作成したユーザー名>@<パブリック ID> # 別端末で kubectl コマンドを実行するとアクセスできます ❯ kubectl get po No resources found in default namespace.
(豆知識)Ubuntu 起動時に minikube を実行する
Azure の VM は使用するときのみ起動した方がコストに優しいので、起動時に minikube を自動実行するように設定しておくと便利です。
# 以下のように記述
❯ cat vi /etc/rc.local
#!/bin/sh
sudo -u <ユーザー名> minikube start
# 権限変更
❯ sudo chmod u+x /etc/rc.local
❯ sudo chmod 755 /etc/rc.local
# 以下のように記述
❯ cat /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local
[Service]
ExecStart=/etc/rc.local
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
# 自動起動設定
❯ sudo systemctl enable rc-local.service
これで、再起動しても起動後 minikube が自動で実行されます。
あとは、上にも書いた portforward をして、ローカルから Azure インスタンスの Kubernetes を操作することができます。
最後に
自分の Kubernetes クラスタを手軽に作りたいことがよくあると思いますが、その一案として Azure 仮想マシンに minikube で構築する方法
をご紹介しました。
それではみなさん、良い Kubernetes ライフを!
Discussion