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

[CKA] CKA를 준비하며 다시잡는 쿠버네티스 개념

by 쯀리♥️ 2024. 3. 28.

 

 

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

그동안 바빠서 블로그에 글을 쓸 수가 없었는데용..ㅜ

최근에 CKA를 준비하며 다시 잡은 Kubernetes의 기본적인 명령어들 및 개념들을 다시 잡아보려합니다!

화이팅화이팅><

 

 

몇달전에 Kubernetes란 무엇인지 작성해둔 글을 보시고 오시면 이해에 도움이 될듯 싶습니다. 

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

 

[K8s] Kubernetes-쿠버네티스란?

안녕하세요, 쯀리입니다. 오늘은 쿠버네티스에 대해 알아보는 시간을 가져보겠습니다. ! K8s를 알기 위해서는 기본 지식 Docker를 알고 진행 하는 것을 추천드립니다 ! Kubernetes[K8s] 쿠버네티스는 '

funlife-julie.tistory.com


 

쿠버네티스 컴포넌트

1. 쿠버네티스를 배포하게 되면 클러스터를 얻게 됩니다.

    ★ 쿠버네티스 클러스터를 관리하기 위한 명령어는? ( 이건 뒤에서 자주 쓰이기 때문에 꼭 알아두세용! )

kubectl

 

2. 쿠버네티스 클러스터 내부에는 컨테이너화된 애플리케이션을 실행하는 Node가 존재합니다.

    ★ 모든 클러스터는 최소 한개 이상의 Worker Node(예전 Minion으로 불렸음)를 가집니다.

3. Worker Node는 애플리케이션 구성요소인 Pod를 호스트합니다. 

 

Quiz로 쿠버네티스 개념 알아보기

 

문제1. Worker Machine이 Kubernetes에서 어떻게 불리는가?

문제2. Kubernetes의 Node는 물리적 머신만 될 수 있으며 가상 머신은 절대 될 수 없습니다.

문제3. 다중 Node는 합쳐서 하나의 ㅇㅇ이 됩니다. 

문제4. Kubernetes Master Node에서 실행되는 프로세스는 ? 

   1. Kubelet

   2. Kube-apiserver

   3. Kube-proxy

 

문제5. Kubernetes가 Cluster를 관리하는 데 사용되는 모든 데이터를 저장하기 위해 사용하는 분산된 신뢰할 수 있는 Key-Valye 저장소는?

문제 6. Kubernetes Cluster를 관리하기 위해 사용되는 명령어는?  

 

해답 : ▼

더보기

문제1 답 : Minions & Nodes 

문제2 답 : 거짓 (Kubernetes는 물리적 & 가상 머신 둘다 가능합니다.)

문제3 답 : Cluster

문제4 답 : Kube-apiserver (나머지 두개는 worker node에서 실행되는데, Kubelet은 노드에서 컨테이너를 관리하고 컨테이너가 예상대로 실행되도록 하는 반면, Kube-proxy는 실제로 worker node에서 네트워크 프록시 및 로드 밸런싱을 담당합니다.)

문제5 답: etcd

문제6 답: kubectl

 

 

Pod가 무엇일까요? 

오늘은 간단하게 Pod에 대해 알아보도록 합시다. 


Pods

Pod는 Kubernetes에서 생성하고 관리할 수 있는 가장 작은 배포 가능한 컴퓨팅 단위이다.

Kubernetes는 워커노드에 바로 컨테이너를 배포 하지 않고 Pod를 통해 배포합니다.

 

Pod의 종류 : 

★ Single Container Pod

1:1 로 Container 1개당 Pod 1개로 구성되어 있습니다. 

보통 Single Container로 구성됩니다. 

 

Multi Container Pod

보통은 1:1 컨테이너:Pod 로 구성되어있으나 언제 Multi Container가 필요할까??

  • Helper Container 필요시 Multi Container Pod를 구성할 수 있음

 

Pod를 배포하는 방법 

kubectl run [Pod이름] --image [이미지 이름]

kubectl run nginx --image nginx
  1. nginx POD를 생성한다
  2. POD 내부 nginx image를 가져온다
// Nginx 파드 생성
kubectl run nginx --image=nginx

// 파드 List 가져오기
kubectl get pods

// 특정 파드 정보 가져오기
kubectl describe pod nginx

 

아이쿠 제가 pod 이름 : nginx를 오타를 냈었네요.. 

 

 

버전 1.18부터, (--generator와 같은 인자 없이) kubectl 실행은 디플로이먼트 대신 파드를 생성합니다.

명령형 명령어를 사용하여 디플로이먼트를 생성하려면, kubectl create를 사용한다:

kubectl create deployment nginx --image=nginx

쿠버네티스 개념 - https://kubernetes.io/docs/concepts/

파드 개요 - https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/

 


Pods를 yaml형식으로 만들어 실행하기

그냥 kubectl run을 명령어로 사용할 수 있지만, yaml형식으로 실행해주는 방식을 많이 사용하는데, 

yaml형식으로 definition file을 만들어 pod를 생성해주는 방법을 사용해볼게요

 

Kubernetes Definition file은 항상 4개의 top level fields/root level properties 를 가집니다.

## pod.yaml

apiVersion: v1
kind: Pod
metadata:
 name: myapp-pod
 labels:
	 app: myapp 
	 type: front-end
spec: 
	 containers: 
		- name: nginx-container
		  image: nginx
  1. apiVersion : kubernetes api 버전
  2. kind : 생성하려는 객체의 유형을 나타내며, 이 경우엔 POD입니다.
  3. metadata : 이름 레이블 등과 같은 객체에 대한 데이터입니다. 보시다시피 문자열 값을 지정한 앞의 두 가지(apiVersion, kind)와 달리 이것은 딕셔너리 형태입니다.
  4. spec : 딕셔너리 형태이다
    1. 밑에서 containers로 복수로 사용하는 이유는 복수의 컨테이너를 사용할 수 있기 때문입니다. 

 

배포된 pod를 살펴보기

pod-definition.yml 파일 만들어 둔 걸로 yaml돌려보기

// yaml 파일 apply
kubectl apply -f pod.yaml

//pod list 불러오기
kubectl get pods

//특정 pod 살펴보기
kubectl describe pod nginx

 

 

 

 

Quiz로 쿠버네티스 pod 만들어보기

 

문제1. 도커 컨테이너의 환경 변수를 설정합니다. 

POSTGRES_PASSWORD를 mysecretpassword 값으로 설정합니다. 강의에서 설명하지 않았지만 간단합니다. 

환경 변수를 전달하려면 컨테이너 객체에 새 속성 'env'를 추가합니다. 환경은 이미지와 이름의 형제입니다. 

환경은 배열/리스트입니다. 따라서 그 아래에 새 항목을 추가합니다. 항목에는 이름과 값 속성이 있습니다. 

이름은 환경 변수의 이름(POSTGRES_PASSWORD)이어야 합니다. 값은 비밀번호(mysecretpassword)여야 합니다.

 

yaml 을 만들어 실행해보기:

더보기

postgres.yaml

apiVersion: v1
kind: Pod 
metadata:
    name: postgres 
    labels: 
       tier: db-tier 
spec: 
    containers: 
        - name: postgres 
          image: postgres 
          env: 
            - name: POSTGRES_PASSWORD 
              value: mysecretpassword

 

 

실행 방법: 

// postgres 파일로 실행
kubectl apply -f postgres.yaml

kubectl get pods

kubectl describe postgres

 

그외 pod 관련 명령어

// pod 삭제하기
kubectl delete pod [pod 이름]
kubectl delete pod postgres

// yaml을 따로 만들지 않고 자동생성 명령어
kubectl run redis --image=redis123 --dry-run -o yaml

//yaml로 쓰기
kubectl run redis --image=redis123 --dry-run -o yaml > redis-yml.yaml

 

 


오늘은 간단하게 Pod에 대해 알아보았습니다. 

다음시간에는 Replication Controller와 ReplicaSets를 알아볼게요! 


참조

Kubernetes for the Absolute Beginners - Udemy