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

[CKA] KodeKloud - CoreConcept Deployments와 Namespaces

by 쯀리♥️ 2024. 5. 27.

 

 

 

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

저번에 Udemy에서 풀어보는 Quiz들중 PODs와 ReplicaSets를

답과 함께 풀어봤는데 

https://funlife-julie.tistory.com/38

 

[CKA] KodeKloud - CoreConcept PODs와 ReplicaSets

안녕하세요, 쯀리입니다.Udemy에서 풀어보는 Quiz들을 답과 함께 풀어볼건데, 같이 가실까요?https://beta.kodekloud.com/user/courses/udemy-labs-certified-kubernetes-administrator-with-practice-tests Sign In | KodeKloudWelcome to

funlife-julie.tistory.com

 

 

오늘은 Deployments와 Namespaces들을 풀어볼게요

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

 


Deployments

deployments란?
• 역할: 애플리케이션 배포 및 관리를 위한 컨트롤러입니다.
• 기능:
• 애플리케이션의 여러 복제본(Replicas)을 관리하여 가용성을 높입니다.
• 선언적 방식으로 애플리케이션을 배포하고 업데이트할 수 있습니다.
• 롤링 업데이트 및 롤백 기능을 제공합니다.
• 상태 검사(Liveness Probe, Readiness Probe)를 통해 애플리케이션 상태를 모니터링합니다.

 

문제 

1. How many PODs exist on the system? 

지난번에 풀어본 문제들을 복습해볼까요?

kubectl get pods

 

 

2. How many ReplicaSets exist on the system?

kubectl get rs
kubectl get replicaset

 

3. How many Deployments exist on the system?

kubectl get deployment
kubectl get deploy

 

 

4. How many Deployments exist on the system now?

          frontend-deployment로된 deployment 1개를  확인할 수 있습니다. 

 

5. How many PODs exist on the system now?

         한개의 deployment 에 4개의 pod들로 이루어져 있습니다.

 

 6. Out of all the existing PODs, how many are ready?         

         위에서 확인했을때 ImagePullBackOff 에러로 정상적으로 실행된 POD들이 없네요.

 

7. What is the image used to create the pods in the new deployment?

         이 deployment는 어떤 이미지를 가져올까요 ?

kubectl describe deploy/deployment <deployment명>
kubectl describe deploy frontend-deployment

 

 

 

 

8. Why do you think the deployment is not ready? 

         위에서 확인했을때 ImagePullBackOff 에러로 정상적으로 실행된 POD들이 없었는데 

  ImagePullBackOff 에러는 dockerHub에 존재하는 이미지가 없기 때문이에요. 

ImagePullBackOff
When a kubelet starts creating containers for a Pod using a container runtime, it might be possible the container is in Waiting state because of ImagePullBackOff.
The status ImagePullBackOff means that a container could not start because Kubernetes could not pull a container image (for reasons such as invalid image name, or pulling from a private registry without imagePullSecret). The BackOff part indicates that Kubernetes will keep trying to pull the image, with an increasing back-off delay.
Kubernetes raises the delay between each attempt until it reaches a compiled-in limit, which is 300 seconds (5 minutes).

https://kubernetes.io/docs/concepts/containers/images/

 

 

 

 9. Create a new Deployment using the deployment-definition-1.yaml file located at /root/.

There is an issue with the file, so try to fix it.

Name: deployment-1

 

우선실행해볼까요? 

kubectl apply -f deployment-definition-1.yaml

yaml파일이 뭔가가 잘못됐나봐요.

 

kind부분이 deployment에서 Deployment로 변경이 되어야합니다. 

 

다시 적용을 해보면 정상적으로 실행되는 것을 확인할 수 있습니다. 

 

 

 

10. Create a new Deployment with the below attributes using your own deployment definition file.

Name: httpd-frontend;
Replicas: 3;
Image: httpd:2.4-alpine

 

 yaml파일을 만들어 봅시다.

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: httpd-frontend
spec:
  replicas: 3
  selector:
    matchLabels:
      name: httpd-frontend
  template:
    metadata:
      labels:
        name: httpd-frontend
    spec:
      containers:
      - name: httpd-frontend
        image: httpd:2.4-alpine

 

 

그동안 apply라는 명령어로 실행해주었다면 create로 리소스를 만들어 볼게요.

 

kubectl create -f deployment.yaml

 

 

❗️kubectl apply 와 kubectl create가 다른점은?

  kubectl create kubectl apply
용도 새로운 리소스를 생성할 때  새로운 리소스를 생성하거나 업데이트할 때
동작 방식 리소스가 이미 존재하면 오류를 발생시키며,
기존 리소스를 업데이트하지 않음
리소스가 존재하지 않으면 생성하고,
존재하면 정의된 대로 업데이트함.
선언적 관리   kubectl apply: 선언적 방식으로 Kubernetes 리소스를 관리할 때 주로 사용됩니다. YAML 파일에 정의된 상태로 클러스터의 상태를 맞추려는 경우 유용합니다.

Namespaces 

• 역할: Kubernetes 클러스터 내에서 리소스를 격리하고 관리하기 위한 논리적 구분입니다.
• 기능:
 • 여러 팀이나 프로젝트가 동일한 클러스터를 공유할 때 리소스를 분리하고 격리합니다.
 • 리소스 할당 및 관리 정책을 적용할 수 있습니다.
 • 네임스페이스 간에 이름 충돌을 방지합니다.
 • 기본 네임스페이스: 
    • default: 특별히 지정하지 않은 리소스가 속하는 기본 네임스페이스입니다.
    • kube-system: Kubernetes 시스템 리소스가 속하는 네임스페이스입니다. 
    • kube-public: 모든 사용자가 읽을 수 있는 네임스페이스입니다.

 

 1. How many Namespaces exist on the system?

kubectl get ns
kubectl get namespace

 

 

2. How many pods exist in the research namespace?

kubectl get pods --namespace=research
kubectl get pods -n=research

 

 

3. Create a POD in the finance namespace.

Name: redis
Image name: redis

 

pod생성 명령어: run 

kubectl run redis --image=redis -n=finance

 

 

 

 

4. Which namespace has the blue pod in it?

         일일이 다 열어볼 수 도 없고.. 어떻게 하면 좋을까요?

kubectl get pods --all-namespaces
kubectl get pods -A

 

 전체 다 출력해주는 명령어입니다. 

 

 blue 라는 pod의 namespace는 marketing이군요.

 

 

 

5. Access the Blue web application using the link above your terminal!!

       터미널 위쪽에보면 blue-application-ui링크를 클릭해보면 

 

 

 

6. What DNS name should the Blue application use to access the database db-service in its own namespace - marketing?

You can try it in the web application UI. Use port 6379.

 같은 namespace에 있는 서비스는??

Namespace가 동일하면, service의 이름만으로도 접근이 가능합니다.

kubectl get svc -n=marketing

정답은 db-service

 

 

7. What DNS name should the Blue application use to access the database db-service in the dev namespace?

You can try it in the web application UI. Use port 6379.

 

그럼 다른 namespace에서 찾는 방법은??

다른 네임스페이스를 가지고 있다면 주소값을 전부 정의해 주어야합니다.

Blue : namespace → marketing

db-service : namespace → dev

 

찾는방법 :

<svc명>.<namespace명>.svc.cluster.local

정답은 db-service.dev.svc.cluster.local

 

 

 

다른 네임스페이스를 가졌을때와 같은 네임스페이스를 가졌을때의 검색방법은 알고있는것이 좋아보이네요.

헷갈릴 수도 있는 개념인 것 같아요.

 

다음번엔 Service와 선언형 명령어에 대해 알아보도록 할게요!

 

 

 


참조

※ Udemy Labs - Certified Kubernetes Administrator with Practice Tests