PKOS 연구 소개
이 게시물은 가다에서 작성했습니다.
프로덕션 Kubernetes 온라인 연구(PKOS) 연구 내용 정리.
이 PKOS 연구에서 연구, 연구 개요 자료 및 과제(이 게시물)는 모두 책입니다.
공부 3주차 소개
이번 셋째 주에는 GitOps에서 사용되는 Harbour, ArgoCD 및 GitLab에 대해 배웁니다.
그림과 같이 다음과 같습니다.
실험실 환경 제공
- kops-ec2 : 요새용(t3.small)
- 컨트롤 플레인: 마스터 노드
- node1 : 작업자 노드
- noed2 : 작업자 노드
항구
로컬 환경에서 사용할 수 있는 컨테이너 이미지 저장소입니다.
하버는 2020년 CNCF를 졸업하는 프로젝트입니다.
운영 수준에서는 RBAC(Role-Based Access Control), 취약성 스캐닝(Vulnerability Scanning) 및 이미지 서명을 지원합니다.
https://github.com/goharbor/harbor
CSP에서 제공하는 Docker Hub 및 이미지 스토리지와 같은 외부 솔루션을 사용할 수 있지만 스토리지, 네트워크 및 보안상의 이유로 많은 회사에서 컨테이너 이미지 스토리지로 로컬 온프레미스 환경을 선호합니다.
예상보다 많은 기업들이 보안상의 이유로 Harbor를 사용하고 있습니다.
훈련
# 사용 중인 리전의 인증서 ARN 확인
aws acm list-certificates –query ‘CertificateSummaryList().CertificateArn()’ –출력 텍스트
CERT_ARN=`aws acm list-certificates –query ‘CertificateSummaryList().CertificateArn()’ –output text`
echo “alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN”
# 포트를 설치
투구 저장소 포트 추가 https://helm.goharbor.io
헬름 포트/포트 가져오기 –untar –version 1.11.0
vim ~/harbor/values.yaml
———————-
# AWS를 사용할 것이므로 certSource를 제외합니다.
Expose.tls.certSource=없음
# 호스트 지정
Expose.ingress.hosts.core=harbor.soojinoncloud.com
Expose.ingress.hosts.notary=notary.soojinoncloud.com
# 컨트롤러와 클래스 이름 얻기
Expose.ingress.controller=alb
expon.ingress.className=alb
# Ingress에 주석 추가
alb.ingress.kubernetes.io/scheme: 인터넷 액세스 가능
alb.ingress.kubernetes.io/대상 유형: ip
alb.ingress.kubernetes.io/listen-ports: ‘({“HTTPS”:443}, {“HTTP”:80})’
alb.ingress.kubernetes.io/certificate-arn: ${CERT_ARN} # 고유한 값 입력
# 포트 콘솔(?)에 접속할 URL을 입력합니다.
외부URL=https://harbor.soojinoncloud.com
———————-
포트 연결 성공
프로젝트 생성
인증서 삽
첫째, SSL이 연결되지 않았습니다.
알고 보니 내가 가지고 있던 ACM 인증서는 soojinoncloud.com용이었는데 Harbor.soojinoncloud.com용 인증서는 없었다.
ACM 인증서를 처음 발급받았기 때문에,
이 기회 덕분에 (이 인증서에 다른 이름을 추가) 해야 한다는 것을 처음 깨달았습니다.
깃랩
Git 소스 코드의 원격 저장소로 가장 잘 알려진 GitHub, Confluence의 BitBucke 및 GitLab이 있습니다.
많은 분들이 깃허브(GitHub)를 좋아하지만 그 중 조직 내에서 설치하여 사용하는 솔루션으로 가장 많이 사용되는 것이 깃랩(GitLab)입니다.
커뮤니티 에디션은 무료로 제공되며 이미지 등록, 이슈 트래킹, 위키, CI/CD 등의 다양한 기능과 추가 비용을 지불하면 소스 코드 원격 저장 기능을 제공한다.
사용자 생성 후 해당 사용자로 로그인하여 프로젝트를 생성합니다.
GitLab에 로컬로(특히 kops-ec2 VM에서) 로그인하고 git push를 계속합니다.
# 생성한 사용자 GitLab 계정으로 로그인하기
git config --global user.name "사용자명"
git config --global user.email "사용자 이메일"
# GitLab에서 방금 생성한 프로젝트 git clone하기
git clone https://gitlab.$KOPS_CLUSTER_NAME/<각자 자신의 Gitlab 계정>/test-stg.git
# git clone 한 디렉토리로 이동
ls -al test-stg
cd test-stg
# 파일 생성 및 깃 업로드(push) : 웹에서 확인
echo "gitlab test memo" >> test.txt
git add . && git commit -m "initial commit - add test.txt"
git push
Username for 'https://gitlab.{자신의 도메인}': soojin
Password for 'https://{사용자명}@gitlab.{자신의 도메인}': <토큰 입력>
GitLab 웹 화면에 바로 업로드 된 것을 볼 수 있습니다.
아르고 CD
지속적 전달이란 무엇입니까?
즉, 개발자가 수정한 소스 코드를 Git 저장소에 푸시하면 최종 사용자가 사용하는 실제 운영 환경의 시스템에 변경 사항이 자동으로 푸시된다는 뜻이다.
Jenkins, Bamboo, TeamCity 등 다양한 CD 도구가 있으며 특히 Argo CD는 Kubernetes 시스템 CD 도구로 널리 사용됩니다.
아르고 CD란?
Argo CD는 배포 과정뿐만 아니라 Argo CD와 함께 배포되는 Helm 응용 프로그램, 각 리소스 간의 관계 및 오류 유무를 사용자 인터페이스를 통해 보여줍니다.
감사해요..
힘내
# Helm 으로 설치
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm install argocd argo/argo-cd --set server.service.type=LoadBalancer --namespace argocd --version 5.19.14
# 설치 후 확인하기
helm list -n argocd
kubectl get pod,pvc,svc,deploy,sts -n argocd
kubectl get-all -n argocd
kubectl get crd | grep argoproj
# CLB에 ExternanDNS 로 도메인 연결
kubectl annotate service -n argocd argocd-server "external-dns.alpha.kubernetes.io/hostname=argocd.$KOPS_CLUSTER_NAME"
# admin 계정의 암호 확인
ARGOPW=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
echo $ARGOPW
Argo CD CLI 도구 설치
# Argo CD CLI 도구 최신버전 설치
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
chmod +x /usr/local/bin/argocd
# 버전 확인
argocd version --short
# Argo CD 서버 로그인
argocd login argocd.$KOPS_CLUSTER_NAME --username admin --password $ARGOPW
# 위에서 설치한 설치한 깃랩의 프로젝트 URL 을 argocd 깃 리포지토리(argocd repo)로 등록. 깃랩은 프로젝트 단위로 소스 코드를 보관.
argocd repo add https://gitlab.$KOPS_CLUSTER_NAME/<깃랩 계정명>/test-stg.git --username <깃랩 계정명> --password <깃랩 계정 암호>
# Git Repository 등록 확인하기
argocd repo list
# Argo CD에 등록된 클러스터 조회하기(기본적으로 Argo CD가 설치된 쿠버네티스 클러스터는 타깃 클러스터로 등록된다)
argocd cluster list
Argo CD CLI 도구를 사용하여 애플리케이션 배포
# Git 디렉터리로 이동하기(test-stg)
cd ~/gitlab-test/test-stg
# Git 원격 오리진 주소 확인하기
git config -l | grep remote.origin.url
# RabbitMQ Helm 차트 설치하기
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm fetch bitnami/rabbitmq --untar --version 11.10.3
cd rabbitmq/
cp values.yaml my-values.yaml
# Helm 차트를 GitLab 저장소에 업로드하기
git add . && git commit -m "add rabbitmq helm"
git push
# Argo CD CRD 확인하기
kubectl get crd | grep argo
ArgoCD로 RabbitMQ Helm 애플리케이션 배포
모든 파일
책에서 제공하는 RabbitMQ 파일을 수정해보자!
cd ~/
curl -s -O https://raw.githubusercontent.com/wikibook/kubepractice/main/ch15/rabbitmq-helm-argo-application.yml
vim rabbitmq-helm-argo-application.yml
아래 YAML 파일에서 소스/경로를 변경합니다.
- repoURL: {GitLab 저장소 주소}
- 경로: rabbitmq
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: rabbitmq-helm
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: rabbitmq
server: https://kubernetes.default.svc
project: default
source:
repoURL: {GitLab 레포지토리 주소}
path: rabbitmq
targetRevision: HEAD
helm:
valueFiles:
- my-values.yaml
syncPolicy:
syncOptions:
- CreateNamespace=true
배포와 동시에 Argo CD 웹 인터페이스에 반영되는 것을 볼 수 있습니다.
statefulset을 1개에서 5개로 늘리겠습니다.
kubectl scale statefulset -n rabbitmq rabbitmq-helm --replicas 5
웹 UI에서 바로 볼 수 있습니다.
명확한 자원
1단계: Helm 차트 삭제
# argocd 삭제
kubectl delete application -n argocd rabbitmq-helm # 미 삭제되어 있을 경우 삭제
helm uninstall -n argocd argocd
kubectl delete ns argocd
# gitlab 삭제
helm uninstall -n gitlab gitlab
kubectl delete pvc --all -n gitlab
kubectl delete ns gitlab
# harbor 삭제
helm uninstall -n harbor harbor
kubectl delete pvc --all -n harbor
kubectl delete ns harbor
2단계: kOps 클러스터 및 AWS CloudFormation 스택 삭제
kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops