쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛
논리적인 호스트
하나 이상의 애플리케이션 컨테이너, IP주소, 공유 스토리지(e.g. 볼륨)은 파드 내에서 격리된다
쿠버네티스에서는 워크로드 리소스를 만들기 위해 보통 YAML 같은 리소스 정의 파일을 사용한다
여기서 워크로드란 쿠버네티스 상에서 작동되는 애플리케이션을 말한다.
아래는 리소스 정의 파일의 예시
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
파드 정의 파일을 적용하기 위해서는
$ kubectl apply -f {정의파일}
옵션 f는 파일로 파드를 정의하기 위해 사용했다.
그러나 파드는 일시적이고, 언제나 삭제될 수 있으므로 개별 파드를 만들 일은 많지 않다. 쿠버네티스의 사용 목적은 주로 컨테이너의 오케스트레이션이므로 파드는 디플로이먼트, 스테이트풀셋, 데몬셋을 이용해 관리하는 것이 더 바람직하다. 이 리소스들은 파드 템플릿을 항상 포함하고 있다.
디플로이먼트를 통해
1. 레플리카셋을 이용하여 파드를 원하는 개수만큼 실행할 수 있다
2. 제어판을 이용하여 파드를 업데이트할 수 있다
3. 파드를 롤백할 수 있다
쿠버네티스는 재생성과 롤링 배포 방식으로 배포가 가능하다
디플로이먼트를 적용하기 위해서는
$ kubectl apply -f {디플로이먼트파일}
서비스를 사용하면 파드에서 실행 중인 애플리케이션을 클러스터 외부에서 접근할 수 있다.
서비스 리소스가 정의된 YAML 파일에 selector를 이용해서 서비스할 대상 타겟을 설정할 수 있다.
서비스 리소스 예제
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
selector:
app: nginx # 배포할 파드 지정
type: LoadBalancer
ports:
- name: nginx
protocol: TCP
port: 80
targetPort: 80
$ kubectl apply -f test-v1.yaml --record
--record 는 배포 이력을 남기기 위해 넣은 옵션
배포하기 위해서 서비스 명세를 적용해야한다
apiVersion: v1
kind: Service
metadata:
name: test
namespace: default
spec:
selector:
app: test
type: LoadBalancer
ports:
- name: test
protocol: TCP
port: 8085
targetPort: 8080
$ kubectl apply -f test-service.yaml
$ minikube tunnel
$ kubectl rollout history deployment {디플로이먼트이름}
로 배포 이력을 확인할 수 있다
$ kubectl apply -f test-v2.yaml --record
를 하면 v2로 업데이트할 수 있다
v1으로 롤백하고싶다면
$ kubectl rollout undo deployment/test --to-revision=1
좋은 글 감사합니다!