EFS는 POD 형태로 설치가 필요 하며 두가지 방식이 있다
1번은 현재 EOL이 나온 상태이며, 2번째로 진행이 필요 ( 여기서는 2번째 방식으로 진행을 함)
1. https://github.com/kubernetes-retired/external-storage/tree/master/aws/efs
GitHub - kubernetes-retired/external-storage: [EOL] External storage plugins, provisioners, and helper libraries
[EOL] External storage plugins, provisioners, and helper libraries - GitHub - kubernetes-retired/external-storage: [EOL] External storage plugins, provisioners, and helper libraries
github.com
2. https://github.com/kubernetes-sigs/aws-efs-csi-driver
GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/
CSI Driver for Amazon EFS https://aws.amazon.com/efs/ - GitHub - kubernetes-sigs/aws-efs-csi-driver: CSI Driver for Amazon EFS https://aws.amazon.com/efs/
github.com
해당 하는 EC2 WORKER NODE에 설정되어 있는 SG에 NFS용 SG를 추가 해준다.(SG 신규 생성)
기존 SG에 넣으니, 삭제가 되는 거 같다. 그래서 아래처럼 SG를 새로 생성 후 추가가 필요 하다.
EFS 생성
Create file system을 클릭 하면
VPC를 선택 할 수 있으며, 멀티 리전으로 할지, 하나의 리전으로 할지 선택하게 되어 있다. 멀티 리전으로 설정을 하면 해당하는 리전의 AZ의 모든 SUBNET이 연동이 된다.
멀티리전으로 선택시 아래와 같이 모든 AZ가 표시 되는 것을 확인 할 수 있다. 여기서 중요한점은 Security Group 이다.
WORKER NODE에서만 NFS를 붙이길 원한다면 TANZU가 배포된 NODE의 SG를 선택을 해준다.
Manage를 클릭 하면 아래와 같이 SG를 선택 할 수 있게 나온다. 아까 생성 후 WORKER NODE에 붙여둔 SG를 선택 해 준다.
POLICY 를 생성 해준다.
### IAM EFS_CSI_DRIVER JSON 다운로드
curl -o iam-policy-example.json https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/v1.3.2/docs/iam-policy-example.json
### IAM POLICY 등록 및 Policies에 추가 확인
aws iam create-policy \
--policy-name AmazonEKS_EFS_CSI_Driver_Policy \
--policy-document file://iam-policy-example.json
IAM에서 POLICY 생성 확인
Roles에서 TKG를 찾는다.
생성한 iam-polocy를 Permitions에 넣는다.
HELM을 배포하기 전에 ServiceAccount를 생성한다.
### SA 생성
apiVersion: v1
kind: ServiceAccount
metadata:
name: efs-csi-controller-sa
namespace: kube-system
labels:
app.kubernetes.io/name: aws-efs-csi-driver
annotations:
tkg.amazonaws.com/role-arn: arn:aws:iam::{Account ID}:role/nodes.tkg.cloud.vmware.com
HELM으로 우선 PROVISIONER를 설치 해준다.
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
helm upgrade -i aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
--namespace kube-system \
--set image.repository=602401143452.dkr.ecr.{해당 리전}.amazonaws.com/eks/aws-efs-csi-driver \
--set controller.serviceAccount.create=false \
--set controller.serviceAccount.name=efs-csi-controller-sa
아래처럼 EFS 관련 파드가 생성 되는 것을 확인 할 수 있다.
EFS가 구성이 완료 되었으면 TKG 접속 후 SC & PVC & POD를 생성 해준다.
### SC
cat << EOF | tee sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
mountOptions:
- tls
parameters:
provisioningMode: efs-ap
fileSystemId: {file system id}
directoryPerms: "700"
gidRangeStart: "1000"
gidRangeEnd: "2000"
basePath: "/dynamic_provisioning"
EOF
### POD
cat << EOF | tee nginx.yaml
apiVersion: v1
kind: Namespace
metadata:
name: storage
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-storage-claim
namespace: storage
spec:
accessModes:
- ReadWriteMany
storageClassName: efs-sc
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: storage
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: test
mountPath: "/usr/share/nginx/html"
- name: test
mountPath: /data
volumes:
- name: test
persistentVolumeClaim:
claimName: efs-storage-claim
EOF
Accesss Points에 새롭게 생성이 되는 것을 확인 할 수 있다.
### pv 삭제 및 생성이 잘되는지 확인
kubectl logs efs-csi-controller-9b4974958-h2smn -n kube-system csi-provisioner --tail 10
### 기록도 잘되는지 확인
kubectl exec nginx-7c9f88d947-jntrz -n storage -- bash -c "cat /data/out"
'VMware > TANZU' 카테고리의 다른 글
(DK) TANZU HARBOR EXTENTION에서 OCI Registry 및 KUBEAPPS 연동 (0) | 2021.08.25 |
---|---|
(DK) tkg 용어정리 (0) | 2021.08.16 |
(DK) TKGM에서 각 MASTER 및 NODE에 TRUST CA 설정 (0) | 2021.08.02 |
(DK) TANZU TKG에 EMBEDDED HARBOR 인증서 등록 (0) | 2021.06.19 |
(DK) HARBOR EMBEDDED HARBOR ADMIN PASSWORD CHECK (0) | 2021.06.19 |