当前位置: 首页 > 面试题库 >

在kubernetes statefulset中对Elasticsearch数据目录进行chown时权限被拒绝

高建本
2023-03-14
问题内容

希望有人可以帮助我解决似乎是权限错误的问题。我正在尝试使用官方的Elasticsearch
Docker镜像启动一个3节点的Elasticsearch集群。当容器启动时,我从/ usr / share / elasticsearch / data
/ nodes上的Elasticsearch收到“拒绝访问”错误,因此我尝试添加命令以使Elasticsearch成为/ usr / share /
elasticsearch / data的所有者。但是当我包含chown命令时,我得到了这些错误:

chown: cannot read directory '/usr/share/elasticsearch/data/lost+found': Permission denied
chown: changing ownership of '/usr/share/elasticsearch/data': Operation not permitted

这是我的statefulset yaml文件:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: esnode
spec:
  serviceName: elasticsearch-transport
  replicas: 3
  template:
    metadata:
      labels:
        app: evo-pro-cluster
    spec:
      initContainers:
      - name: init-sysctl
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["sysctl", "-w", "vm.max_map_count=262144"]
        securityContext:
          privileged: true
      containers:
      - name: elasticsearch
        securityContext:
          privileged: true
          capabilities:
            add:
            - IPC_LOCK
            - SYS_RESOURCE
        command: ["/bin/sh"]
        args: ["-c", "chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/data"]
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.1
        imagePullPolicy: Always
        env:
        - name: "ES_JAVA_OPTS"
          value: "-Xms6g -Xmx6g"
        ports:
        - containerPort: 9200
          name: http
          protocol: TCP
        - containerPort: 9300
          name: transport
          protocol: TCP
        volumeMounts:
        - name: storage
          mountPath: /usr/share/elasticsearch/data
        - name: config
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
          subPath: elasticsearch.yml
      volumes:
        - name: config
          configMap:
            name: elasticsearch-config
  volumeClaimTemplates:
  - metadata:
      name: storage
      annotations:
        storageClassName: standard
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 110Gi

问题答案:

这个特定的docker映像期望uid可写数据目录2000。您可以通过添加.spec.securityContext.fsGroup以下内容来告诉Kubernetes吊挂Pod(某种程度上)的挂载点:

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: esnode
spec:
  ...
  securityContext:
    fsGroup: 2000

(当然,您可以摆脱chown hack或initContainer)

fsGroup整数:一个特殊的补充组,适用于容器中的所有容器。某些卷类型允许Kubelet更改要由Pod拥有的该卷的所有权:1.拥有的GID将是FSGroup。2.将setgid位置1(在该卷中创建的新文件将由FSGroup拥有)3
。权限位与rw-rw ----进行或运算。如果未设置,则Kubelet不会修改任何卷的所有权和权限。



 类似资料:
  • 我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?

  • 我正试图按照Firebase的在线指南使用Firebase实时数据库,但由于我的许可被拒绝,我无法获得数据库的任何更新。我不确定我做错了什么。我甚至设定了阅读和写作的规则。 onClickListener内的代码如下: 这是在片段中,按钮在开始片段替换事务之前首先完成这些语句。 以下是Firebase中的规则: 由于我不熟悉JSON,我也尝试过在“.write”结尾加逗号 这是stacktrace

  • 我有一个包裹。json地址: 如果我导航到此位置: 然后运行一个命令: 它工作,没有错误。 但是,如果我尝试这样运行命令 我收到一条消息: 为什么会这样?我没有更改登录的用户。

  • 问题内容: 概要 我试图在Docker中挂载主机目录,但是即使访问权限看起来不错,也无法从容器中访问主机目录。 细节 我在做 接着 它给了我: 以及更多类似的内容(我认为这是相关的部分)。 如果我做 结果是 主机是Fedora 20,带有Docker 1.0.0和go1.2.2。 怎么了? 问题答案: 这是SELinux问题。 您可以暂时签发 在主机上访问或通过运行添加SELinux规则 特别:

  • 这是我面临这个问题的一天。我不知道这是因为托管服务器还是我在joomla中的配置。 我正在尝试使用Akeba备份将我的joomla网站上传到ftp。首先,我上传了kickstart。php和Akeba文件的网站,它是成功的。 现在,我做了安装使用akeeba和最后一部分,它显示了一个模式,显示一个按钮"查看您的网站前端"。而不是去网站前端它下载一个index.php文件...我输入http://m

  • 我正在尝试为我的Android应用程序请求运行时权限。这是我的代码: 在我的AndroidManifest中。xml: 但是,上面的代码始终显示权限被拒绝,而不提示用户请求权限。有什么想法吗? 谢谢