출처 : kubernetes in action
Downward API
- 해당 POD 의 내부에서 실행중인 프로세스에 POD 자체의 메타 데이터를 노출할 수 있다.
. pod 명
. pod ip 주소
. pod 네임스페이스
. pod 가 실행되고 있는 Node 명
...
1) 환경변수를 통한 메타데이터 노출
apiVersion: v1
kind: Pod
metadata:
name: 포드명
spec:
containers:
- name: main
image: ㅇㅇㅇ
command: ㅇㅇㅇ
resources:
requests:
....
limits:
....
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
.....
2) downward API 볼륨 내의 file을 통한 메타데이터 전달
Deployment
- 애플리케이션을 배포하고 이를 선언적으로 업데이트하는데 사용하는 상위 수준의 리소스
- deployment 를 만들면 레플리카셋 리소스가 아래에 만들어짐
(레플리카셋은 pod를 복제하고 관리)
- deployment 가 필요한 이유는...
: 애플리케이션을 업데이트할때 추가적인 ReplicationController 가 필요하고, 이전 ReplicationController와 잘 조화되게끔 컨트롤러를 조정해야 한다.
즉, 전체적으로 통제할 무언가가 필요하고 그 역할을 deployment가 담당한다.
(deployment 가 직접 수행하는 것은 아니고 쿠버네티스 컨트롤 플레인에서 실행하는 컨트롤러 프로세스가 이를 수행)
- deployment 상태 확인 명령어
$kubectl rollout status deployment [deployment리소스명]
- Deployment 전략
> Recreate 전략
: 새 pod를 만들기 전에 기존 pod를 삭제
애플리케이션이 여러 버젼을 동시에 실행할 수 없으며, 새 버젼을 시작하기 전에 이전버젼을 완전히 중지해야 하는경우 사용
애플리케이션 down time 짧게 포함된다.
> RollingUpdate 전략
: 오래된 pod를 하나씩 제거하는 동시에 새로운 pod를 추가해 전체 업데이트 프로세스에 걸쳐 애플리케이션을 사용할 수 있도로한다.
Deployment의 롤아웃 히스토리 보여주기
- deployment는 리비전 히스토리를 유지하므로 롤아웃, 롤백이 가능하다.
- 히스토리는 레플리카셋 내부에 저장된다.
$kubectl rollout history deployment [deployment명]
특정 Deployment 리비전으로 롤백하기
$kubectl rollout undo deployment [deployment명] --to-revision=1
- 비활성 레플리카셋을 삭제하면 롤백할 수 없으므로 삭제하면 안된다.
롤링 업데이트 전략의 maxSurge와 maxUnavailable 속성
- maxSurge
: 배포에 구성된 원하는 복제본 수 위에 존재하도록 허용하는 포드 인스턴스 수를 결정한다.
즉, 이값이 25% 이면 원하는 수보다 25% 더 많은 포드 인스턴스까지만 있을 수 있다.
25%이고, 원하는 수가 4면, 최대 5개까지만 존재할 수 잇다는 것
- maxUnavailable
: 업데이트 중에 원하는 복제본 수에 비례하여 사용할 수 없는 포드 인스턴스 수를 결정한다.
롤아웃 프로세스 일시 중지
- deployment 는 롤아웃 프로세스 중에 일시 중지될 수 있다.
이렇게 하면 나머지 롤아웃을 진행하기 전에 새 버전이 제대로 작동하는지 확인 할 수 있다.
$kubectl rollout pause deployment [deployment명]
- 카나리아 릴리즈
: 잘못된 버전의 애플리케이션을 롤아웃 하고 모든 사용자에게 영향을 줄 위험을 최소화하기 위한 기술
- 롤아웃 재개
$kubectl rollout resume deployment [deployment명]
'DevOps' 카테고리의 다른 글
Docker 명령어 정리 (2) | 2019.03.21 |
---|---|
쿠버네티스 기존 리소스 수정 (0) | 2019.02.08 |
쿠버네티스 구조 (0) | 2019.01.10 |
pod-레플리케이션컨트롤러-서비스 (0) | 2019.01.10 |
쿠버네티스 명령어#5 (0) | 2019.01.02 |