🐋
docker-kubernetes ) til - 20240424
April 24, 2024
색션 12. 실전 Kubernetes - 핵심 개념 자세히 알아보기
198. Pod와 컨테이너 사양(Spec) 추가
Spec 추가
apiVersion: apps/v1
kind: Deployment
metadata:
name: second-app-deployment
spec:
replicas: 1 # 최초 Pod 의 숫자
```
- 초기 트래픽의 수준을 알아서 최초 Pod의 생성량을 안다면 이를 지정해주는 것도 유용하다.
### Pod 설정하기 - 전체
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: second-app-deployment
spec:
replicas: 1
template: # deployment 생성을 위해 이미지를 설정하는 것과 같은 역할을 한다.
metadata:
lables:
app: second-app
- template는 항상 Pod 를 대변하는 객체이다.
- 따라서 최초에
kind
를 통해 deployment 를 설정한 것과는 다르게 설정되는 것이다. - 더불어 이렇게 설정하는 것은 전체 Pod에 대한 설정이라고 생각하면 된다.
Pod 설정하기 - 개체
apiVersion: apps/v1
kind: Deployment
metadata:
name: second-app-deployment
spec:
replicas: 1
template:
metadata:
lables:
app: second-app
spec: #메타데이터와 동일한 수준에서 시작한다.
containers:
- name: second-node
image: axel9309/kub-first-app:4
000```
- 참고로 여기서 사용되는 spec 은 저 deployment의 Pod를 의미하는 것이고, 그 말은 다른 Pod가 필요하다면 다른 Deployment 가 필요하다.
- `container` 라는 항목은 Pod 안에 한개가 아닐 수 있고, 한개라면 기존 방식처럼 map 형태로 하면 되며, 여러개의 container를 구동할 때는 YAML에서 배열 문법을 활용하면 된다.
- 이때 주의 사항이 각 컨테이너마다 이미지나, 이름이 다를 수 있기에, 그런 경우 상위처럼 하이픈(-) 없이 적어주면 앞전에 언더바를 쓴 대상의 속성으로 인식 된다.
### 최소한의 deployment 를 활용해 적용시키는 방법
```shell
> kubectl apply -f="deploymentMine.yaml"
The Deployment "second-app-deployment" is invalid:
* spec.selector: Required value
* spec.template.metadata.labels: Invalid value: map[string]string{"app":"second-app"}: `selector` does not match template `labels`
- -f 는 파일을 인식시키기 위한 옵션 값, 여러 개를 인식 시킬 때는
-f
이 옵션을 여러번 사용하면 된다. - 우선 이렇게 해보면 에러메시지로
selector
가 필요하다고 이야기 한다.
selector란 어떻게 하는 것인가.
apiVersion: apps/v1
kind: Deployment
metadata:
name: second-app-deployment
spec:
replicas: 1
selector: # 전체 Pod를 위하여 설정해줘야 한다.
matchLabels:
app: second-app # 해당 앱
tier: backend # tier라는 라벨에 backend라는 값이 있을 때 deployment 의 모니터링이 들어가게 됨
template:
metadata:
labels:
app: second-app
tier: backend
spec: #메타데이터와 동일한 수준에서 시작한다.
containers:
- name: second-node
image: axel9309/kub-first-app:4
- deployment 는 쿠버네티스 속에서 동적인 객체다.
- Pod의 확장 명령이 떨어지면 deployment 가 지속적으로 감시하며 살핀다.
- 이때 제어야 할 필요가 있을 때
selector
가 필요해진다. Pod에 대한 라벨링, 티어 설정 등은 자유롭게 할 수 있고, 그걸 지정한 뒤 selector가 이걸 가리킴으로써 deployment 는 자신에게 어떤 Pod가 연결되고, 감시할 것인지를 알게 되는 것이다.
get deployments
- 이제 모든 기초 준비는 끝났기에 파일을 적용시키면 된다.
> kubectl apply -f="deploymentMine.yaml"
deployment.apps/second-app-deployment created
- 성공적인 문구가 나옴과 동시에, deployment를 확인해보면 성공적으로 앱이 배포된 것이 보일 것이다.
> kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
first-app 1/1 1 1 7d13h
second-app-deployment 0/1 1 0 6s
> kubectl get pods
NAME READY STATUS RESTARTS AGE
first-app-5bd8cf76f4-pnxr4 1/1 Running 1 (51m ago) 3d10h
second-app-deployment-5f47fd4c87-s842j 1/1 Running 0 108s