Kube Proxy
아래와 같이 Pod에는 여러가지 Container가 구동될 수 있다. 이때 POD끼리 통신하기 위해서는 POD Network가 필요하다.
만약 좌측 POD이 웹서버이고, 우측 POD이 데이터베이스라고할 때 전통적인 서버 방식이라면 IP가 변경될일이 없기 때문에 IP 기반으로 통신을 하면 된다.
하지만 POD은 수시로 생성/삭제가 이뤄지기 떄문에 IP 기반으로 통신할 수가 없다. 이때 웹서버가 데이터베이스에 접근하기 위한 좋은 방식이 서비스를 기반으로 하는 접근 방식이다.
kube-proxy는 Node/Pod/Container간 통신을 하기 위한 서비스로 이는 DeamonSet으로 배포하기 때문에 항상 POD에 배포된다.
kubectl get pods -n kube-system
kubectl get deamonset -n kube-system
POD
하나의 VM의 개념이다. k8s에서는 크게 Cluster, Node, Pod, Container로 구성된다.
Container는 각 개별 어플리케이션이며, Pod는 Container가 실행되는 구조체이다. 그리고 Pod은 Node에서 실행되며, Node의 집합이 Cluster이다. Container는 미리 정해놓은 설정에 의해 Sale In-Out 할 수 있는데, 이때 Sale-Out할 때는 새로운 Pod를 생성하여 Container를 추가한다.
하지만 단일 Node가 단일 Container로 구성되는것은 아니다. 특정 Container를 실행하기 위해 종속적인 App이 있다면 이럴때는 같은 Pod에서 구동되는 구조를 사용하기도 한다.
kubectl run nginx --image nginx
kubectl get pods --all-namespaces
위와 같이 입력하면 nginx 이름의 pod를 생성할 수 있고, 생성할 때의 Container는 Docker Hub Public에 있는 nginx 이미지를 사용하게 된다. 이미지는 Public Repo에서도 가져올 수 있고, Private Repo에서도 사용 가능하다.
그리고 pod을 만들었으면 get으로 pod 확인을 할 수 있는데, pod 생성 시 별도의 Namespace를 지정해주지 않으면 default에 만들어진다. 만약 모든 Namespace에서 구동중인 pod을 보고싶다면 --all-namespace 옵션을 줘야한다.
Pod는 kubectl로도 생성할 수 있지만, YAML 파일로 구성하여 생성할 수도 있다.
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
labels:
app: myapp
spec:
containers:
- name: busybox
image: busybox:1.28
args:
- sleep
- "1000000"
- name: busybox2
image: busybox:1.20
이중에서 apiVersion, kind, metadatam, spec은 필수값이다.
먼저 apiVersion 객체를 생성하는데 사용되는 k8s api 버전을 뜻하며 아래와 같이 생성하려는 종류(Kind)에 따라 달라진다.
Kind | apiVersion |
Pod | v1 |
Service | v1 |
ReplicaSet | apps/v1 |
Deployment | apps/v1 |
kind는 YAML로 생성할 객체의 종류를 뜻한다. 그리고 metadata에는 name/labels가 들어간다. apiVersion, kind, metadata까지만 입력해도 Pod은 생성된다. 하지만 Pod안에 어떠한 Container도 없는 형태이며, spec 하단에 Pod에서 만들 객체 정보를 입력해야한다.
Pod에는 다수의 Container를 생성할 수 있기에 containers를 사용하고, 각 개별 container는 -를 구분자로 하며 create 할 수 있다.
kubectl create -f pod_test.yaml
kubectl get pod -o wide
kubectl describe pod busybox-sleep
그리고 describe 옵션을 사용하면 pod의 생성시점, 할당된 labels 등의 대한 자세한 정보를 확인할 수 있다.
끝!!
'기술 이모저모 > [K8s] Kubernetes' 카테고리의 다른 글
[k8s] Service 개념 및 Type 정리 (0) | 2022.09.18 |
---|---|
[k8s] Pod, Replicaset, Deployment의 관계정리 (0) | 2022.09.18 |
[k8s] kubernetes ReplicaSet/ReplicationController 기본개념 (0) | 2022.08.26 |
[k8s] kubernetes 구조는 어떻게 될까? (0) | 2022.08.20 |
[Udemy] Udemy 영어 강의 한글자막은 없을까? (0) | 2022.08.20 |