Deployment
k8s == kubernetes k8s와 쿠버네티스는 같은 말이다. k와 s사이에 알파벳이 8개 존재한다는 의미 어떻게 이런 생각을 했을까 이름 하나 잘 만들었다고 생각한다. 쿠버네티스는 공부하면 공부할 수 록 알고 있어야 할 개념과 용어가 많은거 같다. 그중 하나가 deployment인데 쿠버네티스를 사용하기 위해서 꼭 알고 있어야할 개념 중 하나다.
일단 용어에서 볼 수 있듯이 Deployment의 용어를 찾아보자.
deployment 단어를 찾아보니 군사용어로 행동 개시, 배치 라는 의미도 있고 백신에서도 사용될 수 가 있는데 예를 들어, vaccine deployment(어떤 효과를 보기 위해서 무언가를 사용하다로 의미로 사용된다고 한다.) 즉, 백신을 맞히다.로 이해할 수 있다.
그렇다면, 개발용어에서 deployment는 무엇일까? 배포하다로 사용되고 있다. 그렇다면 k8s에서 사용되는 deployment의 의미도 배포하다 일 것이다. 그렇다면 무엇을 배포하는지 궁금하다. 아래 스크립트를 보자.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
해당 스크립트는 쿠버네티스 공식 홈에 있는 deployment.yaml 파일 내용이다. 만약 k9s를 모르고 본다면 단어 그대로 해석하고 어떤 기능을 하는지 모를 가능성이 크다.
- apiVersion: 해당 deployment를 생성하기 위해 사용하고 있는 쿠버네티스 api버전이 어떤 것인지 정의할 때 사용한다.
- kind: 위에서 말했던 것처럼 쿠버네티스는 다양한 오브젝트가 존재하는데 그중 하나가 deployment이다.
- metadata: deployment의 설정을 해주는 곳이다. (오브젝트를 유일하게 구분해줄 데이터)
- name: deployment의 이름을 정의한다.
- label: deployment의 레이블을 설정한다.
- spec: 오브젝트 상태를 정의하는 곳이다.
- replicas: pod의 개수를 몇개 유지할지 설정하는 곳이다 기본값은 1이다.
- selector: 어떤 레이블의 파드를 선택하여 관리할지에 대한 설정, 앱 컨테이너의 nginx 레이블을 식별하여 해당되는 파드들을 관리하며, 이 필드가 없을 경우 spec.template.metadata.labels에 설정된 내용들을 기본값으로 사용
- spec.template.metadata: 어떤 파드를 실행할지 정의하는 곳
- spec.template.metadata.name: 생성될 파드의 이름을 지정
- spec.template.metadata.labels.app:nginx: 식별하는 레이블이 앱 컨테이너고 nginx로 식별한다.
- spec.spec: 컨테이너에 대한 설정을 지정한다. 컨테이너 명, 포트, 등등
- containerPort: 컨테이너가 사용하는 포트 지정
- 컨테이너와 통신을 하기위해 설정이 필요, service.yaml 추후에 하겠지만 service.yaml에 targetport가 있는데 targetPort와 containerPort가 같지가 않는다면, 서비스는 해당 container로 트래픽을 전달할 수 없다.
- container port가 deployment.yaml의 port이고, target port도 deployment.yaml에서
- service port가 service.yaml의 실제 서비스되는 port라고 할 수 있다.
deployment를 배포하는 방법과 작동방법은 추후에 작성하도록 하겠다.
'Kubernaetes' 카테고리의 다른 글
vcluster(virtualCluster) 사용해보기 (2) | 2023.10.03 |
---|---|
k8s - master node 재시작 하기 (0) | 2022.12.26 |
k8s- Control Plane(컨트롤 플레인) (0) | 2022.12.15 |
k8s - argoCD helm를 통해 배포하기 (1) | 2022.12.12 |
KubeCon Kyverno 세션 적용해보기 (0) | 2022.12.09 |
댓글