Kubernetes IBM - Sai Vennam '쿠버네티스란?'
Devops/Kubernetes

Kubernetes IBM - Sai Vennam '쿠버네티스란?'

뉴비뉴 2020. 5. 20.

Kubernetes Master Cluster

- API-Server

 

Worker Node

- kubelet

- Container

  - Pod

 

yaml

kind: (Pod, Deployment, Service, ConfigMap, ReplicaSet)
image: (Docker Hub, AWS ECR . . . PATH)
labels:
  key: value
  
ex)
kind: Pod
image: 2044smile/hello-node
labels:
  a: f

 

사용자는 kubectl 명령을 이용하여 yaml(명세가 적힌 파일)을 생성하게 됩니다.

kubectl -> API-Server -> Worker Node 안에 명세에 적힌 내용을 토대로 오브젝트를 생성합니다.

<참고> nodeSelector를 이용하여 원하는 노드에 명세에 적힌 내용을 생성할 수 있습니다.

각 노드들은 IP를 갖고 있어 SSH로 접근할 수 있습니다. 또한 노드간 서로 통신이 가능합니다.

 

Deployment

Deployment는 Pod 생성이 아닌 템플릿으로 구성이 변경되어야 합니다.

kind: Deployment
selector:  # Deployment에 selector의 이름으로 배포한 모든 애플리케이션을 관리하도록 지시할 수 있습니다.
  a: f
replicas: 3  # Pod 복제 개수
template:
  image: 2044smile/hello-node

Yaml 파일을 Kubectl을 통해 API-Server로 Push 합니다.

Master Cluster에 Deployment를 생성하고, 명세 파일을 토대로 동작합니다.

영상에서는 3개의 노드에 3개의 파드를 하나씩 배치하기로 결정합니다.

 

파드를 생성하였고, 외부와 통신이 가능한 파드들이 있을 겁니다.

하지만 파드는 쿠버네티스에서 최소 단위이고, 쉽게 삭제되고 쉽게 생성됩니다.

각 파드가 IP를 가지곤 있지만 삭제되고, 다시 재생성된다면 IP는 변경될 것 입니다.

 

안정적인 IP를 사용하기 위해서 쿠버네티스에서는 Service라는 오브젝트를 제공합니다.

 

Service

kind: Service
selector: 
  a: f
type: (NodePort, Cluster IP, Load Balencer)

ClusterIP가 생성되었고, 172.x.x.5(a: f), 172.x.x.6(a: b)로 할당되어 Front와 Back의 클러스터 아이피가 생성되었습니다.

이제 이러한 서비스 간 통신을 안정적으로 수행하는데 필요한 IP를 확보했습니다. 또한 k8s는 DNS가 기본으로 실행됩니다. 클러스터 내에서 서로 통신은 안정적으로 할 수 있게 되었습니다.

 

그렇다면 최종 사용자 측에 프론트 엔드를 노출하려면 어떻게해야 할까?

이를 위해선 코드블럭에서 예시로 든 서비스의 타입을 정의해야 합니다.

Load Balancer로 지정하겠습니다.

 

기본적으로 로드 밸런서의 역할은 실제로 Kubernetes 워커 노드 공간에서 외부 IP를 생성하는 것 입니다.

EXTERNAL IP 169.x.x.1 사용자들이 해당 서비스를 이용하기 위해 외부아이피로 접속하게 됩니다.

 

정리

1. 파드는 디플로이먼트를 통해 배포되고 관리됩니다.

2. 서비스를 사용하여 디플로이먼트에서 생성 된 파드들을 쉽게 액세스 할 수 있습니다.

 

https://www.youtube.com/watch?v=6kQkp-T6wrw

 

댓글

💲 추천 글