在Azure Kubernetes服务上旋转Nifi集群时,我在使用configMap
挂载nifi.properties
文件时遇到问题。在使用以下配置挂载文件时,我收到以下错误。sed: can't move '/opt/nifi/conf/nifi.propertiesnCjDfm' to '/opt/nifi/conf/nifi.properties': Resource busy
个
这个错误似乎是由于nifi示例在kubernetes有机会替换它之前已经使用了这个文件。
我正在寻找一种替代或更好的方式来配置nifi集群和管理其配置。目前我试图使用ConfigMap来存储nifi.properties或任何其他必要的文件。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nifi
namespace: nifi-ns
...
spec:
template:
spec:
containers:
- name: nifi
image: xemuliam/nifi:1.9.1
...
volumeMounts:
...
- mountPath: /opt/nifi/conf/nifi.properties
subPath: nifi.properties
name: file
volumes:
- name: file
configMap:
name: nifi-properties-cm
items:
- key: nifi.properties
path: nifi.properties
字符串
以下是我的Map:
apiVersion: v1
kind: ConfigMap
metadata:
name: nifi-properties-cm
namespace: nifi-ns
data:
nifi.properties: |
# Core Properties #
nifi.flow.configuration.file=./conf/flow.xml.gz
...
型
我试过像上面那样挂载文件,也试过挂载整个conf文件夹(我不喜欢这种方式,因为我真正想改变的唯一配置是nifi.properties)
我知道我总是可以自定义映像并给予自定义入口点来实现相同的效果,但我想尝试单独使用kubernetes解决这个问题。还有其他方法可以解决这个问题吗?有没有建议的最佳实践或解决这个问题的最佳方法?
更新:
根据下面提供的注解,我尝试创建一个init容器并将文件复制到共享卷,但这没有帮助,因为它覆盖了容器内的文件夹并使pod失败。
下面是使用的配置:
apiVersion: v1
kind: Pod
metadata:
name: test
labels:
name: test
spec:
initContainers:
- name: busybox
image: busybox
command: ["/bin/sh", "-c", "cp /usr/nifi.properties /opt/nifi/conf/nifi.properties"]
volumeMounts:
- mountPath: /usr/nifi.properties
name: file
subPath: nifi.properties
- mountPath: /opt/nifi/conf
name: config
containers:
- name: test
image: xemuliam/nifi:1.9.1
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
volumeMounts:
- mountPath: /opt/nifi/conf
name: config
volumes:
- name: file
configMap:
name: nifi-properties-cm
- name: config
emptyDir: {}
型
以下是我收到的应用程序日志:
Exception in thread "main" java.io.FileNotFoundException: /opt/nifi/conf/bootstrap.conf (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at org.apache.nifi.bootstrap.RunNiFi.loadServices(RunNiFi.java:267)
at org.apache.nifi.bootstrap.RunNiFi.<init>(RunNiFi.java:152)
at org.apache.nifi.bootstrap.RunNiFi.main(RunNiFi.java:212)
型
1条答案
按热度按时间lzfw57am1#
您可以使用带有nifi.properties作为初始化值的初始化Map,并将此文件复制到文件系统中。
字符串
然后你的nifi pod可以使用复制的文件