🐈

MicroK8sを使ってみたら意外と便利であったというお話し

2023/12/03に公開

この記事はYAMAPアドベントカレンダー2日目の記事です。

https://qiita.com/advent-calendar/2023/yamap-engineers

はじめに

はじめまして。YAMAPでインフラエンジニアをやっております甲斐と申します。
エンジニアの傍ら、熊本県の南阿蘇村にてお米もBuild and Deployしている百姓エンジニアです。
最近noteを始めましたので、よろしければそちらも御覧ください。

https://note.com/bocci_bocci

さて本題ですが、私は普段Macで開発を行っており、ローカルでKubernetes環境を構築する際はDocker DesktopのKubernetesを使用してきました。
特に不満を感じたことはなかったのですが、先日自宅サーバのUbuntuにMicroK8sを入れてみたところ意外と便利であったので、今回はそのお話を書きたいと思います。

MicroK8sとは

MicroK8sとは、ローカルで実行するように設計された軽量のKubernetesディストリビューションです。
Ubuntuの開発元として有名なCanonical社によって開発されています。
同様なものとして、minikubeやK3sなどがあります。
本家サイトに比較記事が掲載されていますので、ご興味ある方はご参照ください。

インストール

今回のローカル環境はMacになります。Macのバージョンは以下のとおりです。

Linux/WindowsなどMac以外な方は本家サイトのインストールページをご参照ください。

また、最初に書いておくと、Mac環境でうまくインストールできないなどありましたら以下の記事が参考になりますのでご参照ください。

それではインストールしていきたいと思います。MacではHomebrewよりインストールできます。

% brew install ubuntu/microk8s/microk8s

次に、microk8s installコマンドを実行してMicroK8sクラスタ環境を構築します。
この際、multipassをインストールするか聞かれれる場合は一緒に入れておきます。
「multipassって何?」と思われた方は、こちらなどをご参照ください。

% microk8s install
Support for 'multipass' needs to be set up. Would you like to do that now? [y/N]: y
:

MicroK8sクラスタのコンフィグファイルを作成します。
今回は既存環境 (Docker Desktop) とは分けて管理したかったので、作業用ディレクトリ (microk8s-demo) を作成してその中で実行します。

% mkdir microk8s-demo
% cd microk8s-demo
% mkdir .kube
% microk8s config > .kube/config
% export KUBECONFIG=$PWD/.kube/config

MicroK8sが正常に起動していることを確認できればインストールは完了となります。

% microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
:

MicroK8sの使い方

MicroK8sの使い方はとてもシンプルです。
以下にいくつかコマンドを紹介します。

  • クラスタの作成
% microk8s install
  • クラスタの削除
% microk8s uninstall
  • クラスタの状態
% microk8s status
  • クラスタの開始
% microk8s start
  • クラスタの停止
% microk8s stop
  • kubectl
% microk8s kubectl

その他のオプションは以下の通りです。

% microk8s --help
Usage: microk8s [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  install         Installs MicroK8s. Use --cpu, --mem, --disk, --channel, and --image to configure your setup.
  uninstall       Removes MicroK8s
  add-node        Adds a node to a cluster
  addons
  config          Print the kubeconfig
  ctr             The containerd client
  dashboard-proxy Enable the Kubernetes dashboard and proxy to host
  dbctl           Backup and restore the Kubernetes datastore
  disable         Disables running add-ons
  enable          Enables useful add-ons
  helm            The helm client
  helm3           The helm3 client
  images
  inspect         Checks the cluster and gathers logs
  istioctl        The istio client
  join            Joins this instance as a node to a cluster
  kubectl         The kubernetes client
  leave           Disconnects this node from any cluster it has joined
  linkerd         The linkerd client
  refresh-certs   Refresh the CA certificates in this deployment
  remove-node     Removes a node from the cluster
  reset           Cleans the cluster from all workloads
  start           Starts the kubernetes cluster
  status          Displays the status of the cluster
  stop            Stops the kubernetes cluster
  version

豊富なアドオン

MicroK8sの便利なところはあらかじめアドオンが豊富に用意されているところです

もちろん、アドオンを使わずとも自分でマニフェストを用意したり、Helmからインストールしたりするれば出来るのですが、はっきり言って面倒です。
MicroK8sではよく使うコンポーネントはあらかじめアドオンという形で用意されているのでコマンドひとつでインストールできます。

例えば、自分でローカル環境にK8sダッシュボードを作成しようとすると以下のような手順を踏むことになるでしょう。

  1. ダッシュボードUIのデプロイ
% kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
  1. サービスアカウントの作成
% cat <<. | kubectl apply -f-
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
.
  1. ClusterRoleBindingの作成
% cat <<. | kubectl apply -f-
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
.
  1. トークンの作成
% kubectl -n kubernetes-dashboard create token admin-user
eyJhbGciOiJSUzI1NiIsImtpZCI6IjZpRTBzQ2hiZ1RHUVdIaEJSRUVVQ1FEWG10NEg2SnBFcl9nNnpqckFUeDAifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzAxNTQyOTAyLCJpYXQiOjE3MDE1MzkzMDIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiZGIzN2QxYTYtMGE1Ni00ZDFhLTkwZjQtZWYyZjlhOWY4YWY2In19LCJuYmYiOjE3MDE1MzkzMDIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.MBs3Gi7Nx7SJu-ygvjTBfEFRQtJiFaPct4a0-K3I1I9gOAo4xWMek5saTQhRRHZiFsIi3kdHtJKxnA9-hg59TNkO_4Ti97wNWspLsWLjpyVZtDoh_waByxloRT6FIQQa0Nf1UaNb6rrb7hhIQomMeNQ6CvIRydpzI7nnneAWygF17faxb5Nc6KnhUGeRqBX1TwTa6g0AYTpDbHNLzxy1FyBIn4IBF3ByGLE0q2PPB_Tc7_uPYcPz6S-wCY7COY9qG140ksYbI3c875yMD0hebizYCPw-iizaNntQ3_1MW5FqMxGazAwg6NEZHoa5L7dWjGHE4Ac-l216FakBZcmXdA
  1. proxyの起動
% kubectl proxy
  1. ログイン (ログイン画面でトークンを入力)
% oepn http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

ですが、MicroK8sの場合は以下のようにコマンドを打つだけで出来ます。

  1. ダッシュボードの起動
% microk8s dashboard-proxy
Checking if Dashboard is running.
Infer repository core for addon dashboard
Waiting for Dashboard to come up.
Dashboard will be available at https://192.168.64.2:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIsImtpZCI6IlBWaE1MYUtWWWZQTEFRRi1kSkNpOXpvRWxINDd2c25yUUNMR2xJcVBtZGcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJtaWNyb2s4cy1kYXNoYm9hcmQtdG9rZW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNlZTEzNGM4LTUyMmYtNDg2Zi1hMGY3LWU2NjVlYmM0Y2VlYyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpkZWZhdWx0In0.oB4oHVIS8gcPM8xq_M1OqfnTmu4N3MgZFy15DHLtLi3w4JGCGtDHJ8xb666qh2ezYsfzAeYzm1xyWJK40ke4gS2pFSKruzWkhxX0fRj-S8CiQXFJHa5S_pdbIEf6ggKpk8sj_--Dl9Uy2V5iE4ztOPaltkzQP-r6qxo1nWoiDLWYTRIld35XOFgZCaUsSq7P9x9QPpK_x2P5cU8lOb2whjlBRppslrUqAy_XBqvBvPrn3XgAOI-J2NLJ5uECEfwlMzeCLTQjkF7hzLxfUxBTum4g_oc_hcohcMEEnfJqw95UC57yOhGVb-FDyxBpjDkX4FpeoncG44h69usyZYiaoQ
Forwarding from 0.0.0.0:10443 -> 8443
  1. ログイン (ログイン画面でUse the following token to login:のトークンを入力)
% open https://192.168.64.2:10443

簡単ですね!

後片付け

確認が終わったらMicroK8sクラスタ環境を削除します。

% microk8s uninstall

MicroK8s自体を削除したい場合は以下をアンインストールしてください。

% brew uninstall ubuntu/microk8s/microk8s
% brew uninstall multipass

まとめ

MicroK8sの便利さが少しお分かりいただけましたでしょうか?
ローカルでKubernetes環境を構築する方で、まだMicroK8sを触ったことがなければこの機会にぜひ一度お試しいただければと思います。
こちらの情報がどなたかのお役に立てれば幸いです。

YAMAP テックブログ

Discussion