このページの本文へ

FIXER Tech Blog - Development

FIXER cloud.config Tech Blog

Terraformを用いてAKS上にFluxを導入する方法

2023年07月21日 10時00分更新

文● 松枝 宏樹/FIXER

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事は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_clusterflux_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など。

カテゴリートップへ

この連載の記事