본문 바로가기
IT 잡지식/DevOps

[CKA] KodeKloud - CoreConcept PODs와 ReplicaSets

by 쯀리♥️ 2024. 5. 23.

 

 

 

 

안녕하세요, 쯀리입니다.

Udemy에서 풀어보는 Quiz들을 답과 함께 풀어볼건데, 같이 가실까요?

https://beta.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests

 

Sign In | KodeKloud

Welcome to KodeKloud By signing up you agree to our privacy policy

beta.kodekloud.com

 


 

PODs

문제1. How many pods exist on the system? 시스템에 몇 개의 파드가 존재하나요?

kubectl get pods

기본적으로 pod의 종류를 확인할때 사용하는 명령어입니다.

문제 2. Create a new pod with the nginx image.

Image name: nginx

 

2-1. 첫번째 방법 : run (간단한 명령어로 실행할  수 있을때 사용합니다. )

kubectl run nginx --image nginx

 

 

2-2. 두번째 방법: yaml생성

nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx

 

해당파일 적용 

kubectl apply -f nginx-pod.yaml

 

 

 

3. What is the image used to create the new pods?

You must look at one of the new pods in detail to figure this out.

 

describe 명령어

kubectl describe <resource type> <resoure 명>
kubectl describe pod [pod명]

 

 

4. Which nodes are these pods placed on?
You must look at all the pods in detail to figure this out.

pod에 대한 정보 모두 확인하기

kubectl get pods -o wide

 

 

5. How many containers are part of the pod webapp?

kubectl describe pods webapp

 

7. What images are used in the new webapp pod? nginx와 agentx입니다

8. What is the state of the container agentx in the pod webapp?
Wait for it to finish the ContainerCreating state

Error & Waiting

 

9. Why do you think the container agentx in pod webapp is in error?
Try to figure it out from the events section of the pod.
위에 보면 dockerhub에 이미지가 없다고 나옵니다. 에러 원인: Failed to pull image ”agentx”

 

10. What does the READY column in the output of the kubectl get pods command indicate?Ready부분에 나오는 숫자가 어떤의미인지?

Running Coneainers in POD / Total Containers in POD

webapp을 보면 2개 컨테이너중에 1개만 실행되는 것을 우리는 유추해볼 수 있습니다.

 

11. Delete the webapp Pod.

kubectl delete pod webapp

 

 

12.  Create a new pod with the name redis and the image redis123.

Use a pod-definition YAML file. And yes the image name is wrong!

Name: redis
Image name: redis123
kubectl run redis --image=redis123 --dry-run -o yaml

// redis-yml.yaml로 yaml파일 생성
kubectl run redis --image=redis123 --dry-run -o yaml > redis-yml.yaml

//yaml로 만들어진 파일 실행k
kubectl apply -f redis-yaml.yaml

 

 

13. Now change the image on this pod to redis. Once done, the pod should be in a running state.

 

첫번째 방법 :  kubectl edit 방법

kubectl edit pod redis

//image수정
...
spec:
  containers:
  - args:
    - redis
    image: redis
    name: pod
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
...

 

 

2. yaml 파일이 있다면 수정 후 pod삭제 후 다시 apply


ReplicaSets

1. How many ReplicaSets exist on the system?

kubectl get rs 
kubectl get replicaset

 

 

 

2. How many PODs are DESIRED in the new-replica-set?

        4개가 필요하다고 적혀있습니다.

 

3. What is the image used to create the pods in the new-replica-set?

이번에도 좀 넓게 볼까요?

kubectl get rs -o wide

images 부분은 busybox로 되어있네요

 

4. How many PODs are READY in the new-replica-set?
위에서 보면 READY상태인 POD는 0개입니다.

 

 

5. Why do you think the PODs are not ready? 4개의 POD를 확인해보겠습니다.

kubectl get pods 
//아마 전부 다 ImagePullBackOff 상태이겠네요

kubectl describe pod new-replica-set-nsf9k

이미지를 불러올 수 없다고 써져 있습니다.

 

6. Delete one PODs.

7. How many PODs exist now?POD가 하나가 삭제되면 자동으로 하나를 더 생성해서 4개의 POD를 만드는 것을 볼 수 있습니다.

kubectl delete pod new-replica-set-nsf9k
kubectl get pods

 

 

8. Why are there still 4 PODs, even after you deleted one?

ReplicaSet은 원하는 수의 POD가 항상 실행되도록 보장합니다.

ReplicaSet ensures that desired number of PODs always run

 

 

9. Create a ReplicaSet using the replicaset-definition-1.yaml file located at /root/.
There is an issue with the file, so try to fix it.
우선 실행해볼게요.

kubectl apply -f replicaset-definition-1.yaml

 

 

apiVersion이 잘못되었으니 변경하고 다시 실행해 주겠습니다.

성공!

 

 

12. Create a ReplicaSet using the replicaset-definition-1.yaml file located at /root/.
There is an issue with the file, so try to fix it.

우선 먼저 실행해봅시다.

 

라벨에 문제가 있는 것 같아요

둘이 일치해야하는데 다르기 때문에 selector가 label을 못불러와서 확인이 어렵기 때문입니다.

...
spec:
  replicas: 2
  selector:
    matchLabels:
      tier: nginx
  template:
    metadata:
      labels:
        tier: nginx
  ...
  
  //yaml 다시 돌려줍니다
   kubectl apply -f replicaset-definition-2.yaml

 

 

13. Delete the two newly created ReplicaSets - replicaset-1 and replicaset-2

kubectl delete rs replicaset-1
kubectl delete rs replicaset-2
//또는
kubectl delete rs replicaset-1 replicaset-2

 

 

14. Fix the original replica set new-replica-set to use the correct busybox image.

busybox777로 되어있는 부분을 busybox로 변경해줍니다.

kubectl edit rs new-replica-set

...
spec:
      containers:
      - command:
        - sh
        - -c
        - echo Hello Kubernetes! && sleep 3600
        image: busybox
        imagePullPolicy: Always
        name: busybox-container
        resources: {}
...

 

❗️k8s특이점은 replicaset을 edit으로 해서 수정하였다고 해도 완벽하게 수정 안되는 경우가 있음

이럴땐 pod를 전부 삭제

kubectl delete pods --all

 

15. Scale the ReplicaSet to 5 PODs.

   Use kubectl scale command or edit the replicaset using kubectl edit replicaset

  1. scale up 명령어
kubectl scale --replicas=6 replicaset/rs(type) myapp-replicaset(name)

 

    2. kubectl edit

replicas 부분을 6개로 변경

 

16. Scale the ReplicaSet to 5 PODs. (위와 동일합니다.)

17. Now scale the ReplicaSet down to 2 PODs.

18. Use the kubectl scale command or edit the replicaset using kubectl edit replicaset.

 

 


참조

Udemy Labs - Certified Kubernetes Administrator with Practice Tests