Skip to content

torumakabe/aks-bootstrap-202005

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Azure Kubernetes Service Bootstraping サンプルコード (2020春版)

  • 解説ブログも参考に

  • AKSとTerraform、Fluxの知識が前提です

  • プライベートリポジトリでの実行をおすすめします

    • センシティブな変数はGitHubで設定したシークレットを読み込むようにしていますが、terraform planの結果がプルリクのコメントに表示されますのでご注意を
  • Terraform実行の起点は /src/dev です

  • リソース量にご注意を

    • AKSのノードプールが2つ作られます。ノードVMのタイプと数は必要に応じて調整してください
      • default: Standard_D2s_v3 * 2 (Autoscale to 5)
      • system: Standard_F2s_v2 *2
  • TerraformのバックエンドはTerraform Cloudを指定しています

    • Terraform Cloud WorkspaceのExecution Modeは"Local"にします

    • 環境ごとのバックエンドファイルを /src/dev に用意していますので、organizationを適宜変更ください

      • ローカル開発の場合にはバックエンドを指定して初期化してください
      terraform init -backend-config=backend-dev-local.hcl
  • Terraformのvariableには環境変数から渡す方針です

  • Fluxを使う場合は参照先のリポジトリを指定してください

    • TF_VAR_enable_flux環境変数をtrueに
    • TF_VAR_git_authuserにレポジトリのユーザー名を (GitHub ActionsではGITHUB_ACTORを参照するようにしています)
    • TF_VAR_git_fluxrepoにレポジトリ名を
    • Fluxのサンプルレポジトリ
    • ブートストラップ後にfluxctl identityコマンドでシークレットを取得し、Flux用レポジトリのdeploy keyに設定してください
  • Azure Monitorのワークスペースは既にある前提で、variableに設定します

    • クラスター削除後にログが見たい、なんてこともあるので、ワークスペースは動的に作成削除しないようにします
  • AKS関連リソースが入るリソースグループ(MC_*)の外にあるリソースには、SystemAssigned指定で作られるManaged Identityから操作する権限がないため、必要な場合はSystemAssignedではなくサービスプリンシパルを指定します

    • もしくはSystemAssined指定で作成したManaged Identityに必要な権限を割り当てます
    • 例: AKSを既存の別リソースグループにあるVNetに参加させる場合に、オートスケール時にサブネット操作するための権限割当が必要(参考スクリプト)
    • このサンプルもVNetは別途作成していますので、オートスケールを有効にする場合にはterraform apply後に上記スクリプトで権限を割り当てください
  • masterブランチのコードで環境を再現する仕組みも置いておきます

    • GitHubでIssueを作って"repro"というラベルを付けるとterraform applyが走ります
    • ラベルを外すとdestroyが走ります
    • サンプルコードは以下に説明するsystem nodepoolの分離を行う意欲マシマシ版なので、時間がかかります
  • Terraformが現時点で未対応の機能は、Azure CLIとkubectlで補完します

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published