eks使用efs dynamic provisioning 創(chuàng)建非root容器提示 Operation not permitted


作者:SRE運維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220125450139/
相關話題:https://www.cnsre.cn/tags/eks/


前言

之前在 aws 中創(chuàng)建了 eks,在數(shù)據(jù)存儲這一塊中,我選擇了使用 AWS 的 EFS 具體部署配置參考Amazon EKS 中 EFS 持久性存儲。文章中的動態(tài)供給是 AWS 官方給的示例,使用的是root用戶啟動的容器。在我后面的測試中發(fā)現(xiàn),我在使用非root用戶啟動容器的時候,發(fā)現(xiàn)使用靜態(tài)供給是有權限并且沒有報錯的。但是在使用靜載供給的時候出現(xiàn)了 Operation not permitted 的報錯访锻。

問題描述

我根據(jù)efs dynamic_provisioning 創(chuàng)建了 dynamic provisioning
root用戶的容器運行沒有問題褪尝,但是非root用戶容器運行時提示 “Operation not permitted”

pod配置清單:

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

StorageClass配置清單:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com
parameters:
  provisioningMode: efs-ap
  fileSystemId: fs-xxxxx
  directoryPerms: "700"
  gidRangeStart: "1000" # optional
  gidRangeEnd: "2000" # optional
  basePath: "/dynamic_provisioning" # optional

分析和檢查

該報錯是由于采用了dynamic provisioning PV部署方式,這種模式的實現(xiàn)需要利用 efs-ap:access point訪問點 模式做 EFS 掛載期犬。從 EFS 的角度來講河哑,EFSaccess point 模式掛載的 EFS 卷,客戶端不可修改 uid/gid 龟虎,只擁有使用權(讀寫)詳情點擊查看璃谨。從自己的pod環(huán)境也可以看到,客戶端掛載目錄/dynamic_provisioning 的uid跟gid都是一個隨機數(shù)字鲤妥。 ls -l /dynamic_provisioning可以看到是 `1018 (不同環(huán)境uid會不同)佳吞。

EFS-AP模式指的是access point訪問點模式。關于訪問點的介紹:
EFS Access Points:
An access point applies an operating system user, group, and file system path to any file system request made using the access point. The access point's operating system user and group override any identity information provided by the NFS client.
簡單來講棉安,EFS-AP也就是access point訪問點掛載模式下底扳,efs客戶端的路徑user/gid是不可被修改的。的客戶端用戶只有使用權(讀寫)贡耽,但是不可以修改owner衷模。因此遇到的報錯是該配置的預期表現(xiàn)。

EFS-AP模式的配置是在storageclass中定義的:provisioningMode: efs-ap蒲赂,比如:

kind: StorageClass
apiVersion: storage.k8s.io/v1 
metadata:
  name: efs-sc-dynamic
provisioner: efs.csi.aws.com 
parameters:
  provisioningMode: efs-ap    <<<<<<<<<<<<<<------------------------------EFS訪問點掛載模式
  fileSystemId: fs-xxxxxx
  directoryPerms: "700"
  gidRangeStart: "1000" # optional
  gidRangeEnd: "2000" # optional
  basePath: "/dynamic_provisioning" # optional

目前AWS EFS的 dynamic provisioning 模式的實現(xiàn)就是使用 storageclassefs-sc-dynamic 模式阱冶。
這種模式的弊端已經(jīng)在 github 中有issue在跟蹤,詳情點擊查看,但是由于該模式也有一定的設計意義 詳情點擊查看滥嘴,所以目前還沒有明確的結論熙揍。

臨時解決方法

使用靜態(tài)模式創(chuàng)建

可以創(chuàng)建EKS pv/pvc時使用static模式部署PV,不會使用access point模式掛載EFS卷氏涩,那么可以順利修改uid/gid。
詳情參考Amazon EKS 中 EFS 持久性存儲

在pod中指定 uid 和 gid

在創(chuàng)建pod之前有梆,先創(chuàng)建 pvc在創(chuàng)建完pvc后查看uid 和gid

[root@ip-10-0-100-206 ~]# ls -l /efs/dynamic_provisioning/
total 12
drwxr-xr-x 5 1015 1015 6144 Jan 20 02:44 pvc-40b922c7-8d4d-47d9-8783-60d25abe123
drwxr-xr-x 5 1017 1017 6144 Jan 20 04:22 pvc-4ee000a8-7ab2-4ffc-8fd3-72ef31b7123
drwx------ 5 1014 1014 6144 Jan 20 01:08 pvc-f6622cb3-7c24-4172-a427-d4b9a996122

將輸出內(nèi)容的pvc的uid gid 記下并在pod的yaml清單中指定uid已經(jīng)gid讓pod擁有該目錄的權限是尖。
pod配置清單:

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql
  clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      securityContext:
        fsGroup: 1014
        runAsUser: 1014
        runAsGroup: 1014
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

檢查

kubectl get pv|grep  mysql 
pvc-f6622cb3-7c24-4172-a427-d4b9a9962cd8   5Gi   RWX   Delete   Bound   default/mysql-pv-claim   efs-sc      5d23h

kubectl get  pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
mysql-pv-claim   Bound    pvc-f6622cb3-7c24-4172-a427-d4b9a9962cd8   5Gi        RWX            efs-sc         5d23h

kubectl get  pod
NAME                               READY   STATUS    RESTARTS   AGE
wordpress-mysql-6f6455f449-52zrp   1/1     Running   0          5d7h

作者:SRE運維博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/220125450139/
相關話題:https://www.cnsre.cn/tags/eks/


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泥耀,隨后出現(xiàn)的幾起案子饺汹,更是在濱河造成了極大的恐慌,老刑警劉巖痰催,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜辞,死亡現(xiàn)場離奇詭異,居然都是意外死亡夸溶,警方通過查閱死者的電腦和手機逸吵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缝裁,“玉大人扫皱,你說我怎么就攤上這事。” “怎么了韩脑?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵氢妈,是天一觀的道長。 經(jīng)常有香客問我段多,道長首量,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任进苍,我火速辦了婚禮加缘,結果婚禮上,老公的妹妹穿的比我還像新娘琅捏。我一直安慰自己生百,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布柄延。 她就那樣靜靜地躺著蚀浆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搜吧。 梳的紋絲不亂的頭發(fā)上市俊,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音滤奈,去河邊找鬼摆昧。 笑死,一個胖子當著我的面吹牛蜒程,可吹牛的內(nèi)容都是我干的绅你。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼昭躺,長吁一口氣:“原來是場噩夢啊……” “哼忌锯!你這毒婦竟也來了?” 一聲冷哼從身側響起领炫,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤偶垮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帝洪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體似舵,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年葱峡,在試婚紗的時候發(fā)現(xiàn)自己被綠了砚哗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡砰奕,死狀恐怖频祝,靈堂內(nèi)的尸體忽然破棺而出泌参,到底是詐尸還是另有隱情,我是刑警寧澤常空,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布沽一,位于F島的核電站,受9級特大地震影響漓糙,放射性物質(zhì)發(fā)生泄漏铣缠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一昆禽、第九天 我趴在偏房一處隱蔽的房頂上張望蝗蛙。 院中可真熱鬧,春花似錦醉鳖、人聲如沸捡硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壮韭。三九已至,卻和暖如春纹因,著一層夾襖步出監(jiān)牢的瞬間喷屋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工瞭恰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屯曹,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓惊畏,卻偏偏與公主長得像恶耽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颜启,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容