CAPI、Fleet、GitOps:RancherでKubernetesクラスタをオーケストレーションする新手法
はじめに
このブログポストでは、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はこれらの変更をチェックし、CAPIクラスタ定義が見つかると、FleetはそれをRancher Turtlesに渡します。
新機能と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 Rodeo、Rancher Academyにご参加ください。
👉SUSEの製品やサービスに関する詳細については、お気軽にお問い合わせください。
Related Articles
8月 26th, 2024
Rancher Prime 3.1を発表:LTS Coreでプラットフォームエンジニアリングを最大5年間サポート
6月 29th, 2023
クラウドとコンテナ化におけるデジタル・トラスト: セキュリティ環境の変化
9月 29th, 2023
SUSE Managerの新たな夜明け
2月 13th, 2024