EKS - jenkins - ArgoCD 인프라 구축 -Terraform -(2)
- argo 도 jenkins 설치와 거의 같다.
그러나 설치 후 수정 사항이 있어 config-map를 편집해야 한다. config-map 수정 후 유저생성, 권한부여가 한 번에 이뤄지면 애러가 발생함. 그리하여 중간에 local 도커 설치, ecr-registry-secret 생성하는 리소스 절차를 기입했다.
resource "null_resource" "patch_argo_basehref" {
depends_on = [null_resource.create_argo_namespace, null_resource.apply_kubernetes_manifest_ingress-argo]
provisioner "local-exec" {
command = "kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{\"data\":{\"server.basehref\":\"/argocd\"}}'"
}
}
resource "null_resource" "patch_argo_insecure" {
depends_on = [null_resource.create_argo_namespace, null_resource.patch_argo_basehref]
provisioner "local-exec" {
command = "kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{\"data\":{\"server.insecure\":\"true\"}}'"
}
}
resource "null_resource" "patch_argo_rootpath" {
depends_on = [null_resource.create_argo_namespace, null_resource.patch_argo_insecure]
provisioner "local-exec" {
command = "kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{\"data\":{\"server.rootpath\":\"/argocd\"}}'"
}
}
resource "null_resource" "restart_argo_deployments" {
depends_on = [null_resource.create_argo_namespace,null_resource.patch_argo_rootpath]
provisioner "local-exec" {
command = "kubectl rollout restart deployments --namespace argocd"
}
}
- config 의 맵의 수정사항. rootpath 가 원래는 / 로 되어있다. svc 생성 할 때 argocd 로 하였는데도 반영을 못해서 수정.
local 도커설치 후, ecr-registry-secret 생성 후 eks 에 부여
: 젠킨슨으로 kaniko 를 사용해 빌드 하는 경우 eks 에 kaniko -container 가 생성되어 이미지 빌드 후 ecr에 푸쉬해야하므로 그 접근 권한이 필요하다. 그래서 생성
resource "null_resource" "install_docker" {
depends_on = [null_resource.restart_argo_deployments]
provisioner "local-exec" {
command = <<-EOT
# Docker 설치
sudo yum -y install docker
# Docker 서비스 시작
sudo service docker start
# 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker $(whoami)
# AWS ECR에 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 553186839963.dkr.ecr.ap-northeast-2.amazonaws.com
EOT
}
}
resource "null_resource" "create_kpop_namespace" {
provisioner "local-exec" {
command = "kubectl create ns kpop"
}
depends_on = [null_resource.install_docker]
}
resource "null_resource" "create_ecr_secret_kpop" {
provisioner "local-exec" {
command = <<-EOT
# 스크립트 파일을 만듭니다.
echo "#!/bin/bash" > create_ecr_secret_kpop.sh
echo "ecr_token=\$(aws ecr get-login-password --region ap-northeast-2)" >> create_ecr_secret_kpop.sh
echo "kubectl create secret docker-registry ecr-registry-secret \\" >> create_ecr_secret_kpop.sh
echo " --docker-server=553186839963.dkr.ecr.ap-northeast-2.amazonaws.com \\" >> create_ecr_secret_kpop.sh
echo " --docker-username=AWS \\" >> create_ecr_secret_kpop.sh
echo " --docker-password=\$ecr_token \\" >> create_ecr_secret_kpop.sh
echo " -n kpop" >> create_ecr_secret_kpop.sh
# 스크립트 파일을 실행합니다.
chmod +x create_ecr_secret_kpop.sh
./create_ecr_secret_kpop.sh
EOT
}
depends_on = [null_resource.create_kpop_namespace]
}
resource "null_resource" "create_ecr_secret_jenkins" {
provisioner "local-exec" {
command = <<-EOT
# 스크립트 파일을 만듭니다.
echo "#!/bin/bash" > create_ecr_secret_jenkins.sh
echo "ecr_token=\$(aws ecr get-login-password --region ap-northeast-2)" >> create_ecr_secret_jenkins.sh
echo "kubectl create secret docker-registry ecr-registry-secret \\" >> create_ecr_secret_jenkins.sh
echo " --docker-server=553186839963.dkr.ecr.ap-northeast-2.amazonaws.com \\" >> create_ecr_secret_jenkins.sh
echo " --docker-username=AWS \\" >> create_ecr_secret_jenkins.sh
echo " --docker-password=\$ecr_token \\" >> create_ecr_secret_jenkins.sh
echo " -n jenkins" >> create_ecr_secret_jenkins.sh
# 스크립트 파일을 실행합니다.
chmod +x create_ecr_secret_jenkins.sh
./create_ecr_secret_jenkins.sh
EOT
}
depends_on = [null_resource.create_kpop_namespace]
}
argo user 생성하기, 그리고 admin 권한 부여 하기
admin 권한은 권한 부여부분만 yaml 작성하여 적용하면 자동 구현된다.
Argo CD 설치 및 유저 설정
Argo CD 설치 및 유저 설정에 관한 내용입니다.
loyle.medium.com
resource "null_resource" "patch_argo_accounts" {
depends_on = [null_resource.create_ecr_secret_jenkins]
provisioner "local-exec" {
command = "kubectl patch configmap argocd-cm -n argocd --type merge -p '{\"data\":{\"accounts.argo\":\"apiKey\"}}'"
}
}
resource "local_file" "argocd-rbac" {
depends_on = [null_resource.patch_argo_accounts]
filename = "${path.module}/argocd-rbac.yml"
content = <<-EOT
apiVersion: v1
data:
policy.csv: |
g, argo, role:admin
policy.default: role:''
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
EOT
}
resource "null_resource" "apply_argocd_rbac" {
depends_on = [local_file.argocd-rbac]
provisioner "local-exec" {
command = "kubectl apply -f ${path.module}/argocd-rbac.yml"
}
}
결과
argo 의 수정사항이 반영되는 모습
manifest 파일이 적용되는 모습이다. pv 와 pvc 는 어떤 순서로 생성되는지 상관없다. 대상 이름이 명확하다면 알아서 pvc는 일치하는 대상 pv 에 마운트된다.
ecr 시크릿 값이 자동 생성된다.
자동 생성된 argo와 jenkins
git-hub : https://github.com/drogva/terraform-eks-self-made-/tree/main
GitHub - drogva/terraform-eks-self-made-
Contribute to drogva/terraform-eks-self-made- development by creating an account on GitHub.
github.com