在 kubernetes 中使用 readOnlyRootFilesystem 时如何免除目录?

Lee*_*ton 1 kubernetes

我需要阻止我的 k8s pod 写入根文件夹,并免除 /tmp 目录。我需要写入此目录有两个原因:

  1. Flask 需要写到某个地方。它正在尝试写入 /tmp 和 /etc/... 和 /opt/... ,但它们都被阻止,因为它位于根文件夹下
  2. 我将需要写入一个文件以进行活性探测,但是如果整个文件系统被阻止,那么我就无法做到

我在 GKE 中运行 kubernetes 1.13.6-gke.13

yaml 文件中的相关部分:

securityContext:
  runAsUser: 1000
  readOnlyRootFilesystem: true
  runAsNonRoot: true
Run Code Online (Sandbox Code Playgroud)

我希望 pod 能够写入预定义的文件夹,可能是一个已安装的文件夹。

小智 9

为 /tmp 目录创建卷挂载。

volumeMounts:
- mountPath: /tmp
  name: tmp
Run Code Online (Sandbox Code Playgroud)

并在卷中 -

volumes:
- emptyDir: {}
  name: tmp
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“emptyDir”使用 Kubernetes 节点上的存储,并且有可能填充节点的操作系统磁盘。 (7认同)
  • [通用临时卷](https://kubernetes.io/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volumes) 登陆 Kubernetes v1.23,我认为这是一次性卷的一个很好的替代方案。 (2认同)

mus*_*cat 2

据我了解,您希望创建一个可以访问本地目录的 POD。您需要创建PV、PVC和POD。

光伏发电定义:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-flaskapp
  labels:
    type: local
spec:
  storageClassName: <your-storageclass-name>
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/opt/test_flask/app"
Run Code Online (Sandbox Code Playgroud)

聚氯乙烯定义:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-flaskapp
spec:
  storageClassName: <your-storageclass-name>
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
Run Code Online (Sandbox Code Playgroud)

POD定义:

apiVersion: v1
kind: Pod
metadata:
  name: flaskapp
spec:
  containers:
  - image: flask:latest
    name: flaskapp
    ports:
      - containerPort: 8080
        name: flaskapp
    volumeMounts:
    - mountPath: /usr/local/flask/webapps
      name: test-volume
  volumes:
  - name: test-volume
    persistentVolumeClaim:
      claimName: pvc-flask
Run Code Online (Sandbox Code Playgroud)

现在您可以检查一切是否正常:

$ kubectl exec -it flaskapp bash
root@flaskapp:/usr/local/flask# mkdir /usr/local/flask/webapps/sample 
root@flaskapp:/usr/local/flask# touch /usr/local/flask/webapps/sample/testfile
root@flaskapp:/usr/local/flask# ls /usr/local/flask/webapps/sample/
testfile
Run Code Online (Sandbox Code Playgroud)

现在,当您查看主机时,您将看到新创建的文件:

[root@master user]# ls /opt/test_flask/app/sample/
testfile
Run Code Online (Sandbox Code Playgroud)

我希望它能帮助你。