如何创建守护进程集来管理(创建或删除或检查是否存在,然后不执行任何操作)“/var/log”父目录下的目录列表

问题描述 投票:0回答:1

要创建/管理的目录应该是动态的,并从 helm 版本的

values.yaml
文件中读取。

我能想到的Daemonset定义如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: create-directory
spec:
  selector:
    matchLabels:
      app: create-directory
  template:
    metadata:
      labels:
        app: create-directory
    spec:
      # use default service-account with scc role-binding
      ServiceAccountName: default
      containers:
      - name: create-directory
        image: "{{ .Values.container.image }}"
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c"]
        args:
          - |
            {{- range .Values.directories }}

            dir_path="/var/log/at/{{ . }}"
            echo $dir_path

            # Check if the directory exists
            if [ -d "$dir_path" ]; then
              echo "Directory $dir_path already exists."
            else
              # Create the directory
              mkdir -p "$dir_path" && echo "Directory $dir_path created."
            fi

            {{- end }}
            
            while true; do
              sleep 100000;
            done
        # run the container as root
        securityContext:
          runAsUser: 0
        volumeMounts:
          - name: at-volume
            mountPath: /var/log/at
      volumes:
        - name: at-volume
          hostPath:
            path: /var/log/at

其中舵图的

values.yaml
文件如下所示:

container:
  image: registry.access.redhat.com/ubi8/toolbox:8.5
directories:
  - directory1
  - directory2

我需要以下方面的指导:

  1. 我使用
    sleep
    来保持 Pod 存活并在执行目录检查脚本后阻止其重新调度的方法是正确的还是社区推荐其他方法?
  2. values.yaml
    目录列表中删除目录后,如何删除它们?

更新 对于(1)我可以找到一个解决方案:“Run-once Kubernetes DaemonSet pods

kubernetes kubernetes-helm daemonset
1个回答
0
投票

对于问题#2,你可以尝试一下:

rm -rf !({{ .Values.directories | join "|" }})

这将删除除列出的目录之外的所有目录。请参阅此处了解更多示例。

© www.soinside.com 2019 - 2024. All rights reserved.