애플리케이션의 종류에는 어떤 것들이 있고, 또 어떻게 배포할 수 있는지 알아보자.
가장 단순한 배포형태이다.
metadata
태그 내 labels
은 해당 배포된 오브젝트에 대한 별칭이라고 생각하자.
spec
은 파드안의 실제로 배포하는 컨테이너에 대한 내용이 들어간다.
파드보다 더 큰 단위이다.
replicas를 통해서 크기를 조절한다.
거의 동일하나 selector
와 teplpate
라는 부분이 있다.
템플릿은 붕어빵 기계와 같이 생각하면 된다.
파워포인트의 템플릿처럼 똑같은 형태의 파드를 계속해서 찍어낼 수 있다.
이러한 템플릿을 선택하는 것이 바로 selector
이다.
다음과 같이 selector
와 template
가 다른 경우, 제대로 파드가 배포되지 않는다.
레플리카셋은 특정 수의 파드 인스턴스를 유지하는데 사용된다.
디플로이먼트랑 차이점이 단지 kind
일 뿐 다른점이없다.
하지만 레플리카 셋은 더이상 잘 사용되지 않는다.
왜 사용하지 않게 되었을까?
롤링 업데이트, 롤백, 스케일링과 같은 기능이 없기 때문
deployment로 배포된 (파드에 배포된)컨테이너의 버전을 업데이트 하는 경우를 생각해보자.
쉽게 생각하면, 버전 업그레이드를 위해서 새로운 deployment를 생성하고 기존 파드들을 내린 뒤, 이를 새로운 deployment에 다시 업그레이드 된 버전으로 올리는 과정이 필요할 것이다.
하지만 실제로는 이렇게 동작하지 않는다!
이렇게 디플로이먼트에서 레플리카셋을 이용한다면, 오버헤드가 크게 동작할 필요가 없기때문이다.
따라서 내부적으로 deployment는 레플리카 셋을 사용하는데,
다음과 같이 디플로이먼트 내부에 새로운 레플리카셋을 생성하고, 새로운 레플리카 셋에 하나씩 차례대로 죽고, 생성되게 된다.
이를 Rolling update라고 한다.
데몬셋(Daemonset)은 쿠버네티스 환경에서 전체 노드에 대해서 동일한 파드 배포가 필요한 경우 사용하는 애플리케이션 배포법(컨트롤러)이다.
클러스터 내 전체 노드에 대해 동일한 파드가 각 1개씩 배포된다는 특징이 있다.
주로 성능 모니터링, 로그 관리 등이 필요할 때 사용된다.
다음 yaml
파일을 통해 데몬셋을 배포해 보도록 하자.
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: ds-nginx
name: ds-nginx
spec:
selector:
matchLabels:
app: po-nginx
template:
metadata:
labels:
app: po-nginx
spec:
containers:
- name: nginx
image: nginx
전체 노드가 3개이므로 3개의 노드에 각각 1개씩 파드가 배포된 것을 확인할 수 있다.
k get nodes pods -o wide
우리가 현재 배포한 ds-nginx
데몬셋 말고 다른 데몬셋인 Calico 또한 사실 이미 배포가 되어 동작중에 있다. (마스터 노드에도 배포되므로 총 4개가 배포된다.)
k get daemonsets.apps -A
k get pods -A -o wide
Calico는 쿠버네티스 클러스터 내에서 네트워킹 및 네트워크 보안을 담당하는 오픈 소스 솔루션으로 가상 머신, 컨테이너, 기본 호스트 등 다양한 워크로드 간의 네트워크 통신을 제공하고 관리한다.
Calico에 대해서 더 공부하고 싶다면 여기를 참고.
이것저것 잘 정리해 놓으셔서 보면 도움이 많이된다.