Closed csbsjy closed 3 years ago
셀렉터와 함께 특정 레이블이 있는 자원들을 선택할 때 사용 포맷: [key: value 형식] ex) name: nginx-app
/를 기준으로 접두어를 둘 수 있는데 일반적으로 사용자 레이블에선 쓰이지 않고 쿠버네티스 시스템이 사용하는 레이블에 사용된다.
ex) kubernetes.io/
등호기반 셀렉터(=, ==, !=), 집합기반 셀렉터(notin, in, exist, !), !
AND 연산(,로 연결)
애너테이션: 주석성격의 메타데이터를 기록할 때 사용
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx environment: develop # label 추가 spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: environment: develop # label selector ports: - protocol: TCP port: 80 targetPort: 9376
아래처럼 -l 조건으로 특정 레이블에 속한 파드만 얻어올 수 있다.
kubectl get pods -l environment=develop
주석 성격의 메타데이터를 기록하는데 사용
Ex) 릴리즈 정보, 로깅, 모니터링에 필요한 정보들, 담당자 등등
apiVersion: v1 kind: Pod metadata: name: annotations-demo annotations: # 주석성격의 애너테이션 imageregistry: "https://hub.docker.com/" spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
kubectl describe pod annotaion
롤링업데이트: 배포된 전체 파드를 특정 갯수씩 교체하면서 배포. deployment의 기본 배포방식
블루/그린: 실행 중인 파드 수만큼 파드를 새로 생성한 뒤 그린배포(신규배포) 후, 그린 파드가 정상적이면 트래픽을 신규 파드쪽으로 옮기고 기존 파드(블루)는 제거한다.
카나리: 기존 버전을 유지하고 일부만 신규 파드로 교체하며 배포.
apiVersion: apps/v1 kind: Deployment metadata: name: javabom-myapp labels: app: myapp version: stable # stable(기존버전) spec: replicas: 3 # 3개 배포 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.14.2 ports: - containerPort: 80
apiVersion: apps/v1 kind: Deployment metadata: name: javabom-myapp labels: app: myapp version: canary # canary(신규버전) spec: replicas: 1 # 1개 배포 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:1.14.3 # 버전업 ports: - containerPort: 80
이렇게 두 디플로이먼트의 레이블을 지정한 뒤
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: myapp ports: - protocol: TCP port: 30880 targetPort: 80
서비스에서 두 디플로이먼트의 공통 레이블인 myapp 을 지정하면 동시에 구버전/신규버전을 서비스 할 수 있다.
신규버전이 확인되어 구버전을 제거하거나 신규버전에 문제가 생긴다면 replica 갯수를 0으로 조정할 수 있다.
배포그림 참고: https://www.weave.works/blog/kubernetes-deployment-strategies
레이블
셀렉터와 함께 특정 레이블이 있는 자원들을 선택할 때 사용 포맷: [key: value 형식] ex) name: nginx-app
활용케이스
레이블 규칙
접두어가 있는 레이블
/를 기준으로 접두어를 둘 수 있는데 일반적으로 사용자 레이블에선 쓰이지 않고 쿠버네티스 시스템이 사용하는 레이블에 사용된다.
ex) kubernetes.io/
레이블 셀렉터
등호기반 셀렉터(=, ==, !=), 집합기반 셀렉터(notin, in, exist, !), !
AND 연산(,로 연결)
애너테이션: 주석성격의 메타데이터를 기록할 때 사용
아래처럼 -l 조건으로 특정 레이블에 속한 파드만 얻어올 수 있다.
애너테이션
주석 성격의 메타데이터를 기록하는데 사용
Ex) 릴리즈 정보, 로깅, 모니터링에 필요한 정보들, 담당자 등등
레이블을 이용한 카나리배포
롤링업데이트: 배포된 전체 파드를 특정 갯수씩 교체하면서 배포. deployment의 기본 배포방식
블루/그린: 실행 중인 파드 수만큼 파드를 새로 생성한 뒤 그린배포(신규배포) 후, 그린 파드가 정상적이면 트래픽을 신규 파드쪽으로 옮기고 기존 파드(블루)는 제거한다.
카나리: 기존 버전을 유지하고 일부만 신규 파드로 교체하며 배포.
이렇게 두 디플로이먼트의 레이블을 지정한 뒤
서비스에서 두 디플로이먼트의 공통 레이블인 myapp 을 지정하면 동시에 구버전/신규버전을 서비스 할 수 있다.
신규버전이 확인되어 구버전을 제거하거나 신규버전에 문제가 생긴다면 replica 갯수를 0으로 조정할 수 있다.
배포그림 참고: https://www.weave.works/blog/kubernetes-deployment-strategies