この記事では、Single nodeのRancher server と二つのk3sクラスタ環境を構築し、 そRancherのContinuous Delivery機能で、二つのk3sクラスタをGitOpsで操作します。
Step 1: Deploying a Rancher Server
まずはrancherノードで、以下のdocker コマンドを実行しSingle nodeのRancher serverを構築します。
|  |  | 
Rancher serverが1分程度で立ち上がりますので、rancherノードのIPアドレスをブラウザで開いてRancher UIをアクセスしてください。
今回の場合、Rancherは自己署名証明書を使用しているため、ブラウザに証明書の警告が表示されます。この警告はスキップしても問題ありません。 また、一部のブラウザでは、スキップボタンが表示されない場合があります。 この場合は、エラーページの任意の場所をクリックして、thisisunsafeと入力します。 これにより、ブラウザは警告をバイパスして証明書を受け入れるようになります。
初回アクセスの時パスワードの初期設定が必要です。画面のガイドに従って設定してください。
Step 2: Deploy k3s Kubernetes Cluster
次はk3sクラスタをデプロイします。手順はとても簡単で、以下のコマンドをk3s-1とk3s-2ノードで実行するだけです。
後でアップグレードもやる予定なので、ここではあえてちょっと古いバージョンを指定しk3sのクラスタをデプロイします。
k3s-1
|  |  | 
k3s-2
|  |  | 
デプロイが完了したら、以下のコマンドでクラスタを確認してください。
|  |  | 
Note: K3sはrootユーザの操作を想定しているのでsudo 権限が必要です。
Step 3: Add k3s cluster to Rancher
次はk3sクラスタをRancher にImportします。 以下の手順で、k3s-1を登録してください。
- RancherのGlobal画面で、右側にあるAdd Clusterをクリックし、Other Clusterを選択してください。   
- Cluster Nameにクラスタの名前 k3s-1を入力しCreateをクリックします。
- curl...から始まっているコマンドをクリックし、k3s-1のノードで実行してください。 
同じ手順で、k3s-2を登録してください。
Step 4: Cluster Group
ここから、Continuous Deliveryの操作に入ります。 Global画面のTools->Continous Deliveryを選択してください。
まずはCluster Groupを作成します。左側のCluster Groupメニューに入り、画面右側にあるCreateをクリックし、Cluster Group作成メニューに入ります。 
今回はk3sを使ってデモするので、Nameのところをk3s-demoに入力します。
次は重要なところです。Cluster Groupの所属は設定されたラベルを持つクラスタを選択するので、ここではAdd Ruleをクリックしてラベルを設定します。今回のDemoでは、K3sを使っているので、Cluster Selectorsのところに k3s=true のラベルを設定します。

上記の設定が終わったらCreateをクリックしCluster Groupの作成が終了します。
次はimportされた2機のk3sクラスタをこのCluster Groupにアサインします。左側のClustersメニューに入り、まずはk3s-1のクラスタの右側にある︙をクリックし、Assign toを選択します。 
Add/Set Labelをクリックし、さっき設定したラベルk3s=trueを設定し、Applyをクリックします。これでこのクラスタがさっき作成したクラスタグループに配属されました。 
同じ手順でk3s-2のクラスタもCluster Groupに配属しましょう。Cluster Groups画面からClusters Readyが2になっていることが分かります。 
Step 5: Git Repos
このステップでは、参照するGit Repoの設定を行います。左側のGit Reposに入り、画面右側にあるCreateをクリックし、Git Repos作成画面に入ります。  名前を入力した後、各自のGithubのアカウントで
名前を入力した後、各自のGithubのアカウントで https://github.com/rancher/fleet-examples をfolkし、Repository URL(e.g. https://github.com/xibuka/fleet-examples.git )に設定してください。 また、Pathsに今回利用するguest-bookの定義ファイルが置いてあった /single-cluster/manifests を設定して ください。 次はこのGit Reposをどこにデプロイするのかを設定します。Deploy Toのメニューから、さっき作成したCluster Groupを選択し、Createをクリックしてください。

これで、k3s-1とk3s-2にguest-bookのリソースがデプロイされます。 
次に、deployment以下に新しいファイルnginx.yamlを追加しましょう。以下の内容で追加したら、Continuous Deliveryがこのファイルを検知し、Cluster Groupにデプロイします。
|  |  | 
デプロイが完了したら、クラスタ側でPodやServiceなどを確認しましょう。  

同じく、監視先のファイルに変更がある場合も、その修正内容は随時cluster groupにデプロイされます。 試しに、上記のYAMLの以下の2行を変更してみてください。
|  |  | 
修正内容が反映されました。

Step 6: Deploy Application
このステップでは、Git Repoの登録からRancherのアップリケーションをデプロイします。
まずはRepository URLに、https://github.com/xibuka/core-bundles.gitを設定し、Add Pathで以下の二つのパスを追加します。
- /longhorn
- /longhorn-crd 
Createをクリックしたら定義したアップリケーションがデプロイされます。
 

Step 7: Upgrade
このステップでは、Git Repoの登録から二つのk3sクラスタをアップグレードします。アップグレードを実現するために、以下のAutomated Upgrades機能を利用します。
https://rancher.com/docs/k3s/latest/en/upgrades/automated/
まずはこの機能に必要なリソースを準備します。以下のコマンドを一回ずつクリックし各クラスタで実行させてください。
|  |  | 
次は https://github.com/xibuka/k3s-upgrade-plan をfolkし、Git reposを設定してください。Branch NameをMainにして、Createをクリックしてください。 / 以下が対象なのでpathの追加が必要ないです。 
現在のk3sのバージョンは 1.21.5+k3s2 であることを確認します。 
Git ReposにあるPlanのファイルを変更し、versionを1.22.2+k3s1に変更しcommitしてください。少し時間が立つと二つのk3sクラスタのバージョンは1.22.2にアップグレードされるはずです。
 

FleetのDemoはここまでですが、まだまだ使える機能はたくさんありますので探してみてください。