새소식

반응형
k8s/CloudNet@

[CloudNet@] Production Kubernetes Online Study - 4주차.

  • -
728x90
반응형

 

 

 

안녕하세요 늑대양입니다 😍

 

 

 

 

늑대양 보라보라버전!!

 

 

 

 

이번에 CloudNet@에서 진행하는 Production Kubernetes Online Study(PKOS)에 참여하여 관련 내용을 공유드리고자 합니다.

 

 

오늘은 PKOS 스터디 4주차 학습 내용을 안내해드리록하겠습니다.

 

 

 

 

CloudNet@ 팀 블로그 메인 커버

 

 

 

 

 

CloudNet@ 팀 블로그 Main URL:

https://www.notion.so/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863

 

CloudNet@ Blog

CloudNet@ 팀에서 Cloud Infra & Network 기술에 대한 정보를 공유하는 블로그 입니다.

www.notion.so

 

 

 

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

 

 

docker version 확인

 

 

도커 루트 디렉토리 확인

 

 

  • 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 파일의 컨테이너 이미지 저장소 주소를 로컬 하버로 변경 및 하버 저장소 이미지를 사용하는 디플로이먼트 생성하기
  • 컨테이너 이미지 업로드 시, 자동으로 이미지 보안 스캔 기능 사용

 

로컬 하버에서 가져온 busybox 이미지 확인

 

 

이미지 스캔 기능 테스트 - trivy

 

 

 

깃랩(GitLab)을 이용하여 로컬 깃(Git) 소스 저장소 구축

  • 오픈소스로 사용 가능한 소스 코드 원격 저장소
  • 최소 스펙: 4CPU, 4Mem, 40GB Disk
  • 헬름 차트로 깃랩 설치 후 웹 로그인
  • 생성한 깃랩 프로젝트에 쿠버네티스에서 사용하는 YAML 파일 업로드 (토큰값 확인!!)
  • 메인 스터디도서 250p 깃랩에 추가 계정 생성 후 테스트

 

 

Impersonation token 값 확인

 

 

 

User 생성 후, 테스트 완료!!

 

 

 

아르고시디(ArgoCD)를 활용한 깃옵스(GitOps) 시스템 구축

ArgoCD is a declarative, GitOps continuous delivery tool for Kubernetes.

 

Image Source: 24단계 실습으로 정복하는 쿠버네티스 - 이정훈 지음

 

 

 

c.f What is CD?

  • 지속적인 배포란(Continuous Delivery, CD) 개발자가 소스코드를 변경해서 깃 저장소에 푸시하면 해당 변경 사항이 고객이 사용하는 실제 운영환경의 시스템까지 자동으로 반영
    • 개발자의 코드가 원격 저장소에 업로드됐을 때, 아르고시디가 자동으로 해당 코드를 클러스터 운영환경에 배포
    • 아르고시디로 배포한 헬름 애플리케이션의 리소스 목록, 각 리소스 간 관계 및 에러 유무를 UI로 보여줌
  • 단일 진실 원천(SSOT, Single Source Of Truth)이란 어떠한 진실(결과)의 원인이 하나의 이유(원천)에서 비롯되는 것을 의미합니다.
    • 쿠버네티스 환경에서 깃옵스의 의미는 실제 운영 중인 클러스터의 상태를 개발자의 로컬 PC혹은 아무런 기록을 남기지 않고 클러스터에서 임의로 수정하게 하지 않고 공용으로 관리하는 깃 저장소에서만 유일하게 변경을 허용함으로써 단일 진실 원천(SSOT)을 구현!!
    • 아르고시디를 사용하면 쿠버네티스 매니페스트 소스 파일을 여러 개발자의 개인 PC에 보관하지 않고 중앙의 통합된 깃 저장소에 반드시 업로드하고 동기화하도록 정책 관리 가능

 

 

argocd 관련 배포된 리소스 확인!!

 

 

 

성공적으로 rabbitmq SYNC 완료!!

 

 

 

(실습 완료 후) 자원 삭제

# 순서대로 진행!!

# 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에 자신만의 아무 이미지나 태그해서 업로드하고 다운로드 해보고 관련 스샷 올려주세요

harbor에 이미지 업로드

 

 

 

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

CloudNet@.md file 업로드 진행

 

 

 

GitLab에 올라간 파일 확인!!

 

 

 

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

기존에 배포된 rabbitmq 확인

 

 

 

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

 

 

 

 

ArgoCD에서 정상적으로 배포 및 SYNC 완료된 httpd 확인!!

 

 

 

 

 

 

 

 

 

 

긴 글 읽어주셔서 감사합니다 👻

 

 

 

 

728x90
반응형
Contents

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

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