2023年1月24日火曜日

Docker Desktop(k8s)+Localstackでargocdを試す環境をterraformで作ってみた

 

やりたかったこと

  • DokerDesktop+Localstackの環境でk8sを試したい。
  • 試したいk8sパッケージ
    • eso
    • metric server
    • ingress nginx
    • argocd
    • kubernetes dashboard
  • argocd はBitbucketと連携させてnginxをdeploy
  • LocalstackのSSM ParameterStoreに、Bitbuket接続に使用するSSH秘密鍵を登録し、esoでk8sのsecretとして参照できるようにしたい。
  • ingressを使って、argocd, dashboardのGUIを見たい。
  • metric serverのhpaでpodをスケールアウトしたい。
  • 個人の学習目的なので、セキュリティはゆるくていい。


私の環境

  • SparkyLinux6.5(Debian系)
    • ssh秘密鍵(レポジトリアクセス用)
  • k8s
    • DockerDesktop4.12.0
    • kubectl1.25.4
    • helm3.10.2
  • aws
    • localstack1.3.1.dev
    • aws-cli2.9.4
  • terraform
    • tfenv3.0.0
    • tflint0.43.0
    • terraform1.3.6


サンプルコード


https://github.com/blue21jp/aws-sample-terraform-k8s


構成


├── Makefile
├── README.md
├── app/
│   └── deployment.yml
├── demo_todo_k8s.org
├── global/
│   ├── backend.tf
│   ├── ip.sh
│   ├── locals.tf
│   ├── providers_aws.tf
│   ├── providers_localstack.tf
│   └── versions.tf
├── stacks_k8s/
│   ├── 00_check/
│   │   ├── Makefile
│   │   └── outputs.tf
│   ├── 01_aws_ssm/
│   │   ├── Makefile
│   │   └── main.tf
│   ├── 10_k8s_eso/
│   │   ├── Makefile
│   │   ├── k8s_cluster_secret_store.yaml
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   └── versions.tf
│   ├── 10_k8s_ingress_nginx/
│   │   ├── Makefile
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   └── versions.tf
│   ├── 10_k8s_metric_server/
│   │   ├── Makefile
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   └── versions.tf
│   ├── 20_k8s_argocd/
│   │   ├── Makefile
│   │   ├── k8s_argocd_external_secret.yaml
│   │   ├── k8s_repo.yaml
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   ├── repo.tf
│   │   └── versions.tf
│   ├── 20_k8s_dashboard/
│   │   ├── Makefile
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   └── versions.tf
│   ├── 40_app_argocd/
│   │   ├── Makefile
│   │   ├── k8s_app.yaml
│   │   ├── k8s_hpa.yaml
│   │   ├── k8s_ingress.yaml
│   │   ├── k8s_service.yaml
│   │   ├── main.tf
│   │   ├── providers.tf
│   │   └── versions.tf
│   ├── Makefile
│   ├── locals_all.tf
│   └── locals_dev.tf
└── stacks_template/
    ├── 00_check/
    │   ├── Makefile
    │   └── outputs.tf
    ├── Makefile
    ├── locals_all.tf
    ├── locals_dev.tf
    ├── locals_prd.tf
    └── locals_stg.tf
こんなイメージ



この構成の説明と基本操作方法は、別記事の「awsとlocalstackを切り替えながらterraformを使いたい」を参照。
app/ には、argocdでapp(nginx)をdeployするためのmanifestを置いてます。


構築


準備


Bitbucket
レポジトリアクセス用のSSH秘密鍵は下記のPATHを使用します。
~/.ssh/id_rsa

awscli 
Localstack用のprofile名は "localstack" を使用します。

/etc/hosts
下記のホスト名を登録します。ingressに設定してGUIアクセスで使用します。
127.0.0.1 argocd.example.local
127.0.0.1 nginx.example.local
127.0.0.1 dashboard.example.local

Terraform実行


下記コマンドを実行すると、terraform applyが実行されます。
これで、Localstack+DockerDesktop環境にリソース一式(ssm, argocd, dashbord, etc)が構築されます。
$ make apply OPT="-auto-approve" -C stacks_k8s


確認


argocdのGUI
http://argocd.example.local
Userは、adminです。
Passwordは下記コマンドで調べます。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=“{.data.password}” | base64 -d; echo

dashbordのGUI
http://dashboard.example.local
認証を無効に設定しています。
認証画面で[スキップ]ボタンをクリックすると入れます。

app(nginx)のページ
http://nginx.example.local
nginxの welcome ページが表示されます。


破棄


argocdでdeployしたnginxを削除します。
$ kubectl delete deploy nginx-deploy

下記コマンドを実行するとterraform destroyが実行されます。
を実行し、リソースを全部、破棄します。
$ make destroy OPT="-auto-approve" -C stacks_k8s


おまけ


demo_todo_k8s.org に記載した手順で構築と動作確認を実施している様子を動画にしました。


この動画で実行しているコマンド(aws-cliのalias)については、下記の記事を参照