Kubernetes 기본 정리

Lungnaha·2022년 4월 5일
1

Docker&k8s

목록 보기
2/9

이번 포스트는 쿠버네티스를 학습하면서 알게된 기본 개념이나 간단한 코드 등을 정리하기 위한 목적으로 작성했습니다. 혼자서 공부하고 작성하다보니 잘못된 정보가 있을 수 있습니다. 적극적인 피드백 부탁드립니다. 😎

😶 Pod

파드는 쿠버네티스가 컨테이너를 다루는 기본 단위로, 1개 이상의 컨테이너로 구성된 컨테이너 집합입니다.
여기서 주의할 점은 동일 파드 내 컨테이너는 네트워크 네임스페이스를 공유, 즉 동일 IP를 사용한다는 것입니다.
파드 안에 컨테이너가 몇 개로 구성이 되어있던지 상관 없이 모두 동일한 IP를 사용한다는 것입니다.

파드 관련 kubectl 명령어

  • 파드 목록 확인
kubectl get pod -o wide

여기서 주의하실 점은 위의 명령어를 사용해서 얻은 IP는 해당 pod가 존재하는 클러스터 내에서만 동작하는 IP로, 해당 IP를 통해 외부에서 바로 접속하는 것은 불가능합니다.
다시 말해, pod가 위치한 노드 안에서 요청을 날리거나, 같은 노드 내에 위치한 다른 pod에서 해당 IP로 요청을 날리는 것은 가능합니다.

  • 특정 파드 상태 확인
kubectl describe pod 파드명
  • 특정 파드에 명령 전달
kubectl exec -i -t 파드명 sh # 싱글 컨테이너 파드인 경우
kubectl exec -i -t 파드명 -c debug sh # 멀티 컨테이너 파드인 경우
  • 특정 파드 로그 확인
kubectl logs pod/파드명 # 싱글 컨테이너 파드인 경우
kubectl logs pod/파드명 -c debug # 멀티 컨테이너 파드인 경우
  • 특정 파드 실행
kubectl aplly -f 파드 설정 yaml 파일명

🙄 ReplicaSet

동일한 역할을 수행하는 파드를 여러번 찍어내고 싶은 경우, 가장 쉽게 떠올릴 수 있는 방법은 yaml파일에 파드 이름만 바꾸어서 동일 동작을 여러 번 반복하는 경우일 것입니다.
하지만 당연한 생각으로 해당 방법은 상당히 비효율적일 것입니다.

그래서 파드에 수를 효율적으로 늘리기 위해 ReplicaSet을 사용할 수 있습니다.
자세히 설명하면 정해진 수의 파드가 항상 실행될 수 있도록 관리해줄 뿐만 아니라 기존 실행중이던 파드에 문제가 생기면 파드를 다시 스케줄링까지 해주는 역할을 담당하게 됩니다.

😏 Deployment

현실적으로 사용자는 위에서 말한 파드와 레플리카셋을 주로 다루는 경우는 거의 없다고 들었습니다.
이를 다루기보다는 Deployment를 이용해서 실질적으로 워크 노드를 관리하는 것이지요.
Deployment object를 생성하면 이에 대응되는 ReplicaSet과 pod가 자동 생성되게됩니다.

Deployment는 서비스 버전을 업데이트 해서 새로운 버전의 이미지 파드로 교체하거나, 새 버전에 문제가 발생해서 롤백을 진행해야되는 경우 주로 사용합니다.
(해당 기능을 사용하기 위해서는 yaml파일을 수정해주어야합니다. 오늘은 간단히 개념을 공부하기 위한 부분이다 보니 yaml파일 작성법은 추후에 공부해서 추가 포스트에 작성해보겠습니다.)

디플로이먼트 관련 kubectl 명령어

  • deployment 생성
kubectl apply -f 관련 yaml파일
  • deployment 확인
kubectl get deploy

😣 Service

서비스를 통해서 외부로부터 받은 요청을 처리하거나 여러 파드에 트래픽을 분산하는 역할을 수행할 수 있습니다.
즉 서비스는 여러 파드에 대한 요청을 분산하는 로드 밸런서 기능을 수행한다고 보시면 됩니다.
(IP와 Port번호를 기반으로 로드 밸런싱을 수행합니다.)
일반적으로는 ClusterIP 타입의 서비스와 Ingress를 사용해서 외부 트래픽을 처리하곤 합니다.

서비스의 종류는 아래와 같이 총 4가지가 존재합니다.

  1. ClusterIP(기본값)
    • 클러스터 내부에서 역할을 수행하며 외부 트래픽을 받는 능력은 없습니다.
    • 클러스터에서 오는 요청을 알맞은 파드들로 분산해주는 역할을 수행합니다.
    • 아래의 코드로 서비스의 Cluster IP를 확인 가능
    kubectl cluster-info dump | grep -m 1 service-cluster-ip-range
  2. NodePort
    • 외부 트래픽을 전달 받는 것이 가능합니다.
    • NodePort는 ClusterIP를 맵핑하는 구조기에 ClusterIP의 모든 기능을 사용할 수 있습니다.
  3. LoadBalancer
    • ClusterIP의 모든 기능을 사용할 수 있으면서 외부에 존재하는 LB를 동적으로 관리합니다.
    • 여기서도 외부 트래픽을 받을 수 있습니다.
  4. ExternalName
    • 해당 서비스는 위의 3가지와는 전혀 다른 성격을 지니고 있습니다.
    • 클러스터에서 외부로 나가는 트래픽을 변환하는 역할을 담당합니다.
profile
Long🌈Now😁Happy💖

0개의 댓글