CAPI、Fleet、GitOps:RancherでKubernetesクラスタをオーケストレーションする新手法 | SUSE Communities

CAPI、Fleet、GitOps:RancherでKubernetesクラスタをオーケストレーションする新手法

Share
Share

はじめに

このブログポストでは、Rancher 2.8の新機能の1つであり、Cluster API(CAPI)を使用したクラスタのデプロイを助ける、Rancher Turtlesの使い方を紹介します。

これは、Rancherを使ってKubernetesクラスタをデプロイするための既存の方法に追加されたもので、現在はテスト版の状態ですが、将来のバージョンで完全にサポートされるようになる見込みです。

現在、Rancher TurtlesとRancherのGitOpsツールであるFleetの助けを借りて、CAPIをサポートするプラットフォーム上のクラスタのライフサイクル管理を簡単に自動化することができます。

プロバイダーがCAPIをサポートしている場合、プラットフォーム固有のAPIを使用することなく、共通のAPIを使用して、クラスタに必要なリソースのプロビジョニングと管理をコントロールできます。CAPIを使えば、あまりカスタマイズすることなくKubernetesクラスタをハイブリッド環境で利用できるため、プロバイダを変更する必要がある場合も簡単に対応ができ、作業がよりスムーズになります。

CAPIとは?

CAPIとはCluster API(クラスタAPI)の略で、「複数のKubernetesクラスタのプロビジョニング、アップグレード、運用を簡素化するための宣言型APIとツールの提供に焦点を当てたKubernetesのサブプロジェクト」です。(出典:https://cluster-api.sigs.k8s.io/)。

これは、Kubernetesクラスタのライフサイクル管理を支援するもので、クラスタがオンプレミスにデプロイされているかクラウドにデプロイされているかに関係なく、プラットフォームにとらわれず、統一したクラスタ操作を提供することができます。

Kubernetesの実行に必要ないクラスタ下のインフラのライフサイクルを管理したり、異なるインフラプロバイダーにまたがるクラスタを管理したり、作成やアップグレード以外にクラスタノードを設定したりすることは意図されていません。

より詳細な情報については、The Cluster API Book(特に導入概念の部分)を確認することをお勧めします。

Rancher Turtlesのセットアップ(オプション)

冒頭で述べたように、Rancher Turtlesは異なるCAPIプロバイダと統合することを可能にする技術であり、古いバージョンのRancherにはデフォルトで付属していませんが、古いクラスタで試したい場合は、以下の方法で行うことができます。

 

Requirements: Rancher 2.7以上

コンソールから、組み込みCAPI機能を無効にします:

kubectl apply -f feature.yaml

---
apiVersion: management.cattle.io/v3
kind: Feature
metadata:
name: embedded-cluster-api
spec:
value: false
...

kubectl delete mutatingwebhookconfiguration.admissionregistration.k8s.io mutating-webhook-configuration
kubectl delete validatingwebjookconfigurations.admissionregistration.k8s.io validating-webhook-configuration

Rancher Turtlesリポジトリを追加する

管理クラスタに切り替えて、Rancher Turtlesのアプリケーションリポジトリを追加します:

helm repo add turtles https://rancher-sandbox.github.io/rancher-turtles

 

Rancher Turtlesをインストールする

helm -n rancher-turtles-system install rancher-turtles --create-namespace --set cluster-api-operator.cert-manager.enabled=false

現在、Cert ManagerはRancher Turtlesの要件であることに注意してください。この例ではインストールされていることを前提としていますが、オペレータに自動的にインストールさせたい場合は、cluster-api-operator.cert-manager.enabled=true(デフォルトオプション)に設定してください。

 

CAPIプロバイダーを追加インストールする

kubectl apply -f capd-provider.yml

---
apiVersion: v1
kind: Namespace
metadata:
name: capd-system
...
---
apiVersion: operator.cluster.x-k8s.io/v1alpha1
kind: InfrastructureProvider
metadata:
name: docker
namespace: capd-system
spec:
secretName: capi-env-variables
secretNamespace: capi-system
...

この後、GitOpsの原則に従って新しいクラスタをプロビジョニングする準備が整いました。

Fleetを使ったGitOpsに続く新しいクラスタのプロビジョニング!

CAPIを使うことで、新しいAPIを学んだり、それぞれのAPIに対して多くのカスタマイズを施したりすることなく、異なるプラットフォームへのクラスタのデプロイが簡単になることをお話ししました。今回は、このCAPIの定義をFleetで使って、GitOpsの原則に従ってKubernetesクラスタを管理する方法をご紹介します。

 

プロセス:

Fleetでリポジトリが設定された後、または後で誰かがリポジトリに変更を加えたとき。

user_commit_and_push_changes_to_git

Fleetはこれらの変更をチェックし、CAPIクラスタ定義が見つかると、FleetはそれをRancher Turtlesに渡します。

fleet_check_git_and_send_to_turtles

その後、Turtlesはファイルを処理し、指定されたCAPIプロバイダーに処理依頼を行います:

Animation showing Turtles using CAPI to deploy Kubernetes clusters on 2 different infrastructure providers

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

新機能とFleetについて話してますが、Fleet新バージョンの特にエキサイティングな機能をご紹介したいと思います:
ドリフトリコンシリエーション
これによって、リソースがGITリポジトリで定義されたものと一致しない場合、それを上書きして同じ状態にするようFleetに指示できるようになりました。詳細については新しいブログ記事を作成する予定です。

 

Fleet の設定

まず、gitリポジトリをFleetに追加します。

実際のデプロイはインフラストラクチャプロバイダが行います。

kubectl apply -f myclusters-repo.yaml

---
apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
name: clusters
namespace: fleet-local
spec:
repo:
https://github.com/rancher-sandbox/rancher-turtles-fleet-example.git
branch: main
paths:
- clusters
...

これで、Fleetがリポジトリの “main “ブランチの”/clusters “パスの配下の変更を検出すると、定義した変更を自動的に環境へ適用します。

これは単なる例であることに注意してください。さらに複雑な条件を取り入れるために、このリポジトリ定義をカスタマイズすることができますが、コンセプトは同じです。

クラスタ定義の作成とプルリクエストの承認が、新しいクラスタ作成の準備に必要な唯一のステップです。

おまけ: Fleet-localネームスペースでデプロイしていることにお気づきでしょうか?もし興味があり、もっと知りたいのであれば、このリンクをチェックしてください。

Rancherの設定:

これでRancherにアクセスして、CRDがデプロイされているネームスペース内のすべてのクラスタを自動インポートしたいと指示することができます。
そのためには、以下のコマンドを実行してrancher-auto-import機能を有効にします。

kubectl label namespace <mynamespace> cluster-api.cattle.io/rancher-auto-import=true

この例では、クラスタ定義がネームスペース「default」にあることにご注意してください。

しばらくすると、Rancherの “Cluster Management “セクションに新しいクラスタがインポートされ、管理している他のクラスタと同じように表示されるのがわかります。

 

CAPIを使って新しくデプロイされたクラスタを調べる

クラスタの右側にある “Explore “ボタンをクリックすると、Rancherで他のクラスタと同じように管理できます。

kubeconfigをローカルにコピーし、便宜上、以下のコマンドを実行してkubectlやその他のツールで使用するデフォルトとして設定します:

export KUBECONFIG=<my-new-cluster-kubeconfig-file>

あるいは、選択したツールのコマンドラインで指定します。

例えば、コマンドを実行して動作を確認することができます:

kubectl get pods -A -w --insecure-skip-tls-verify

新しいクラスタ上で動いているポッドが表示されるはずです。

まとめ

コマンドラインから操作を行う方法を見てきましたが、将来的にRancherはWeb UIから直接Turtleを管理するためのUI拡張機能を組み込む予定です!

Rancher Primeの詳細と、コンテナ技術であなたのビジネスをさらに成長させ、より安全で俊敏にするための支援方法については、当社のウェブサイトをご覧ください。

Rancherについてさらに詳しくお知りになりたい方は、無料のホワイトペーパー「Why rancher?」をダウンロードいただくか、Rancher RodeoRancher Academyにご参加ください。

👉SUSEの製品やサービスに関する詳細については、お気軽にお問い合わせください

Share
Avatar photo
1,622 views
Raul Mahiques   Technical Marketing Manager with a focus on Security .