【发布时间】:2020-11-19 17:05:49
【问题描述】:
在 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
以下是我的 configMap:
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 来解决问题。有没有其他方法可以解决这个问题?是否有任何建议的最佳实践或解决此问题的最佳方法?
更新:
根据下面提供的 cmets,我尝试创建一个 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)
【问题讨论】:
-
提到的文件夹 /opt/nifi/conf 已经有一些文件。 authorizers.xml、bootstrap.conf、login-identity-providers.xml、state-management.xml、bootstrap-notification-services.xml、logback.xml、nifi.properties、zookeeper.properties。但是我真的只想从这些文件中更改一个文件。
标签: kubernetes apache-nifi azure-aks