본 문서는 2023년 7월에 작성된 문서입니다.

Artifact Hub는 Kubernetes 커뮤니티의 중앙 리소스 저장소로서, 다양한 애플리케이션 패키지, Helm 차트, OPA 정책, Falco 규칙 등을 검색, 탐색 및 공유할 수 있는 오픈 소스 플랫폼입니다. 즉 Artifact Hub는 사용자와 Helm chart repository를 중개하는 역할을 수행하고 있습니다. 오늘은 Helm package를 Artifact Hub에 등록하여 사용하는 방법에 대하여 정리하였습니다.

 

시작하기 전에

Helm chart repository는 github으로 구성하고 Artifact Hub를 이용하여 Helm chart repository와 중개하도록 구성하였습니다.

 

1. github repo 생성

자신의 github에 helm package를 등록할 수 있도록 github repository를 생성하여 줍니다. 저는 repository 명을 test-nginx라고 명시하였습니다.

 

2. 실습 디렉토리 구성

helm-nginx 디렉토리는 실제 helm chart를 작성하였고 test-nginx는 방금 생성한 github repo를 clone 한 디렉토리입니다. helm-nginx 디렉토리에서 작성된 helm chart를 test-nginx에 package 하여 github에 push를 할 예정입니다.

 

3. Helm chart 작성

helm-nginx 디렉토리로 이동하여 helm chart를 간단하게 구성도록합니다. 이번 실습에서는 불필요한 부분은 제거하고 values.yaml파일과 templates/deployment.yaml만 작업하였습니다.

values.yaml

위에 사진과 내용이 동일합니다. (실습 복붙용)

name: test-nginx

replicas: 1

imageTag: latest

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"

deployment.yaml

위에 사진과 내용이 동일합니다. (실습 복붙용)

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ .Values.name }}
  name: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        resources:
{{ toYaml .Values.resources | indent 10 }}

정상적으로 작성되었는지 확인

--dry-run 옵션을 통해 실제로 생성하지 않고 helm이 잘 작성되었는지 확인할 수 있습니다.

$ helm install test --dry-run .
# 결과
NAME: test
LAST DEPLOYED: Sat Jul  1 13:51:49 2023
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: helm-nginx/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-nginx
  name: test-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-nginx
  template:
    metadata:
      labels:
        app: test-nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        resources:
          limits:
            cpu: 500m
            memory: 128Mi
          requests:
            cpu: 250m
            memory: 64Mi

 

4. helm package 생성

상위 디렉토리인 helm 디렉토리로 이동하여 helm package 명령을 수행하여 package를 생성합니다.

# helm package 생성
$ helm package ./helm-nginx/ --destination ./test-nginx

# helm index 생성
$ helm repo index ./test-nginx

# 결과 확인
$ ls -al ./test-nginx/
total 24
drwxr-xr-x 3 hsw hsw 4096 Jul  1 14:52 .
drwxr-xr-x 4 hsw hsw 4096 Jul  1 14:27 ..
drwxr-xr-x 8 hsw hsw 4096 Jul  1 14:53 .git
-rw-r--r-- 1 hsw hsw    6 Jul  1 14:27 README.md
-rw-r--r-- 1 hsw hsw  799 Jul  1 14:27 helm-nginx-0.1.0.tgz
-rw-r--r-- 1 hsw hsw  397 Jul  1 14:52 index.yaml

 

5. github push

$ git add .
$ git commit -m "create helm package"
$ git push

 

6. github pages 설정

Settings - Pages로 이동하여 다음과 같이 설정합니다. 3번까지 수행한 후 해당 페이지를 새로고침 하면 4번처럼 주소가 나옵니다. 해당 주소를 복사하고 있다가 Artifact Hub 설정에서 사용합니다.

 

7. Artifact Hub에 등록하기

Artifact Hub에 접속하여 로그인합니다.

https://artifacthub.io/

 

Artifact Hub

Find, install and publish Kubernetes packages

artifacthub.io

 

우측 상단 User 아이콘 클릭 후 Control Panel을 선택하여 줍니다.

 

ADD REPOSITORY를 선택하게 되면 다음과 같이 화면이 나오는데 여기서 해당된 값을 입력합니다.

  • Kind : Helm charts
  • Name : 등록될 Repository 이름
  • Display name : 사용자에게 보이는 이름
  • Url : 등록할 github 주소

ADD 버튼을 클릭하여 추가하게 되면 다음과 같이 Repo가 생성됩니다.

Repo 설정이 완료되었다면 일정 시간 간격(약 30분)으로 Repo 스캔을 하게 됩니다. 스캔이 완료되면 해당 Repo를 통하여 helm을 이용해 배포할 수 있습니다.

 

'Kubernetes' 카테고리의 다른 글

[Helm] Helm 기본 명령어  (0) 2023.07.15
2023 CKA(Certified Kubernetes Administrator) 취득 후기  (0) 2023.07.01

본 문서는 2023년 7월에 작성된 문서입니다.

Helm은 Kubernetes 애플리케이션을 배포, 관리 및 업데이트하기 위한 패키지 관리 도구입니다. Helm은 Kubernetes 클러스터에서 애플리케이션을 쉽게 설치하고 관리하기 위한 기능을 제공합니다. Helm은 "차트"라고 하는 패키지 형식을 사용하여 Kubernetes 애플리케이션을 정의합니다. 차트는 Kubernetes 리소스 (파드, 서비스, 볼륨 등)를 정의하는 템플릿 파일과 해당 애플리케이션을 배포하고 구성하는 데 필요한 매개변수 및 값들을 포함합니다. 이러한 차트를 사용하여 애플리케이션을 쉽게 배포하고 업데이트할 수 있습니다.

helm 설치

아래 링크를 통하여 helm 설치를 진행하여 줍니다.

https://helm.sh/docs/intro/install/

 

Installing Helm

Learn how to install and get running with Helm.

helm.sh

helm repository

helm으로 설치를 진행하기 위해서는 chart를 가지고 있는 repository를 등록하여 사용해야 합니다.

# 설치하는데 필요한 chart를 가져오는 repository를 등록합니다.
helm repo add 레포지토리명 레포지토리주소

# 등록한 repository에서 설치할 수 있는 목록을 출력합니다.
helm search 레포지토리명

# 등록한 repository를 최신으로 update합니다.
helm repo update

helm install

앞에서 repo를 등록하였다면 이제는 등록된 repo를 이용하여 kubernets에 설치 작업을 진행할 수 있습니다.

helm install -n 네임스페이스 --create-namespace 앱이름 레포지토리명/설치할앱

helm upgrade

기존에 설치했던 설정값이 변경되었을 경우 helm upgrade를 통하여 변경된 내용을 적용할 수 있습니다.

helm upgrade -n 네임스페이스 앱이름 레포지토리명/설치할앱

helm delete

더 이상 배포한 앱을 사용하지 않는다면 helm delete를 통해 자원을 반납할 수 있습니다.

helm delete -n 네임스페이스 앱이름

 

[실습] helm을 이용하여 kubernetes에 nginx 설치하기

이번에 실습 예시로 helm을 이용하여 kubernets 환경에 nginx를 기본 값으로 설치하는 방법에 대해서 알아보겠습니다. helm의 repository는 ArtifactHub에서 검색할 수 있습니다. 

https://artifacthub.io/

 

Artifact Hub

Find, install and publish Kubernetes packages

artifacthub.io

 

ArtifactHub에서 nginx를 검색하면 다음과 같이 나오는데요 여기서 중요하게 봐야 되는 것 3가지가 있습니다.

먼저 어느 단체에서 만들었는지 그리고 Star를 몇개 받았는지 마지막으로 인증된 helm chart인지를 확인하여 사용자에게 가장 합리적인 것을 선택하여 줍니다.

 

페이지로 들어오면 다음과 같은 화면이 나옵니다. 이 페이지에서 helm chart에 대한 상세한 설명이 나오니 정확한 정보를 확인하기 위해서는 해당 페이지를 참고하는 것을 추천드립니다.

이제 Kubernetes 환경에 nginx를 설치하기 위해서는 INSTALL 버튼을 클릭하여 줍니다.

 

화면에 출력된 명령어를 입력하게 되면 자신의 환경에 nginx가 설치됩니다.

결과 확인

$ kubectl get po
NAME                        READY   STATUS    RESTARTS   AGE
my-nginx-6ff77558fc-qzgw5   1/1     Running   0          15s

설치 내역 삭제하기

helm delete my-nginx

 

 

 

본 문서는 2023년 6월에 작성된 문서입니다. 시간이 지나면 현재 시험 방식과 많이 다를 수 있습니다.


저는 회사에서 2년 넘게 Kubernetes를 사용을 하여 Kubernetes에 익숙한 상태였고 이왕 Kubernetes를 사용할 줄 알게 된 거 이 기회에 CKA를 취득하는 게 좋을 것 같아 시험을 보게 되었습니다. CKA 준비 기간은 2 ~ 3주 정도 걸렸으며 모든 부분을 공부한 것이 아닌 부족한 부분만 골라 보면서 공부를 하였습니다.

결제는 어떻게?

https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/

 

Certified Kubernetes Administrator (CKA) Exam | Linux Foundation

Training in skills, knowledge, and competency to perform the responsibilities of Kubernetes administrators.

training.linuxfoundation.org

결제 진행 방식은 위 링크를 통해 Linux Foundation에 로그인 후 결제를 진행하면 됩니다. 여기서 약간의 팁은 CKA는 자주 할인을 진행하는데 적게는 15%에서 많게는 40%까지 할인을 받을 수 있습니다. 저 같은 경우 40% 해택을 받아 321,256원으로 결제할 수 있었습니다. 여기서 환율이 적용되기 때문에 환율이 좋을 때 구매를 진행하시면 같은 40% 할인이어도 실제 구매한 가격이 다를 수 있습니다.
할인 코드 확인 방법은 https://training.linuxfoundation.org/blog/ Linux Foudation 블로그에 게시물로 업로드가 되는데 그때 코드를 받아 결제를 진행하시면 됩니다.

CKA 공부 방법

저는 회사에서 Kubernetes를 2년 이상 사용하였습니다. 회사에서 사용하였을 때는 "마사야 야오야마"가 지은 "쿠버네티스 완벽 가이드"라는 책으로 공부를 하였고 CKA 준비를 하기 위해서는 Udemy에 "Mumshad Mannambeth"의 "Certified Kubernetes Administrator (CKA) with Practice Tests" 강의를 들었습니다. 저는 어느 정도 Kubernetes를 사용하여 부족한 부분만 골라서 강의를 들었습니다. 여기서 제공하는 실습문제가 실제로 많이 도움이 되었기 때문에 실습문제는 반드시 풀어보는 게 좋습니다. 이 강의 또한 할인을 자주 하기 때문에 관심등록을 통해 할인한다는 알림을 받게 되면 그때 구입하는 것을 추천드립니다. 원래 가격은 99,000원이지만 할인을 받게 되면 15,000에서 20,000원에 결제할 수 있습니다.

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/

Killer.sh 후기

CKA 시험을 결제하게 되면 Killer.sh라는 실제 시험 환경과 아주 비슷한 환경을 제공해 줍니다. 세션을 시작하면 36시간 동안 지속적으로 비슷한 시험 환경에서 예상문제를 풀 수 있는 세션을 2개 줍니다. 1개의 세션은 36시간 동안 접속할 수 있기 때문에 주말에 문제를 여러 번 풀어보면 많은 도움이 됩니다. 세션은 2개 주지만 2개의 세션 모두 시험문제가 동일하니 굳이 2개의 세션을 사용하지 않으셔도 됩니다. 참고로 Killer.sh는 실제 CKA 시험 문제보다 어려운 문제가 나오니 여기서 좋은 못한 점수를 받았다고 낙심하지 마세요. 그리고 Killer.sh는 문제와 풀이 과정까지 전부 PDF로 제공하여 부족한 부분을 공부하는데 좋습니다.

CKA 당일!!!

PSI 브라우저 설치

시험 날짜를 정하고 나면 이메일로 PSI 브라우저를 설치할 수 있는 링크를 보내줍니다. PSI 브라우저는 시험 보기 30분 전에 설치할 수 있으며 설치가 완료되고 PSI를 구동하면 PSI와 동시에 동작할 수 없는 프로세서를 죽이고 시험에 입장을 하게 됩니다. 이때 PSI와 같이 동작할 수 없는 프로그램은 대표적으로 크롬입니다. 참고로 PSI에서 버튼을 누르면 PSI가 알아서 프로그램을 죽이니 미리 프로그램을 종료하지 않으셔도 됩니다. 

준비물

폐쇄된 공간(집보다는 주말에 회사에 출근하여 폐쇄된 회의실에서 시험을 보는 것을 추천), 여권, 웹캠(노트북 가능), 최소 15인치 이상의 화면(듀얼모니터 불가능)

감독관과의 소통

PSI 브라우저 설치가 모두 정상적으로 끝나면 감독관과 채팅을 하게 되는데.. 영어를 잘 모르는 저의 입장에서는 모든 시험 통틀어서 가장 힘든 순간이었습니다. 먼저 여권으로 신원을 확인하고 노트북에 달린 웹캠으로 시험 보는 공간을 감독관에게 확인시켜주어야 합니다. 그리고 감독관이 주변에 어떠한 물건을 치우라고 하면 바로바로 치워주면 시험을 시작하게 됩니다. 저는 감독관과 채팅을 시작하자마자 "I am not good english"라고 알려주었더니 제가 영어를 못 알아듣는 거 같으니 감독관 단어 하나씩 채팅에 쳐서 알려주는 친절함을 보여주었습니다. 그러니 영어를 잘 모르더라도 너무 두려워하지 않으셔도 됩니다.

실제 시험 환경

시험장에 들어가면 아래 이미지와 같은 환경에서 시험을 보게 됩니다. 우측 상단에는 응시자(본인)의 얼굴이 나오는데 화면에 반드시 얼굴이 벗어나면 안 됩니다. 얼굴이 화면에 벗어나게 되면 채팅창으로 감독관이 카메라에 얼굴이 나와야 된다는 메시지를 보냅니다. 그리고 가장 중요한 팁은 바로 복사 붙여 넣기인데요 저는 윈도우 노트북으로 시험을 진행하였는데 터미널과 파이어폭스, 메모장의 복붙 단축키가 다릅니다.
터미널 : ctrl + shift + c(복사), ctrl + shift + v(붙여 넣기)
파이어폭스, 메모장 : ctrl + c(복사), ctrl + v(붙여 넣기)
파이어폭스 Kubernets document에서 yaml을 복사할 때는 ctrl + c로 복사하여 터미널에서는 ctrl + shift + v로 붙여 넣어야 합니다.

참고로 문제의 언어를 선택할 수 있는데 영어, 중국어, 일본어만 제공하고 있습니다.
그리고 정말 인터넷이 아주 느리니 무조건 유선으로 시험 보는 것을 추천드리고 생각보다 PSI 브라우저가 매우 무겁습니다. 그렇기 때문에 어느 정도 성능이 좋은 컴퓨터로 시험을 보는 것을 추천드립니다.

CKA 문제 유형

문제는 15 ~ 20개 정도 나오고 2시간 동안 풀 수 있습니다. 저의 경우 17문제 나왔고 문제의 유형은 아래 리스트처럼 나왔습니다.

  • pod 생성
  • 멀티 컨테이너 pod 생성
  • 사이드카 컨테이너 pod 생성
  • deploy, statefulset, daemonset 등 생성
  • service expose
  • pv, pvc 생성 후 마운트
  • ingress, networkpolicy
  • rbac
  • etcd 백업
  • version upgrade
  • Troubleshooting

CKA Tip

  1. kubectl 자동완성은 기본적으로 적용되어 있습니다.
  2. alias k="kubectl"은 기본적으로 적용되어 있습니다.
  3. etcdctl 이 이미 설치되어 있습니다.
  4. export do="--dry-run=client -o yaml"를 미리 정의해 두면 dry-run을 수행할 때 조금은 더 빠르게 작업할 수 있습니다.
  5. kubectl create --help를 통해 create로 생성할 수 있는 리소스는 create로 생성하고 create로 생성할 수 없는 리소스는 kubernetes document에서 복사하는 게 빠릅니다. (예시로 pv, pvc는 빨리 document에서 복사해 오자)
  6. PSI 브라우저 바탕화면에서 우클릭하여 메모장을 생성 후 사용할 수 있습니다.
  7. 파이어폭스에서 ctrl + f로 검색을 하고 아래에 search highlight 체크박스 선택을 통해 검색을 강조하여 볼 수 있습니다.
  8. 파이어폭스에서 실수로 ctrl + shift + c를 누르면.. 개발자 모드가 나오는데 인터넷이 매우 느려 개발자 모드를 끄는데도 5 ~ 10초 정도 소요됩니다.
  9. 내 얼굴이 나오는 상단 메뉴를 접어 화면을 조금 더 크게 사용할 수 있다.

외우면 좋은 거

  1. etcd 백업 방법
  2. manifest위치 (/etc/kubernetes/manifests)
  3. PKI 위치 (/etc/kubernetes/pki/)
  4. 파드 DNS 확인 (kubectl exec -it 파드명 -- cat /etc/resolv.conf)
  5. kubelet 로그 확인 (journalctl -u kubelet)

CKA 시험 결과

2023년 6월 6일 시험을 봤고 6월 7일에 시험 결과가 나왔고 결과는 한 번에 합격할 수 있었습니다.!!!
CKA에 도전하는 분들 모두 응원합니다.

 

'Kubernetes' 카테고리의 다른 글

[Helm] helm package를 ArtifactHub에 등록하기 (with github)  (0) 2023.07.16
[Helm] Helm 기본 명령어  (0) 2023.07.15

+ Recent posts