microk8sを使ってkubernetesクラスタを構築してみる + metallbアドオンお試し
microk8sを用いてkubernetesクラスタを構築する
テクノロジーコラム
- 2020年09月04日公開
microk8sを使ってkubernetesクラスタを構築してみる + metallbアドオンお試し
はじめに
NTTテクノクロスではkuberenetesの検証やkubernetes構築支援、アプリケーションのkubernetes移行支援などを行っています。
アプリケーション開発をしていく中で、アプリケーションの管理をkubernetes上で行いたいが、kubernetes構築のハードルが高く、なかなか手が出せないといったことはありますか。
そういった場合、microk8sを用いると簡単に単ノード構成のkubernetesを構築することができます。加えて、microk8sはkubernetesクラスタも構築することができます。
今回はこの「microk8sを用いたkubernetesクラスタ構築」を試してみます。
また、microk8sのadd-onとして提供されている「metallb」も使ってみます。
metallbはkubernetes上のサービスにExternal-IP(外部IP)でアクセスできるようにする機能です。
kubernetesでアプリケーションを管理する場合、通常kuberentesのネットワークの上でアプリケーションが動作するため、kubernetes上のアプリケーションに外部から接続することはできません。
アプリケーションに接続する方法としてサービスをNodeportで起動し、ホストのポートと紐づけそこにhaproxy経由でアクセスさせるといった方法がありますが手間がかかってしまいます。
しかし、metallbを用いればkubernetesのサービスをLoad Balancerで起動するだけで、metallbが外部から接続可能なExternal IPを割り振り外部からアクセスできるようになります。
今回は以下の構成でkubernetesクラスタを構築します。
今回の構成について説明します。
まず、今回のkubernetesクラスタではmasterノード1台、workerノード1台のクラスタを構築します。マシンのOSはUbuntu 20.04を使用しました。
masterノード内のpodから説明します。
黄緑色の枠内で囲んだpodはkubernetes構成する基本的なpodです。これらはmicrok8sを用いると自動で構築されます。
次にオレンジ色で囲んだpodはmetallbを構成するpodです。これらも後述しますが、microk8sを用いる場合はコマンドを一つ入力することで構築されます。
masterノードで動作するpodは以上です。
次に、workerノードのpodについて説明します。
黄色い枠で囲んだpodはnginxのpodです。これはkubernetes上で動作するアプリケーションとして利用します。
metallbで外部から接続できるExternal IPを付与して接続確認を行うために利用します。
microk8sでkubernetesを構築する
microk8sのインストールする
microk8sを用いた単ノードのkubernetesはインストールが完了した時点で構築が完了します。
microk8sの最新版をインストールする場合は以下コマンドを実行します。インストールはsnapコマンドを利用を推奨されているため、snapコマンドを用います。
1$ sudo snap install microk8s --classic
microk8sコマンドの権限設定
microk8sではroot権限を必要とするコマンドをシームレスに実行できるようmicrok8sグループを作成しています。
任意のユーザをmicrok8sグループに追加します。
xxxxxxxxxx11$ sudo usermod -a -G microk8s $USER
また.kube配下のキャッシュディレクトリにアクセスできるよう権限を変更します。
xxxxxxxxxx11$ sudo chown -f -R $USER ~/.kube
権限の変更を適用するために、セッションの更新を行います。
kubernetesの動作確認
kubernetesが動作しているかをkubectlコマンドで確認してみます。
microk8sで構築したkubernetesでkubectlコマンドを使うには「microk8s kubectl」とする必要があります。
xxxxxxxxxx31$ microk8s kubectl get nodes2NAME STATUS ROLES AGE VERSION3microk8s Ready <none> 2m29s v1.18.0
これで単ノードのkubernetesが構築ができました。
microk8sでkubernetesクラスタを構築する
次はkubernetesクラスタを構築していきます。
クラスタ構築はmicrok8sのコマンドを実行することで簡単に行えます。
準備
まず、microk8sがインストールされたマシンを複数台用意しましょう。
次にmasterノードとしたいマシン上で「microk8s add-node」コマンドを実行します。
このコマンドを実行することで、workerノードをmasterノードにjoinするためのコマンドが出力されます。
以下は実行例です。
xxxxxxxxxx21$ microk8s add-node2Join node with: microk8s join 192.168.10.2:25000/ZMlMMIoIJfdtfnDpvERBUIknDaqKlCqZ
クラスタリング
workerノードとしたいマシンで先ほど出力されたjoinのコマンドを実行します。
xxxxxxxxxx11microk8s join 192.168.10.2:25000/ZMlMMIoIJfdtfnDpvERBUIknDaqKlCqZ
masterノードでクラスタにjoinされていることを確認します。
xxxxxxxxxx41$ microk8s kubectl get node2NAME STATUS ROLES AGE VERSION3master Ready <none> 13m v1.18.04worker Ready <none> 68s v1.18.0
これでkubernetesクラスタの構築ができました。
microk8sのadd-onを使ってみる
add-onとは
microk8sでは複数のadd-onが実装されておりコマンドを実行することで簡単に利用することができます。
利用できるアドオンは「microk8s status」で確認することができます。
以下は実行例です。
xxxxxxxxxx221$ microk8s status --wait-ready2microk8s is running3addons:4cilium: disabled5dashboard: disabled6dns: disabled7fluentd: disabled8gpu: disabled9helm: disabled10helm3: disabled11ingress: disabled12istio: disabled13jaeger: disabled14knative: disabled15kubeflow: disabled16linkerd: disabled17metallb: disabled18metrics-server: disabled19prometheus: disabled20rbac: disabled21registry: disabled22storage: disabled
今回はkubernetes上のサービスに対し外部から接続できるExternal IPアドレスを付与できるmetallbを使ってみます。
metallbを有効にする
add-onを有効化するためには「microk8s enable <アドオン名>」のコマンドを実行するだけです。
metallbを有効化してみます。
構成図では以下部分となります。
有効化する際にサービスに付与するIPアドレスのレンジを指定する必要があります。
設定するネットワークはmetallbで利用したいものを入力してください。
今回はクラスタを構築したネットワークと同じネットワークを指定します
xxxxxxxxxx31$ microk8s enable metallb2Enabling MetalLB3Enter the IP address range (e.g., 10.64.140.43-10.64.140.49):192.168.10.20-192.168.10.30
metallbが有効化されたことによりmetallbを構成するpodやサービスがデプロイされます。
xxxxxxxxxx81$ microk8s kubectl get service,pod -A2NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE3default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 23h45NAMESPACE NAME READY STATUS RESTARTS AGE6metallb-system pod/controller-5f98465b6b-nrp29 1/1 Running 0 2m39s7metallb-system pod/speaker-b76zw 1/1 Running 0 2m39s8metallb-system pod/speaker-vhz8q 1/1 Running 0 2m39s
nginxのコンテナを作成し外部から接続する
metallbの機能を試すために簡単なnginxコンテナをデプロイし、外部からアクセスしてみます。
以下の内容でnginxのマニュフェストファイルを作成し、kubernetesにデプロイします。
構成図では以下部分となります。
xxxxxxxxxx341---2apiVersion: apps/v13kind: Deployment4metadata:5name: nginx-deployment6spec:7selector:8matchLabels:9app: nginx10replicas: 311template:12metadata:13labels:14app: nginx15spec:16containers:17- name: nginx18image: nginx:1.7.919ports:20- containerPort: 802122---2324apiVersion: v125kind: Service26metadata:27name: nginx28spec:29ports:30- name: nginx31port: 8032selector:33app: nginx34type: LoadBalancer
作成したマニュフェストファイルを使用し、k8sにデプロイします。
xxxxxxxxxx31$ microk8s kubectl apply -f nginx.yaml2deployment.apps/nginx-deployment created3service/nginx created
デプロイされたことを確認します。
xxxxxxxxxx121$ microk8s kubectl get service,pod2NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR3default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 8d <none>4default service/nginx LoadBalancer 10.152.183.188 192.168.10.21 80:31180/TCP 116m app=nginx56NAMESPACE NAME READY STATUS RESTARTS AGE7default pod/nginx-deployment-5bf87f5f59-frlzt 1/1 Running 0 7d2h8default pod/nginx-deployment-5bf87f5f59-rt2rv 1/1 Running 0 7d2h9default pod/nginx-deployment-5bf87f5f59-zvg4v 1/1 Running 0 7d2h10metallb-system pod/controller-5f98465b6b-lbpjr 1/1 Running 0 8d11metallb-system pod/speaker-75phx 1/1 Running 0 8d12metallb-system pod/speaker-bzgbz 1/1 Running 0 8d
EIPを経由してnginxに接続できることを確認します。
x1$ curl 192.168.10.21:8023<!DOCTYPE html>4<html>5<head>6<title>Welcome to nginx!</title>7<style>8body {9width: 35em;10margin: 0 auto;11font-family: Tahoma, Verdana, Arial, sans-serif;12}13</style>14</head>15<body>16<h1>Welcome to nginx!</h1>17<p>If you see this page, the nginx web server is successfully installed and18working. Further configuration is required.</p>192021<p>For online documentation and support please refer to22<a href="http://nginx.org/">nginx.org</a>.<br/>23Commercial support is available at24<a href="http://nginx.com/">nginx.com</a>.</p>252627<p><em>Thank you for using nginx.</em></p>2829</body>30</html>
終わりに
今回はmicrok8sを用いてkubernetesクラスタを構築しました。
microk8sはインストールだけで単ノードのkubernetesを構築することができ、
kubernetesクラスタを構築する際は、masterノードで「microk8s add-node」コマンドを実行し、workerノードで「microk8s join」コマンドを実行するだけで簡単に構築することができます。
そのため、kubernetesを用いたアプリケーションの開発を行いたいけれど、
kubernetesの構築はちょっと......といった方にとても向いています。
また、今回はアドオンのうちmetallbのみを使ってみました、そのほかにも多くのアドオンが提供されています。
これらのアドオンも「microk8s enable」コマンド一つを実行するだけで利用することができるため、簡単に試すことができます。ぜひお試しください。
NTTテクノクロスではコミュニティの最新動向もキャッチアップしつつ、これまでに培ってきたkubernetes構築・運用のノウハウを活かした幅広いソリューションをご用意しております。 Ubuntu/OpenStack/OSS製品について何かお困りのことがございましたら、是非お声掛けください。
OSSクラウド基盤トータルサービス
※NTTテクノクロスではUbuntuの開発元であるCanonical社の商用サポート日本語窓口業務も行っています。
参考サイト
MicroK8s quick start guide https://microk8s.io/docs/
Multinode microk8s https://microk8s.io/docs/clustering


