作者:SRE運(yùn)維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220110850573/
相關(guān)話題:https://www.cnsre.cn/tags/eks/
學(xué)習(xí)目標(biāo)
- 在 EKS 中部署 Amazon EFS CSI 驅(qū)動(dòng)程序到
- 驗(yàn)證 EFS 并驗(yàn)證它是否正常工作
- 創(chuàng)建基于 EFS 的靜態(tài)候齿、動(dòng)態(tài)存儲(chǔ)
前提條件
- EKS 集群
- AWS CLI 如果你沒(méi)有安裝請(qǐng)查看安裝熙暴、更新和卸載 AWS CLI。在安裝 AWS CLI 后慌盯,還要對(duì)其進(jìn)行配置周霉。
- kubectl 如果沒(méi)有安裝 請(qǐng)查看安裝 kubectl。
創(chuàng)建 IAM 策略
創(chuàng)建 IAM 策略并將其分配給 IAM 角色亚皂。該策略將允許 Amazon EFS 驅(qū)動(dòng)程序與文件系統(tǒng)交互俱箱。
1.從 查看下方 IAM 策略文檔或者查看策略文檔。
{{< notice warning "注意" >}}
推薦使用 查看 策略文檔灭必。獲取策略文檔狞谱。
{{< /notice >}}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"elasticfilesystem:DescribeAccessPoints",
"elasticfilesystem:DescribeFileSystems"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"elasticfilesystem:CreateAccessPoint"
],
"Resource": "*",
"Condition": {
"StringLike": {
"aws:RequestTag/efs.csi.aws.com/cluster": "true"
}
}
},
{
"Effect": "Allow",
"Action": "elasticfilesystem:DeleteAccessPoint",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/efs.csi.aws.com/cluster": "true"
}
}
}
]
}
2.在IAM-策略 中創(chuàng)建策略
在Identity and Access Management (IAM)中點(diǎn)擊 策略
然后在下一步中點(diǎn)擊 創(chuàng)建策略
點(diǎn)擊
json
然后將 IAM 策略
填入乃摹, 然后點(diǎn)擊 下一步:標(biāo)簽
在下一步的標(biāo)簽中,可以根據(jù)自己的情況自行填寫(xiě),然后點(diǎn)擊
下一步:審核
名稱中填寫(xiě)
AmazonEKS_EFS_CSI_Driver_Policy
{{< notice warning "注意" >}}
你可以將 AmazonEKS_EFS_CSI_Driver_Policy 更改為其他名稱跟衅,但如果更改孵睬,請(qǐng)確保在后續(xù)步驟中也做出相應(yīng)更改。
{{< /notice >}}
將 efs 策略 附件到 eks node 角色中
將我們剛才創(chuàng)建的 efs 策略 AmazonEKS_EFS_CSI_Driver_Policy
附加在 eks_node 的角色中与斤,確保eks node擁有efs的權(quán)限肪康。
{{< notice warning "注意" >}}
如果你之前創(chuàng)建了 eks 那么在你的角色中會(huì)有一個(gè)名為 eksctl-<eks-name>-nodegrou-NodeInstanceRole-xxxxxxxxx
的角色。
{{< /notice >}}
在角色中搜索 node
然后點(diǎn)擊 eksctl-<eks-name>-nodegrou-NodeInstanceRole-xxxxxxxxx
在角色中點(diǎn)擊
附加策略
搜索之前創(chuàng)建的 EFS 策略 也就是
AmazonEKS_EFS_CSI_Driver_Policy
然后選中撩穿,點(diǎn)擊最下方的附加策略磷支。安裝 Amazon EFS 驅(qū)動(dòng)程序
使用 Helm 或 yaml 清單安裝 Amazon EFS CSI 驅(qū)動(dòng)程序。
這邊不詳細(xì)說(shuō) helm 部署方式主要介紹 yaml 清單部署
{{< notice warning "注意" >}}
一定要修改鏡像地址為你所在的地區(qū) Amazon EKS 附加組件容器鏡像地址
{{< /notice >}}
yaml 清單部署
{{< notice info "提示" >}}
因?yàn)間ithub網(wǎng)絡(luò)的問(wèn)題食寡。如果再執(zhí)行的時(shí)候部署沒(méi)有反應(yīng)雾狈,請(qǐng)終止運(yùn)行,多運(yùn)行幾次嘗試部署
{{< /notice >}}
kubectl apply -k "github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-1.3"
輸出如下:
serviceaccount/efs-csi-controller-sa created
serviceaccount/efs-csi-node-sa created
clusterrole.rbac.authorization.k8s.io/efs-csi-external-provisioner-role created
clusterrolebinding.rbac.authorization.k8s.io/efs-csi-provisioner-binding created
deployment.apps/efs-csi-controller created
daemonset.apps/efs-csi-node created
csidriver.storage.k8s.io/efs.csi.aws.com created
檢查驅(qū)動(dòng)運(yùn)行是否正常
kubectl get pods -A|grep efs
kube-system efs-csi-controller-56f6dc4c76-2lvqf 3/3 Running 0 3m32s
kube-system efs-csi-controller-56f6dc4c76-dxkwl 3/3 Running 0 3m32s
kube-system efs-csi-node-9ttxp 3/3 Running 0 3m32s
kube-system efs-csi-node-hsn94 3/3 Running 0 3m32s
{{< notice warning "注意" >}}
雖然這邊顯示運(yùn)行正常抵皱,但是還是要修改鏡像地址善榛。不然在創(chuàng)建pv,pvc以后在pod中掛載會(huì)出現(xiàn)錯(cuò)誤呻畸。(后面會(huì)單獨(dú)記錄這個(gè)錯(cuò)誤)
{{< /notice >}}
修改 efs-csi-node 驅(qū)動(dòng)
kubectl edit daemonsets.apps -n kube-system efs-csi-node
找到 aws-efs-csi-driver
驅(qū)動(dòng)所在的位置
然后將鏡像修改為 918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/eks/aws-efs-csi-driver:v1.3.3
具體如下
創(chuàng)建 Amazon EFS 文件系統(tǒng)
為 Amazon EKS 集群創(chuàng)建 Amazon EFS 文件系統(tǒng)
在控制臺(tái)中搜索 efs
點(diǎn)擊確認(rèn)然后進(jìn)入 EFS
控制臺(tái)
在控制臺(tái)中點(diǎn)擊
創(chuàng)建文件系統(tǒng)
名稱: 根據(jù)自己的情況填寫(xiě)
vpc: 一定要?jiǎng)?chuàng)建在跟
eks
同一 VPC
下可用性和持久性: 根據(jù)提示說(shuō)明創(chuàng)建自己所需要的
如果有更多需求可以點(diǎn)擊
自定義來(lái)設(shè)置更多
如:吞吐量移盆、加密、備份等策略最后點(diǎn)擊
創(chuàng)建
創(chuàng)建入站規(guī)則
允許來(lái)自 EKS 集群 VPC 的 CIDR 的入站 NFS 流量
在剛剛創(chuàng)建的 EFS
中選擇 網(wǎng)絡(luò)
--> 安全組
然后復(fù)制安全組的ID sg-152XXX
在
EC2
中找到 網(wǎng)絡(luò)與安全
選擇 安全組
然后在搜索框中搜索 sg-152XXX
選中安全組伤为。并選擇 入站規(guī)則
在入站規(guī)則中允許來(lái) EKS 集群來(lái)訪問(wèn) NFS(2049)端口流量咒循。
部署示例應(yīng)用程序
{{< tabs 部署靜態(tài)供給 內(nèi)容部署動(dòng)態(tài)供給 >}}
{{< tab >}}
部署靜態(tài)供給
部署使用你創(chuàng)建的持久性卷的示例應(yīng)用程序
此過(guò)程利用來(lái)自 Amazon EFS Container Storage Interface (CSI) 驅(qū)動(dòng)程序 GitHub 存儲(chǔ)庫(kù)的多個(gè) Pod 讀寫(xiě)許多示例來(lái)使用靜態(tài)預(yù)置的 Amazon EFS 持久性卷,并使用 ReadWriteMany
訪問(wèn)模式從多個(gè) Pod 訪問(wèn)它绞愚。
-
將 Amazon EFS Container Storage Interface (CSI) 驅(qū)動(dòng)程序 GitHub 存儲(chǔ)庫(kù)克隆到你的本地系統(tǒng)叙甸。
git clone https://github.com/kubernetes-sigs/aws-efs-csi-driver.git
-
導(dǎo)航到
multiple_pods
示例目錄。cd aws-efs-csi-driver/examples/kubernetes/multiple_pods/
-
檢索你的 Amazon EFS 文件系統(tǒng) ID位衩。你可以在 Amazon EFS 控制臺(tái)中查找此信息裆蒸,或者使用以下 AWS CLI 命令。
aws efs describe-file-systems --query "FileSystems[*].FileSystemId" --output text
輸出:
fs-<582a03f3>
-
編輯
specs/pv.yaml
文件并將volumeHandle
值替換為你的 Amazon EFS 文件系統(tǒng) ID糖驴。apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: efs-sc csi: driver: efs.csi.aws.com volumeHandle: fs-<582a03f3>
注意
由于 Amazon EFS 是彈性文件系統(tǒng)僚祷,因此它不會(huì)強(qiáng)制實(shí)施任何文件系統(tǒng)容量限制。在創(chuàng)建系統(tǒng)時(shí)贮缕,不使用持久性卷和持久性卷聲明中的實(shí)際存儲(chǔ)容量值辙谜。但是,由于存儲(chǔ)容量是 Kubernetes 中的必需字段跷睦,你必須指定有效值筷弦,例如,在此示例中為
5Gi
。此值不會(huì)限制 Amazon EFS 文件系統(tǒng)的大小烂琴。 -
從
specs
目錄部署efs-sc
存儲(chǔ)類爹殊、efs-claim
持久性卷聲明以及efs-pv
持久性卷。kubectl apply -f specs/pv.yaml kubectl apply -f specs/claim.yaml kubectl apply -f specs/storageclass.yaml
-
列出默認(rèn)命名空間中的持久性卷奸绷。查找具有
default/efs-claim
聲明的持久性卷梗夸。kubectl get pv -w
輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE efs-pv 5Gi RWX Retain Bound default/efs-claim efs-sc 2m50s
在
STATUS
變?yōu)?Bound
之前,請(qǐng)勿繼續(xù)執(zhí)行下一步号醉。 -
從
specs
目錄部署app1
和app2
示例應(yīng)用程序反症。kubectl apply -f specs/pod1.yaml kubectl apply -f specs/pod2.yaml
-
查看默認(rèn)命名空間中的 Pod 并等待
app1
和app2
Pod 的STATUS
變?yōu)?Running
狀態(tài)。kubectl get pods --watch
注意
可能需要幾分鐘 Pod 才能達(dá)到
Running
狀態(tài)畔派。 -
描述持久性卷铅碍。
kubectl describe pv efs-pv
輸出:
Name: efs-pv Labels: none Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"v1","kind":"PersistentVolume","metadata":{"annotations":{},"name":"efs-pv"},"spec":{"accessModes":["ReadWriteMany"],"capaci... pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pv-protection] StorageClass: efs-sc Status: Bound Claim: default/efs-claim Reclaim Policy: Retain Access Modes: RWX VolumeMode: Filesystem Capacity: 5Gi Node Affinity: none Message: Source: Type: CSI (a Container Storage Interface (CSI) volume source) Driver: efs.csi.aws.com VolumeHandle: fs-582a03f3 ReadOnly: false VolumeAttributes: none Events: none
Amazon EFS 文件系統(tǒng) ID 將作為
VolumeHandle
列出。 -
驗(yàn)證
app1
Pod 是否成功將數(shù)據(jù)寫(xiě)入卷线椰。kubectl exec -ti app1 -- tail /data/out1.txt
輸出:
... Mon Mar 22 18:18:22 UTC 2021 Mon Mar 22 18:18:27 UTC 2021 Mon Mar 22 18:18:32 UTC 2021 Mon Mar 22 18:18:37 UTC 2021 ...
-
驗(yàn)證
app2
Pod 在卷中顯示的數(shù)據(jù)與app1
寫(xiě)入卷的數(shù)據(jù)相同胞谈。kubectl exec -ti app2 -- tail /data/out1.txt
輸出:
... Mon Mar 22 18:18:22 UTC 2021 Mon Mar 22 18:18:27 UTC 2021 Mon Mar 22 18:18:32 UTC 2021 Mon Mar 22 18:18:37 UTC 2021 ...
-
完成試驗(yàn)時(shí),請(qǐng)刪除此示例應(yīng)用程序的資源以進(jìn)行清理憨愉。
kubectl delete -f specs/
你還可以手動(dòng)刪除你創(chuàng)建的文件系統(tǒng)和安全組烦绳。
{{< /tab >}}
{{< tab >}}
部署動(dòng)態(tài)供給
Prerequisite
您必須使用 1.2x 版或更高版本的 Amazon EFS CSI 驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序需要 1.17 或更高版本的集群配紫。要更新集群径密,請(qǐng)參閱 更新集群。
部署使用控制器所創(chuàng)建的持久性卷的示例應(yīng)用程序
此過(guò)程利用來(lái)自 Amazon EFS Container Storage Interface (CSI) 驅(qū)動(dòng)程序 GitHub 存儲(chǔ)庫(kù)的動(dòng)態(tài)預(yù)置示例躺孝。它通過(guò) Amazon EFS 接入點(diǎn)和 Pod 使用的持久性卷申領(lǐng) (PVC) 動(dòng)態(tài)創(chuàng)建一個(gè)持久性卷享扔。
-
為 EFS 創(chuàng)建存儲(chǔ)類。有關(guān)所有參數(shù)和配置選項(xiàng)括细,請(qǐng)參閱 GitHub 上的 Amazon EFS CSI 驅(qū)動(dòng)程序伪很。
-
下載 Amazon EFS 的
StorageClass
清單戚啥。curl -o storageclass.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/storageclass.yaml
編輯相應(yīng)文件奋单,將
fileSystemId
的值替換為您的文件系統(tǒng) ID。-
部署存儲(chǔ)類猫十。
kubectl apply -f storageclass.yaml
-
-
通過(guò)部署利用
PersistentVolumeClaim
的 Pod 來(lái)測(cè)試自動(dòng)預(yù)置:-
下載一個(gè)清單览濒,該清單將部署一個(gè) Pod 和一個(gè) PersistentVolumeClaim。
curl -o pod.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/examples/kubernetes/dynamic_provisioning/specs/pod.yaml
-
使用示例應(yīng)用程序和 Pod 使用的 PersistentVolumeClaim 來(lái)部署 Pod拖云。
kubectl apply -f pod.yaml
-
-
確定運(yùn)行控制器的 Pod 的名稱贷笛。
kubectl get pods -n kube-system | grep efs-csi-controller
輸出
efs-csi-controller-74ccf9f566-q5989 3/3 Running 0 40m efs-csi-controller-74ccf9f566-wswg9 3/3 Running 0 40m
-
幾秒鐘后,您可以觀察到控制器開(kāi)始接受更改(已編輯宙项,旨在提高可讀性)乏苦。將
74ccf9f566-q5989
替換成來(lái)自上一個(gè)命令輸出中的一個(gè) Pod 的值。kubectl logs efs-csi-controller-74ccf9f566-q5989 \ -n kube-system \ -c csi-provisioner \ --tail 10
輸出
... 1 controller.go:737] successfully created PV pvc-5983ffec-96cf-40c1-9cd6-e5686ca84eca for PVC efs-claim and csi volume name fs-95bcec92::fsap-02a88145b865d3a87
如果未看到上一個(gè)輸出血淌,請(qǐng)使用其他控制器 Pod 之一運(yùn)行上一個(gè)命令漾月。
-
確認(rèn)已創(chuàng)建狀態(tài)為
Bound
至PersistentVolumeClaim
的持久性卷:kubectl get pv
輸出
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-5983ffec-96cf-40c1-9cd6-e5686ca84eca 20Gi RWX Delete Bound default/efs-claim efs-sc 7m57s
-
查看有關(guān)所創(chuàng)建的
PersistentVolumeClaim
的詳細(xì)信息亮元。kubectl get pvc
輸出
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE efs-claim Bound pvc-5983ffec-96cf-40c1-9cd6-e5686ca84eca 20Gi RWX efs-sc 9m7s
-
查看示例應(yīng)用程序 Pod 的狀態(tài)盯孙。
kubectl get pods -o wide
輸出
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES efs-example 1/1 Running 0 10m 192.168.78.156 ip-192-168-73-191.us-west-2.compute.internal <none> <none>
確認(rèn)數(shù)據(jù)已寫(xiě)入到卷虚倒。
kubectl exec efs-app -- bash -c "cat data/out"
輸出
... Tue Mar 23 14:29:16 UTC 2021 Tue Mar 23 14:29:21 UTC 2021 Tue Mar 23 14:29:26 UTC 2021 Tue Mar 23 14:29:31 UTC 2021 ...
(可選)終止運(yùn)行 Pod 的 Amazon EKS 節(jié)點(diǎn)并等待重新安排運(yùn)行 Pod沛贪〉票洌或者敬肚,您也可以刪除 Pod 并重新部署它革娄。再次完成步驟 7倾贰,確認(rèn)輸出包含先前的輸出。
{{< /tab >}}
{{< /tabs >}}
作者:SRE運(yùn)維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220110850573/
相關(guān)話題:https://www.cnsre.cn/tags/eks/