前回次のような記事を書きました。
今回はマルチノードを試してみます。というのも、公式サイトの一覧に「Clustering (BETA)」という記述があるのに気がついたからです。
microk8sはいろいろな環境で小さなK8sを動かすために使っていましたが、これで複数台構成ができるなら、あまりOSを汚さないでも済むSnapパッケージを使ってちょっとしたKubernetes環境をかんたんにセットアップできると色々と楽ですから。
マルチノードでmicrok8sを使う方法の概要
やることをざっと書くと次のとおりです。
- microk8sを全ノードにインストールする
- 必要に応じてadd-onを追加する
- 「microk8s.add-node」コマンドを1台目のノードで実行してコマンドとエンドポイントを確認
- 2台目以降のノードで「microk8s.join」から始まるコマンドを実行
次で手順を示します。
マルチノードでmicrok8sを使う手順
microk8sをインストール(microk8s 1.16.2時点)
全ノードにmicrok8sをインストールします。
$ sudo apt update && sudo apt upgrade $ sudo snap install microk8s --classic --channel=1.16/stable
microk8s.*
コマンドをユーザー権限でアクセスしたい場合は任意のユーザーをmicrok8sグループに追加します。
コマンド実行後、ログインし直します。
$ sudo usermod -a -G microk8s ubuntu
必要なアドオンを有効にする
microk8sのアドオンのうち、必要なものを有効にします。
$ microk8s.enable dashboard dns storage
エンドポイントを確認
1台目のノードでエンドポイント&クレデンシャルを確認します。
$ microk8s.add-node Join node with: microk8s.join 172.17.28.12:25000/xzRkaTLdSTrVHfGgAuFzKZeKxWXbMmKw If the node you are adding is not reachable through the default interface you can use one of the following: microk8s.join 172.17.28.12:25000/xzRkaTLdSTrVHfGgAuFzKZeKxWXbMmKw microk8s.join 10.1.56.0:25000/xzRkaTLdSTrVHfGgAuFzKZeKxWXbMmKw microk8s.join 10.1.56.1:25000/xzRkaTLdSTrVHfGgAuFzKZeKxWXbMmKw
追加ノードでmicrok8s.joinを実行
追加する方のノードでmicrok8s.join
から始まるコマンドを実行します。
$ microk8s.join 172.17.28.12:25000/xzRkaTLdSTrVHfGgAuFzKZeKxWXbMmKw
1台目の方で見ると、ノードが追加されたのが確認できます。
$ microk8s.kubectl get no NAME STATUS ROLES AGE VERSION node1 Ready <none> 4m32s v1.16.2 node2 Ready <none> 33s v1.16.2
つかってみる
次のような内容のnginx.yaml
を作成します。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myclaim labels: app: myclaim spec: storageClassName: microk8s-hostpath accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: nginxapp1 spec: replicas: 1 selector: matchLabels: app: nginxapp1 template: metadata: labels: app: nginxapp1 spec: containers: - name: nginxapp1 image: nginx:alpine ports: - containerPort: 80 volumeMounts: - mountPath: "/usr/share/nginx/html/" name: nginxapp1 volumes: - name: nginxapp1 persistentVolumeClaim: claimName: myclaim --- apiVersion: v1 kind: Service metadata: name: nginxapp1-nodeport labels: app: nginxapp1 spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30080 selector: app: nginxapp1
Podを作成してみます。
$ microk8s.kubectl apply -f nginx.yaml $ microk8s.kubectl get -f nginx.yaml NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/myclaim Bound pvc-dea119fe-693c-4ff5-932b-2dd9f131981e 1Gi RWO microk8s-hostpath 23m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginxapp1 1/1 1 1 41s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginxapp1-nodeport NodePort 10.152.183.213 <none> 80:30080/TCP 23m
追加したノードでmicrok8s.statusを実行すると次のような結果になります。クラスターに加えたことで、加えたノード上からはkubectl
コマンドによる操作は受け付けません。
$ microk8s.status This MicroK8s deployment is acting as a node in a cluster. Please use the microk8s.status on the master. $ microk8s.kubectl get no This MicroK8s deployment is acting as a node in a cluster. Please use the microk8s.kubectl on the master.