728x90
반응형
4 Argo CD 모듈
쿠버네티스 및 헬름 공급자를 사용해 깃옵스 배포 도구인 Argo CD를 설치하는 모듈을 정의
4.1 깃 클론
c:\msur> git clone https://github.com/naanjini/module-argo-cd.git
4.2 Argo CD 모듈 정의
C:\msur\module-argo-cd\main.tf
쿠버네티스 및 헬름 공급자 구성
# 쿠버네티스 공급자 구성
# https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs
provider "kubernetes" {
cluster_ca_certificate = base64decode(var.kubernetes_cluster_cert_data)
host = var.kubernetes_cluster_endpoint
exec {
api_version = "client.authentication.k8s.io/v1alpha1"
command = "aws-iam-authenticator"
args = ["token", "-i", "${var.kubernetes_cluster_name}"]
}
}
# 헬름 공급자 구성 - 쿠버네티스 배포 도구로 분산형 쿠버네티스 애플리케이션을 패키지로 배포하는데 널리 사용
# https://registry.terraform.io/providers/hashicorp/helm/latest/docs
provider "helm" {
kubernetes {
cluster_ca_certificate = base64decode(var.kubernetes_cluster_cert_data)
host = var.kubernetes_cluster_endpoint
exec {
api_version = "client.authentication.k8s.io/v1alpha1"
command = "aws-iam-authenticator"
args = ["token", "-i", "${var.kubernetes_cluster_name}"]
}
}
}
Argo CD 커뮤니티에서 제공하는 헬름 차트를 사용해 Argo CD 서버를 설치
# 네임스페이스 생성
# https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace
resource "kubernetes_namespace" "argo-ns" {
metadata {
name = "argocd"
}
}
# 헬름 공급자를 사용해 Argo CD를 설치
# https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release
resource "helm_release" "argocd" {
name = "msur"
chart = "argo-cd"
repository = "https://argoproj.github.io/argo-helm"
namespace = "argocd"
}
4.3 입력 값 정의
C:\msur\module-argo-cd\variables.tf
variable "kubernetes_cluster_id" {
type = string
}
variable "kubernetes_cluster_cert_data" {
type = string
}
variable "kubernetes_cluster_endpoint" {
type = string
}
variable "kubernetes_cluster_name" {
type = string
}
variable "eks_nodegroup_id" {
type = string
}
4.4 형식 지정, 작업 디렉터리 초기화, 구성 검사
C:\msur\module-argo-cd> terraform fmt
C:\msur\module-argo-cd> terraform init
C:\msur\module-argo-cd> terraform validate
4.5 깃허브 저장소에 푸시
C:\msur\module-argo-cd> git add .
C:\msur\module-argo-cd> git commit -m "ArgoCD 모듈 구성"
C:\msur\module-argo-cd> git push origin
4.6 샌드박스 환경에 Argo CD 설치
argocd 모듈 추가
C:\kubernetes\env-sandbox\main.tf
… (생략) …
# GitOps 구성
module "argo-cd-server" {
source = "git::https://github.com/naanjini/module-argo-cd.git"
kubernetes_cluster_name = module.aws-eks.eks_cluster_name
kubernetes_cluster_cert_data = module.aws-eks.eks_cluster_certificate_data
kubernetes_cluster_endpoint = module.aws-eks.eks_cluster_endpoint
}
형식 지정, 작업 디렉터리 초기화, 구성 검사
c:\msur\env-sandbox> terraform fmt
c:\msur\env-sandbox> terraform init
c:\msur\env-sandbox> terraform validate
릴리스 태그 지정 및 깃허브 저장소에 푸시
c:\msur\env-sandbox> git add .
c:\msur\env-sandbox> git commit -m "ArgoCD 구성"
c:\msur\env-sandbox> git push origin
c:\msur\env-sandbox> git tag -a v1.2 -m "ArgoCD 생성"
c:\msur\env-sandbox> git push origin v1.2
워크플로 실행 확인
4.7 샌드박스 환경 테스트
EKS 클러스터에 연결에 사용할 kubeconfig 파일을 다운로드
kubeconfig 파일을 사용할 수 있도록 설정
다운로드 받은 kubeconfig.zip 파일을 압축 해제한 파일을 c:\users\로그인계정명\.kube\config 파일에 복사하거나, 압축 해제한 파일의 경로를 KUBECONFIG 환경변수의 값으로 설정
aws-iam-authenticator 설치
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-aws-iam-authenticator.html
- PowerShell 터미널
- curl -o aws-iam-authenticator.exe https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/windows/amd64/aws-iam-authenticator.exe
- aws-iam-authenticator.exe 파일을 c:\msur 폴더로 복사
- PATH 환경변수에 c:\msur 추가
- (명령 프롬프트를 새로 실행해서) aws-iam-authenticator.exe help 동작 확인
노드, 클러스터, 서비스 확인 ⇒ 네트워크와 EKS 서비스가 프로비저닝 되었고 클러스터에 성공적으로 연결할 수 있음
C:\msur> kubectl get node
NAME STATUS ROLES AGE VERSION
ip-10-10-244-57.us-west-2.compute.internal Ready <none> 34m v1.21.5-eks-9017834
C:\msur> kubectl cluster-info
Kubernetes control plane is running at https://317903107F75E2C4EB5D8CA1950142BD.gr7.us-west-2.eks.amazonaws.com
CoreDNS is running at https://317903107F75E2C4EB5D8CA1950142BD.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
C:\msur> kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.20.0.1 <none> 443/TCP 40m
Argo CD가 클러스터에 설치되었는지 확인
C:\msur> kubectl get pod -n argocd
NAME READY STATUS RESTARTS AGE
msur-argocd-application-controller-77ddcdf99c-797gb 1/1 Running 0 38m
msur-argocd-dex-server-6c9b994fcb-fx2dw 1/1 Running 0 38m
msur-argocd-redis-5d468887df-jfdmf 1/1 Running 0 38m
msur-argocd-repo-server-697d88d9d-x6dmv 1/1 Running 0 38m
msur-argocd-server-f694b48c6-rwlpk 1/1 Running 0 38m
4.8 인프라 환경 정리
c:\msur\env-sandbox> terraform init
c:\msur\env-sandbox> terraform get -update
c:\msur\env-sandbox> terraform destroy
오류 발생 시 state를 강제로 삭제
╷
│ Error: Get "https://D93BE8321A8F938E45CEEA3AD7E85C9B.gr7.us-west-2.eks.amazonaws.com/api/v1/namespaces/argocd": getting credentials: exec: executable aws-iam-authenticator not found
│
│ It looks like you are trying to use a client-go credential plugin that is not installed.
│
│ To learn more about this feature, consult the documentation available at:
│ https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
│
│ with module.argo-cd-server.kubernetes_namespace.argo-ns,
│ on .terraform\modules\argo-cd-server\main.tf line 62, in resource "kubernetes_namespace" "argo-ns":
│ 62: resource "kubernetes_namespace" "argo-ns" {
│
╵
╷
│ Error: Kubernetes cluster unreachable: Get "https://D93BE8321A8F938E45CEEA3AD7E85C9B.gr7.us-west-2.eks.amazonaws.com/version?timeout=32s": getting credentials: exec: executable aws-iam-authenticator not found
│
│ It looks like you are trying to use a client-go credential plugin that is not installed.
│
│ To learn more about this feature, consult the documentation available at:
│ https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
│
│ with module.argo-cd-server.helm_release.argocd,
│ on .terraform\modules\argo-cd-server\main.tf line 68, in resource "helm_release" "argocd":
│ 68: resource "helm_release" "argocd" {
│
╵
c:\msur\env-sandbox> terraform state rm module.argo-cd-server.kubernetes_namespace.argo-ns
Removed module.argo-cd-server.kubernetes_namespace.argo-ns
Successfully removed 1 resource instance(s).
c:\msur\env-sandbox> terraform state rm module.argo-cd-server.helm_release.argocd
Removed module.argo-cd-server.helm_release.argocd
Successfully removed 1 resource instance(s).
다시 샌드박스 환경을 삭제
c:\msur\env-sandbox> terraform destroy
module.aws-eks.aws_iam_role.ms-node: Refreshing state... [id=sk403-003-ms-cluster-sandbox.node]
… (생략) …
module.aws-eks.aws_eks_node_group.ms-node-group: Refreshing state... [id=sk403-003-ms-cluster-sandbox:microservices]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following
symbols:
- destroy
Terraform will perform the following actions:
:
Plan: 0 to add, 0 to change, 26 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes ⇐ 삭제
module.aws-eks.aws_eks_node_group.ms-node-group: Destroying... [id=sk403-003-ms-cluster-sandbox:microservices]
… (생략) …
module.aws-eks.aws_iam_role.sk403-003-ms-cluster: Destruction complete after 1s
Destroy complete! Resources: 26 destroyed.
리소스 삭제 확인
c:\msur\env-sandbox> aws eks list-clusters
{
"clusters": []
}
c:\msur\env-sandbox> aws ec2 describe-vpcs --filters Name=cidr,Values=10.10.0.0/16
{
"Vpcs": []
}
c:\msur\env-sandbox> aws elbv2 describe-load-balancers
{
"LoadBalancers": []
}
728x90
반응형
댓글