Browsing Tag

CERTIFICATION

IT/Linux/Kubernetes

[K8S] Study the Kubernetes command in preparation for the CKA

안녕하세요. ManVSCloud 김수현입니다.

요즘 CKA 자격증 준비로 꾸준히 Kubernetes 공부를 하고 있습니다.
CKA 시험은 아무래도 실습 시험이다보니 꾸준히 실습 환경에서 다양한 연습을 필요로 합니다.

오늘은 제가 요즘 공부하고 있는 Kubernetes의 명령어들과 CKA 공부법 및 링크(Docs) 모음을 공유하고자 합니다.


Kubectl 명령어

kubernetes에서 클러스터에 명령을 내리기 위해서는 우선적으로 kubectl 명령어가 익숙해져야합니다. 자주 사용되는 kubectl 명령어에 대해 간단히 알아보도록 하겠습니다.

그런데… 명령어가 아~~~주 많습니다. create 명령어를 공부하기 위해 docs에 들어가서 create페이지를 들어가면 아래 명령어처럼 별거 아닌듯이 나와있지만 스크롤을 아무리 내려도 create가 끝나지 않을 것입니다.

$ kubectl create -f FILENAME

좌측 카테고리를 다시 한 번 봤는데 숨겨진 리스트들이 나오더군요…

처음부터 다~ 외우지 않아도 됩니다.
자주 사용하다보면 자주 사용하는 것들은 손이 익히게 되는 것이니까요?

CKA 시험도 kubernetes.io docs를 볼 수 있게 해주기 때문에 명령어를 한번씩 사용해보고 특정 상황에 맞게 필요한 명령어를 찾아서 사용할 수만 있다면 크게 문제 없을 것이라 생각됩니다.

The most basic commands for importing workloads 📢
  • create
  • get
  • run
  • expose
  • delete
APP MANAGEMENT 🔨
  • apply
  • annotate
  • autoscale
  • debug
  • diff
  • edit
  • kustomize
  • label
  • patch
  • replace
  • rollout
  • scale
  • set
  • wait
WORKING WITH APPS 🚢
  • attach
  • auth
  • cp
  • describe
  • exec
  • logs
  • port-forward
  • proxy
  • top
CLUSTER MANAGEMENT 💻
  • api-versions
  • certificate
  • cluster-info
  • cordon
  • drain
  • taint
  • uncordon
KUBECTL SETTINGS AND USAGE 🔎
  • alpha
  • api-resources
  • completion
  • config
  • explain
  • options
  • plugin
  • version

CKA(Certified Kubernetes Administrator)를 제대로 준비하자!

우선 CKA를 준비하는 지금 docs에서 yaml 파일을 구해서 쓴다기보다 명령어를 이용하여 yaml 파일을 생성하는 연습을 하고 있습니다. 예를 들어봅시다.

네임스페이스는 manvscloud이고 레이블은 name=kim을 사용해야하는 1.12버전의 nginx를 생성조건에 맞게 명령어를 써본다면 아래와 같이 쓸 수 있습니다.

root@cka-k8s-master:/home/k8s# kubectl run nginx --image=nginx:1.12 --labels=name=kim --namespace=manvscloud --dry-run=client -o yaml > nginx.yaml

생성된 yaml 파일을 보면 아래와 같이 생성되어 있습니다.

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    name: kim
  name: nginx
  namespace: manvscloud
spec:
  containers:
  - image: nginx:1.12
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

명령어로 yaml 생성에 익숙해진다면 yaml 파일을 생성하지 않고 옵션에 맞게 pod를 생성하는 것도 해봅니다.

root@cka-k8s-master:/home/k8s# kubectl run nginx --image=nginx:1.12 --labels=name=kim --namespace=manvscloud --dry-run=client -o yaml | kubectl create -n manvscloud -f -

이런 방법으로 연습을 해주면 명령어 옵션도 빠르게 익힐 수 있고 이후 yaml에 익숙하지 않더라도 어떠한 옵션을 넣어야하는데 어디에 넣어야할지 모를 때 명령어로 원하는 옵션을 주고 yaml 파일로 뽑아서 확인도 해볼 수 있을 것같습니다.


또 다른 주제로 Multi-container pod 환경에서 확인 방법에 대해서도 적응했습니다.
우선 예시로 Multi-container pod 하나를 생성하겠습니다.

vi multicon.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: multi-con
  name: multi-con
spec:
  containers:
  - image: nginx
    name: nginx-con
  - image: redis
    name: redis-con
  - image: mongo
    name: mongo-con
  restartPolicy: Always

하나의 pod 내에 3개의 컨테이너 이미지가 존재하는 것입니다.

root@cka-k8s-master:/home/k8s# kubectl get pod --show-labels
NAME        READY   STATUS    RESTARTS   AGE   LABELS
multi-con   3/3     Running   0          17m   run=multi-con

아래 명령어들로 컨테이너 이미지 목록을 볼 수 있습니다.

root@cka-k8s-master:/home/k8s# kubectl describe pod | grep Image
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:353c20f74d9b6aee359f30e8e4f69c3d7eaea2f610681c4a95849a2fd7c497f9
    Image:          redis
    Image ID:       docker-pullable://redis@sha256:b6a9fc3535388a6fc04f3bdb83fb4d9d0b4ffd85e7609a6ff2f0f731427823e3
    Image:          mongo
    Image ID:       docker-pullable://mongo@sha256:fe44eb6a2ea2bb1548718ec05eb9cb165f1bded37595ebea507bddc413ab99ae

// 레이블이 run=multi-con으로 필터링된 컨테이너 이미지 목록
root@cka-k8s-master:/home/k8s# kubectl get pods --all-namespaces -o=jsonpath="{.items[*].spec.containers[*].image}" -l run=multi-con
nginx redis mongo

그렇다면 하나의 pod안에 다수의 컨테이너가 있다면 어떻게 다를까요?
-c 옵션으로 pod 내에 컨테이너를 지정하여 명령어를 사용하거나 해당 컨테이너로 접속이 가능합니다.

// nginx-con 컨테이너 내에 nginx.conf 파일 여부 확인
root@cka-k8s-master:/home/k8s# kubectl exec multi-con -c nginx-con -- ls -l /etc/nginx/nginx.conf
-rw-r--r-- 1 root root 648 Jul  6 15:11 /etc/nginx/nginx.conf

//mongo-con 컨테이너 접속
root@cka-k8s-master:/home/k8s# kubectl exec -it multi-con -c mongo-con -- /bin/bash
root@multi-con:/#

생각보다 간단하지만 이런 케이스를 경험해보지 않는다면 당황할 수 있으니 어떠한 케이스라도 한번씩 다 해보는 게 중요하다고 봅니다.
(이해하지 못하고 무작정 외우는 건 제가 선호하는 타입이 아니라서…)


마지막으로 하나를 더 알아보겠습니다.

이번에는 마스터의 kubectl, kubelet, kubeadm의 버전을 업그레이드 할 것입니다.
단, 작업 전 예약 불가능으로 설정할 것이며 작업 후 예약 가능하도록 설정해줄 것입니다.
또한 업그레이드 하기 전 유지 관리를 위해 마스터를 drain 해줄 것입니다.

작업 전 master에서 kubernetes 패키지를 확인해보니 현재 kubectl, kubelet, kubeadm 버전은 1.21.1이네요. 해당 버전을 1.21.2로 업그레이드 하겠습니다.

[root@manvscloud-k8s-m ~ (kube:default)]# dpkg -l | grep kube
hi  kubeadm                              1.21.1-00                         amd64        Kubernetes Cluster Bootstrapping Tool
hi  kubectl                              1.21.1-00                         amd64        Kubernetes Command Line Tool
hi  kubelet                              1.21.1-00                         amd64        Kubernetes Node Agent
ii  kubernetes-cni                       0.8.7-00                          amd64        Kubernetes CNI

업그레이드 전 조건이 있으니 우리는 kubectl 명령어 중 cordon, uncordon, drain 을 사용하게 됩니다.

// 아래와 같이 명령어를 사용해주면 해당 노드는 스케줄이 불가능하게 표시됩니다.
[root@manvscloud-k8s-m ~ (kube:default)]# kubectl cordon manvscloud-k8s-m
node/manvscloud-k8s-m cordoned

// 이제 drain을 해주는데 이는 유지 관리를 위해 지정된 노드에 있는 pod들을 다른곳으로 이동시키는 명령어입니다. 자세한 옵션은 kubectl docs를 참고해주세요.
[root@manvscloud-k8s-m ~ (kube:default)]# kubectl drain manvscloud-k8s-m --delete-local-data --ignore-daemonsets --force
Flag --delete-local-data has been deprecated, This option is deprecated and will be deleted. Use --delete-emptydir-data.
node/manvscloud-k8s-m already cordoned
WARNING: ignoring DaemonSet-managed Pods: kube-system/calico-node-xqbt6, kube-system/kube-proxy-jqvxn
evicting pod kube-system/coredns-558bd4d5db-gv4dn
evicting pod kube-system/calico-kube-controllers-78d6f96c7b-5nnlh
evicting pod kube-system/coredns-558bd4d5db-62njr
pod/calico-kube-controllers-78d6f96c7b-5nnlh evicted
pod/coredns-558bd4d5db-gv4dn evicted
pod/coredns-558bd4d5db-62njr evicted
node/manvscloud-k8s-m evicted

// 이제 1.21.2 버전을 설치해줍시다.
[root@manvscloud-k8s-m ~ (kube:default)]# apt-get install kubeadm=1.21.2-00 kubelet=1.21.2-00 kubectl=1.21.2-00

--- 설치 내용 생략 ---

// 이후 daemon-reload와 kubelet을 재시작 해줍니다.
[root@manvscloud-k8s-m ~ (kube:default)]# systemctl daemon-reload
[root@manvscloud-k8s-m ~ (kube:default)]# systemctl restart kubelet

kubectl, kubelet, kubeadm의 버전이 1.21.2 버전으로 설치되었습니다.

[root@manvscloud-k8s-m ~ (kube:default)]# dpkg -l | grep kube
ii  kubeadm                              1.21.2-00                         amd64        Kubernetes Cluster Bootstrapping Tool
ii  kubectl                              1.21.2-00                         amd64        Kubernetes Command Line Tool
ii  kubelet                              1.21.2-00                         amd64        Kubernetes Node Agent
ii  kubernetes-cni                       0.8.7-00                          amd64        Kubernetes CNI

이제 마스터 노드가 정상적으로 스케줄 예약이 가능하도록 uncordon 해줍니다.

[root@manvscloud-k8s-m ~ (kube:default)]# kubectl uncordon manvscloud-k8s-m
node/manvscloud-k8s-m uncordoned

kubectl get nodes로 마스터 노드 버전을 보시면 마스터 노드의 버전이 1.21.2로 올라 가있는 것을 보실 수 있습니다.

[root@manvscloud-k8s-m ~ (kube:default)]# kubectl get nodes
NAME                STATUS   ROLES                  AGE   VERSION
manvscloud-k8s-m    Ready    control-plane,master   23d   v1.21.2
manvscloud-k8s-w1   Ready    <none>                 23d   v1.21.1
manvscloud-k8s-w2   Ready    <none>                 23d   v1.21.1
manvscloud-k8s-w3   Ready    <none>                 23d   v1.21.1

CKA(Certified Kubernetes Administrator) 공부 시 참고한 링크 모음


Personal Comments

지금까지 CKA 시험에 대비한 kubectl 명령어에 대해 간단하게 알아보았습니다.
다음 포스팅은 etcdctl 명령어로 CKA 공부를 이어서 진행해보도록 하겠습니다.

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

Certificate

NAVER Cloud Platform Certified Professional (NCP) 합격과 시험 후기

안녕하세요. ManVSCloud 김수현입니다.

드디어 Naver Cloud Platform Professional 시험에 합격하였습니다.
2020.06.30 NAVER Cloud Platform Certified Associate 응시 이후
Professional 은 약 10개월만에 시험을 보게되었습니다.

Naver Cloud Professional 시험은 총 3번의 시험을 합격해야 Professional 자격을 얻게됩니다.

200 – NCP(Overview, Compute/Storage) – 2021.05.11 (화)
207 – NCP(Troubleshooting) – 2021.04.15 (목)
202 – NCP(Network/Media, Database/Management/Analytics) – 2021.04.13 (화)

위 3개의 시험을 나누어 보게되었고 아래 자격증을 얻게되었습니다.

◈ NAVER Cloud Platform Certified Professional (NCP)
Issue Date : 2021-05-12


시험 TIP

간단하게 Naver Cloud Platform Professional 시험의 Tip을 적어볼까합니다.

우선 Professional 시험부터는 필기 시험뿐만이 아니라 실기 시험도 존재합니다.
어느정도 사용 경험이 있지 않으면 합격할 수 없으니 실습도 병행하여 준비하셔야겠습니다.
(각 시험별 필기 문제는 약 40문제이며, 실기 문제는 3문제입니다.)

우선 공통적으로 아래 두 사이트를 참고하실 필요가 있는데 설명서의 경우
Overview, Compute/Storage(200)와 Network/Media, Database/Management/Analytics(202) 시험에 필수적으로 과목별 내용을 정독 후 시험 보시는 것을 권장드립니다.

아래 edwith 사이트에서 “Authorized Course – Professional level” 영상 강의를 참고하실 수도 있는데 Troubleshooting(207) 과정을 준비하실 때에 필수적으로 봐주시면 좋을듯합니다.

물론 기존에 현장에서 엔지니어로 일하고 계실 경우Troubleshooting 과목이 가장 쉬운 난이도로 느껴지실 수 있을 것입니다.

개인적으로 느낀 시험 난이도는 아래와 같습니다.

필기 : 200 > 202 > 207
실기 : 200 = 207 > 202

전반적으로 실기 시험의 난이도는 높지 않습니다.
다만 202 시험은 당황하면 자칫 한 문제를 놓칠 수도 있겠구나 싶었습니다.
그리고 200 시험의 경우 서버 생성이 필요하여 서버 생성 시간이 약 20분 정도 소요되는데 여기서부터 이슈가 생깁니다. 나머지 두 문제는 첫번째 문제를 해결해야 풀 수 있으므로 첫 번째에서 막히면 사실상 탈락이라 보아도 될 것같습니다. 필기+실기의 총 시간이 1시간인데 필기에서 많은 시간을 소요하여 실기를 못보는 경우가 생기지 않도록 필기를 잘 준비해야 할 것입니다.

또한 필기를 적절히 풀었는데 서버 생성 시간이 다소 오래 걸려 이에 대해 시험관에게 말할 경우 추가적인 시간을 준다고도 하니 참고하여 당황하지 않길 바랍니다.

실습의 경우 비용이 부담되신다면 위 네이버 클라우드에서 진행하는 교육에 참가해보시기 바랍니다.

네이버 클라우드에서 진행하는 교육을 참가하실 경우 교육 당일부터 그 주의 일요일까지 실습 계정을 사용할 수 있어 교육 후에도 시험을 대비한 실습 테스트가 충분히 가능합니다.

또한 기본적인 실습 감각을 익히기 위해서 “NAVER CLOUD PLATFORM Hands-on Lab” 교육을 신청하시는 것을 추천드립니다. 실습에 대한 경험이 없는 분들이 시작하기 좋은 교육이며 Hands-on Lab의 경우 매달 1,2차로 나누어 자주 하는 교육인만큼 접근성에 있어 상당히 좋은 교육이라 생각됩니다.

실기 준비는 Compute/Storage/Database/Networking/Media/Analytics 카테고리에 있는 제품들을 위주로 실습해보시기 바라며 핵심적인 팁으로는 시험 시간이 필기+실기 합쳐서 1시간으로 정해져있어 한 문제당 시간 소요가 상당히 소모되는 제품은 나오지 않는 것같습니다?
(실습은 VPC 환경에 익숙해지도록 해보시면 좋을듯합니다.)

후기

목표했던 Naver Cloud Platform Professional 자격증을 드디어 얻게되었습니다.
Naver Cloud 시험의 경우 올해 후반기에 출시 예정인 Expert 시험까지 생각중에 있습니다.

코로나로 어디 나가지도 못하고 제한되다보니 가끔 공부에 대한 의지가 꺽일 때가 많습니다.
“나는 원래 카공족이고 집에서는 원래 공부가 안되는데…”라고 하면서.

하지만 한창 공부와 거리가 먼 때에는 코로나가 아니었음에도 불구하고 그럴싸한 이유를 만들어서 하지 않았던 걸로 기억합니다.
만약 지금도 하지 않는다면 앞으로도 어떻게든 이유를 만들어서 안하겠구나.. 생각했습니다. 또, 그런 핑계를 만들어서 하지 않을 사람도 있겠다라는 생각도 듭니다.
이런 때에 열심히 한다면 그것 또한 기회라고 생각합니다.
현재 자신이 처한 상황을 핑계로 아무것도 하지 않는 것보다 기회로 생각하고 나아간다면 이 상황이 끝났을 때 보다 나은 자리에 있으리라 믿습니다.

올해 목표해둔 자격증까지 총 4가지 정도가 남은듯합니다.
남은 자격증도 열심히 준비해서 합격 후 후기로 포스팅해보겠습니다.

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

Certificate

2020 Certification

※ 2020 Certification

◈ AWS Solutions Architect – Associate (SAA)

Issue Date : 2020-02-20


◈ NAVER Cloud Platform Certified Associate (NCA)
Issue Date : 2020-07-01


◈ Microsoft Azure Solutions Architect – Expert
Issue Date : 2020-07-11


▶ AZ-300 Microsoft Azure Architect Technologies 
(Issue Date : 2020-05-19)


▶ AZ-301 Microsoft Azure Architect Design 
(Issue Date : 2020-07-11)


◈ AWS Cloud Practitioner (CLF)
Issue Date : 2020-07-26


◈ AWS Database – Specialty (DBS)
Issue Date : 2020-08-23

◈ AWS Data Analytics – Specialty (DAS) 
2020 예정

◈ Certified Kubernetes Administrator (CKA)
2020 예정

◈ AWS Solutions Architect – Professional (SAP) 
2020 예정