本記事の内容
Kubernetes(K8s)を学習するために、AWS Lightsail (メモリ1GB)に「MicroK8s」をインストールしてみました。
MicroK8s - Zero-ops Kubernetes for developers, edge and IoT
結論から言うと、1GBのインスタンスはMicroK8sにはスペック不足でした。
まず、最新版のv1.20はインストールに失敗しました。起動に時間がかかり、タイムアウトしているようでした。
また、v1.19はインストールできましたが、K8sの起動を待機するmicrok8s status --wait-ready
が40分待っても完了しませんでした。
その間、CPU使用率は90%以上で、バーストキャパシティーを消費し続けます。
v1.18はmicrok8s status --wait-ready
が約6分で完了し、CPU使用率も持続可能ゾーンに収まるため、何とか使えそうです。
ただ、せっかく勉強するなら最新版を使いたいので、私は古いノートPC(Core 2 Duo、メモリ4GB)にUbuntuを入れて学習することにしました。
Windows 10の動作にはちょっと厳しく眠っていたPCですが、Ubuntu + MicroK8sの学習には十分なスペックです。
※本格的に学習するなら、ラズパイ4(メモリ4GB or 8GB)を3台用意して、クラスター組むのが理想な気がします。
今回は失敗談に近いですが、参考になればと思い投稿しました。
前提条件
- Lightsailインスタンス(Linux)を作成済み。
本記事は、Lightsailの5ドルプラン(メモリ1GB)、CentOS バージョン 7.9.2009 で作成。
構築手順は下記記事にまとめています。
※下記記事では3.5ドルプラン(メモリ512MB)ですが、本記事の内容を試す場合は最低でも5ドルプラン(メモリ1GB)を選択してください。
AWS Lightsail 入門1 インスタンス作成
AWS Lightsail 入門2 SSH接続(RLogin)
AWS Lightsail 入門3 基本設定(管理画面)
AWS Lightsail 入門4 基本設定(CentOS 7)
インストール手順
1. snapd のインストール
EPELリポジトリ追加
$ sudo yum install -y epel-release
snapdインストール
$ sudo yum install -y snapd
snapd有効化
$ sudo systemctl enable --now snapd.socket
シンボリックリンク作成
$ sudo ln -s /var/lib/snapd/snap /snap
一度ログアウト後、再ログインする。
2. MicroK8s のインストール
v1.18を指定してインストール。
$ sudo snap install microk8s --classic --channel=1.18/stable
3. MicroK8s の設定
権限設定
$ sudo usermod -a -G microk8s $USER
$ sudo chown -f -R $USER ~/.kube
一度ログアウト後、再ログインする。
Kubernetesの起動待機
下記コマンドを入力し、Kubernetesの起動を待つ。
※Lightsail 1GBでは約6分かかった。
$ microk8s status --wait-ready
microk8s is running
addons:
cilium: disabled
dashboard: disabled
dns: disabled
fluentd: disabled
gpu: disabled
helm: disabled
helm3: disabled
ingress: disabled
istio: disabled
jaeger: disabled
knative: disabled
kubeflow: disabled
linkerd: disabled
metallb: disabled
metrics-server: disabled
prometheus: disabled
rbac: disabled
registry: disabled
storage: disabled
インストール後のリソース確認
Lightsail管理画面で確認したところ、CPU使用率は約6.7%で安定し、持続可能ゾーンに収まりました。
ただし、拡張機能は全て無効で、他のアプリは未起動でこの状態なので、実用にはちょっと厳しいかもしれません。
v1.18のメモリ使用量は下記の通りです。
$ free -h
total used free shared buff/cache available
Mem: 989M 448M 72M 6.7M 468M 392M
Swap: 2.0G 186M 1.8G
参考までに、ノートPC(Ubuntu、メモリ4GB)でv1.20を起動した際のメモリ使用量です。
MicroK8sの起動のみで1.2GB使用しており、Lightsail 1GBで動かないのが納得できました。
※拡張機能の「ha-cluster」がデフォルトで有効になっています。
$ free -h
total used free shared buff/cache available
Mem: 3.8Gi 1.2Gi 395Mi 96Mi 2.1Gi 2.3Gi
Swap: 2.0Gi 0B 2.0Gi
$ microk8s status --wait-ready
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
ha-cluster # Configure high availability on the current node
disabled:
ambassador # Ambassador API Gateway and Ingress
cilium # SDN, fast with full network policy
dashboard # The Kubernetes dashboard
dns # CoreDNS
fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring
gpu # Automatic enablement of Nvidia CUDA
helm # Helm 2 - the package manager for Kubernetes
helm3 # Helm 3 - Kubernetes package manager
host-access # Allow Pods connecting to Host services smoothly
ingress # Ingress controller for external access
istio # Core Istio service mesh services
jaeger # Kubernetes Jaeger operator with its simple config
keda # Kubernetes-based Event Driven Autoscaling
knative # The Knative framework on Kubernetes.
kubeflow # Kubeflow for easy ML deployments
linkerd # Linkerd is a service mesh for Kubernetes and other frameworks
metallb # Loadbalancer for your Kubernetes cluster
metrics-server # K8s Metrics Server for API access to service metrics
multus # Multus CNI enables attaching multiple network interfaces to pods
portainer # Portainer UI for your Kubernetes cluster
prometheus # Prometheus operator for monitoring and logging
rbac # Role-Based Access Control for authorisation
registry # Private image registry exposed on localhost:32000
storage # Storage class; allocates storage from host directory
traefik # traefik Ingress controller for external access
MicroK8s のアンインストール方法
下記コマンドで簡単に行えます。
$ sudo snap remove microk8s
まとめ
「MicroK8s」の名前から、「とても小さなK8s → 低スペックでも動く!」とイメージしていましたが、誤りでした。
MicroK8sはKubernetesの仕様を満たし、最小限ではあるものの本番運用にも耐えうる可用性を持っているようです。
また、バージョンによって必要なスペックが大きく異なるため、過去の事例を参考にする場合は要注意です。
特に、v1.18、v1.19、v1.20の間には、大きな壁が存在します。(v1.19から追加されたHAクラスターの影響が大きそうです)
公式サイトでは、推奨メモリは4GBとなっています。
MicroK8sの導入作業自体はとても簡単なので、必要スペックを満たす環境を用意できれば、学習には良いと思います。
もしも使っていないPCがあれば、Ubuntuをインストールし、その上にMicroK8sをインストールするのが簡単です。(Ubuntuはsnapが導入済み)
本記事が、これからK8sを学習する方の参考になれば幸いです。