apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
apiVersion : 파드,서비스와 달리 복수의 객체를 다루는 ReplicaSet, Deployment는 apps/v1 명시 필요.spec.selector.matchLabels , spec.template.metadata.labels 의 키-값 쌍은 동일해야 함kubectl get rs
kubectl get replicaset
kubectl describe rs/frontend
kubectl edit rs/frontend
# 레플리카셋 신규 배포
kubectl create -f replicaset.yaml
# 레플리카셋 신규/수정 배포
kubectl apply -f replicaset.yaml
# 레플리카셋 명세가 포함된 yaml 파일을 새로 적용
kubectl replace -f replicaset.yaml
# yaml 파일 바탕으로 배포된 레플리카셋의 레플리카 수를 6으로 조정
kubectl scale --replicas=6 -f replicaset.yaml
# myapp 이름의 레플리카셋이 가진 레플리카 수를 6으로 조정
kubectl scale --replicas=6 replicaset myapp
<Deployment명>-<Replicaset 고유 번호> - <Random 해시 값> 의 고유식별자를 갖는다. 만약 replica 설정 변경이나 Pod가 재배포되면 식별자도 함께 변화한다.kubectl create deployment nginx --image=nginx:1.14.2 --replicas=3
kubectl create deployment <Deployment명> --image=<이미지명> --replicas=<replica 수> 형태로 구성—image 로 지정된 이미지의 파드를 —replicas 에 지정된 숫자 만큼 생성하고 유지하는 deployment를 생성한다.—image 는 필수 항목. —replicas의 default는 1apiVersion: 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
kind 값은 반드시 Deployment여야 한다.spec.replicas : 레플리카 수spec.template : 배포할 파드에 대한 정보spec.template.spec.containers : 파드에 들어갈 컨테이너 이미지 정보spec.selector.matchLabels , spec.template.metadata.labels 에 명시된 키-값 쌍은 동일해야 한다.이미 배포되어 구동중인 파드의 이미지를 업데이트 하거나, 레플리카 수 변경 등 설정 수정 필요성 발생
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
.spec.template.spec.containers[0].imagekubectl edit deployment/nginx-deployment
YAML파일로 직접 생성했다면, yaml파일 수정후 kubectl apply
CLI 환경에서 레플리카 수만 조정하고 싶다면 kubectl scale 사용
kubectl scale deployment/nginx-deployment --replicas=5
단, 위 명령어는 yaml파일과 별개로 적용되므로, yaml 파일을 수정하고 apply 하는 것을 추천
Application의 상태를 저장하고 관리하는데 사용
Deployment와 달리, 각 Pod의 순서와 고유성을 보장하며 각각 영구 스토리지를 할당
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx-statefulset
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
serviceName: "nginx"
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi
kind 값은 반드시 Statefulset 이어야 한다.spec.replicas : replica 수spec.serviceName : 헤드리스 서비스 이름spec.template : 배포할 파드에 대한 정보spec.template.sepc.containers : 파드에 들어갈 컨테이너 이미지 정보, volumeMounts 에 볼륨정보 필수spec.volumeClaimTemplates : 파드마다 부여될 볼륨에 대한 정보. PV가 미리 있어야함.spec.selector.matchLabels , spec.template.metadata.labels 에 명시된 키-값 쌍은 동일해야 한다.헤드리스 서비스
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
spec.serviceName 과 동일한 이름을 metadata.name 에 부여spec.clusterIP의 값은 None모든 노드 , 또는 특정 레이블을 가진 노드에 하나씩 동일한 파드를 구동하게 해주는 리소스
노드에 1개씩만 배치한다. ⇒ replica (복제) 설정을 하지 않는다.
데몬셋이 구동중인 클러스터에서 노드가 추가되면, 추가된 노드에도 데몬셋 파드가 배치되지만 삭제된 노드에 있던 데몬셋 파드가 다른 노드로 이동하지는 않는다.
주로 worker node에 리소스 모니터링용 Application, 로그 수집기 배포 용도로 쓰임
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
kind : Daemonsetspec.template : 배포할 파드에 대한 정보spec.template.spec.tolerations : 특정 조건을 가진 노드에 데몬셋 파드 배치spec.template.spec.nodeSelector : 특정 레이블값 노드에만 데몬셋 파드를 배치하고 싶은 경우 활용spec.selector.matchLabels , spec.template.metadata.labels 에 명시된 키-값 쌍은 동일해야 한다.