FIXER cloud.config Tech Blog
Terraformを用いてAKS上にFluxを導入する方法
2023年07月21日 10時00分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Terraformを使ってAKS上にFluxを導入する手順とデモ」を再編集したものです。
はじめに
GitOpsは、開発者がコードをGitリポジトリにプッシュすることで自動的にインフラストラクチャーが更新される仕組みです。
Fluxは、GitOpsを実現するためのツールであり、KubernetesのmanifestファイルをGitリポジトリに保存し、変更があるたびに自動でデプロイすることができます。
本記事では、Terraformを用いてAKS上にFluxを導入する手順を説明し、GitOpsのデモを行います。
AKS上にFluxを導入する手順
連携先のGitHubリポジトリの準備
GitHubリポジトリが空だとTerraformの実行時にエラーになるため、mainブランチにreadmeか何かを入れておいてください。
続いてGitHubとの認証情報の準備です。
今回はDeploy keyを用いてFluxからGitHubに接続する方針で説明します。
Deploy keyの作成方法は下記です。
1.接続に使用するSSHキーを生成します
1.参考:https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key
2.対象のリポジトリの「Setting」から、「Deploy keys」を開きます
3.「Add deploy key」をクリックします
4.Titleに任意の名称を設定し、SSHキーの公開鍵をコピペし、「Allow write access」のチェックを入れて「Add key」します
SSHキーの秘密鍵はTerraformの実行時に必要になります。
AKSとFluxの導入
AKSの作成とFluxの導入はTerraformで実現しましょう。
主にazurerm_kubernetes_clusterとflux_bootstrap_gitを利用します。検証時点ではflux_bootstrap_gitのバージョンは`1.0.0-rc.5`でした。
main.tf
variables.tf
terraform apply時は、variables.tfのdescriptionの説明を参考にパラメータを渡してあげてください。
providerの記述が特徴的かと思います。
namespaceの作成やFluxの導入時にkubernetesへの接続情報が必要になるのですが、`provider "kubernetes"`や`provider "flux"`の記載でazurerm_kubernetes_clusterのアウトプットから拾うようにしています。
他は各リソースのterraformドキュメントに記載されている内容とあまり差が無いと思います。
GitOpsのデモ
terraform applyが成功すると、GitOps用のGitHubリポジトリ内に`clusters/aks-gitops/flux-system`フォルダが作成され、ここにFluxの管理ファイルが保管されています。
mainブランチの`clusters/aks-gitops`フォルダ内がFluxにより監視されているので、ここに好きなファイル名.yamlでマニフェストファイルを追加してあげるとAKSにデプロイされます。
GitHubを監視する周期はデフォルト設定だと1分です。
試しに下記のマニフェストファイルを`clusters/aks-gitops/sample-namespace.yaml`としてmainブランチにコミット、プッシュしてみましょう。
sample-namespace.yaml
kubectl applyすると`sample`という名前のnamespaceが作成されるマニフェストファイルですね。
namespaceが作成されたかどうかは好きな方法で確認してOKですが、Azureポータルから見るのが気軽ですかね?
AzureポータルからTerraformで作成されたAKSの「Kubenetes リソース」→「名前空間」を選択してください。
kubectl applyせずに、マニフェストファイルをプッシュしてから1分以内にnamespaceが作成されたと思います!
ファイルの削除をコミットすればnamespaceが削除されます、素晴らしいー
まとめ
Terraformを使用することで、簡単にFluxを用いたGitOps環境が構築できることが分かりました。
GitOpsの実現手段としてはArgoCDもありますが、Fluxの利用もぜひ検討してみてください。
松枝 宏樹/FIXER
愛知県在住、リモートワーク気味なエンジニア。
得意分野はC#、ASP.NET、terraform、AKSなど。
この連載の記事
-
TECH
Github Copilotで、コミットメッセージもAIに考えてもらう方法 -
TECH
Terraform 1.5から追加されたimportブロックがすごい!! -
TECH
Prometheusで辞書形式のメトリクスを持つExporterを作りたい! -
TECH
GTM経由でカスタムディメンションを取得するTypeScript -
TECH
Grafana Tempo×OpenTelemetryの導入方法 -
TECH
Grafana TempoとLokiの連携で進化するログ解析とトレーシング -
TECH
「Microsoft 365開発者プログラム」のアクティベーション方法 -
TECH
サインインなしでも使える! 開発者向けAI検索エンジン「Phind」をご紹介 -
TECH
え、高級言語しか触ったことないのにCPUを自作するんですか!? -
TECH
Github Copilot Chatをさらに便利にする3つの機能 - この連載の一覧へ