この記事では、Single nodeのRancher server と二つのk3sクラスタ環境を構築し、 そRancherのContinuous Delivery機能で、二つのk3sクラスタをGitOpsで操作します。

Step 1: Deploying a Rancher Server

まずはrancherノードで、以下のdocker コマンドを実行しSingle nodeのRancher serverを構築します。

1
2
3
4
sudo docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  --privileged \
  rancher/rancher:v2.5.10

Rancher serverが1分程度で立ち上がりますので、rancherノードのIPアドレスをブラウザで開いてRancher UIをアクセスしてください。

今回の場合、Rancherは自己署名証明書を使用しているため、ブラウザに証明書の警告が表示されます。この警告はスキップしても問題ありません。 また、一部のブラウザでは、スキップボタンが表示されない場合があります。 この場合は、エラーページの任意の場所をクリックして、thisisunsafeと入力します。 これにより、ブラウザは警告をバイパスして証明書を受け入れるようになります。

初回アクセスの時パスワードの初期設定が必要です。画面のガイドに従って設定してください。

Step 2: Deploy k3s Kubernetes Cluster

次はk3sクラスタをデプロイします。手順はとても簡単で、以下のコマンドをk3s-1とk3s-2ノードで実行するだけです。

後でアップグレードもやる予定なので、ここではあえてちょっと古いバージョンを指定しk3sのクラスタをデプロイします。

k3s-1

1
sudo curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.19.15+k3s2 sh -

k3s-2

1
sudo curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.19.15+k3s2 sh -

デプロイが完了したら、以下のコマンドでクラスタを確認してください。

1
sudo kubectl get node

Note: K3sはrootユーザの操作を想定しているのでsudo 権限が必要です。

Step 3: Add k3s cluster to Rancher

次はk3sクラスタをRancher にImportします。 以下の手順で、k3s-1を登録してください。

  1. RancherのGlobal画面で、右側にあるAdd Cluster をクリックし、Other Clusterを選択してください。imgimg
  2. Cluster Nameにクラスタの名前 k3s-1 を入力しCreateをクリックします。
  3. curl...から始まっているコマンドをクリックし、k3s-1のノードで実行してください。img

同じ手順で、k3s-2を登録してください。

Step 4: Cluster Group

ここから、Continuous Deliveryの操作に入ります。 Global画面のTools->Continous Deliveryを選択してください。

まずはCluster Groupを作成します。左側のCluster Groupメニューに入り、画面右側にあるCreateをクリックし、Cluster Group作成メニューに入ります。 img

今回はk3sを使ってデモするので、Nameのところをk3s-demoに入力します。

次は重要なところです。Cluster Groupの所属は設定されたラベルを持つクラスタを選択するので、ここではAdd Ruleをクリックしてラベルを設定します。今回のDemoでは、K3sを使っているので、Cluster Selectorsのところに k3s=true のラベルを設定します。

img

上記の設定が終わったらCreateをクリックしCluster Groupの作成が終了します。


次はimportされた2機のk3sクラスタをこのCluster Groupにアサインします。左側のClustersメニューに入り、まずはk3s-1のクラスタの右側にある︙をクリックし、Assign toを選択します。 img

Add/Set Labelをクリックし、さっき設定したラベルk3s=trueを設定し、Applyをクリックします。これでこのクラスタがさっき作成したクラスタグループに配属されました。 img

同じ手順でk3s-2のクラスタもCluster Groupに配属しましょう。Cluster Groups画面からClusters Readyになっていることが分かります。 img

Step 5: Git Repos

このステップでは、参照するGit Repoの設定を行います。左側のGit Reposに入り、画面右側にあるCreateをクリックし、Git Repos作成画面に入ります。 img 名前を入力した後、各自の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をクリックしてください。

img

これで、k3s-1とk3s-2にguest-bookのリソースがデプロイされます。 img


次に、deployment以下に新しいファイルnginx.yamlを追加しましょう。以下の内容で追加したら、Continuous Deliveryがこのファイルを検知し、Cluster Groupにデプロイします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 32000

デプロイが完了したら、クラスタ側でPodServiceなどを確認しましょう。 img img

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

1
2
3
4
...
        image: nginx:1.20
...
    nodePort: 31000

修正内容が反映されました。

img

Step 6: Deploy Application

このステップでは、Git Repoの登録からRancherのアップリケーションをデプロイします。

まずはRepository URLに、https://github.com/xibuka/core-bundles.gitを設定し、Add Pathで以下の二つのパスを追加します。

  • /longhorn
  • /longhorn-crdimg

Createをクリックしたら定義したアップリケーションがデプロイされます。

img img

Step 7: Upgrade

このステップでは、Git Repoの登録から二つのk3sクラスタをアップグレードします。アップグレードを実現するために、以下のAutomated Upgrades機能を利用します。

https://rancher.com/docs/k3s/latest/en/upgrades/automated/

まずはこの機能に必要なリソースを準備します。以下のコマンドを一回ずつクリックし各クラスタで実行させてください。

1
2
sudo kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/download/v0.6.2/system-upgrade-controller.yaml
sudo kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/download/v0.6.2/system-upgrade-controller.yaml

次は https://github.com/xibuka/k3s-upgrade-plan をfolkし、Git reposを設定してください。Branch NameをMainにして、Createをクリックしてください。 / 以下が対象なのでpathの追加が必要ないです。 img

現在のk3sのバージョンは 1.21.5+k3s2 であることを確認します。 img

Git ReposにあるPlanのファイルを変更し、versionを1.22.2+k3s1に変更しcommitしてください。少し時間が立つと二つのk3sクラスタのバージョンは1.22.2にアップグレードされるはずです。

img img

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