Amazon Elastic File System 容器儲存介面 (CSI) 驅動程式為容器編排器實作 CSI 規範,以管理 Amazon EFS 檔案系統的生命週期。
Amazon EFS CSI 驅動程式 CSI 規格版本 | v0.3.0 | v1.1.0 | v1.2.0 |
---|---|---|---|
主分支 | 不 | 不 | 是的 |
v2.xx | 不 | 不 | 是的 |
v1.xx | 不 | 不 | 是的 |
v0.3.0 | 不 | 是的 | 不 |
v0.2.0 | 不 | 是的 | 不 |
v0.1.0 | 是的 | 不 | 不 |
Amazon EFS CSI 驅動程式支援動態預先配置和靜態預配置。目前,動態配置為每個 PV 建立一個存取點。這意味著必須先在 AWS 上手動建立 Amazon EFS 檔案系統,並且應將其作為儲存類別參數的輸入提供。對於靜態預先配置,需要先在 AWS 上手動建立 Amazon EFS 檔案系統。之後,可以使用驅動程式將其作為磁碟區安裝在容器內。
實現了以下 CSI 介面:
參數 | 價值觀 | 預設 | 選修的 | 描述 |
---|---|---|---|---|
配置模式 | EFS-AP | 錯誤的 | efs 配置的磁碟區類型。目前,支援接入點。 | |
檔案系統ID | 錯誤的 | 在其下方建立存取點的檔案系統。 | ||
目錄權限 | 錯誤的 | 建立存取點根目錄的目錄權限。 | ||
uid | 真的 | 用於建立存取點根目錄的 POSIX 使用者 ID。 | ||
吉德 | 真的 | 用於建立存取點根目錄的 POSIX 群組 ID。 | ||
gidRangeStart | 50000 | 真的 | 用於建立存取點根目錄的 POSIX 群組 ID 的起始範圍。如果設定了 uid/gid,則不使用。 | |
gidRangeEnd | 700萬 | 真的 | POSIX 群組 ID 的結束範圍。如果設定了 uid/gid,則不使用。 | |
基本路徑 | 真的 | 建立動態配置的存取點的路徑。如果不指定該參數,則在檔案系統的根目錄下建立存取點 | ||
子路徑模式 | /${.PV.name} | 真的 | 用於建構子路徑的模板,動態配置下建立的每個存取點都在該子路徑下。可以由固定字串和有限變數組成,類似於 nfs-subdir-external-provisioner 圖表上的「subPathPattern」變數。支援.PVC.name 、 .PVC.namespace 和.PV.name | |
確保唯一目錄 | 真的 | 真的 | 注意:僅當您確定這是您想要的行為時才將其設為 false 。 啟用動態配置時使用,如果設為 true,會將 UID 附加到 subPathPattern 中指定的模式,以確保存取點不會意外指向相同目錄。 | |
阿茲 | ”” | 真的 | 用於跨帳戶掛載。儲存類別參數下的az 是可選的。如果指定,與 az 關聯的掛載目標將用於跨帳戶掛載。如果未指定,將選擇隨機掛載目標進行跨帳戶掛載 | |
重複使用存取點 | 錯誤的 | 真的 | 當設定為 true 時,它會根據提供的 PVC 名稱建立存取點用戶端令牌。這樣,如果使用相同的 PVC 名稱和儲存類別配置,則可以從不同的叢集複製 AccessPoint。 |
筆記
gidRangeStart
和gidRangeEnd
參數。只有當兩者都被省略時,這些參數才是可選的。如果您指定其中一項,則另一項將成為強制性的。az
不應與 efs-utils 掛載選項az
混淆。 az
掛載選項用於跨 az 掛載或在與叢集相同的 aws 帳戶內進行 efs 單區域檔案系統掛載。如果您希望在掛載時將任何其他 mountOptions 傳遞給 Amazon EFS CSI 驅動程序,則可以透過持久性磁碟區或儲存類別物件傳遞它們,具體取決於使用的是靜態還是動態預先配置。以下是一些可以傳遞的 mountOptions 的範例:
使用 EFS CSI 驅動程式時,請注意noresvport
安裝選項預設為啟用狀態。這意味著客戶端可以使用任何可用的來源連接埠進行通信,而不僅僅是保留連接埠。
使用 Amazon EFS 的優點之一是它使用 TLS 提供傳輸加密支援。使用傳輸中加密,資料在透過網路傳輸到 Amazon EFS 服務期間將被加密。這為需要嚴格安全合規性的應用程式提供了額外的深度防禦層。
預設情況下,在驅動程式的主分支版本中啟用傳輸中加密。若要停用它並使用普通 NFSv4 掛載磁碟區,請在持久性磁碟區清單中將volumeAttributes
欄位encryptInTransit
設為"false"
。有關範例清單,請參閱傳輸中加密範例。
筆記
如果您在 Kubernetes 中使用此功能,則需要 Kubernetes 版本 1.13 或更高版本。
以下部分是 Kubernetes 特定的。如果您是 Kubernetes 用戶,請使用它來了解驅動程式功能、安裝步驟和範例。
Amazon EFS CSI 驅動程式 Kubernetes 版本 | 到期 | v1.11 | v1.12 | v1.13 | v1.14 | v1.15 | v1.16 | v1.17+ |
---|---|---|---|---|---|---|---|---|
主分支 | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v2.1.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v2.0.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.7.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.6.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.5.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.4.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.3.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.2.x | 遺傳演算法 | 不 | 不 | 不 | 不 | 不 | 不 | 是的 |
v1.1.x | 遺傳演算法 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v1.0.x | 遺傳演算法 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.3.0 | 貝塔 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.2.0 | 貝塔 | 不 | 不 | 不 | 是的 | 是的 | 是的 | 是的 |
v0.1.0 | 阿爾法 | 是的 | 是的 | 是的 | 不 | 不 | 不 | 不 |
Amazon EFS CSI 驅動程式版本 | 影像 |
---|---|
主分支 | 亞馬遜/aws-efs-csi-driver:master |
v2.1.0 | 亞馬遜/aws-efs-csi-driver:v2.1.0 |
v2.0.9 | 亞馬遜/aws-efs-csi-驅動程式:v2.0.9 |
v2.0.8 | 亞馬遜/aws-efs-csi-driver:v2.0.8 |
v2.0.7 | 亞馬遜/aws-efs-csi-driver:v2.0.7 |
v2.0.6 | 亞馬遜/aws-efs-csi-driver:v2.0.6 |
v2.0.5 | 亞馬遜/aws-efs-csi-driver:v2.0.5 |
v2.0.4 | 亞馬遜/aws-efs-csi-driver:v2.0.4 |
v2.0.3 | 亞馬遜/aws-efs-csi-driver:v2.0.3 |
v2.0.2 | 亞馬遜/aws-efs-csi-driver:v2.0.2 |
v2.0.1 | 亞馬遜/aws-efs-csi-driver:v2.0.1 |
v2.0.0 | 亞馬遜/aws-efs-csi-driver:v2.0.0 |
v1.7.7 | 亞馬遜/aws-efs-csi-驅動程式:v1.7.7 |
v1.7.6 | 亞馬遜/aws-efs-csi-驅動程式:v1.7.6 |
v1.7.5 | 亞馬遜/aws-efs-csi-驅動程式:v1.7.5 |
v1.7.4 | 亞馬遜/aws-efs-csi-驅動程式:v1.7.4 |
v1.7.3 | 亞馬遜/aws-efs-csi-driver:v1.7.3 |
v1.7.2 | 亞馬遜/aws-efs-csi-驅動程式:v1.7.2 |
v1.7.1 | 亞馬遜/aws-efs-csi-driver:v1.7.1 |
v1.7.0 | 亞馬遜/aws-efs-csi-driver:v1.7.0 |
v1.6.0 | 亞馬遜/aws-efs-csi-driver:v1.6.0 |
v1.5.9 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.9 |
v1.5.8 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.8 |
v1.5.7 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.7 |
v1.5.6 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.6 |
v1.5.5 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.5 |
v1.5.4 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.4 |
v1.5.3 | 亞馬遜/aws-efs-csi-driver:v1.5.3 |
v1.5.2 | 亞馬遜/aws-efs-csi-驅動程式:v1.5.2 |
v1.5.1 | 亞馬遜/aws-efs-csi-driver:v1.5.1 |
v1.5.0 | 亞馬遜/aws-efs-csi-driver:v1.5.0 |
v1.4.9 | 亞馬遜/aws-efs-csi-驅動程式:v1.4.9 |
v1.4.8 | 亞馬遜/aws-efs-csi-驅動程式:v1.4.8 |
v1.4.7 | 亞馬遜/aws-efs-csi-驅動程式:v1.4.7 |
v1.4.6 | 亞馬遜/aws-efs-csi-driver:v1.4.6 |
v1.4.5 | 亞馬遜/aws-efs-csi-驅動程式:v1.4.5 |
v1.4.4 | 亞馬遜/aws-efs-csi-driver:v1.4.4 |
v1.4.3 | 亞馬遜/aws-efs-csi-driver:v1.4.3 |
v1.4.2 | 亞馬遜/aws-efs-csi-driver:v1.4.2 |
v1.4.1 | 亞馬遜/aws-efs-csi-driver:v1.4.1 |
v1.4.0 | 亞馬遜/aws-efs-csi-driver:v1.4.0 |
v1.3.8 | 亞馬遜/aws-efs-csi-驅動程式:v1.3.8 |
v1.3.7 | 亞馬遜/aws-efs-csi-驅動程式:v1.3.7 |
v1.3.6 | 亞馬遜/aws-efs-csi-driver:v1.3.6 |
v1.3.5 | 亞馬遜/aws-efs-csi-驅動程式:v1.3.5 |
v1.3.4 | 亞馬遜/aws-efs-csi-driver:v1.3.4 |
v1.3.3 | 亞馬遜/aws-efs-csi-driver:v1.3.3 |
v1.3.2 | 亞馬遜/aws-efs-csi-driver:v1.3.2 |
v1.3.1 | 亞馬遜/aws-efs-csi-driver:v1.3.1 |
v1.3.0 | 亞馬遜/aws-efs-csi-driver:v1.3.0 |
v1.2.1 | 亞馬遜/aws-efs-csi-driver:v1.2.1 |
v1.2.0 | 亞馬遜/aws-efs-csi-driver:v1.2.0 |
v1.1.1 | 亞馬遜/aws-efs-csi-driver:v1.1.1 |
v1.1.0 | 亞馬遜/aws-efs-csi-driver:v1.1.0 |
v1.0.0 | 亞馬遜/aws-efs-csi-driver:v1.0.0 |
v0.3.0 | 亞馬遜/aws-efs-csi-driver:v0.3.0 |
v0.2.0 | 亞馬遜/aws-efs-csi-driver:v0.2.0 |
v0.1.0 | 亞馬遜/aws-efs-csi-driver:v0.1.0 |
驅動程式版本 | ECR影像 |
---|---|
v2.1.0 | public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver:v2.1.0 |
筆記
您可以從此處找到先前的 efs-csi-driver 版本的映像
筆記
由於 Amazon EFS 是一個彈性檔案系統,因此它並不真正強制執行任何檔案系統容量。建立檔案系統時不使用持久捲和持久性磁碟區聲明中的實際儲存容量值。但是,由於儲存容量是 Kubernetes 的必填字段,因此您必須指定該值,並且可以使用任何有效的容量值。
注意事項
1.2
或更高版本的驅動程式。您可以在任何受支援的 Amazon EKS 叢集版本上使用驅動程式版本1.1
靜態預置持久性磁碟區。1.3.2
或更高版本支援 Arm64 架構,包括基於 Amazon EC2 Graviton 的執行個體。1.4.2
或更高版本支援使用 FIPS 來掛載檔案系統。有關如何啟用 FIPS 的更多信息,請參閱 Helm。節點啟動時存在潛在的競爭條件(尤其是當節點首次加入叢集時),依賴 EFS CSI 驅動程式的 Pod/進程可以在 EFS CSI 驅動程式啟動並完全準備就緒之前對節點進行操作。為了解決這個問題,EFS CSI 驅動程式包含一項功能,可在啟動時自動刪除節點中的污點。此功能是從 EFS CSI 驅動程式 v1.7.2 版本及其 Helm Chart v2.5.2 版本中引入的。使用者可以在加入叢集和/或啟動時污染其節點,以防止其他 Pod 在 EFS CSI 驅動程式準備就緒之前在該節點上運行和/或調度。
預設會啟動此功能,叢集管理員應使用污點efs.csi.aws.com/agent-not-ready:NoExecute
(任何效果都可以,但建議使用NoExecute
)。例如,EKS 託管節點組支援自動污染節點。
先決條件
aws configure
進行快速設定。 AWS CloudShell 中安裝的 AWS CLI 版本也可能比最新版本晚幾個版本。若要更新它,請參閱 AWS CloudShell 使用者指南中的將 AWS CLI 安裝到您的主目錄。kubectl
命令列工具安裝在您的裝置或 AWS CloudShell 上。此版本可以與叢集的 Kubernetes 版本相同,也可以比叢集的 Kubernetes 版本早或晚一個小版本。若要安裝或升級kubectl
,請參閱安裝或更新kubectl
。筆記
在 AWS Fargate 上執行的 Pod 會自動掛載 Amazon EFS 檔案系統,無需執行本頁所述的手動驅動程式安裝步驟。
此驅動程式需要 IAM 權限才能與 Amazon EFS 通訊以代表使用者管理磁碟區。有多種方法可以授予驅動程式 IAM 權限:
AmazonEFSCSIDriverPolicy
策略新增至叢集節點組的 IAM 角色。有多種用於部署驅動程式的選項。以下是一些範例。
此過程需要 Helm V3 或更高版本。若要安裝或升級 Helm,請參閱將 Helm 與 Amazon EKS 結合使用。
使用 Helm 安裝驅動程式
新增 Helm 儲存庫。
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
更新倉庫。
helm repo update aws-efs-csi-driver
使用 Helm 圖表安裝驅動程式版本。
helm upgrade --install aws-efs-csi-driver --namespace kube-system aws-efs-csi-driver/aws-efs-csi-driver
若要指定影像儲存庫,請新增下列參數。將儲存庫位址替換為叢集的容器鏡像位址。
--set image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/aws-efs-csi-driver
如果您已依照為 Amazon EKS 建立 IAM 原則和角色建立了服務帳戶,請新增下列參數。
--set controller.serviceAccount.create=false
--set controller.serviceAccount.name=efs-csi-controller-sa
如果您沒有對 Internet 的出站存取權限,請新增下列參數。
--set sidecars.livenessProbe.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/livenessprobe
--set sidecars.node-driver-registrar.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-node-driver-registrar
--set sidecars.csiProvisioner.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-provisioner
若要強制 Amazon EFS CSI 驅動程式使用 FIPS 掛載檔案系統,請新增下列參數。
--set useFips=true
筆記hostNetwork: true
(應在無法從 pod 網路存取 AWS 元資料的 kubernetes 安裝的規範/部署下新增。若要修復下列錯誤NoCredentialProviders: no valid providers in chain
應新增此參數。)
如果您想要下載具有清單的映像,我們建議您先嘗試以下步驟從私人 Amazon ECR 註冊表中提取受保護的映像。
使用儲存在私人 Amazon ECR 註冊表中的映像安裝驅動程式
下載清單。將release-XX
替換為您所需的分支。我們建議使用最新發布的版本。有關活動分支的列表,請參閱分支。
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-2.X " > private-ecr-driver.yaml
筆記
如果您遇到無法透過新增 IAM 權限解決的問題,請嘗試使用清單(公用登錄)步驟。
在下列命令中,將region-code
替換為您的us-west-2
所在的 AWS 區域。
sed -i.bak -e ' s|us-west-2|region-code| ' private-ecr-driver.yaml
將下列命令中的account
替換為您的叢集所在 AWS 區域的 Amazon 容器映像註冊表中的帳戶,然後執行修改後的命令以取代檔案中的602401143452
。
sed -i.bak -e ' s|602401143452|account| ' private-ecr-driver.yaml
如果您已依照為 Amazon EKS 建立 IAM 策略和角色建立了服務帳戶,請編輯private-ecr-driver.yaml
檔案。刪除以下建立 Kubernetes 服務帳戶的行。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
應用清單。
kubectl apply -f private-ecr-driver.yaml
在某些情況下,您可能無法新增從私人 Amazon ECR 登錄中提取所需的 IAM 權限。此場景的一個範例是,如果您的 IAM 委託人不允許使用其他人的帳戶進行身份驗證。如果是這樣,您可以使用公共 Amazon ECR 註冊表。
使用公共 Amazon ECR 註冊表中儲存的映像安裝驅動程式
下載清單。將release-XX
替換為您所需的分支。我們建議使用最新發布的版本。有關活動分支的列表,請參閱分支。
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.X " > public-ecr-driver.yaml
如果您已依照建立 IAM 策略和角色建立了服務帳戶,請編輯public-ecr-driver.yaml
檔案。刪除以下建立 Kubernetes 服務帳戶的行。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
應用清單。
kubectl apply -f public-ecr-driver.yaml
部署驅動程式後,您可以繼續執行以下部分:
參數 | 價值觀 | 預設 | 選修的 | 描述 |
---|---|---|---|---|
交易量指標選擇加入 | 錯誤的 | 真的 | 選擇發出數量指標。 | |
交易量指標刷新週期 | 240 | 真的 | 流量指標的刷新周期(以分鐘為單位)。 | |
交易量指標 FS 速率限制 | 5 | 真的 | 每個檔案系統的磁碟區度量例程速率限制器。 |
啟用 vol-metrics-opt-in 參數會啟動 inode 和磁碟使用資料的收集。此功能(特別是在檔案系統較大的情況下)可能會由於檔案系統資訊的詳細聚合而導致記憶體使用量增加。我們建議擁有大型檔案系統的使用者在使用此功能時考慮這一方面。
參數 | 價值觀 | 預設 | 選修的 | 描述 |
---|---|---|---|---|
刪除訪問點根目錄 | 錯誤的 | 真的 | 選擇透過DeleteVolume 刪除接入點根目錄。預設情況下,DeleteVolume 會刪除持久性磁碟區後面的存取點,刪除存取點不會刪除存取點根目錄或其內容。 | |
標籤 | 真的 | 空格分隔的鍵:值對將會新增為 Amazon EFS 資源的標籤。例如,“--tags=名稱:efs-tag-測試日期:Jan24” |
如果您想更新到最新發布的版本:
kubectl apply -k " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 "
如果要更新到特定版本,首先在本機自訂驅動程式yaml檔案:
kubectl kustomize " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 " > driver.yaml
然後,將 yaml 檔案中引用image: amazon/aws-efs-csi-driver
所有行更新為所需版本(例如,更新為image: amazon/aws-efs-csi-driver:v2.1.0
),並部署驅動程式yaml再次:
kubectl apply -f driver.yaml
在遵循範例之前,您需要:
elasticfilesystem:DescribeMountTargets
和ec2:DescribeAvailabilityZones
操作,請參閱此處的範例策略。 在開始之前,請先閱讀 CSI 規格和 Kubernetes CSI 開發人員文檔,以對 CSI 驅動程式有一些基本的了解。
如果您要更新 iam 策略文件,請同時更新 weaveworks/eksctl 中的 efs 策略 https://github.com/weaveworks/eksctl/blob/main/pkg/cfn/builder/statement.go */
依賴關係透過 go 模組進行管理。要建置項目,首先使用export GO111MODULE=on
開啟 go mod,建置專案運行: make
若要執行所有單元測試,請執行: make test
若要擷取日誌並對驅動程式進行故障排除,請參閱故障排除/README.md。
該庫根據 Apache 2.0 許可證獲得許可。