220525 Today I Learned
일지
슬슬 취준 하는사람들도 있고 끝이보이긴 하는구나
오늘의 할일
- 220525 TIL 작성
- Kubernetes 공부
주요 키워드
K8s
Volume
- NFS
- Persistent Volume
- Storage Classes
- Rook
수업 정리
네트워크 기반 볼륨 (nfs)
nfs 서버 기능 설치 (kube-control1 에서)
패키지 설치
sudo apt-get update
sudo apt-get install nfs-kernel-server
공유용 디렉토리 생성
sudo mkdir /nfs-share
sudo chmod 777 /nfs-share/
nfs 설정 변경
sudo vi /etc/exports
/nfs-share *(rw,sync,no_subtree_check)
nfs 서비스 재시작
sudo systemctl restart nfs-kernel-server.service
nfs 클라이언트 기능 설치 (kube-node1~3 에서)
클라이언트 기능 설치
sudo apt -y install nfs-common
nfs 서버 연결 확인
showmount -e 192.168.56.11
nfs 볼륨을 사용하는 파드를 생성하는 ReplicaSet 예시
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: webserver-rs-nfs
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: webserver
image: nginx:latest
volumeMounts:
- name: web-contents
mountPath: /usr/share/nginx/html
readOnly: true
ports:
- containerPort: 80
protocol: TCP
volumes:
- name: web-contents
nfs:
server: 192.168.56.11
path: /nfs-share
각 파드의 웹 서비스에서 사용할 index.html 파일 생성 (kube-control1에서)
echo "Hello my nfs index.html" > /nfs-share/index.html
nfs 사용 파드 생성 후 웹서비스 페이지 확인
kubectl create -f nfsvol-rs.yaml
kubectl get pod -o wide
curl <파드IP>
영구 볼륨(Persistent Volume)
볼륨에 대한 설정을 하는 부분과 사용하는 부분을 분리
역할에 따른 리소스 분류
PersistentVolume: 사용할 볼륨의 구체적 설정
PersistentVolumeClaim: 볼륨을 사용하기 위한 설정
PV와 PVC의 생명주기
프로비저닝(Provisioning)
관리자에 의해 PV리소스가 생성되고, 사용할 수 있도록 구성된 상태
바인딩(Binding)
PV와 PVC가 연결되는 상태. PV와 PVC는 1:1로 매칭
사용(Using)
바인딩 된 PV와 PVC를 통해 볼륨을 사용
회수(Reclaim)
PV와 PVC의 바인딩이 해제된 상태. PV의 회수정책에 따라 정리 실시
회수 정책
유지 (Retain)
PV 리소스가 그대로 유지됨 (데이터가 유지됨
PVC를 다시 생성하여 연결할 수는 없음
데이터의 보존을 위해서는 관리자가 직접 PV의 저장소를 접근하여 데이터를 백업
삭제 (Delete)
PV와 PVC의 바인딩 상태에서 PVC가 삭제될 경우 PV는 자동으로 삭제
클라우드에서 제공되는 스토리지 (AWS, GCP, Azure)
재사용 (Recycle)
기존에 사용중인 PV의 바인딩이 해제되었을 때, 재사용 가능
앞으로 사라질 예정
nfs 사용한 정적 영구볼륨 설정
기본 구성
nfs - PV - PVC - Pod
PV 리소스의 accessModes 종류
ReadWriteOnce: 하나의 파드만 읽기 쓰기 가능
ReadWriteMany: 다수의 파드가 읽기 쓰기 가능
ReadOnlyMany: 다수의 파드가 읽기만 가능
PV리소스의 회수정책 persistentVolumeReclaimPolicy
Retain: 유지
Delete: 삭제
Recycle: 재사용
PV 리소스 예시
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv-vol
spec:
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 192.168.56.11
path: /nfs-share
PV 상태 확인
kubectl get persistentvolumes
PV의 상태
Available: PV가 생성되어 PVC에 연결할 수 있는 상태
Bound: PV와 PVC가 연결된 상태, PVC를 통해 볼륨을 사용할 수 있는 상태
Released: PVC와 연결이 해제된 상태. 회수를 필요로 하는 상태
Failed: 정상적으로 회수가 되지 않은 상태
PVC 리소스 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-nfs-vol
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
volumeName: nfs-pv-vol
PV를 사용하는 레플리카셋 예시
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nfs-pv-rs
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- name: nfs-pvc
mountPath: /usr/share/nginx/html
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: pvc-nfs-vol
레플리카셋의 각 파드에서 볼륨 연결 상태 확인
kubectl describe pod <파드이름>
PVC리소스의 정보에서 PVC를 사용중인 파드 확인
kubectl describe persistentvolumeclaim <PVC이름>
PV 회수
PVC를 사용중인 파드를 삭제하기 위해 레플리카셋 삭제
kubectl delete rs <레플리카셋이름>
파드가 모두 삭제된 후 PVC 리소스 삭제
kubectl delete pvc <PVC 리소스 이름>
PV 리소스 상태 확인 (Released)
kubectl get pv
다시 PVC 리소스 생성하여 기존 PV 연결 가능한지 확인
kubectl create -f <PVC파일>
PV와 PVC 리소스 상태 확인 (Bound 되지 않음)
kubectl get pv,pvc
PV리소스 삭제 후 재생성
kubectl delete pv <PV리소스이름>
kubectl create -f <PV파일>
PV와 PVC 리소스 재확인
kubectl get pv,pvc
Leave a comment