2023年2月23日木曜日

EKS(fargate)でargocdを試す環境をCloudformationで作ってみた

 

下記の別記事で書いた、terraformで構築したEKS環境をCloudformationで構築してみました。

ただ、k8sの設定は、Cloudformationで出来ないので、kubectl, helmなどのコマンドを使用しています。


私の環境
  • SparkyLinux6.5(Debian系)
  • Bitbucket
    • ssh秘密鍵(レポジトリアクセス用)
  • k8s
    • kubectl1.25.4
    • helm3.10.2
  • aws
    • aws-cli2.9.4
    • eksctl0.13.0
    • rain1.3.0
    • cfn-lint0.73.2
    • ssh秘密鍵(EC2用キーペア)
  • os command
    • make
    • bash
    • jq
    • envsubst

サンプルコード


https://github.com/blue21jp/aws-sample-cfn-eks


構成


.
├── README.md
├── demo_todo.org
├── global/
│   └── variables.mk
├── stacks_base/
│   ├── 01_network/
│   │   ├── Makefile
│   │   └── cfn_vpc.yml
│   ├── 02_prefix_list/
│   │   ├── Makefile
│   │   └── cfn_prefix_list.yml
│   ├── 03_nat/
│   │   ├── Makefile
│   │   └── cfn_nat.yml
│   ├── Makefile
│   ├── variables_all.mk
│   └── variables_prd.mk
└── stacks_eks/
    ├── 01_vpc/
    │   └── Makefile
    ├── 02_ssm/
    │   └── Makefile
    ├── 10_eks_cluster/
    │   ├── Makefile
    │   ├── cfn_eks_cluster.yml
    │   ├── cfn_eks_fargate_profile.yml
    │   └── cfn_eks_oidc.yml
    ├── 11_k8s_init/
    │   └── Makefile
    ├── 20_k8s_alb_controller/
    │   ├── Makefile
    │   └── aws_alb_policy.json
    ├── 20_k8s_eso/
    │   ├── Makefile
    │   ├── aws_eso_policy.json
    │   └── k8s_eso_cluster_secret.yml
    ├── 20_k8s_metric_server/
    │   └── Makefile
    ├── 21_k8s_argocd/
    │   ├── Makefile
    │   └── k8s_argocd_ingress.yml
    ├── 21_k8s_dashboard/
    │   ├── Makefile
    │   └── k8s_dashboard_ingress.yml
    ├── 40_app_argocd/
    │   ├── Makefile
    │   ├── argocd_apps.json
    │   ├── argocd_apps.sh
    │   ├── argocd_git_repositorys.json
    │   ├── argocd_git_repositorys.sh
    │   ├── k8s_argocd_app.yml
    │   ├── k8s_argocd_repo.yml
    │   ├── k8s_external_secret.yaml
    │   └── k8s_ingress_app.yml
    ├── Makefile
    ├── variables_all.mk
    └── variables_prd.mk

この構成の説明と基本操作方法は、下記の別記事を参照。
下記の記事はterraform用なので、多少、本記事のCloudformation用とは使用方法(オプションとか)が異なりますが、考え方は同じです。
今回のEKS環境は、前述の別記事(terraform版)と比較して、下記を変えてます。
  • appは、tf-sample-eks レポジトリを使用します。
  • SecurityGrpoupの設定に、マネージドプレフィックスリストを使用しています。
  • argocd画面のexecを有効にしています。(GUIからpodに入れる)
  • argocd用の設定情報(レポジトリ、アプリケーション)は、40_app_argocdのjsonファイルに記述しています。


構築


準備


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

awscli 
AWS用のprofile名は "sandbox" を使用します。us-east-1で動作確認しています。

ec2キーペア
NATインスタンスで使用するキーペアです。"sandbox"を使用します。
節約のためにNATゲートウェイでなくNATインスタンスを使ってます。

Cloudformation実行


下記コマンドを実行すると、rain deployやawscli,kubeclt,helm,eksctlが実行されます。
これで、AWS環境にリソース一式(vpc, eks, ssm, argocd, dashbord, etc)が構築されます。
$ make -C stacks_base deploy
$ make -C stacks_eks deploy


破棄


下記コマンドを実行するとリソースを全部、破棄します。
$ make -C stacks_eks remove
$ make -C stacks_base remove