Browsing Tag

CKA

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 공부를 이어서 진행해보도록 하겠습니다.

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

IT/Linux/Kubernetes

[K8S] CKA(Certified Kubernetes Administrator) Study 참고 링크 모음

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

해당 포스팅은 CKA(Certified Kubernetes Administrator)를 공부하며 참고했던 링크들의 모아둔 글입니다.

이 포스팅은 CKA 시험 합격 포스팅이 올라오기 전까지 주기적으로 업데이트 됩니다.


※ A collection of links that have been referenced

? kubectl Commands Reference Docs


Personal Comments

이 포스팅은 주기적으로 업데이트되니 확인하실 때마다 링크가 추가될 수 있습니다.

읽어주셔서 감사합니다.

Certificate

CKA(Certified Kubernetes Administrator) 시험 일정

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

드디어 미루어왔던 CKA(Certified Kubernetes Administrator) 시험 일정이 정해졌습니다.
2021-07-31 18:15~20:15에 시험이 예정되었습니다.

현재 DKOS에서 Kubernetes를 꾸준히 공부하고 있습니다.
다른 일정들도 많지만 이번달 말까지는 쿠버네티스 학습에 조금 더 비중을 두려고 합니다.

시험 합격 후 공부법과 시험을 어떻게 준비할 것인가에 대해 자세히 후기를 남기도록 하겠습니다.

IT/Linux/Kubernetes

Docker Kubernetes Online Study – Ubuntu 20.04 Install

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

CloudNet@에서 진행했던 ANOS 2기 스터디에 이어 DKOS(DOCKER KUBERNETES ONLINE STUDY)의 기회를 얻게되었습니다.

핵심만 콕! 쿠버네티스

위 책을 기반으로 공부를 하게 될 것으로 보이며 스터디가 6월 6일부터 시작되어 Ubuntu 설치와 사전 권장 학습을 진행해야합니다.

오늘은 간단하게 Ubuntu 20.04 설치에 대해서 포스팅했습니다.


Ubuntu 20.04 Install

VirutalBox

VirutalBox는 위 링크에서 다운로드 받을 수 있으며 Ubuntu는 20.04 Server 버전으로 VirtualBox를 이용하여 설치해줄 것입니다.

일단 DKOS-Ubuntu-Master라는 이름으로 생성해주었습니다.
이후 Node를 OS부터 하나씩 설치하지않고 Master를 특정 부분까지 설치 및 설정 해준 뒤 스냅샷으로 Node를 생성할 것입니다.

English 선택
키보드 레이아웃 고르는 것입니다.
저는 Korean으로 선택해주었습니다.
네트워크 설정해주는 곳인데 저는 이곳에서 설정을 해줬습니다.
이후 서버 내에서 설정하는 것도 알려드리겠습니다.
DHCP로 하지않고 고정으로 설정 해보겠습니다.
저는 VirtualBox에서 네트워크 연결 방식을 “어댑터에 브릿지” 으로 설정해두었으므로
위와 같이 설정해주었습니다.
192.168.0.30을 Master IP로 사용할 것입니다.
이전에 CentOS 환경으로 Kubernetes를 설치 및 테스트한 경험이 있습니다.
이전에 테스트 당시 만들어둔 표인데 대충 참고만하면 좋을듯합니다.
Disk 파티션을 설정하는 곳입니다.
Custom storage layout을 선택하면 사용자 설정을 할 수 있지만 저는 그냥 통으로 설치했습니다.
사용자 계정과 패스워드 등을 설정해줍시다.
위 Install OpenSSH Server를 체크해줍시다.
이후 따로 설치해줄 필요없습니다.
설치가 진행되고 이후 update&reboot이 나오면 reboot을 진행해주고 설치를 마무리합니다.
설치가 완료되면 설치 시 생성한 사용자 계정을 통해 접속이 가능합니다.
설치가 완료되었다면 VirtualBox에서 스냅샷을 찍어줍시다.★
스냅샷을 찍어두는 습관은 이후에도 많은 도움이 됩니다.
putty를 이용하여 생성한 OS에 접근
Ubuntu 20.04 설치 완료

Today’s Tips

Ubuntu는 CentOS와 다른 것들이 많았습니다.
저도 Redhat 기반의 경험이 많아 데비안 환경은 조금 불편할 때가 많았습니다.

  • sudo
    (sudo su – 를 하여 root 계정으로 사용할 수 있지만 사용자 계정 환경에 익숙해져보려고 합니다.)
  • apt-get
    (CentOS에서는 패키지관리자가 yum으로 사용되었지만 Ubuntu에서는 apt-get으로 사용해줍니다. +rpm과 dpkg의 차이)

또한 Ubuntu18 이후 버전부터는 네트워크 설정 파일이 yaml 파일로 설정되어있습니다.
/etc/sysconfig/network-scripts/가 아닌 /etc/netplan/ 아래 yaml 파일을 이용하여 네트워크 설정이 가능합니다.

//편의를 위한 root 권한으로 변경
manvscloud@dkos-master:~$ sudo su -
[sudo] password for manvscloud:

//작업 전 백업
root@dkos-master:~# sudo cp -avp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml_org
'/etc/netplan/00-installer-config.yaml' -> '/etc/netplan/00-installer-config.yaml_org'
root@dkos-master:~# cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      addresses:
      - 192.168.0.30/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 168.126.63.1
        search:
        - 169.126.63.2
  version: 2

위 yaml 파일을 보면 설치 시 설정했던 IP와 nameserver 등이 들어가있는 것을 볼 수 있습니다.
위 파일 수정 후 적용은 아래 명령어로 적용할 수 있습니다.

root@dkos-master:~# netplan apply

이후 스냅샷으로 생성한 Node들의 IP 설정을 해줄 때 사용하게 될 것입니다.
추가로 Hostname 변경 방법도 추가해두겠습니다.

//현재 hostname 확인
root@dkos-master:~# hostnamectl status

//hostname 변경
root@dkos-master:~# hostnamectl set-hostname dkos-node1

//hosts 파일 변경
root@dkos-master:~# vi /etc/hosts

network 및 hostname 설정간에 큰 어려움 없으시길 바랍니다.


Personal Comments

Kubernetes 시험 등록 후 다른 여러 일정으로 아직까지 시험을 못보고 있었습니다.
CloudNet@에서 진행하는 DKOS로 쿠버네티스 학습에 조금 더 집중을 할 수 있게 될 것같습니다. 2021-08-17 전에 시험 합격을 목표로 하고 있어 “네이버 클라우드에서의 보안” 포스팅을 제외하고는 쿠버네티스에 몰두할 예정입니다.

기회를 주신 CloudNet@ 팀에 다시 한 번 감사의 인사 올리며 포스팅을 마무리 하겠습니다.
긴 글 읽어주셔서 감사합니다.

Certificate

CKA (Certified Kubernetes Administrator) 시험 도전

안녕하세요? ManVSCloud (김수현)입니다.
다음 자격증 시험 준비는 CKA(Certified Kubernetes Administrator)로 정했습니다.

CKA (Certified Kubernetes Administrator) 시험이 올해 9월 1일 새로 개편되어 나온다는
소식을 듣고 새로 바뀐 시험에 도전해보기로 했습니다.

시험에 대한 자세한 내용은 다음과 같습니다.

CKA (Certified Kubernetes Administrator)

CKA 2020 : 2020 년 9 월 1 일 00:00 UTC에 사용 가능
시험 기간 : 2 시간
소프트웨어 버전 : Kubernetes v1.19

◈  클러스터 아키텍처, 설치 및 구성 – 25 %

☞ 역할 기반 액세스 제어(RBAC) 관리
☞ Kubeadm을 사용하여 기본 클러스터 설치
☞ 고 가용성 Kubernetes 클러스터 관리
☞ Kubernetes 클러스터를 배포하기위한 기본 인프라 프로비저닝
☞ Kubeadm을 사용하여 Kubernetes 클러스터에서 버전 업그레이드 수행
☞ etcd 백업 및 복원 구현

◈ 서비스 및 네트워킹 – 20 %

☞ 클러스터 노드의 호스트 네트워킹 구성 이해
☞ 포드 간의 연결 이해
☞ Cluster IP, NodePort, LoadBalancer 서비스 유형 및 엔드 포인트 이해
☞ 수신(Ingress) 컨트롤러 및 수신(Ingress) 리소스 사용 방법 파악
☞ CoreDNS 구성 및 사용 방법 이해
☞ 적절한 컨테이너 네트워크 인터페이스 플러그인 선택 


◈ 문제 해결 – 30 %

☞ 클러스터 및 노드 로깅 평가
☞ 응용 프로그램 모니터링 방법 이해
☞ 컨테이너 stdout 및 stderr 로그 관리
☞ 응용 프로그램 오류 문제 해결
☞ 클러스터 구성 요소 오류 문제 해결
☞ 네트워킹 문제 해결 


◈ 워크로드 및 일정 – 15 %

☞ 배포 및 롤링 업데이트 및 롤백 수행 방법 이해
☞ ConfigMaps 및 Secrets를 사용하여 애플리케이션 구성
☞ 애플리케이션 확장 방법 파악
☞ 강력한 자가 복구 애플리케이션 구현에 사용되는 기본 요소 이해
☞ 리소스 제한이 포드 스케줄링에 미치는 영향 이해
☞ 매니페스트 관리 및 일반적인 템플릿 도구에 대한 인식

◈ 저장 – 10 %

☞ 스토리지 클래스, 영구 볼륨 이해
☞ 볼륨 모드, 액세스 모드 및 볼륨 회수 정책 이해
☞ 영구 볼륨 클레임 기본 이해
☞ 영구 스토리지로 애플리케이션 구성 방법 이해

시험 준비 기간은 9~10월 정도로 예정 중이며,
튜토리얼을 참고하여 차근차근 하나씩 실습해볼 예정입니다.

▶ https://kubernetes.io/ko/docs/tutorials/

CKA (Certified Kubernetes Administrator) 시험은 실기 시험이라 매우 흥미를 느끼고 있습니다.
저 같은 경우 이론 시험이라도 실습을 해보지 않으면 이해하는 데에 어려움을 겪는 편이라
이번 쿠버네티스 시험은 상당히 재밌을 것 같고 기대가 됩니다.

9월 1일부터 공부를 시작할 예정이며,
CKA (Certified Kubernetes Administrator) 시험도 합격 후 개편 시험 후기로 찾아뵙도록 하겠습니다.

읽어주셔서 감사합니다.