使用NifiKop部署NiFi集群失败,集群无法正常启动
按官方流程安装NifiKop并部署NiFi集群,但集群节点Pod未启动,仅能看到NifiKop和ZooKeeper的Pod正常运行。
执行的操作步骤
1. 创建命名空间
kubectl create namespace nifi kubectl create namespace zookeeper kubectl create namespace cert-manager
2. 创建自定义StorageClass
cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local-storage parameters: type: pd-standard provisioner: kubernetes.io/gce-pd reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer EOF
3. 创建ServiceAccount
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: nifikop EOF
4. 安装ZooKeeper
helm install nifikop-zk bitnami/zookeeper \ --namespace=nifi \ --set resources.requests.memory=256Mi \ --set resources.requests.cpu=250m \ --set resources.limits.memory=256Mi \ --set resources.limits.cpu=250m \ --set networkPolicy.enabled=true \ --set replicaCount=3 \ --set namespaces={“nifi”}
5. 安装CRDs
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nificlusters.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nifiusers.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nifiusergroups.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nifidataflows.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nifiparametercontexts.yaml kubectl apply -f https://raw.githubusercontent.com/Orange-OpenSource/nifikop/master/config/crd/bases/nifi.orange.com_nifiregistryclients.yaml
6. 安装NifiKop
helm install nifikop orange-incubator/nifikop \ --namespace=nifi \ --version="0.4.2-alpha" \ --set resources.requests.memory=256Mi \ --set resources.requests.cpu=250m \ --set resources.limits.memory=256Mi \ --set resources.limits.cpu=250m \ --set namespaces={"nifi"} --skip-crds
7. 创建NiFi集群
cat <<EOF | kubectl create -n nifi -f - apiVersion: nifi.konpyutaika.com/v1 kind: NifiCluster metadata: name: simplenifi spec: service: headlessEnabled: true zkAddress: "nifikop-zk-zookeeper:2181" zkPath: /simplenifi clusterImage: "apache/nifi:1.17.0" oneNifiNodePerNode: false nodeConfigGroups: default_group: isNode: true serviceAccountName: nifikop storageConfigs: - mountPath: "/opt/nifi/nifi-current/logs" name: logs pvcSpec: accessModes: - ReadWriteOnce storageClassName: "local-storage" resources: requests: storage: 10Gi resourcesRequirements: limits: cpu: "2" memory: 3Gi requests: cpu: "1" memory: 1Gi nodes: - id: 1 nodeConfigGroup: "default_group" - id: 2 nodeConfigGroup: "default_group" propagateLabels: true nifiClusterTaskSpec: retryDurationMinutes: 10 listenersConfig: internalListeners: - containerPort: 8080 type: http name: http - containerPort: 6007 type: cluster name: cluster - containerPort: 10000 type: s2s name: s2s - containerPort: 9090 type: prometheus name: prometheus - containerPort: 6342 type: load-balance name: load-balance EOF
当前状态
执行上述操作后,nifi命名空间下仅存在以下Pod:
root@bh-gsn-57-asca-dev-01:~/nifikop# k get pods -n nifi NAME READY STATUS RESTARTS AGE nifikop-5d6f94854-fjx4q 1/1 Running 0 32m nifikop-zk-zookeeper-0 1/1 Running 0 39m nifikop-zk-zookeeper-1 1/1 Running 0 39m nifikop-zk-zookeeper-2 1/1 Running 0 39m
NiFi集群CR已存在但无节点Pod启动:
root@bh-gsn-57-asca-dev-01:~/nifikop# k get NifiCluster -n nifi NAME AGE simplenifi 19m
1. 检查NifiKop控制器日志
NifiKop负责监听NifiClusterCR并创建节点Pod,直接查看日志定位问题:
kubectl logs -n nifi nifikop-5d6f94854-fjx4q -f
重点关注ZooKeeper连接失败、权限不足、存储类绑定失败、CRD版本不兼容等报错。
2. 验证ZooKeeper连通性
确认NifiKop能正常访问ZooKeeper:
kubectl exec -n nifi nifikop-5d6f94854-fjx4q -- nc -zv nifikop-zk-zookeeper 2181
若连接失败,检查ZooKeeper的NetworkPolicy配置(你启用了networkPolicy.enabled=true),确保允许nifi命名空间内的Pod访问ZooKeeper端口。
3. 检查StorageClass与PVC状态
你的StorageClass使用kubernetes.io/gce-pd作为Provisioner,需确认集群是GKE环境且节点有权限创建GCE磁盘。同时检查PVC是否创建:
kubectl get pvc -n nifi
如果PVC处于Pending状态,可能是存储类配置错误或集群资源不足。
4. 确认ServiceAccount权限
nifikop ServiceAccount需要创建Pod、PVC、Service等资源的权限,检查RBAC配置:
kubectl get clusterrole,clusterrolebinding -n nifi | grep nifikop
若缺少权限,可重新安装NifiKop时去掉--skip-crds(让Helm自动配置RBAC),或手动绑定必要的ClusterRole。
5. 检查CRD与NifiKop版本兼容性
你安装的NifiKop是0.4.2-alpha,需确保手动安装的CRD与该版本兼容。建议用Helm自动安装CRD:
helm upgrade nifikop orange-incubator/nifikop \ --namespace=nifi \ --version="0.4.2-alpha" \ --set resources.requests.memory=256Mi \ --set resources.requests.cpu=250m \ --set resources.limits.memory=256Mi \ --set resources.limits.cpu=250m \ --set namespaces={"nifi"}
6. 查看NifiCluster CR详细状态
通过描述CR获取事件和错误提示:
kubectl describe NifiCluster simplenifi -n nifi
重点关注Status字段和Events部分,通常会明确Pod未创建的原因。
内容的提问来源于stack exchange,提问作者Pro

