FluxによるGitOpsの構築
序章: はじめに
GitOpsとは?
GitOpsは、Gitリポジトリを真実の唯一の情報源として扱い、そのリポジトリ内のマニフェストに基づいてインフラやアプリケーションのデプロイメントを行う手法です。
Fluxの概要
Fluxは、Kubernetesクラスタ内で動作するオープンソースのGitOpsツールです。Gitリポジトリの変更を自動的に検出し、それに基づいてKubernetesのリソースを更新します。
第一章: チュートリアル
前提条件:
- Kubernetesクラスタが動作していること
-
kubectl
がインストールされ、クラスタにアクセスできること - Gitリポジトリ(例: GitHub)があり、RailsアプリケーションのKubernetesのマニフェストが格納されていること
- 使用するDocker, docker-composeの設定は こちら の記事を参考に作成されていること
1. Fluxのインストール:
Fluxをインストールするためのコマンド:
curl -s https://fluxcd.io/install.sh | sh
次に、FluxのカスタムリソースをKubernetesクラスタにデプロイ:
kubectl apply -f https://github.com/fluxcd/flux2/releases/latest/download/install.yaml
2. Fluxの設定:
リポジトリをFluxと接続する手順:
flux bootstrap github \
--owner=[GITHUB_USERNAME] \
--repository=[REPO_NAME] \
--branch=main \
--path=./kubernetes \
--personal
Flux v2 で flux bootstrap
コマンドを使用する際にGitHubのPersonal Access Token (PAT)を要求される場合、そのトークンには特定のスコープの権限が必要となります。
以下のスコープの権限が一般的に要求されます:
- repo: この権限により、プライベートリポジトリへのアクセスが可能になります。
- read:org: オーガニゼーションのメンバーシップ情報を読み取ることができます。
- write:public_key: ユーザーの公開鍵またはオーガニゼーションの公開鍵を追加、一覧表示、または削除できます。
- read:public_key: ユーザーの公開鍵またはオーガニゼーションの公開鍵を読み取ることができます。
これらのスコープは、FluxがGitHubのリポジトリをクローンしたり、リポジトリの変更を検知したり、FluxのためのSSH公開鍵をリポジトリに追加したりする際に必要です。
注意: トークンを作成する際は、必要な権限だけを付与するように注意してください。不要な権限を付与すると、セキュリティのリスクが高まる可能性があります。また、生成されたトークンは安全に保存してください。
3. Railsアプリケーションのデプロイ:
GitリポジトリにRailsアプリケーションのKubernetesマニフェストを追加:
# ./kubernetes/rails-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: rails-deployment
spec:
replicas: 3
selector:
matchLabels:
app: rails-app
template:
metadata:
labels:
app: rails-app
spec:
containers:
- name: rails
image: [YOUR_RAILS_IMAGE_NAME]:[TAG]
ports:
- containerPort: 3000
このマニフェストをリポジトリにコミット&プッシュします。
4. Fluxによる変更の検出とデプロイ:
Fluxはリポジトリの変更を定期的にポーリングして、新しい変更を検出した際に対象のKubernetesリソースを更新します。
ソースの再同期や確認
手動で変更を反映させるためには、以下のコマンドを使用します。
flux reconcile source git [GIT_REPOSITORY_NAME]
第二章: トラブルシューティング
1. よくある問題とその解決策
kubectl get deployments
コマンドの出力が期待したデプロイメントを示していない場合、いくつかの原因が考えられます。以下のトラブルシューティング手順を試してみてください。
-
Fluxの同期ステータスを確認: FluxがGitリポジトリの変更を正しく検出しているかを確認するには、以下のコマンドを使用します。
flux get sources git
-
Kustomizationの確認: Fluxがリポジトリのマニフェストをクラスタに適用するためには、Kustomization リソースが必要です。Kustomizationのステータスを確認してみましょう。
flux get kustomizations
-
Fluxのログを確認: FluxのPodのログを確認することで、何らかのエラーや警告がある場合、それを確認することができます。
kubectl logs -n flux-system deployment/flux-controller
-
Gitリポジトリのマニフェストを確認: Gitリポジトリ内のKubernetesマニフェストが正しいかどうかを確認します。誤ったマニフェストや不足しているリソース、不正な値が原因でデプロイメントが作成されない可能性があります。
-
Kubernetesのイベントを確認: クラスタのイベントを確認して、何らかのエラーや警告があるかを見てみます。これにより、リソースが適切に作成されない理由が明らかになるかもしれません。
kubectl get events --sort-by='.metadata.creationTimestamp'