쿠버네티스 운영
볼륨, 디스크 서비스
쿠버네티스 볼륨
- 데이터를 담는 디렉토리다.
- Pod 내 컨테이너들이 접근 가능하다.
- Pod에 소속되는 동안 유지된다.
- Pod 내에서 구동되는 컨테이너들보다 오래 유지되며, 그 데이터는 컨테이너가 재시작 되더라도 계속 보존된다.
- 자세한 내용은 Wiki를 참고한다.
쿠버네티스 볼륨 종류
- 로컬 디스크, configMap, secret, persistentVolumeClaim, emptyDir, hostPath
- NFS, iSCSI, Fiber Channel과 같은 일반적인 외장 디스크 인터페이스다.
- GlusterFS, Ceph와 같은 오픈 소스 파일 시스템을 사용할 수 있다.
- AWS EBS, GCP Persistent 디스크와 같은 퍼블릭 클라우드에서 제공되는 디스크를 사용할 수 있다.
- VsphereVolume과 같이 프라이빗 클라우드 솔루션에서 제공하는 디스크 볼륨을 사용할 수 있다.
- 더 자세한 볼륨 종류에 대한 정보는 쿠버네티스 공식 문서를 참고한다.
컨테이너간 볼륨 공유
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
volumes:
- name: shared-data
emptyDir: {}
컨테이너간 볼륨 유형
Temp | Local | Network |
---|---|---|
emptyDir | hostPath | GlusterFS, gitRepo, NFS, iSCSI, gcePersistentDisk, AWS EBS, AzureDisk, Fiber Channel, Secret, VshereVolume |
emptyDir
- emptyDir은 파드가 생성될 때 생성되고 파드가 삭제될 때 같이 삭제되는 임시 볼륨으로 생성 당시에는 디스크에 아무 내용이 없기 때문에 emptyDir이라는 이름을 가지고 있다.
- 파드 내의 컨테이너가 크래시되어 삭제되거나 재시작 되더라도 emptyDir의 생명주기는 컨테이너 단위가 아니라 파드 단위이기 때문에 emptyDir은 삭제되지 않고 계속해서 사용이 가능하다.
volumeMounts:
- name: shared-storage
mountPath: /data/shared
- name: nginx
image: nginx
volumeMounts:
- name: shared-storage
mountPath: /data/shared
volumes:
- name: shared-storage
emptryDir: {}
hostPath
- hostPath는 노드의 로컬 디스크의 경로를 파드에서 마운트해서 사용한다.
- 같은 hostPath에 있는 볼륨은 여러 파드 사이에서 공유되어 사용된다.
- 파드가 삭제되더라도 hostPath에 있는 파일들은 삭제되지 않고 다른 파드가 같은 hostPath를 마운트하게 되면 남아 있는 파일들을 액세스할 수 있다.
- 노드의
/tmp
디렉토리를 hostPath를 이용하여/data/shared
디렉토리에 마운트할 수 있다.
volumeMounts:
- name: tpath
mountPath: /data/shared
volumes:
- name: tpath
hostPath:
path: /tmp
type: Directory
gitRepo
- 생성 시 지정된 Git 리포지토리의 특정 리비전의 내용을 Clone하여 내려받은 후에 디스크 볼륨을 생성하는 방식이다.
- 물리적으로는 emptyDir이 생성되고, Git 리포지토리 내용을 Clone하여 내려받는다.
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes:
- name: html
gitRepo:
repository: https://github.com/luksa/kubia-website-example.git
revision: master
directory: .
PersistentVolume(PV) and PersistentVolumeClaim(PVC)
- 클러스터 내 스토리지 일부 조각을 나타내는 API 객체다.
- 개발 파드의 수명주기를 넘어 보존되는 범용/플러그 가능 자원으로서 가용할 수 있다.
- 볼륨 자체를 의미하는 PV들은 스토리지를 사용하고자 할 때 그 제공방식의 세부사항들을 추상화하는 API를 제공한다.
- 스토리지가 사전에 생성되는 시나리오(정적 프로비저닝)에서는 PV들이 직접 사용된다.
- 반면 온디멘드 스토리지를 필요로 하는 시나리오(동적 프로비저닝)에서는 PV 대신 PVC가 사용된다.
- PV는 파드하고는 별도로 관리되고 별도의 생명주기를 가지고 있으며 PVC는 사용자가 PV에 하는 요청이다.
쿠버네티스 서비스
쿠버네티스 서비스 개념
- 파드 집합과 같은 애플리케이션들에 접근하는 방법을 기술하는 API 객체다.
- 포트, 로드밸런서를 기술할 수 있다.
- 파드들을 서로 연결한다.
- 설정을 분리(decouple)한다.
- 파드 접근 정책을 정의한다.
- 마이크로서비스와 대응되는 개념이다.
- 액세스 포인트는 내부(internal)일수도 외부(external)일 수도 있다.
쿠버네티스 서비스 구조
- 서비스는 지정된 IP로 생성이 가능하고 여러 파드를 묶어서 로드 밸런싱이 가능하며 고유한 DNS 이름을 가질 수 있다.
- 멀티 포트 지원, 파드 간에 랜덤으로 부하를 분산하는 로드 밸런싱 알고리즘을 지원한다.
apiVersion: v1
kind: Service
metadata:
name: hello-node-svc
spec:
selector:
app:hello-node
ports:
- port: 80
protocol: TCP
targetPort: 8080
type: LoadBalancer
Health Check
- 쿠버네티스는 각 컨테이너의 상태를 주기적으로 체크해서 문제가 있는 컨테이너를 자동으로 재시작하거나 또는 문제가 있는 컨테이너(파드) 서비스에서 제외 가능한 기능을 제공한다.
- Liveness probe: 컨테이너가 살아 있는지 아닌지를 체크하는 방법이다.
- Readiness probe: 컨테이너가 서비스 가능한 상태인지를 체크하는 방법이다.
Probe types
- Liveness probe와 Readiness probe는 컨테이너가 정상적인지 아닌지를 체크하는 3가지 방법이다.
- Command probe: 컨테이너의 상태 체크를 쉘 명령을 수행으로 체크한다.
- HTTP probe: HTTP GET 메서드를 이용하여 컨테이너의 상테를 검사한다.
- TCP probe: 지정된 포트에 TCP 연결을 시도하여 상태를 검사한다.
'Infrastructure > Kubernetes' 카테고리의 다른 글
[Basic] 쿠버네티스 모니터링 (0) | 2024.06.09 |
---|---|
[Basic] 쿠버네티스 배포 (0) | 2024.06.09 |
[Basic] 쿠버네티스 클러스터 아키텍처 (0) | 2024.06.09 |
[Basic] 쿠버네티스와 오브젝트 모델 (0) | 2024.06.09 |
[Basic] 쿠버네티스와 컨테이너 (0) | 2024.06.09 |