haku-maiのブログ

インフラエンジニアですが、アプリも作ります。

【RKE2/rancher2.6.1】rancherからRKE2クラスターを構築する(Tech Preview - RKE2 Cluster Provisioning)

本記事で行うこと

  • rancherからRKE2クラスターを構築する ※ Tech Preview であることに注意してください。

本記事で行わないこと

  • rancherの構築 ※rancherの構築は以下を参照ください。

n-guitar.hatenablog.com

モチベーション

  • 自宅サーバが増えたので、single構成だったk3sからControlPlane、Worker、rancher、dns serverの4台構成で、改めてkubernetes環境を作りたかったため。
  • せっかくなのでRKE2を使ってみたかったため。

環境

  • 基本構成は以下の通り。
種別 HW OS CPU MEM
DNS raspberry pi 3 model b+ Ubuntu 20.04.3 LTS Cortex-A53 4コア 1GB
rancher server (2.6.1) GMK NucBox Ubuntu 20.04.3 LTS IntelJ4125 4コア 8GB
control plane, etcd, worker GMK NucBox Ubuntu 20.04.3 LTS IntelJ4125 4コア 8GB
worker nuc 11世代 (NUC11PABi3) Ubuntu 20.04.3 LTS Core i3-1115G4 2コア(4スレッド) 32GB(カスタマイズ)

RKE2とは

アーキテクチャ

f:id:n-guitar:20211017180919p:plain:w600

  • くわえて、rancher側のアーキテクチャが以下の通りで、RKE2側にrancherと通信するCluster AgentのPodがデプロイされます。
  • このCluster AgentからrancherのDNSを引ける必要があるので注意が必要です。

f:id:n-guitar:20211017181236p:plain:w600

  • 詳しくは公式ドキュメントを参照ください。

RKE2 - Rancher's Next Generation Kubernetes Distribution

rancherからRKE2クラスターの雛形作成

  • rancherの画面からRKE2クラスターの雛形を作ります

  • 左上のハンバーガーメニューから GLOBAL APPSCluster Managementを選択し、Createします。

f:id:n-guitar:20211017175849p:plain:w600

  • RKE2/K3sのtoggleを選択すると、Use existing nodes and create a cluster using RKE2/K3sのTech Previewが選択できるようになります。
  • Customを選択します。

f:id:n-guitar:20211017180027p:plain:w600

Cluster Configuration
  • Clusterの初期設定をします。
Basics
  • RKE2のバージョン、NWプラグイン、セキュリティを選択します。
  • NWプラグインはcanalを使いたいのでcanalにします。
  • CISは使ってみたいので、v1.6を選択します。
  • System Servicesはすべて利用したいのでデフォルトとします。

f:id:n-guitar:20211017180333p:plain:w600

  • 追記
  • CISの基準を満たしていないと、Cluster Provisioningに失敗します。
  • なのでCISをOFFにしてProvisioningします。

f:id:n-guitar:20211017200931p:plain:w600

  • NWプラグインについては以下のブログがわかりやすいです。

Comparing Kubernetes Networking Providers

  • CIS v1.6については以下を参照ください。

CIS 1.6 Self-Assessment Guide - RKE2 - Rancher's Next Generation Kubernetes Distribution

  • Basicsはそれぞれ、以下の選択肢を選べます。

f:id:n-guitar:20211017180400p:plain:w400 f:id:n-guitar:20211017180415p:plain:w400 f:id:n-guitar:20211017180429p:plain:w400 f:id:n-guitar:20211017180449p:plain:w400

Member Roles
  • デフォルトとしますが、rancher側でユーザを作成してClusterへのアクセスレベルを設定できます。

f:id:n-guitar:20211017180714p:plain:w600

Add-On Config
  • デフォルトとします

f:id:n-guitar:20211017181702p:plain:w600

Agent Environment Vars
  • デフォルトとします

f:id:n-guitar:20211017181728p:plain:w600

etcd
  • デフォルトとします
  • ここでetcdのバックアップ世代、時間を選択できますが、後から変更可能です。

f:id:n-guitar:20211017181806p:plain:w600

Labels & Annotations
  • デフォルトとします

f:id:n-guitar:20211017181909p:plain:w600

Networking
  • デフォルトとします

f:id:n-guitar:20211017182044p:plain:w600

Registries
  • デフォルトとします
  • Pull images for Rancher from public DockerHub

f:id:n-guitar:20211017182102p:plain:w600

Upgrade Strategy
  • デフォルトとします

f:id:n-guitar:20211017182235p:plain:w600

Advanced
  • デフォルトとします

f:id:n-guitar:20211017182254p:plain:w600

RKE2クラスターのプロビジョニング

  • 雛形が完成していれば以下の通りになっています。

f:id:n-guitar:20211017192811p:plain:w600

クラスターへの追加

  • クラスター名を選択して、Registrationを開きます。
  • Node Roleにチェックをします。
  • 今回は自己証明書を利用しているのでInsecure: Select this to skip TLS verification if your server has a self-signed certificate.にチェックを入れます。
  • 出来上がったコマンドをコピーして、それぞれ参加させたいOS上で実行します。

f:id:n-guitar:20211017193714p:plain:w600

  • Provisioning状態でしばらく待ちます。

f:id:n-guitar:20211017194703p:plain:w600

  • 10~20分くらいすれば以下のようにActiveになります。
  • EXPLORE CLUSTERから構築した、Clusterが有効化されていれば完了です。

f:id:n-guitar:20211017205909p:plain:w600

f:id:n-guitar:20211017205937p:plain:w600

f:id:n-guitar:20211017210059p:plain:w600

  • 最終的にworkerを加えて以下になりました。
  • この環境を今後、自宅のアプリの実行基盤として利用していきます。

f:id:n-guitar:20211017222917p:plain:w600

うまく行かないとき
  • Provisioning状態からActiveにならないときの確認方法です。
RKE2プロセスの起動確認
  • RKE2プロセスはsystemdで起動されているのでstatusを見ます。
# Control Planeの場合
$ sudo systemctl status rke2-server.service

# Workerの場合
$ sudo systemctl status rke2-agent.service
RKE2プロセスのログ確認
# Control Planeの場合
$ sudo journalctl -u rke2-server -f

# Workerの場合
$ sudo journalctl -u rke2-agent -f
kubernetesリソースの確認
  • rke2のデプロイはうまく行っているが、rancherと疎通できないときはkubectlでdeploymentの状態を確認します。
  • cattle-system namespaceのリソースがうまく起動できていないときは、なにかエラーが発生しています。
$ sudo export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
$ sudo kubectl get nodes
NAME             STATUS   ROLES                              AGE   VERSION
nucbox-002-hkm   Ready    control-plane,etcd,master,worker   40m   v1.21.5+rke2r2

$ sudo kubectl  kubectl get all -n cattle-system
NAME                                             READY   STATUS    RESTARTS   AGE
pod/cattle-cluster-agent-78767b885c-5ttn8        1/1     Running   5          38m
pod/system-upgrade-controller-679575c7b4-7j8vv   1/1     Running   0          17m

NAME                           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
service/cattle-cluster-agent   ClusterIP   10.43.57.9   <none>        80/TCP,443/TCP   42m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cattle-cluster-agent        1/1     1            1           42m
deployment.apps/system-upgrade-controller   1/1     1            1           17m

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/cattle-cluster-agent-75979cf449        0         0         0       41m
replicaset.apps/cattle-cluster-agent-78767b885c        1         1         1       38m
replicaset.apps/system-upgrade-controller-679575c7b4   1         1         1       17m
 

$ sudo kubectl logs cattle-cluster-agent-78767b885c-5ttn8 -n cattle-system

後書き

  • スペックのいいマシンでVM環境を作っても良かったのですが、消費電力と設置場所が小さい事という自分の要件があり、mini pcで自宅環境を整えました。
  • DNS serverをubuntuからうまく見れなくて少しハマりました。。。
  • また、Clusterの設定内容によってはデプロイが失敗することもあり、エラーを取り除くのにも数時間かかってしまいました。。
  • もともとk3s環境で作った環境をすべて削除して今回のRKE2環境に作り直すので、しばらく掛かりそう・・・です。
  • まずprivate registry環境を作るところから初めて、その後build環境を整えます。

  • 以上、rancherからRKE2クラスターを構築する(Tech Preview - RKE2 Cluster Provisioning)でした。