컨피그 & 스토리지 API 카테고리
설정/기밀 정보/영구 볼륨 등에 관련된 리소스
- 시크릿
- 컨피그맵
- 영구 볼륨 클레임
볼륨, 영구 볼륨, 영구 볼륨 클레임의 차이
볼륨
- 사용 가능한 볼륨을 매니페스트에 직접 지정하여 사용할 수 있게 하는 것
- 사용자가 설정된 볼륨을 사용할 수 있지만, 쿠버네티스에서 신규 볼륨을 생성하거나 기존 볼륨을 삭제하는 작업은 할 수 없다.
- 매니페스트에서 볼륨 리소스 생성 불가능
영구 볼륨
- 외부 영구 볼륨을 제공하는 시스템과 연계하여 신규 볼륨을 생성하거나 기존 볼륨을 삭제하는 등의 작업이 가능하다.
- 구체적으로 매니페스트에서 영구 볼륨 리소스를 별도로 생성하는 형태다.
- 볼륨과 같은 플러그인 제공
- 예를 들어 GCP, AWS 볼륨 서비스에서는 영구 볼륨 플러그인과 볼륨 플러그인 둘다 제공됨
- 영구 볼륨 플러그인에서는 볼륨 생성 및 삭제 같은 라이프사이클을 처리할 수 있지만
- 볼륨 플러그인은 기존에 있는 볼륨만 사용 가능
- 예를 들어 GCP, AWS 볼륨 서비스에서는 영구 볼륨 플러그인과 볼륨 플러그인 둘다 제공됨
영구 볼륨 클레임
- 영구 볼륨 리소스를 할당하는 리소스
영구 볼륨은 클러스터에 볼륨을 등록만 하기 때문에 실제 파드에서 사용하려면 영구 볼륨 클레임을 정의하고 사용해야 한다.
볼륨(Volume)
다음과 같이 볼륨 플러그인이 있다.
- emptyDir
- hostPath
- downwardAPI
- projected
- nfs
- iscsi
- cephfs
영구 볼륨과 다르게 파드에 정적으로 볼륨을 지정하는 형태
플러그인에 따라서 충돌이 있을 수 있다.
emptyDir
파드용 임시 디스크 영역으로 사용할 수 있다.
파드가 종료되면 삭제 된다.
호스트의 임의 영역을 마운트할 수 없으며 호스트에 있는 파일을 참조할 수도 없다.
apiVersion: v1
kind: Pod
metadata:
name: sample-emptydir
spec:
containers:
- name: nginx-container
image: nginx:1.16
volumeMounts:
- name: cache-volume
mountPath: /cache
volumes:
- name: cache-volume
emptyDir:
sizeLimit: 128Mi
/cache 영역에 150 MB 용량의 파일을 작성하면 용량 초과로 Evict(축출)된다.
hostPath
쿠버네티스 노드 상의 영역을 컨테이너에 매핑하는 플러그인이다.
emptyDir와 다르게 특정 영역에 마운트할 수 있으므로, 호스트의 어떤 영역을 사용할지 지정해야 한다.
type은 Directory/DirectoryOrCreate/File/Socket/BlockDevice 등을 선택할 수 있다.
DirectoryOrCreate와 Directory의 차이는 디렉터리가 존재하지 않을 경우 생성하고 기동하는지에 대한 여부에 있다.
보안상 hostPath를 사용할 수 없는 쿠버네티스 환경도 있다.
apiVersion: v1
kind: Pod
metadata:
name: sample-hostpath
spec:
containers:
- name: nginx-container
image: nginx:1.16
volumeMounts:
- name: hostpath-sample
mountPath: /srv
volumes:
- name: hostpath-sample
hostPath:
path: /etc
type: DirectoryOrCreate
파드의 /srv와 호스트의 /etc를 마운트하는 것을 의미한다.
그래서 실제로 기동된 파드에서는 쿠버네티스 OS 정보와 컨테이너 OS 정보를 모두 확인할 수 있다.
# 호스트 OS 이미지 확인
$ kubectl exec -it sample-hostpath -- cat /src/os-release | grep PRETTY_TIME
PRETTY_NAME="Container-Optimized OS from Google"
# 컨테이너 OS 이미지 확인
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
downwardAPI
downwardAPI는 파드 정보 등을 파일로 배치하기 위한 플러그인이다.
apiVersion: v1
kind: Pod
metadata:
name: downward-api-volume
spec:
containers:
- name: nginx-container
image: nginx:1.16
volumeMounts:
- name: downward-api-volume
mountPath: /srv
volumes:
- name: downward-api-volume
downwardAPI:
items:
- path: "podname"
fieldRef:
fieldRef:
- path: "cpu-request"
resourceFieldRef:
containerName: nginx-container
resource: requests.cpu
projected
시크릿/컨피그맵/downwardAPI/serviceAccountToken의 볼륨 마운트를 하나의 디렉터리에 통합하는 플러그인이다.
시크릿 인증 정보와 컨피그맵 설정 파일을 하나의 디렉터리에 배치하고 싶을 경우 사용할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: projected-volume
spec:
containers:
- name: nginx-container
image: nginx:1.16
volumeMounts:
- name: projected-volume
mountPath: /srv
volumes:
- name: projected-volume
projected:
sources:
- secret:
name: sample-db-auth
items:
- key: username
path: secret/username.txt
- configMap:
name: sample-configmap
items:
- key: nginx.conf
path: configmap/nginx.conf
- downwardAPI:
items:
- path: "podname"
fieldRef:
fieldPath: metadata.name
생성 후 파드에는 /src/ 아래 세 가지 종류의 파일이 저장된다.
영구 볼륨(PV)
영속성 영역으로 확보된 볼륨이다.
위에 설명한 볼륨은 파드 정의 안에 직접 지정하는 형태로 연결하지만,
영구 볼륨은 개별 리소스로 생성한 수 사용한다.
영구 볼륨 종류
네트워크를 통해 디스크를 attach하는 디스크 타입이다.
단일 노드 시 테스트용으로 hostPath가 제공되지만, 영구 볼륨으로는 실용적이지 않다.
다음에도 여러 플러그인이 있다.
- GCE Persistent Disk
- AWS Elastic Block Store
- AZure File
- nfs
- iSCSI
Container Storage Interface(CSI)
위의 플러그인 중 특수한 플러그인이며,
컨테이너 오케스트레이션 엔진과 스토리지 시스템을 연결하는 인터페이스다.
영구 볼륨 생성
영구 볼륨을 생성할 때 다음과 같은 항목을 설정할 수 있다.
- 레이블
- 용량
- 접근모드
- Reclaim Policy
- 마운트 옵션
- 스토리지 클래스
# GCE 영구 디스크용 플러그인
apiVersion: v1
kind: PersistentVolume
metadata:
name: sample-pv
labels:
type: gce-pv
envirtonment: stg
spec:
capacity: # 용량
storage: 10Gi
accessModes: # 접근 모드
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Recliam Policy
storageClassName: manual # StorageClass
# PersistentVolume 플러그인별 설정
gcePersistentDisk:
pdName: sample-gce-pv
fsType: ext4
위 매니페스트는 미리 GCE에 영구 디스크를 생성한 후에 적용해야 한다.만약 spec.gcePersistentDisk.pdName에 존재하지 않는 영구 디스크를 선택한 경우에는 다음과 같은 에러가 발생하고 영구 볼륨 리소스 생성이 불가능하다.
accessModes
- ReadWriteOnce : 노드 하나에만 볼륨을 읽기/쓰기 하도록 마운트 할 수 있음
- ReadOnlyMany : 여러 개 노드에서 읽기 전용으로 마운트할 수 있음
- ReadWriteMany : 여러 개 노드에서 읽기/쓰기 가능하도록 마운트할 수 있음
persistentVolumeReclaimPolicy
- 사용이 끝난 PVC는 삭제되고 PVC를 사용하던 PV를 Reclaim(반환, 초기화)하는 과정을 거친다.
- 초기화 정책에는 Retain, Delete Recycle이 있다.
- Retain: PVC 삭제 되어도 내용 보존됨. PV 삭제되더라도 그대로 남아있음
- Delete: PVC 삭제되면 동시 삭제
- Recycle: PV의 데이터를 삭제하고 새 PVC에서 PV를 쓸 수 있도록 함.
storageClassName
- 스토리지 클래스 설정하는 필드
- 특정 스토리지 클래스가 있는 PV는 해당 스토리지 클래스에 맞는 PVC와 연결하면 됨
- PV에 .spec.storageClassName 필드 설정이 없으면 .spec.storageClassName 필드 설정이 없는 PVC와만 연결됨
영구 볼륨 클레임 생성
영구 볼륨 클레임 생성하면
'Kubernetes' 카테고리의 다른 글
ConfigMap(컨피그맵) (0) | 2024.02.20 |
---|---|
Secret(시크릿) (1) | 2024.02.19 |
컨피그 & 스토리지 API 카테고리 (0) | 2024.02.18 |
서비스 API 카테고리 정리 (0) | 2024.02.18 |
Ingress(인그레스) (0) | 2024.02.17 |