Wie man

EKS Kubernetes Persistent Storage mit EFS Storage Service

EKS Kubernetes Persistent Storage mit EFS Storage Service

In diesem Tutorial besprechen wir, wie Sie EKS Persistent Storage mit EFS Amazon Service für Ihren Kubernetes-Cluster konfigurieren. Der von uns verwendete Speicher-Back-End-Dienst ist EFS. Dies ist unser standardmäßiger persistenter Speicher für Volume-Ansprüche, die von zustandsorientierten Anwendungen verwendet werden. Eine StorageClass bietet Administratoren die Möglichkeit, die „Klassen” Speicher, den sie anbieten, um eine dynamische Bereitstellung von persistenten Volumes zu ermöglichen.

In Kubernetes ist ein A PersistentVolume (PV) ein Speicherelement im Cluster, während PersistentVolumeClaim (PVC) eine Speicheranforderung durch einen Benutzer ist, normalerweise Pod. Sie benötigen einen funktionierenden EKS-Cluster, bevor Sie diesen Leitfaden verwenden können, um persistenten Speicher für Ihre containerisierten Workloads einzurichten.

Voraussetzungen für die Einrichtung:

Dies ist der Name des EKS-Clusters, mit dem ich in diesem Tutorial arbeite.

$ eksctl get Cluster NAME REGION prod-eks-cluster eu-west-1

Speichern Sie den Clusternamen als Variable, die in den verbleibenden Schritten verwendet wird.

EKS_CLUSTER="prod-eks-cluster"

Verwenden des EFS CSI-Treibers zum Erstellen von persistenten Volumes

Der Amazon Elastic File System Container Storage Interface (CSI)-Treiber implementiert die CSI-Spezifikation für Container-Orchestratoren, um den Lebenszyklus von Amazon EFS-Dateisystemen zu verwalten.

Schritt 1: Erstellen eines Amazon EFS-Dateisystems

Der Amazon EFS CSI-Treiber unterstützt Amazon EFS-Zugriffspunkte, bei denen es sich um anwendungsspezifische Einstiegspunkte in ein Amazon EFS-Dateisystem handelt, die die gemeinsame Nutzung eines Dateisystems zwischen mehreren Pods erleichtern.

Sie können diese Vorgänge von der Amazon-Konsole oder vom Terminal aus ausführen. Ich werde in allen meinen Operationen die AWS CLI-Schnittstelle verwenden.

Suchen Sie die VPC-ID Ihres Amazon EKS-Clusters:

EKS_CLUSTER="prod-eks-cluster" EKS_VPC_ID=$(aws eks describe-cluster --name $EKS_CLUSTER --query "cluster.RessourcenVpcConfig.vpcId" --Ausgabetext)

Bestätigen Sie die VPC-ID, falls gültig.

$ echo $EKS_VPC_ID vpc-019a6458a973ace2b

Suchen Sie den CIDR-Bereich für die VPC Ihres Clusters:

EKS_VPC_CIDR=$(aws ec2 describe-vpcs --vpc-ids $EKS_VPC_ID --query "Vpcs[].CidrBlock" --Ausgabetext)

VPC-CIDR bestätigen:

$ echo $EKS_VPC_CIDR 192.168.0.0/16

Erstellen Sie eine Sicherheitsgruppe, die eingehenden NFS-Datenverkehr für Ihre Amazon EFS-Mount-Punkte zulässt:

aws ec2 create-security-group --group-name efs-nfs-sg --description "NFS-Datenverkehr für EFS zulassen" --vpc-id $EKS_VPC_ID

Notieren Sie sich die Sicherheitsgruppen-ID. Meins ist:

 "GroupId": "sg-0fac73a0d7d943862"  # Sie können mit $ aws ec2 describe-security-groups --query "SecurityGroups[*].Name:GroupName,ID:GroupId"

Fügen Sie Ihrer Sicherheitsgruppe Regeln hinzu:

SG_ID="sg-0fac73a0d7d943862" aws ec2 authorize-security-group-ingress --group-id $SG_ID --protocol tcp --port 2049 --cidr $EKS_VPC_CIDR

Führen Sie den Befehl describe-security-groups aus, um die Änderungen an der Sicherheitsgruppe anzuzeigen:

$ aws ec2 describe-security-groups --group-ids $SG_ID  "SecurityGroups": [  "Description": "NFS-Datenverkehr für EFS zulassen", "GroupName": "efs-nfs-sg", "IpPermissions": [  "FromPort": 2049, "IpProtocol": "tcp", "IpRanges": [  "CidrIp": "192.168.0.0/16"  ], "Ipv6Ranges": [], "PrefixListIds": [], "ToPort": 2049, "UserIdGroupPairs": []  ], "OwnerId": "253859766502", "GroupId": "sg -0fac73a0d7d943862", "IpPermissionsEgress": [  "IpProtocol": "-1", "IpRanges": [  "CidrIp": "0.0.0.0/0"  ], "Ipv6Ranges": [], "PrefixListIds": [], "UserIdGroupPairs": []  ], "VpcId": "vpc-019a6458a973ace2b"  ] 

Erstellen Sie das Amazon EFS-Dateisystem für Ihren Amazon EKS-Cluster:

# Nicht verschlüsselt $ aws efs create-file-system --region eu-west-1 # Verschlüsseltes EFS-Dateisystem $ aws efs create-file-system --encrypted --region eu-west-1

Notieren Sie sich die Dateisystem-ID:

 "OwnerId": "253759766542", "CreationToken": "c16c4603-c7ac-408f-ac4a-75a683ed2a29", "FileSystemId": "fs-22ac06e8", "FileSystemArn": "arn:aws:elasticfilesystem:eu-west- 1:253759766542:file-system/fs-22ac06e8", "CreationTime": "2020-08-16T15:17:18+03:00", "LifeCycleState": "creating", "NumberOfMountTargets": 0, "SizeInBytes" :  "Value": 0, "ValueInIA": 0, "ValueInStandard": 0 , "PerformanceMode": "generalPurpose", "Encrypted": true, "KmsKeyId": "arn:aws:kms:eu-west- 1:253759766542:key/6c9b725f-b86d-41c2-b804-1685ef43f620", "ThroughputMode": "bursting", "Tags": [] 

UI-Ansicht:

Schritt 2: EFS-Mount-Ziel erstellen

Abrufen von Subnetzen in Ihrer VPC, in denen EC2-Instances ausgeführt werden. In meinem Fall laufen alle EKS-Instanzen in privaten Subnetzen.

EKS_VPC_ID=$(aws eks describe-cluster --name $EKS_CLUSTER --query "cluster.RessourcenVpcConfig.vpcId" --output text) aws ec2 describe-subnets --filter Name=vpc-id,Values=$EKS_VPC_ID --query 'Subnets[?MapPublicIpOnLaunch=='false'].Subnetz-ID'

Meine Ausgabe:

[ "subnet-0977bbaf236bd952f", "subnet-0df8523ca39f63938", "subnet-0a4a22d25f36c4124" ]

Mount-Ziele erstellen.

# Dateisystem-ID EFS_ID="fs-22ac06e8" # Einhängeziele für die Subnetze erstellen - Drei Subnetze in meinem Fall für das Subnetz in Subnetz-0977bbaf236bd952f subnet-0df8523ca39f63938 subnet-0a4a22d25f36c4124; do aws efs create-mount-target \ --file-system-id $EFS_ID \ --security-group $SG_ID \ --subnet-id $subnet \ --region eu-west-1 done

Schritt 2: Verwenden des EFS CSI-Treibers

Nach Erstellung eines EFS-Dateisystems und Mount-Target können wir den EFS-CSI-Treiber testen, indem wir ein statisches persistentes Volume erstellen und es über einen Testcontainer beanspruchen.

Bereitstellen des EFS CSI-Provisioners.

$ kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/dev/?ref=master" Daemonset.apps/efs-csi-node erstellt csidriver.Lager.k8s.io/efs.csi.aws.com erstellt

Verfügbare CSI-Treiber auflisten:

$ kubectl get csidrivers.Lager.k8s.io NAME ERSTELLT BEI efs.csi.aws.com 2020-08-16T19:10:35Z

Rufen Sie zuerst die EFS-Dateisystem-ID ab:

$ aws efs describe-file-systems --query "FileSystems[*].FileSystemId" [ "fs-22ac06e8" ]

Speicherklasse erstellen:

kubectl apply -f - <

Verfügbare Speicherklassen auflisten:

$ kubectl get sc NAME BEREITSTELLER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE efs-sc efs.csi.aws.com Löschen Sofort false 28s gp2 (Standard) kubernetes.io/aws-ebs Löschen WaitForFirstConsumer false 4d21h

Erstellen und ändern Sie die folgende Manifestdatei, um die richtige Dateisystem-ID festzulegen:

$ vim efs-pv.yml apiVersion: v1 Art: PersistentVolume Metadaten: Name: efs-pv Spezifikation: Kapazität: Speicher: 1Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: Treiber: efs.csi.aws.com volumeHandle: fs-22ac06e8 # Ihre EFS-Dateisystem-ID

Wenden Sie die Datei an, um Ressourcen zu erstellen:

$ kubectl apply -f efs-pv.yml persistentvolume/efs-pv erstellt $ kubectl get pv NAME KAPAZITÄT ZUGRIFFSMODI RECLAIM POLICY STATUS ANSPRUCH SPEICHERKLASSE GRUND ALTER efs-pv 1Gi RWO Retain Verfügbar efs-sc 19s

Anspruchsressource erstellen:

kubectl apply -f - <

Listen Sie Ansprüche auf, um zu bestätigen, dass sie erstellt wurden und der Status Gebunden ist:

$ kubectl get pvc NAME STATUS VOLUME KAPAZITÄT ZUGRIFFSMODI SPEICHERKLASSE ALTER efs-claim Gebunden efs-pv 1Gi RWO efs-sc 7s

Test-Pod erstellen, der den Volumenanspruch verwendet.

kubectl apply -f - <> /Daten/out.TXT; Schlaf 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volume: - name: persistent-storage persistentVolumeClaim: ClaimName: efs-claim EOF

Überprüfen Sie, ob der Pod ausgeführt wird:

$ kubectl Get Pod NAME BEREIT STATUS NEUSTARTEN ALTER efs-app 1/1 Wird ausgeführt 0 34s

Mount-Punkte im Container überprüfen.

$ kubectl exec -ti efs-app -- bash [[email protected] /]# df -hT Filesystem Type Size Used Avail Use% Mounted on Overlay Overlay 80G 3.4G 77G 5% / tmpfs tmpfs 64M 0 64M 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup 127.0.0.1:/ nfs4 8.0E 0 8.0E 0% /data /dev/nvme0n1p1 xfs 80G 3.4G 77G 5% /etc/hosts shm tmpfs 64M 0 64M 0% /dev/shm tmpfs tmpfs 1.9G 12K 1.9G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs tmpfs 1.9G 0 1.9G 0% /proc/acpi tmpfs tmpfs 1.9G 0 1.9G 0% /sys/firmware

Schreiben Sie einige Testdateien in /Daten wo das EFS-Dateisystem eingehängt ist.

[[email protected] /]# touch /data/testfile1 [[email protected] /]# touch /data/testfile2 [[email protected] /]# [[email protected] /]# ls /data/ out.txt testfile1 testfile2 [[email protected] /]# exit exit

Bereinigen Sie Ihre Testdaten.

kubectl delete pod efs-app kubectl delete pvc efs-claim kubectl delete pv efs-pv

Zum Thema passende Artikel:

Ceph Persistent Storage für Kubernetes mit Cephfs

Persistenter Speicher für Kubernetes mit Ceph RBD

Konfigurieren Sie die dynamische Kubernetes-Volume-Bereitstellung mit Heketi und GlusterFS

So installieren Sie JFrog Artifactory auf CentOS 7
Diese Anleitung führt Sie durch die Schritte zur Installation von JFrog Artifactory auf CentOS 7. JFrog Artifactory ist der weltweit fortschrittlichst...
So installieren Sie JFrog Artifactory auf CentOS 8
Die heutige Anleitung führt Sie durch die Installation von JFrog Artifactory auf dem CentOS 8 Linux-Server. JFrog Artifactory ist ein fortschrittliche...
So installieren Sie JFrog Artifactory auf Ubuntu 20.04
JFrog Artifactory ist eine der fortschrittlichsten Anwendungen für das Repository-Management, die sich nahtlos in kontinuierliche Integrations- und Be...

Website für Gadgets, Betriebssysteme und moderne Technologie. Viele interessante Artikel und nützliche Tipps