회사에서 eks로 컨테이너 기반 인프라 구축을 맡게 되었다.
정리 겸 구축했던걸 작성하고자 한다.
EKS 배포는 테라폼 모듈이 있어서 그걸로 진행했다.(정리 생략)
아래 참고
helm으로 배포 하기 전, 네임스페이스 생성
k create ns argocd
value.yaml의 ingress 확인
ingress:
enabled: true
annotations:
alb.ingress.kubernetes.io/force-ssl-redirect: 'false'
alb.ingress.kubernetes.io/inbound-cidrs: <내부 ip로 설정>
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/subnets: subnet~~
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
alb.ingress.kubernetes.io/ssl-redirect: '443'
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:123123123:certificate/1123123123123
alb.ingress.kubernetes.io/backend-protocol: HTTP
alb.ingress.kubernetes.io/healthcheck-port: traffic-port
alb.ingress.kubernetes.io/healthcheck-protocol: HTTP
alb.ingress.kubernetes.io/healthcheck-path: /
alb.ingress.kubernetes.io/success-codes: '200-499'
labels: {}
ingressClassName: alb
# -- List of ingress hosts
## Argo Ingress.
hosts:
- <사용할 도메인 지정>
# eks 배포할때 external-dns도 같이 배포했기 때문에
aws 계정에 같은 도메인이 존재한다면 알아서 route53적용됨
앞서 생성한 네임스페이스에 배포 진행
helm install prod-argocd . -n argocd
깜빡하고 ns를 지정하지않아 제거후 다시 배포할때 아래와같은 문제가 발생
Error: INSTALLATION FAILED: rendered manifests contain a resource that already exists. Unable to continue with install: CustomResourceDefinition "applications.argoproj.io" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-namespace" must equal "argocd": current value is "default"
이때는 crd를 제거하고 다시 ns 지정해서 생성하면 된다.
k delete crd applicationsets.argoproj.io applications.argoproj.io appprojects.argoproj.io
배포 후 admin 계정 초기 패스워드 확인
k -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
패스워드 변경
#변경할 id로 argocd cli 로그인 후
argocd account update-password
조건
해당 iam role에 "신뢰할 수 있는 엔터티"를 각각 추가해준다.
#!/bin/bash
if [ "prod" == "$1" ]; then
session=$(aws sts assume-role --role-arn arn:aws:iam::<b account>:role/thanos-role --role-session-name dex-thanos-role)
else
session=$(aws sts assume-role --role-arn arn:aws:iam::<a account>:role/thanos-role --role-session-name ops-thanos-role)
fi
access=$( jq -r '.Credentials.AccessKeyId' <<< "$session" )
secret=$( jq -r '.Credentials.SecretAccessKey' <<< "$session" )
sts=$( jq -r '.Credentials.SessionToken' <<< "$session" )
export AWS_ACCESS_KEY_ID=$access
export AWS_SECRET_ACCESS_KEY=$secret
export AWS_SESSION_TOKEN=$sts
aws sts get-caller-identity
aws eks --region ap-northeast-2 update-kubeconfig --name <cluster name> --alias <config에 지정할 이름>
argocd cluster add <kube config alias>
# 오류가 난다면 자격증명 새로받고 update-kubeconfig 진행후 재시도
timeout으로 클러스터 등록이 안된다면
- 등록할 eks 보안그룹에 argocd를 등록해주거나 ip대역을 모르면 all open...
- 저는 못찾아서 allopen 했...
k config use-context <context alias>
pod에 shell 접속 하려는데 shell exec failed가 발생한다.
context 빠르게 변경하는 도구 / ns 확인하는 도구
원래라면...
k config get-contexts...
k config use-context <context 명>
이후 k9s 실행
설치방법
sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens
실행
kubectx / kubens
저것도 길어서 alias 등록해서 kc / kns 로 사용중
kc만 입력하면 get-contexts
kc <context 명> : use-context
kc -이라고 입력하면 이전에 사용한 context로 변경해줌
To be continue....