簡體   English   中英

Kubernetes 持久卷聲明覆蓋現有目錄的所有者和權限

[英]Kubernetes persistent volume claim overriding existing directory's owner and permissions

在 Kubernetes 中,我遇到了目錄權限問題。 我正在使用一個 pod 進行測試,以創建一個基於 ElasticSearch 提供的 docker 映像構建的基本 Elasticsearch 實例。

如果我使用基本的 .yaml 文件來定義容器,一切都會啟動。 當我嘗試用從掛載持久卷創建的目錄替換從 docker 映像創建的目錄時,會發生問題。

原來的目錄是

drwxrwxr-x  1 elasticsearch root   4096 Aug 30 19:25 data

如果我掛載持久卷,它會將所有者和權限更改為

drwxr-xr-x  2 root          root   4096 Aug 30 19:53 data

現在,隨着 elasticsearch 進程以 elasticsearch 用戶身份運行,可以再訪問該目錄。

我已將 pod 的安全上下文的 fsGroup 設置為 1000,以匹配 elasticsearch 組的組。 我已經將容器的安全上下文的 runAsUser 設置為 0。我已經設置了用戶和組的各種其他組合,但無濟於事。

這是我的 pod、持久卷聲明和持久卷定義。

歡迎任何建議。

apiVersion: v1
kind: Pod
metadata:
  name: elasticfirst
  labels:
    app: elasticsearch

spec:
  securityContext:
    fsGroup: 1000

  containers:
  - name: es01
    image: docker.elastic.co/elasticsearch/elasticsearch:7.3.1
    securityContext:
      runAsUser: 0
    resources:
      limits:
        memory: 2Gi
        cpu: 200m
      requests:
        memory: 1Gi
        cpu: 100m
    env: 
      - name: node.name
        value: es01
      - name: discovery.seed_hosts
        value: es01
      - name: cluster.initial_master_nodes
        value: es01
      - name: cluster.name
        value: elasticsearch-cluster
      - name: bootstrap.memory_lock
        value: "true"
      - name: ES_JAVA_OPTS
        value: "-Xms1g -Xmx2g"
    ports:
    - containerPort: 9200
    volumeMounts:
    - mountPath: "/usr/share/elasticsearch/data"
      name: elastic-storage2
  nodeSelector:
    type: compute

  volumes:
  - name: elastic-storage2
    persistentVolumeClaim:
      claimName: elastic-storage2-pvc 



apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: elastic-storage2-pvc
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 512Mi


apiVersion: v1
kind: PersistentVolume
metadata:
  name: elastic-storage2-pv
spec:
  storageClassName: local-storage
  capacity:
    storage: 512Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /var/tmp/pv

您的問題對於正在發生的事情與您想要發生的事情有點混淆,但總的來說,這個問題是一個常見的問題; 這就是為什么許多設置使用initContainer:來更改新配置的 PersistentVolumes 的所有權( 如本例所示

在這樣的設置中, initContainer:將以 root 身份運行,但也可能是一個非常瘦的容器,其工作只是chown然后退出,讓您的應用程序容器 - 在您的示例中為 elasticsearch - 可以作為非特權運行用戶

spec:
  initContainers:
  - name: chown
    image: busybox
    command:
    - chown
    - -R
    - "1000:1000"
    - /the/data
    volumeMounts:
    - name: es-data
      mountPoint: /the/data
 containers:
 - name: es
   # etc etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM