소개
Kubernetes 에서 StatefulSet 은 상태 저장 애플리케이션을 관리하는 데 사용됩니다. 기존의 상태 비저장 애플리케이션과 달리, 상태 저장 애플리케이션은 안정적이고 고유한 네트워크 식별자와 영구 스토리지를 필요로 합니다. 이 랩에서는 Kubernetes 에서 StatefulSet 을 사용하여 안정성을 모델링하는 방법을 배우겠습니다.
Kubernetes 에서 StatefulSet 은 상태 저장 애플리케이션을 관리하는 데 사용됩니다. 기존의 상태 비저장 애플리케이션과 달리, 상태 저장 애플리케이션은 안정적이고 고유한 네트워크 식별자와 영구 스토리지를 필요로 합니다. 이 랩에서는 Kubernetes 에서 StatefulSet 을 사용하여 안정성을 모델링하는 방법을 배우겠습니다.
리소스를 생성하기 전에, 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다:
cd /home/labex/project
Minikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다:
minikube start
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다:
minikube status
kubelet 및 apiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.minikube start를 다시 실행합니다.Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
첫 번째 단계는 Persistent Volume (PV) 과 Persistent Volume Claim (PVC) 을 사용하여 Pod 를 생성하는 것입니다. PV 와 PVC 는 Pod 재시작 시 데이터를 영구적으로 저장하고 액세스하는 데 사용됩니다.
이를 위해 먼저 PV 를 생성합니다.
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
위 코드를 /home/labex/project/pv.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:
cd /home/labex/project
kubectl apply -f pv.yaml
이 명령은 용량이 1Gi 이고 호스트 경로가 /mnt/data인 my-pv라는 PV 를 생성합니다.
다음으로, PV 에서 1Gi 의 스토리지를 요청하는 PVC 를 생성합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
위 코드를 /home/labex/project/pvc.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:
kubectl apply -f pvc.yaml
이 명령은 1Gi 의 스토리지를 요청하는 my-pvc라는 PVC 를 생성합니다.
다음 내용으로 /home/labex/project/statefulset.yaml이라는 파일을 생성합니다:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.7
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
이 파일에서, NGINX Pod 의 세 개의 복제본을 생성하는 web이라는 StatefulSet 을 정의합니다. 또한 app: nginx 레이블을 사용하여 NGINX Pod 를 선택하는 web이라는 Service 를 정의합니다. 마지막으로, NGINX Pod 의 데이터를 위한 Persistent Volume Claim 템플릿을 정의합니다.
StatefulSet 을 생성하려면 다음 명령을 실행합니다:
kubectl apply -f statefulset.yaml
다음 명령을 실행하여 StatefulSet 의 상태를 확인할 수 있습니다:
kubectl get statefulsets
StatefulSet 이 실행되면 다음 명령을 실행하여 NGINX Pod 에 액세스할 수 있습니다:
kubectl get pods
kubectl exec -it web-0 -- /bin/bash
web-0을 StatefulSet 에 의해 생성된 NGINX Pod 의 이름으로 바꿉니다.
축하합니다. Kubernetes 에서 StatefulSet 을 성공적으로 생성했습니다!
Kubernetes 에서 템플릿을 업데이트하여 StatefulSet 의 Pod 를 업데이트할 수 있습니다. statefulset.yaml 파일을 업데이트하여 NGINX 버전 1.20.0 을 사용해 보겠습니다.
/home/labex/project/statefulset.yaml 파일을 다음 내용으로 업데이트합니다:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
StatefulSet 을 업데이트하려면 다음 명령을 실행합니다:
kubectl apply -f statefulset.yaml
다음 명령을 실행하여 StatefulSet 의 상태를 확인할 수 있습니다:
kubectl get statefulsets
축하합니다. Kubernetes 에서 StatefulSet 을 성공적으로 업데이트했습니다!
Kubernetes 에서 replicas 필드를 변경하여 StatefulSet 을 스케일 업 또는 스케일 다운할 수 있습니다. web StatefulSet 을 다섯 개의 복제본으로 스케일링해 보겠습니다.
/home/labex/project/statefulset.yaml 파일을 다음 내용으로 업데이트합니다:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
StatefulSet 을 업데이트하려면 다음 명령을 실행합니다:
kubectl apply -f statefulset.yaml
다음 명령을 실행하여 StatefulSet 의 상태를 확인할 수 있습니다:
kubectl get statefulsets
축하합니다. Kubernetes 에서 StatefulSet 을 성공적으로 스케일링했습니다!
Kubernetes 에서 다음 명령을 실행하여 StatefulSet 을 삭제할 수 있습니다:
kubectl delete statefulset web
이 명령은 web StatefulSet 과 모든 Pod 를 삭제합니다.
축하합니다. Kubernetes 에서 StatefulSet 을 사용한 안정성 모델링에 대한 실습을 완료했습니다!
이 실습에서는 Kubernetes 에서 StatefulSet 을 사용하여 안정성을 모델링하는 방법을 배웠습니다. StatefulSet 을 생성하고, StatefulSet 을 업데이트하고, StatefulSet 을 확장하고, StatefulSet 을 삭제했습니다. 이는 Kubernetes 에서 StatefulSet 으로 작업할 때 수행해야 하는 기본적인 작업입니다.