반응형
쿠버네티스 POD 배포
쿠버네티스는 POD의 배포를 단일 단위로 하지 않고 Kubernetes Controller 라는 것으로 배치처리한다.

Replication Controller
POD의 개수를 보장한다.
어떤 이유로든 POD가 Kill되면 재배포를 진행한다.
하지만 Template (yml파일) 의 수정이 이미 배포된 POD들의 update를 보장하지 않는다.

삭제
kubectl delete rc <rc-name> --cascade=false
Replica Set
Replication Controller의 새로운 버전이며 더욱 풍부한 label selector 를 제공한다.
옵션
- In : 라벨의 값이 지정된 값 중 하나와 일치해야 한다.
- NotIn : 라벨의 값이 지정된 값과 일치해서는 안된다.
- Exists : pod에는 지정된 키가 있는 라벨이 포함되어야 한다.
- DoesNotExist : pod에는 지정된 키가 있는 라벨을 포함하면 안 된다.
Deployment
Stateless 앱 배포시 가장 기본이 되는 컨트롤러이다.
ReplicaSet을 이용해서 배포된 인스턴스들을 관리하고 이를 통해 Rolling Update , 배포 중단, Roll Back 등의 작업이 가능하다. ( 무중단 업데이트 )

Update
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
- maxSurge : 기존 파드의 개수보다 25% 더 초과해서 새로운 버전의 파드를 올리겠다는 의미
- maxUnavailable : 기존의 파드 중 25%까지만 파드를 죽이겠다는 의미
이 설정은 Deployment 업데이트 중에 최대 25%의 새 파드를 동시에 생성하고, 최대 25%의 파드가 일시적으로 사용 불가능할 수 있도록 허용하는 롤링 업데이트 전략을 정의한다. 이렇게 함으로써 애플리케이션의 안정성을 유지하면서 업데이트를 수행할 수 있다.
시나리오 코드
kubectl create -f deployment-nginx.yml
kubectl get all
# replicas update
kubectl scale deployment deployment-nginx --replicas = 2
# delete deployment
kubectl delete deployment.apps deployment-nginx
Daemon Set
특정 노드 혹은 모든 노드에 POD가 한 개씩 실행되도록 보장하는 컨트롤러이다.
모니터링툴, 로그수집기등의 배포에 사용된다.
특정 Node에 배치하고 싶을 때에는 node에 라벨을 붙인 뒤에, node selector를 이용해 배포한다.
YML 모음집
POD.yml
apiVersion: v1 #Kubernetes API Version
kind: Pod #Type of resources
metadata:
name:myapp-pod#Pod의 이름
labels:
app: myapp
version: "1.14"
spec:
containers:
- image:nginx:1.14#컨테이너 이미지 정보
name:nginx-container#컨테이너 이름
Replication Controller.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp-rc
spec:
replicas: 3
selector:
app: myapp
version: "1.14"
template:
metadata:
labels:
app: myapp
version: "1.14"
spec:
containers:
- name: nginx-container
image: nginx:1.14
Replica Set.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-rs
spec:
replicas: 3
selector:
matchLabels:
app: web
matchExpressions:
- {key: version, operator: In, values: ["1.14", "1.15"]}
template:
metadata:
name: nginx-pod
labels:
app: web
version: "1.14"
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
Deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: web
matchExpressions:
- {key: version, operator: In, values: ["1.14", "1.15"]}
progressDeadlineSeconds: 600
revisionHistoryLimit: 10
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
name: nginx-pod
labels:
app: web
version: "1.14"
spec:
containers:
- name: nginx-container
image: nginx:1.14
ports:
- containerPort: 80
- progressDeadlineSeconds: 업데이트 작업의 진행 상황을 모니터링하는데 사용되는 시간 제한을 설정. 즉, 이 값이 설정된 시간 동안 업데이트 작업이 진행되지 않으면 업데이트는 실패한 것으로 간주. 여기서는 600초(약 10분) 동안 업데이트가 진행되지 않으면 업데이트가 실패한 것으로 처리.
- revisionHistoryLimit: 저장되는 리비전(버전)의 최대 수를 설정.
쿠버네티스는 Deployment 업데이트를 수행할 때마다 새로운 리비전을 생성하고 이전 버전의 정보를 유지하는데, 이 설정은 총 몇 개의 리비전을 유지할 것인지를 결정한다. 여기서는 최대 10개의 리비전을 유지하도록 설정되었다.
Daemon Set.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nginx-daemonset
spec:
selector:
matchLabels:
app: web
version: "1.14"
template:
metadata:
labels:
app: nginx
version: "1.14"
spec:
nodeSelector:
gpu: "true"
containers:
- name: nginx
image: nginx:1.14
반응형
'DevOps > Kubernetes' 카테고리의 다른 글
쿠버네티스 Service (0) | 2025.01.10 |
---|---|
쿠버네티스 네트워크 (0) | 2025.01.10 |
쿠버네티스 POD 관리 (0) | 2025.01.10 |
쿠버네티스 실습 (0) | 2025.01.10 |
쿠버네티스 개요 (0) | 2025.01.10 |