새소식

Study/PKOS

PKOS - 4주차 Harbor, Gitlab, ArgoCD

  • -

Harbor, Gitlab, ArgoCD를 통해 CI,CD 환경 구성하기

실습 전 주의 사항

  • kops 인스턴스 t3.small & 노드 c5.2xlarge (vCPU 8, Memory 16GiB) 배포 : 이번주 실습에서 성능을 요구하는 파드를 사용함.
  • 이번 실습은 kops-ec2 인스턴스는 t3.small로 배포, 기존 cloudFomation.yaml 파일에서 docker install 등.. user data, 스크립트 수정되어 배포.

kops 인스턴스 t3.small : 도커 엔진 확인

# 도커 설치 : 이미 되어 있음
amazon-linux-extras install docker -y
systemctl start docker && systemctl enable docker

# 설치된 패키지 확인 : 도커 엔진 확인
yum list installed

# 도커 정보 확인 : client - server, Docker Root Dir, Registry
docker info

# 도커 정보 확인 : Docker Engine - Community
docker version

# 도커 서비스 상태 확인
systemctl status docker

 

EC2 instance profiles 설정 및 AWS LoadBalancer 배포 & ExternalDNS 설치 및 배포

# EC2 instance profiles 에 IAM Policy 추가(attach)
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name masters.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy --role-name nodes.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name masters.$KOPS_CLUSTER_NAME
aws iam attach-role-policy --policy-arn arn:aws:iam::$ACCOUNT_ID:policy/AllowExternalDNSUpdates --role-name nodes.$KOPS_CLUSTER_NAME

# kOps 클러스터 편집 : 아래 내용 추가
kops edit cluster
-----
spec:
  certManager:
    enabled: true
  awsLoadBalancerController:
    enabled: true
  externalDns:
    provider: external-dns
-----

# 업데이트 적용
kops update cluster --yes && echo && sleep 3 && kops rolling-update cluster

 

하버(Harbor)를 이용하여 로컬 컨테이너 이미지 저장소 구축하기

온프레미스 환경에서 컨테이너 이미지 저장소, 최소 Spec(2CPU, 4Mem, Disk 40GB)

 

헬름 차트로 Harbor 설치

# 사용 리전의 인증서 ARN 확인
aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo "alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN"

# 하버 설치
helm repo add harbor https://helm.goharbor.io
helm fetch harbor/harbor --untar
vim ~/harbor/values.yaml
----------------------
expose.tls.certSource=none  
expose.ingress.hosts.core=harbor.<각자자신의도메인>   
expose.ingress.hosts.notary=notary.<각자자신의도메인> 
expose.ingress.hosts.core=harbor.gasida.link    
expose.ingress.hosts.notary=notary.gasida.link  
expose.ingress.controller=alb                     
expose.ingress.className=alb                     
expose.ingress.annotations=alb.ingress.kubernetes.io/scheme: internet-facing
expose.ingress.annotations=alb.ingress.kubernetes.io/target-type: ip
expose.ingress.annotations=alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
expose.ingress.annotations=alb.ingress.kubernetes.io/certificate-arn: ${CERT_ARN}
externalURL=https://harbor.<각자자신의도메인>
externalURL=https://harbor.gasida.link            
----------------------

# 모니터링
kubectl create ns harbor
watch kubectl get pod,pvc,ingress -n harbor

# 설치
helm install harbor harbor/harbor -f ~/harbor/values.yaml --namespace harbor --version 1.11.0

# 확인
# registry : 컨테이너 이미지를 저장
# chartmuseum : 하버를 컨테이너 이미지뿐 아니라, 헬름 차트 리포지토리로도 사용
# notary : 서명이 완료된 컨테이너 이미지만 운영 환경에 사용하도록 설정.
# trivy : 컨테이너 이미지의 보안 취약점을 스캔
helm list -n harbor
kubectl get pod,pvc,ingress,deploy,sts -n harbor
kubectl get ingress -n harbor harbor-ingress -o json | jq
kubectl get-all -n harbor
kubectl krew install df-pv && kubectl df-pv

 

# 컨테이너 이미지 가져오기
docker pull nginx
docker pull busybox 
docker images

# 태그 설정
docker tag busybox harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1
docker image ls

# insecure 설정
cat <<EOT> /etc/docker/daemon.json
{
    "insecure-registries" : ["harbor.$KOPS_CLUSTER_NAME"]
}
EOT
cat /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker

# 로그인
docker login harbor.$KOPS_CLUSTER_NAME -u admin -p Harbor12345
cat /root/.docker/config.json | jq

# 이미지 업로드
docker push harbor.$KOPS_CLUSTER_NAME/pkos/busybox:0.1

 

과제1

Harbor 에 자신만의 아무 이미지나 태그해서 업로드하고 다운로드 해보고, 관련 스샷 올려주세요

 

harbor에 업로드된 이미지

 

harbor에서 이미지를 받아와 생성한 nginx 파드

과제2

자신만의 텍스트 파일을 kops-ec2 로컬에서 Gitlab 에 올려보고, 관련 스샷 올려주세요

 

first commit push
gitlab repository

 

 

 

과제3

ArgoCD 챕터인, 책 273페이지의 ‘Gitops 실습: 클러스터 설정 내역 변경과 깃 저장소 자동 반영’을 직접 스스로 실습해보고, 관련 스샷 올려주세요

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.