728x90
반응형
안녕하세요 늑대양입니다 😍
이번에 CloudNet@에서 진행하는 Production Kubernetes Online Study(PKOS)에 참여하여 관련 내용을 공유드리고자 합니다.
오늘은 PKOS 스터디 4주차 학습 내용을 안내해드리록하겠습니다.
CloudNet@ 팀 블로그 Main URL:
https://www.notion.so/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
Production Kubernetes Online Study - 3주차
4주차 학습 주제: 깃옵스 시스템 (Harbor, GitLab, ArgoCD)
Index.
- 이론
- 실습 환경 배포 (c5.2xlarge, t3.small 타입으로 변경)
- 하버(Harbor)를 이용하여 로컬 컨테이너 이미지 저장소 구축하기
- 깃랩(GitLab)을 이용하여 로컬 깃(Git) 소스 저장소 구축
- 아르고시디(ArgoCD)를 활용한 깃옵스(GitOps) 시스템 구축
- (실습 완료 후) 자원 삭제
- 과제
- 과제 1. Harbor에 자신만의 아무 이미지나 태그해서 업로드하고 다운로드 해보고 관련 스샷 올려주세요
- 과제 2. 자신만의 텍스트 파일을 kops-ec2 로컬에서 GitLab에 올려보고, 관련 스샷 올려주세요
- 과제 3. ArgoCD 챕터인, 책 273 페이지의 'GitOps 실습: 클러스터 설정 내역 변경과 깃 저장소 자동 반영'을 직접 스스로 실습해보고, 관련 스샷 올려주세요
이론
실습 환경 배포 (c5.2xlarge, t3.small 타입으로 변경)
- 이번 주 실습에서는 kops 인스턴스 t3.small & 노드 c5.2xlarge (vCPU8, Mem 16GiB) 배포
- kops 인스턴스에서 도커 엔진 확인
# default NS 진입
kubectl ns default
# 설치된 패키지 확인 : 도커 엔진 확인
yum list installed
# 도커 정보 확인 : client - server, Docker Root Dir, Registry
docker info
# 도커 정보 확인 : Docker Engine - Community
docker version
# 도커 서비스 상태 확인
systemctl status docker
# 모든 서비스의 상태 표시 - 링크
systemctl list-units --type=service
# 도커 루트 디렉토리 확인
tree -L 3 /var/lib/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)를 이용하여 로컬 컨테이너 이미지 저장소 구축하기
Harbor is an open source registry that secures artifacts with policies and role-based access control, ensures images are scanned and free from vulnerabilities, and signs images as trusted
- 온프레미스 환경의 컨테이너 이미지 저장소
- 최소 스펙: 2CPU, 4Mem, 40GB Disk
- 헬름 차트로 하버 설치
- 하버 웹 접속 및 로컬 이미지 업로드
- 쿠버네티스 YAML 파일의 컨테이너 이미지 저장소 주소를 로컬 하버로 변경 및 하버 저장소 이미지를 사용하는 디플로이먼트 생성하기
- 컨테이너 이미지 업로드 시, 자동으로 이미지 보안 스캔 기능 사용
깃랩(GitLab)을 이용하여 로컬 깃(Git) 소스 저장소 구축
- 오픈소스로 사용 가능한 소스 코드 원격 저장소
- 최소 스펙: 4CPU, 4Mem, 40GB Disk
- 헬름 차트로 깃랩 설치 후 웹 로그인
- 생성한 깃랩 프로젝트에 쿠버네티스에서 사용하는 YAML 파일 업로드 (토큰값 확인!!)
- 메인 스터디도서 250p 깃랩에 추가 계정 생성 후 테스트
아르고시디(ArgoCD)를 활용한 깃옵스(GitOps) 시스템 구축
ArgoCD is a declarative, GitOps continuous delivery tool for Kubernetes.
c.f What is CD?
- 지속적인 배포란(Continuous Delivery, CD) 개발자가 소스코드를 변경해서 깃 저장소에 푸시하면 해당 변경 사항이 고객이 사용하는 실제 운영환경의 시스템까지 자동으로 반영
- 개발자의 코드가 원격 저장소에 업로드됐을 때, 아르고시디가 자동으로 해당 코드를 클러스터 운영환경에 배포
- 아르고시디로 배포한 헬름 애플리케이션의 리소스 목록, 각 리소스 간 관계 및 에러 유무를 UI로 보여줌
- 단일 진실 원천(SSOT, Single Source Of Truth)이란 어떠한 진실(결과)의 원인이 하나의 이유(원천)에서 비롯되는 것을 의미합니다.
- 쿠버네티스 환경에서 깃옵스의 의미는 실제 운영 중인 클러스터의 상태를 개발자의 로컬 PC혹은 아무런 기록을 남기지 않고 클러스터에서 임의로 수정하게 하지 않고 공용으로 관리하는 깃 저장소에서만 유일하게 변경을 허용함으로써 단일 진실 원천(SSOT)을 구현!!
- 아르고시디를 사용하면 쿠버네티스 매니페스트 소스 파일을 여러 개발자의 개인 PC에 보관하지 않고 중앙의 통합된 깃 저장소에 반드시 업로드하고 동기화하도록 정책 관리 가능
(실습 완료 후) 자원 삭제
# 순서대로 진행!!
# argocd 삭제
kubectl delete application.argoproj.io -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
# kops 클러스터 및 cloudformation stack 삭제
kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops
과제
과제 1. Harbor에 자신만의 아무 이미지나 태그해서 업로드하고 다운로드 해보고 관련 스샷 올려주세요
과제 2. 자신만의 텍스트 파일을 kops-ec2 로컬에서 GitLab에 올려보고, 관련 스샷 올려주세요
과제 3. ArgoCD 챕터인, 책 273 페이지의 'GitOps 실습: 클러스터 설정 내역 변경과 깃 저장소 자동 반영'을 직접 스스로 실습해보고, 관련 스샷 올려주세요
httpd 관련 yaml 파일 생성
- httpd-argo-deploy.yaml
- httpd-deploy.yaml
- httpd-nodeport-svc.yaml
# httpd-argo-deploy.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: httpd
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: httpd
server: https://kubernetes.default.svc
project: default
source:
repoURL: https://gitlab.wolf-sheep.name/sainthm/test-stg.git
path: httpd
targetRevision: HEAD
directory:
recurse: true
syncPolicy:
syncOptions:
- CreateNamespace=true
automated:
prune: true
---
# httpd-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd
namespace: httpd
labels:
app: httpd
spec:
replicas: 3
selector:
matchLabels:
app: httpd
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd
# httpd-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: httpd-svc
namespace: httpd
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30180
selector:
app: httpd
type: NodePort
긴 글 읽어주셔서 감사합니다 👻
728x90
반응형
'k8s > CloudNet@' 카테고리의 다른 글
[CloudNet@] Production Kubernetes Online Study - 6주차. (0) | 2023.02.25 |
---|---|
[CloudNet@] Production Kubernetes Online Study - 5주차. (3) | 2023.02.19 |
[CloudNet@] Production Kubernetes Online Study - 3주차. (0) | 2023.02.05 |
[CloudNet@] Production Kubernetes Online Study - 2주차. (0) | 2023.01.29 |
[CloudNet@] Production Kubernetes Online Study - 1주차. (2) | 2023.01.10 |