AWS EFS로 Kubernetes Persistent Volumes 구성하기
2021. 11. 10. 16:13ㆍIT/Kubernetes
728x90
PV는 볼륨 자체를 의미하며 클러스터 안에서 리소스로 다루며 PVC는 PV에 하는 요청(용량, 읽기/쓰기 모드 등)이다.
PV를 만드는 단계는 Static, Dynamic으로 구분할 수 있다. Static Provisioning은 미리 PV를 생성하고, 요청 시 기 생성된 PV를 할당한다. Dynamic Provisioning 는 PVC를 통하여 PV를 요청 시 PV를 생성하여 할당한다.
1. Amazon EFS 생성
생성한 VPC를 지정하여 EFS를 생성하고, ID 및 리전을 확인한다.
2. Persistent Volume 사용 설정
아래와 같이 필요한 RBAC을 정의한다. (rbac.yaml)
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: efs-provisioner-runner
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-efs-provisioner
subjects:
- kind: ServiceAccount
name: efs-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: ClusterRole
name: efs-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-efs-provisioner
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-efs-provisioner
subjects:
- kind: ServiceAccount
name: efs-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: Role
name: leader-locking-efs-provisioner
apiGroup: rbac.authorization.k8s.io
환경변수들(FILE_SYSTEM_ID, AWS_REGION, PROVISIONER_NAME)를 지정하여 Deployment를 정의한다. (manifest.yaml)
apiVersion: apps/v1
metadata:
namespace: default
name: efs-provisioner
spec:
selector:
matchLabels:
app: efs-provisioner
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: efs-provisioner
spec:
serviceAccount: efs-provisioner
containers:
- name: efs-provisioner
image: quay.io/external_storage/efs-provisioner:v2.4.0
env:
- name: FILE_SYSTEM_ID
value: fs-0000000
- name: AWS_REGION
value: ap-northeast-2
- name: PROVISIONER_NAME
value: efs-provisioner
volumeMounts:
- name: pvcs
mountPath: /pvcs
volumes:
- name: pvcs
nfs:
server: fs-0000000.efs.ap-northeast-2.amazonaws.com
path: /
Storage Class를 정의한다. (class.yml)
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
namespace: default
name: efs-provisioner
provisioner: efs-provisioner
작성된 yml 파일을 적용하고, kubectl을 통해 배포를 확인한다.
kubectl apply -f .
kubectl get pod
kubectl get storageclass
On-Premise에서 Cluster를 구성하고 EFS로 PV를 사용하기! 어렵지 않다.😁
300x250
'IT > Kubernetes' 카테고리의 다른 글
Kubernetes Istio 설치/적용하기 (Kubernetes Istio service mesh) (0) | 2021.11.10 |
---|---|
Kubernetes Elastic Stack 구성하기 (Elasticsearch, Kibana, Beats, Logstash 설치) (0) | 2021.11.10 |
Kubernetes Prometheus, Grafana 설치/구성하기 (0) | 2021.11.10 |
Azure Files로 Kubernetes Persistent Volumes 구성하기 (0) | 2021.11.10 |