Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

[Kubernetes] CKA 취득 후기 본문

Kubernetes

[Kubernetes] CKA 취득 후기

Study_note 2022. 9. 5. 11:29

시험 환경이나 등록 및 세부적인 내용들은 타 블로그에서 찾아보면 쉽게 찾아볼 수 있기 때문에 넘어간다

 

공부 방법

1. 우선 CKA를 준비하기전에 "핵심만 콕 쿠버네티스"라는 기초 K8S책을 2번 정도 정독한거 같다

 

첫번째는 실습을 따라하는 느낌으로 컨트롤러들을 이해한다면

두번째는 각 컨트롤러 내부 설정 이나 특징 등 정확히 파악하듯이 공부했다

 

2. 제일 강력추천하는게 다들 추천하는 뭄샤드님의 udemy 강좌이다.

 

이 강좌는 k8s 실습 환경을 무제한으로 제공해주기 때문에  연습환경으로 사용하기 좋고 1에서 이해했던 부분들을 실습을 통해 깊게 파고들수 있다.

중요한게 mock exam, lightning labs 파트는 무조건 3번은 보고 전부 풀수있는 실력을 만들것

시험에서 mock exam, lightning labs 파트 문제가 많이 나온다.

 

단점은 공식 한국어 번역자막이 없어서 이 강좌로 기초부터 배울려면 어려움이 있다!!

(mock exam, lightning labs에서 트러블 슈팅 문제 중 contro1ler, sleeeeep 같은 문제들은 나오지 않는다.)

 

3. 따배쿠

 

사실 필자는 1차 시험을 떨어졌다....

2차 기회도 날리면 안될거 같은 마음에 후기들을 찾아봤고 유튜브 강좌에서 따배쿠 추천이 많았다

직접 들어보니 30개가 넘는 문제 유형을 제공해주고 시험을 본 후 30개 전부 실제 문제 유형과 비슷하다는 느낌을 들었다

강의 자체가 그 컨트롤러들을 설명하고 문제를 푸는 식이여서 k8s를 처음 접하는 사람들에게도 좋은 강의라 생각 든다.

 

앞서 말했듯 필자는 1차 시험을 떨어져 2차 시험도 봤는데

1차와 2차는 싱크로는 95%가 넘는듯했다 다른 부분은 예를들어 nodeselector의 라벨 유형이 다른정도로 느껴졌다.

 

killer.sh 사용

 

필자는 1차에서 시험환경을 제공해주는 killer.sh를 풀어보지 않았다

이유는 문제가  훨씬 어렵다하고 문제 유형들도 시험에 안나오는 유형이라는 글을보고 괜히 자신감을 깍기 싫었다.

 

하지만  1차 시험을 시작하자마자 테스트는 해볼거라는 후회가 들었다

본 환경에서 복사, 붙히기  k config use-context k8s 명령어, ctrl+f 등 안되는게 많고 너무 느려 당황하여 멘붕에 시간을 많이 날려 먹었다

즉 문제를 풀려는 생각보다 환경에 적응한다는 생각으로 killer.sh를 꼭 풀어봤으면 좋겠다.

 

노트북 사양?

노트북 발열이 너무 심해 중간에 다운되서 중단되면 어떡하나 생각이 들었다

환경도 적응안했는데 발열도 심해서 망했다 생각들고 참 첫 시험 다사다난했다...

 

 

제일 궁금할 문제 유형들이다.

순서는 기억에 안남고 문제들도 정확히 기억나지 않기 때문에 참고만 하시면 좋을것 같다.

(다른 블로그를 둘러보면 시험 유형들은 비슷하기 때문에 아래 문제 유형들은 꼭 이해하고 시험 보면 좋다)

 

1. 주어진 파드에서 특정 로그 파일에 담기

k logs '주어진 파드' | grep '주어진 에러' > '주어진 파일'

 

 

2.  ready인 노드 개수 측정 후 파일에 담기 (taints가 noschedule인것 제외)

k get nodes | grep -i -w ready   -  ready인 단어가있는 노드들 리스트

k  describe nodes | grep -i taints  - taints가 있는 노드들 파악

두개 조합해서 개수 측정 후 파일에 담으면 된다

 

3.  특정 라벨에 cpu 사용량이 제일 높은 파드 파일에 담기

k top po -l "주어진 라벨  키=값" 하면 사용량 나오고 제일 높은것 주어진 파일에 담으면 된다

 

4.  배포된 deployment scale out

k scale deployment "deployment이름" --replicas="주어진 개수"

 

5. 특정 워커노드 notready상태를 ready 상태로 트러블 슈팅

워커노드로 원격 접속, root 권한 얻는 명령어는 주어진다

필자는 kubelet이 문제라 나왔었다

 

systemctl status kubelet

systemctl restart kubelet

systemctl enable --now kubelet

 

이 문제는 13점으로 배점이 커 꼭 맞추기를 바란다

 

6. 업그레이드

길어서 아래 참고 하시길 똑같이하면 해결가능

여기서 굳이 kubeadm 업그레이드하고 나갔다 drain 걸고 다시 kubelet, kubectl  업그레이드 하는데

처음부터 drain 걸고 업그레이드 한번에 하면 편하다 그리고 업그레이드 버전 확인 꼭 하시길

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

 

7. 특정 노드 unavailable 및 기존 파드 reschedule

k drain "노드 명" --ignore-daemonsets --force

여기서 안먹히고 에러 생기면 특정 볼륨 삭제하라는 명이 있는데 

k drain "노드 명" --ignore-daemonsets --force --delete-emptydir-data 치거나 주어진 명령어 더하면 drain 가능

 

8. hostpath가 마운트 된 생성

9. etcd 백업 및 복원

mock exam처럼 etcd 파일에서 경로를 찾는게 아니라 아래 처럼 3개의 경로가 주어진다

(정적파일 경로 찾아도 안나옴)

 

ca certificate = ca.cert = trusted-ca-file
client certficate = .cert = cert-file
client key = .key - key-file

ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=<trusted-ca-file> --cert=<cert-file> --key=<key-file> \
  snapshot save <backup-file-location>

복원 같은 경우 파일이 주어지는데 아래처럼 doc 명령어를 하면 복원되지만 마지막에 error라고 주어진 파일에 접근 권한이 없다는 명령어가 떠서 정확히 복원 됐는지 확인은 못했다.

 

ETCDCTL_API=3 etcdctl --data-dir <data-dir-location> snapshot restore snapshotdb

 

10. side car

이 문제는 꼭 나오는거 같은데 기존 파드에서 log를 받을 수 있는 사이드카를 생성하는 문제이다

기존 파드 삭제 후 편집한 야믈 올려주면 생성된다

문제에서는 볼륨 마운트 경로와 명령어 주어지고 생성하면 됐던것 같다

 

예는 아래와 같다

apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox:1.28
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$i: $(date)" >> /var/log/1.log;
        i=$((i+1));
        sleep 1;
      done      
    volumeMounts:
    - name: varlog
      mountPath: /var/log
  - name: count-log-1
    image: busybox:1.28
    args: [/bin/sh, -c, 'tail -n+1 -F /var/log/1.log']
    volumeMounts:
    - name: varlog
      mountPath: /var/log
  volumes:
  - name: varlog
    emptyDir: {}

 

11. nodeselector

k get nodes -A --show-labels를 통해 선택할 특정 노드에 라벨 확인 후

아래와 같이 추가

12. pvc 생성 후 파드에 마운트, 마운트 후 용량 변경한 것 저장

 

우선 pvc에서 이름, 용량, 스토리지 클래스 이름, 엑세스 모드가 주어지고 아래와 같이 생성해준다

 

파드는 마운트 경로가 주어지고 아래와 같이 pvc를 마운트 했다

 

 

pod, pvc 생성 후 아래 명령어 처럼 변경한거 저장한다

k edit pvc my claim --record

 

 

13. networkpolicy

문제에서는 어떤 파드에 networkpolicy를 주어질건지 나오지 않아 podselector에서 전체 값 {}을 주고

특정 네임스페이스로 통하는 트래픽과 80포트로만 오는 통신만 받길 원하기 때문에

k get ns "네임스페이스 명 "--show-labels를 통해 특정 네임스페이스에 라벨을 확인

 

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: 주어진 네임스페이스
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              키: 값 #받고싶음 트래픽 네임스페이스에 대한 라벨
      ports:
        - protocol: TCP
          port: 80

 

14. multi container

apiVersion: v1
kind: Pod
metadata:
  name: kucc8
spec:
  containers:
  - name: nginx
    image: nginx
  - name: redis
    image: reids
  - name: memcashed
    image: memcashed

15. ingress

기존에 있던 svc와 연결하는 ingress 생성 문제로

경로, 포트, 서비스명, 네임스페이스 주어지고 아래처럼 작성하면 된다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ping
  namespace: ing-internal
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678

 

16. 주어진 deployment 포트 수정 후 svc 생성해서 연결

아래처럼 deployment spec.containers 란에 추가

  port:
  - containerPort: 80
    name: http

expose  deployment "디플로이 명" --name front-end-svc --port=80 --type=NodePort --dry-run=client -o yaml > svc.yaml

으로 서비스파일 생성 후 타겟포트 위처럼 http로 수정해주고 apply 해주면 된다

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: front-end-svc
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: htto
  selector:
    app: nginx
  type: NodePort

 

 마지막 한 문제는 기억이 안난다..

 

어쨌든 우여곡절, 다사다난 하게 k8s에 대하여 깊게 공부하는 기회가 됐고 cka 합격도 하게 됐다ㅅㅅㅅ

Comments