やりたかったこと
- 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
こんなイメージ
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 に記載した手順で構築と動作確認を実施している様子を動画にしました。