k8s/CKA

Practice Test / Core Concept

부엉이사장 2024. 9. 4. 08:40

POD

Summary
  • 6번 / 멀티컨테이너 파드. describe으로 보면댐
  • 9번 / pod에러는 describe해서 event보면댐
  • 13번 / 이미지 에러뜬거 yaml수정하고 apply안되고 edit으로 고쳐야함
  • vim에디터 줄 끝 $

 

 

# kodekloud

 

https://identity.kodekloud.com/sign-in?redirect_uri=https%3A%2F%2Flearn.kodekloud.com%2Fuser%2Fcourses%2Fudemy-labs-certified-kubernetes-administrator-with-practice-tests%2Fmodule%2Fe6ae2f68-9b3a-439e-a534-d63d372840d2%2Flesson%2F5c388f3e-bd27-41bd-9c3c-613dafc29bf9

 

identity.kodekloud.com

 

 

# 1

파드가 지금 몇개 있냐는 거다.

kubectl get pods

아무것도 없다고 한다. 답은 0

 

 

# 2

nginx이미지로 pod를 하나 만들라고 한다.

 

 

Pods

Pods are the smallest deployable units of computing that you can create and manage in Kubernetes. A Pod (as in a pod of whales or pea pod) is a group of one or more containers, with shared storage and network resources, and a specification for how to run t

kubernetes.io

공식문서에서 pod yaml따오면 됨

vi ex2.yaml

이걸로 야믈 파일 만들어서

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

공식문서 yaml에서 nginx에 태그 떼서 저장

kubectl apply -f ex2.yaml

으로 생성하면 됨

kubectl run nginx --image=nginx

이건 그냥 run커맨드로 빨리 만들기.

 

 

# 3

지금 pod가 몇개냐고 함

네임스페이스는 안물어보네

kubectl get pods

 

총 4개네

 

 

# 4

새로운 pod에 어떤 이미지를 사용했냐고 함

저 new pods에 이미지 물어보는듯

kubectl describe pod newpod머쩌구 | grep image

busybox를 썼다고 함.

 

 

 

# 5

어떤 노드에 pod들이 있냐고 함

kubectl get pod -o wide

pod 네 개 모두 controlplane에만 있다고 함

 

 

# 6

얼마나 많은 컨테이너가 pod webapp에 있냐고 함

kubectl describe pod webapp

야믈양식으로 보면 nginx랑 agentx컨테이너 두개가 있는 pod임. infra까지하면 세개이긴 한데..

 

 

# 7

webapp pod에서 어떤 이미지를 사용헀냐고 함.

6번문항보면 nginx랑 agentx두개 썼네

 

 

# 8

지금 webapp pod가 무슨 상태냐고 함

kubectl get pods

imagepullbackoff상태네

레디보면 컨테이너가 한개만 생성되고 하나에서 오류뜬듯?

도커헙에서 이미지 못가져와서 그런거임.

 

 

# 9

왜 webapp pod의 agentx컨테이너는 에러떴냐는거임.

도커헙에 이미지 없으니까..

 

근데 솔루션에서는 describe쳐보라길래 쳐봤음

agentx:latest이미지가 도커헙에 없다고 함.

 

 

 

# 9

kubectl get pods하면 나오는 출력에서 ready컬럼은 뭘 의미하냐는 거임.

1/1, 1/2 이런거

1/1은 pod하나에 컨테이너 한개인 일반적인 pod이고, 1/2는 pod하나에 컨테이너 2개 들어있는 pod임

앞에숫자는 돌아가고있는 컨테이너고 뒤에 숫자는 총 컨테이너 

 

 

# 11

webapp이라는 pod를 삭제하래.

kubectl delete pod webapp

 

 

 

# 12

redis123이미지를 사용해서 redis pod를 만들어보라네

 

공식문서에서 yaml따와서 이미지랑 이름 바꿔서 만들면 됨

이름은 pod이름이 redis니까 metadata부분으로 수정해야함

잘 만들어졌다.

이미지 풀 안된건 상관없음. 어쨋든 pod가 만들어진거니까.

kubectl run redis --image=redis123

이 커맨드로 그냥 만들어도 되고

 

 

 

# 13

아까 이미지 생성된걸 이미지 고쳐서 정상으로 만들란다.

kubectl get pod redis -o yaml > ex13.yaml

pod를 yaml형식으로 받고 이걸 ex13.yaml이란 파일에다가 넣음.

 

vi ex13.yaml

빔에디터로 보면

저기 이미지를 redis로 바꾸자.

해당 줄 젤끝으로가는 vim에디터 명령어는 $임니다.

 

암튼

저장하고,

kubectl apply -f ex13.yaml

으로 했지만?

에러 ㅡㅡ

 

 

 

yaml이 단순하니까 그냥 공식문서에서 따오고 apply 하거나,

 

 

kubectl edit pod redis

이걸로 고치면 됨.

edit은 에러 자주생겨서 apply 자주쓰는데 여긴 apply 가 에러생긴다.

 

 

 

 

 


ReplicaSet

 

 

Summary
  • 11번 / api version임. 공식문서 yaml보면 나옴. 컨트롤러(job뺴고)는 apps/1, 서비스랑 pod는 v1
  • 12번 / 컨트롤러는 셀렉터랑 라벨링으로 컨트롤러가 관리할 pods들을 연결시켜줌
  • 14번 / 컨트롤러를 edit으로 고쳐도 pod들에 적용이안됨. 컨트롤러는 죽은 pod들을 다시 살리니까 edit하고 pod들 죽이면 알아서 edit적용된 pod들을 만들어줌
  • 15, 16번 / 스케일링

 

 

# 1 

현재 pod가 몇개 있냐고하네

kubectl get pods

없대

 

 

# 2

default namespace에 레플리카셋이 얼마나 있냐고 함.

kubectl get replicaset.apps

얘도 없대

 

 

# 3

다시 레플리카셋 몇개녜

kubectl get replicaset.apps

한개 생김

옆에 desired current는 파드갯수

네개의 pod가 생김

 

 

# 4

새로 생긴 레플리카셋의 요구되는 pod개수는 몇개녜

아까 4개라고 함

 

 

# 5 

저 레플리카셋의 pod에선 어떤 이미지를 사용했냐고 함.

kubectl describe replicasets.apps new-replica-set

이걸 보면

busybox777을 썼다고 함

 

 

# 6

저 레플리카셋의 얼마나 많은 pod들이 ready상태냐고 함

ready컬럼에 빵개

 

 

# 7

왜그러냐는데?

kubectl get pods

image pull back off 라고함

이미지 못받은거임.

 

kubectl describe pod new-replica-set-해시

이걸로 pod 자세히 event부분 보면

더 자세하게 나옴

 

 

 

# 8

pod하나 삭제해보래

kubectl delete pod new-replica-set-해시

 

 

 

# 9

이제 얼마나 많은 pod들이 있냐고 하네?

kubectl get pods

 

 

# 10

왜 삭제했는데 그대로 네개냐고 함

레플리카셋이 살렸겠지 

근데 지울수 없다고 하는 선택지는 틀린게 아까 pod들 보면

저 AGE컬럼보면 새로 생긴 pod 생긴지 얼마나됐는지 나옴

즉 죽였다가 살린거임

 

 

# 11

새로운 replicaset을 yaml로 만들어보래

cd /root/

아예 그냥 cd로 옮겨감

ls

저 yaml로 만들어보라고 함

kubectl apply -f 야믈파일

안됐는데 문제에서 문제 수정해보라고 함

api버전이 잘못됐다고 함. 

vi 파일이름

api version부분을 apps/v1으로 수정하샘

kubectl apply -f 파일이름

이제 잘 만들어짐.

 

 

api version은 쿠버네티스 리소스 관리하는건데 컨트롤러는 job종류 제외하고는 apps/v1임

pod나 service가 v1이고.

그냥 공식문서 뒤져보면 yaml양식에 나와있음.

 

 

ReplicaSet

A ReplicaSet's purpose is to maintain a stable set of replica Pods running at any given time. Usually, you define a Deployment and let that Deployment manage ReplicaSets automatically.

kubernetes.io

 

 

 

 

# 12

저 두번째 yaml파일로 만들어보고 문제 수정해보래.

kubectl apply -f 파일이름2

 

셀렉터가 라벨이랑 안맞는대

컨트롤러는 셀렉터랑 라벨링으로 컨트롤러가 관리하는 pod들을 이어주니까

 

yaml파일 다시 보자

vi 파일이름2

안맞네?

두개 똑같이 만들어주자

kubectl apply -f 파일이름2

 

 

 

# 13

레플리카셋 두개삭제

kubectl delete replicaset.apps 레플리카1 레플리카2

 

 

 

# 14

아까 이미지 오류떳던 new레플리카셋을 동작하게 수정하래.

kubectl edit replicaset.apps new-레플리카셋

이미지 이름 고쳐주고 저장

 

kubectl get pods

수정했는데 여전히 이미지 에러뜬 pod들이 있음

컨트롤러는 pod죽이면 새로만들어주니까 파드 삭제해보면 다시 생겨날거

kubectl delete pods --all

죽이니까 다시 살아난 pod들.

 

 

 

# 15

컨트롤러 스케일링 해보라는데?

kubectl scale replicaset new-replica-set --replicas 5

숫자 스케일링 잘 됐음.

edit으로도 될거같

 

스케일링에 대한 공식문서

 

 

kubectl scale

Synopsis Set a new size for a deployment, replica set, replication controller, or stateful set. Scale also allows users to specify one or more preconditions for the scale action. If --current-replicas or --resource-version is specified, it is validated bef

kubernetes.io

 

 

 

# 15

 

두개로 다시 스케일링 해보래

이번엔 edit으로 해보자

kubectl edit replicasets.apps 레플리카이름

 

replicas바꾸고 저장

pod보니까 다섯개중 3개 종료되고있음

 

 

 

 


Deployment

 

 

Summary
  •  
export samp="--dry-run=client -o yaml"

 


 

 

# 1

default 네임스페이스에 몇개의 pod가 있냐고함

 

 

 

# 2

레플리카셋은 몇개있냐고 함

kubectl get replicaset.apps

 

 

# 3

디플로이먼트는 몇개있냐고함

kubectl get deployment.app

 

 

# 4

이젠 deployment몇개냐고함

 

 

# 5

레플리카셋은 몇개냐고함

deployment가 생기면 replicaset도 생기니..

종속관계니까

 

 

 

# 6 

지금 pod는 몇개녜

 

 

 

# 7

몇개의 pod가 ready 상태냐고함

 

 

# 8

저 deployment에서 pod들이 무슨 이미지를 사용했냐고함

kubectl describe deployments.apps frontend-deployment

 

 

# 9

왜 deployment가 ready가 아니냐고함

kubectl logs deployments/frontend-deployment

 

아니면 직접 pod를 봐서

kubectl describe pod frontend-deployment-6469748456-해시

이미지 에러 있다고 보면됨

 

 

# 10

저 yaml파일로 디플로이먼트를 만들어보라는데 에러있으면 고치래

kubectl apply -f 파일이름

에러뜨면서 안된대.

apiversion이 잘못된가 헀는데 job뺴고 컨트롤러는 apps/v1이 맞음.

공식문서 보면 됨.

 

Deployments

A Deployment manages a set of Pods to run an application workload, usually one that doesn't maintain state.

kubernetes.io

저기 자세히보면 "no kind deployment is registered for version apps/v1 머시기" 라고 있음

공식문서 yaml파일인데 kind부분이 대문자로 시작함

yaml파일에선 소문자임

대문자로 바꾸고 apply

vi 파일이름
kubectl apply -f 파일이름

 

 

# 11 

저 조건으로 deployment를 만들어보라고함.

kubectl create deployment httpd-frontend --replicas 3 --image httpd:2.4-alpine

난 야믈로따서 apply로 만듬

 

kubectl create deployment httpd-frontend --replicas 3 --image httpd:2.4-alpine $samp>11.yaml

$samp는 따로 설정한거니까 조심!

kubectl apply -f 11.yaml

 

 

 


Namespaces

 

 

 


Summary
  • 6번 / 같은 name space에 있는 pod와 서비스는 dns 서비스이름만으로 접근가능
  • 6번 / dns이름 규칙 = <service>. <namespace>.svc.cluster.local
export samp="--dry-run=client -o yaml"

$samp붙은건 이 명령어로 약어만든거니까 주의


 

 

# 1

kubectl get namespaces

하나하나 장인정신으로 세보니 열개임

 

 

# 2

research namespace에는 몇개의 pod가 있냐고함

kubectl get pods -n research

 

 

# 3

finance ns에 pod 만들어보래

kubectl run redis --image redis -n finance $samp > 3
.yaml
kubectl apply -f 3.yaml

 

 

 

# 4

blue 파드는 어느 ns에 있냐고 함

kubectl get pods --all-namespaces |grep blue

컬럼 맨앞이 ns니까 marketing에 있음

 

 

# 5

blue 웹에 접근해보래. 난 exec쓰라는건줄..

kubectl describe pod blue -n marketing

또 난 접속하라길래 뭔가해서 저걸로 ip얻고 port 얻어서

curl 쳤음

curl 10.42.0.15:8080

 

나중에 알아서 위에 탭새로 뜨길래 눌러보니

여기로 들어가짐.

대충 curl쳤을떄 사이트 맞는거같음.

 

 

 

# 6

blue pod가 어떤 dns를 쓰고있냐고함.

사실 잘 이해가 안되는거긴 한데.. 기억도 잘 안나고..

일단 대충 생각해보자면, 

 

 

 

 

DNS for Services and Pods

Your workload can discover Services within your cluster using DNS; this page explains how that works.

kubernetes.io

공식문서에 나온대로 blue pod로 해당 명령어 쳐보면

kubectl exec -it pods/blue -n marketing -- cat /etc/resolv.conf

marketing.svc.cluster.local로 dns서버되어있음.

굳이 저렇게 할필요는 없는게 양식이 정해져있음.

<namespace>.svc.cluster.local

 

my-svc.my-namespace.svc.cluster-domain.example

뭐 이런식이라니까 db-service.marketing.svc.cluster.local이렇겠지?

 

저걸 blue 웹에가서 6379포트로 쳐보면

 

근데 blue pod랑 db-service는 같은 name space에 있음

때문에 그냥 서비스 이름만 쳐줘도 됨

 

success가 뜸

개념공부할때 dns관리해주는 pod도 따로있던걸로 기억하는데..

 

 

 

 

 

# 7

아예 dns이름 풀로 물어봄.

 

위에서 이미 썼음. 다만 ns가 바뀌었으니 문제대로 dev로 바뀌어야함.

 

 

 

 

 

 


Service

 

 

 

Summary
  • grep할때 대소문자 구분
  • 대소문자 구분 안하려면 -i옵션 붙이샘
export samp="--dry-run=client -o yaml"

$samp붙은건 이 명령어로 약어만든거니까 주의


 

 

 

# 1

default ns에 서비스가 몇개있녜

kubectl get svc

 

 

# 3

kubernetes 서비스는 무슨타입이냐고 함

kubectl describe svc kubernetes

 

# 4

타겟포트는?

 

 

# 5

라벨은 몇개

 

 

# 6

엔드포인트 갯수는?

 

 

 

# 7

디플로이먼트는 몇개

kubectl get deployment.apps

 

 

 

# 8

deployment의 pod에서 사용한 이미지는 뭐녜

kubectl describe deployments.apps simple-webapp-deployment | grep -i image

 

# 10

 

이 서비스 만들래

 

문제에서 저 yaml파일은 걍 양식 다 있긴한데

공식문서에서 nodeport검색하면 댐

 

 

Service

Expose an application running in your cluster behind a single outward-facing endpoint, even when the workload is split across multiple backends.

kubernetes.io

 

잘 나와있음.

 

대충 쓰면

kubectl apply -f service-definition-1.yaml

 

 

 

 


Imperactive Commands

 

Summary
  • 서비스만들때 대문자 ClusterIP로. 안써도 상관은 없음.
  • 서비스는 pod나 deployment먼저 만들
export samp="--dry-run=client -o yaml"
export grep="grep -iC 3"

$samp, $grep붙은건 이 명령어로 약어만든거니까 주의

 


 

 

# 2

pod만들래

kubectl run nginx-pod --image nginx:alpine $samp>2.yaml

라벨링도 원래 붙었나 싶은데 뭐 쩃든..

kubectl apply -f 2.yaml

 

 

 

# 3

이 pod도 만들래

kubectl run redis --image redis:alpine --labels tier
=db $samp>3.yaml

 

kubectl apply -f 3.yaml

 

 

+라벨을 더 달려면 쉼표로 구분하면 된다.

kubectl run redis --image=redis:alpine --labels=tier=db,env=prod,app=cache

 

kubectl describe redis|$grep label

 

 

# 4

서비스를 만들라고 함.

kubectl expose pod redis --name=redis-service --port=6379 $samp > 4.yaml

 

expose가 만들어진 pod에 연결되는 서비스 만들어달라는거였구나..

pod가 없으면 에러뜸.

kubectl apply -f 4.yaml

 

 

 

# 5

 

deployment를 만들래.

kubectl create deployment webapp --image kodekloud/we
bapp-color --replicas 3 $samp>5.yaml

kubectl apply -f 5.yaml

 

 

 

# 6

pod를 만들래

kubectl run custom-nginx --image nginx --port 8080 $samp > 6.yaml

 

 

# 7

ns만들래

controlplane ~ ➜  kubectl create namespace dev-ns $samp > 7.yaml

controlplane ~ ➜  vi 7.yaml

 

 

 

# 8

deployment를 저 ns에다가 redis이미지 써서 만들고 레플리카는 2개 쓰라네.

kubectl create deployment redis-deploy --namespace dev-ns --image redis --replicas 2 $samp > 8.yaml

 

 

# 9

httpd파드를 httpd:alpine이미지로 만들고, ClusterIP타입 서비스를 만들어서 연결시키라고 함. 포트는 80이라고 함.

 

kubectl run httpd --image httpd:alpine $samp > 9-pod.yam

이걸로 pod만드샘

여기서 apply 때려주고

(안떄려주면 서비스만드는거에서 오류뜸)

이제 이 pod에 연결될 service를 만들어야함

 

kubectl expose pod httpd --name httpd --port 80 $samp > 9-svc.yaml

라벨링도 잘 맞춰져 있음.

 

 

'k8s > CKA' 카테고리의 다른 글

따배씨 / node selector, drain, taint  (0) 2024.09.13
따배씨 / ETCD Backup & Restore  (0) 2024.09.12
Practice Test / Backup and Restore Methods  (0) 2024.09.12
Practice Test / Persistent Volume Claims  (0) 2024.09.09
Mock Exam - 1  (0) 2024.09.06