如何在Minikube的K8S集群中正确部署Apache NiFi?
在Minikube上部署Apache NiFi集群的正确步骤
一、先解决ZooKeeper Pod Pending问题
你的zk-1处于Pending状态,核心原因是Minikube默认分配的CPU/内存资源不足以支撑ZooKeeper集群,先扩容Minikube资源:
minikube stop minikube start --cpus=4 --memory=8192
重新部署ZooKeeper并等待所有Pod就绪:
kubectl delete -f https://k8s.io/examples/application/zookeeper/zookeeper.yaml kubectl apply -f https://k8s.io/examples/application/zookeeper/zookeeper.yaml # 实时监控Pod状态,直到所有zk-* Pod都显示Running kubectl get pods -w
二、选择正确的NiFi镜像
不要使用第三方私有镜像,直接采用Apache官方维护的镜像,格式为apache/nifi:<版本号>,建议选用最新稳定版(比如apache/nifi:1.26.0,可根据官网更新调整版本)。
三、使用适配K8S新版本的NiFi部署配置
你提供的旧YAML存在API版本过时、配置冗余、资源规划不合理等问题,以下是修正后的生产级配置(用StatefulSet替代Deployment,更适合NiFi集群的稳定网络需求):
nifi-statefulset.yaml
# NiFi 服务配置 apiVersion: v1 kind: Service metadata: name: nifi-service spec: selector: app: nifi ports: - protocol: TCP targetPort: 8080 port: 8080 name: ui - protocol: TCP targetPort: 9088 port: 9088 name: node-protocol - protocol: TCP targetPort: 8888 port: 8888 name: s2s type: NodePort # Minikube环境用NodePort更易访问,LoadBalancer需额外配置 --- # NiFi StatefulSet 集群配置 apiVersion: apps/v1 kind: StatefulSet metadata: name: nifi spec: serviceName: nifi-service replicas: 2 selector: matchLabels: app: nifi template: metadata: labels: app: nifi spec: containers: - name: nifi image: apache/nifi:1.26.0 ports: - containerPort: 8080 name: http - containerPort: 9088 name: node-protocol - containerPort: 8888 name: s2s resources: requests: cpu: "1" memory: "4Gi" limits: cpu: "2" memory: "6Gi" env: - name: NIFI_CLUSTER_IS_NODE value: "true" - name: NIFI_CLUSTER_NODE_PROTOCOL_PORT value: "9088" - name: NIFI_ELECTION_MAX_CANDIDATES value: "2" - name: NIFI_ZK_CONNECT_STRING value: "zk-0.zk-hs.default.svc.cluster.local:2181,zk-1.zk-hs.default.svc.cluster.local:2181,zk-2.zk-hs.default.svc.cluster.local:2181" - name: NIFI_WEB_HTTP_PORT value: "8080" - name: NIFI_S2S_PORT value: "8888"
四、部署NiFi的终端命令顺序
- 将上述配置保存为
nifi-statefulset.yaml文件 - 执行部署命令:
kubectl apply -f nifi-statefulset.yaml
- 监控Pod启动状态,直到所有NiFi Pod进入Running:
kubectl get pods -w
- 获取NiFi UI的访问端口:
kubectl get service nifi-service
找到ui对应的NodePort(例如30080),再获取Minikube节点IP:
minikube ip
最终访问地址:http://<minikube-ip>:<node-port>
五、集群验证
进入NiFi UI后,点击右上角集群图标,确认所有节点已成功加入集群;可创建简单数据流(如GenerateFlowFile -> LogAttribute)验证功能正常。
内容的提问来源于stack exchange,提问作者codelifevcd
相关产品推荐
相关产品推荐

