You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用operator-sdk生成Bundle时CSV未采用自定义Kustomize配置的问题

Operator SDK生成Bundle时未使用Kustomize输出的CSV配置,而是从未知位置获取定义

我尝试为Operator生成Bundle,但operator-sdk正在从某个未知位置获取*ClusterServiceVersion(CSV)*定义,找不到任何相关线索。

我的操作方式是使用kustomize build生成配置,再通过管道传入operator-sdk generate bundle来生成Bundle。理论上应使用Kustomize生成的文件创建Bundle,但实际operator-sdk并未采用这些文件。

Kustomize生成的CSV示例:

apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
  annotations:
    alm-examples: '[]'
    capabilities: Basic Install
  name: example-operator.v0.0.0
  namespace: placeholder
spec:
  apiservicedefinitions: {}
  customresourcedefinitions: {}
  description: |
    Very Long Description
  displayName: Example Operator
  icon:
  - base64data: "base64_enconded_image"
    mediatype: image/jpeg
  install:
    spec:
      deployments: null
    strategy: ""
  installModes:
  - supported: false
    type: OwnNamespace
  - supported: true
    type: SingleNamespace
  - supported: false
    type: MultiNamespace
  - supported: true
    type: AllNamespaces
  keywords:
  - assessment
  - audit
  - state
  - cluster
  links:
  - name: Example Inc.
    url: https://example.com
  maturity: alpha
  minKubeVersion: 1.16.0
  provider:
    name: Example
    url: example.com
  version: 0.0.0

Bundle文件夹中实际生成的CSV内容:

apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
  annotations:
    alm-examples: |-
      [
        {
          "apiVersion": "custom.example.com/v1alpha1",
          "kind": "Memcached",
          "metadata": {
            "labels": {
              "app.kubernetes.io/created-by": "example-operator",
              "app.kubernetes.io/instance": "memcached-sample",
              "app.kubernetes.io/managed-by": "kustomize",
              "app.kubernetes.io/name": "memcached",
              "app.kubernetes.io/part-of": "example-operator"
            },
            "name": "example-sample"
          },
          "spec": {
            "author": "",
            "author_email": "",
            "client": "",
            "git_token": ""
          }
        }
      ]
    capabilities: Basic Install
    createdAt: "2024-04-18T08:02:35Z"
    operators.operatorframework.io/builder: operator-sdk-v1.34.1
    operators.operatorframework.io/project_layout: ansible.sdk.operatorframework.io/v1
  name: example-operator.v0.0.44
  namespace: placeholder
spec:
  apiservicedefinitions: {}
  customresourcedefinitions:
    owned:
    - kind: Memcached
      name: memcached.custom.example.com
      version: v1alpha1
  description: Example Operator description. TODO.
  displayName: Example Operator
  icon:
  - base64data: ""
    mediatype: ""
  install:
    spec:
      clusterPermissions:
      - rules:
        - apiGroups:
          - authorization.openshift.io
          resources:
          - '*'
          verbs:
          - '*'
        - apiGroups:
          - rbac.authorization.k8s.io
          resources:
          - '*'
          verbs:
          - '*'
        - apiGroups:
          - ""
          resources:
          - secrets
          - configmaps
          - serviceaccounts
          - pods
          - pods/exec
          - pods/log
          verbs:
          - create
          - delete
          - get
          - list
          - patch
          - update
          - watch
        - apiGroups:
          - apps
          resources:
          - deployments
          - daemonsets
          - replicasets
          - statefulsets
          verbs:
          - create
          - delete
          - get
          - list
          - patch
          - update
          - watch
        - apiGroups:
          - batch
          resources:
          - jobs
          verbs:
          - create
          - delete
          - get
          - list
          - patch
          - update
          - watch
        - apiGroups:
          - custom.crossvale.com
          resources:
          - assessments
          - assessments/status
          - assessments/finalizers
          verbs:
          - create
          - delete
          - get
          - list
          - patch
          - update
          - watch
        - apiGroups:
          - authentication.k8s.io
          resources:
          - tokenreviews
          verbs:
          - create
        - apiGroups:
          - authorization.k8s.io
          resources:
          - subjectaccessreviews
          verbs:
          - create
        serviceAccountName: example-operator-controller-manager
      deployments:
      - label:
          app.kubernetes.io/component: manager
          app.kubernetes.io/created-by: new-operator
          app.kubernetes.io/instance: controller-manager
          app.kubernetes.io/managed-by: kustomize
          app.kubernetes.io/name: deployment
          app.kubernetes.io/part-of: new-operator
          control-plane: controller-manager
        name: example-operator-controller-manager
        spec:
          replicas: 1
          selector:
            matchLabels:
              control-plane: controller-manager
          strategy: {}
          template:
            metadata:
              annotations:
                kubectl.kubernetes.io/default-container: manager
              labels:
                control-plane: controller-manager
            spec:
              containers:
              - args:
                - --secure-listen-address=0.0.0.0:8443
                - --upstream=http://127.0.0.1:8080/
                - --logtostderr=true
                - --v=0
                image: gcr.io/kubebuilder/kube-rbac-proxy:v0.14.1
                name: kube-rbac-proxy
                ports:
                - containerPort: 8443
                  name: https
                  protocol: TCP
                resources:
                  limits:
                    cpu: 500m
                    memory: 128Mi
                  requests:
                    cpu: 5m
                    memory: 64Mi
                securityContext:
                  allowPrivilegeEscalation: false
                  capabilities:
                    drop:
                    - ALL
              - args:
                - --health-probe-bind-address=:6789
                - --metrics-bind-address=127.0.0.1:8080
                - --leader-elect
                - --leader-election-id=new-operator
                env:
                - name: ANSIBLE_GATHERING
                  value: explicit
                image: ghcr.io/crossvale-inc/example-operator:0.0.44
                livenessProbe:
                  httpGet:
                    path: /healthz
                    port: 6789
                  initialDelaySeconds: 15
                  periodSeconds: 20
                name: manager
                readinessProbe:
                  httpGet:
                    path: /readyz
                    port: 6789
                  initialDelaySeconds: 5
                  periodSeconds: 10
                resources:
                  limits:
                    cpu: 500m
                    memory: 768Mi
                  requests:
                    cpu: 10m
                    memory: 256Mi
                securityContext:
                  allowPrivilegeEscalation: false
                  capabilities:
                    drop:
                    - ALL
              securityContext:
                runAsNonRoot: true
              serviceAccountName: example-operator-controller-manager
              terminationGracePeriodSeconds: 10
      permissions:
      - rules:
        - apiGroups:
          - ""
          resources:
          - configmaps
          verbs:
          - get
          - list
          - watch
          - create
          - update
          - patch
          - delete
        - apiGroups:
          - coordination.k8s.io
          resources:
          - leases
          verbs:
          - get
          - list
          - watch
          - create
          - update
          - patch
          - delete
        - apiGroups:
          - ""
          resources:
          - events
          verbs:
          - create
          - patch
        serviceAccountName: example-operator-controller-manager
    strategy: deployment
  installModes:
  - supported: false
    type: OwnNamespace
  - supported: false
    type: SingleNamespace
  - supported: false
    type: MultiNamespace
  - supported: true
    type: AllNamespaces
  keywords:
  - example-operator
  links:
  - name: Example Operator
    url: https://example-operator.domain
  maintainers:
  - email: your@email.com
    name: Maintainer Name
  maturity: alpha
  provider:
    name: Provider Name
    url: https://your.domain
  version: 0.0.44

如您所见,生成的内容与我提供的基础清单完全无关。有人知道原因吗?提前感谢各位的帮助。


内容的提问来源于stack exchange,提问作者arturoxv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:05:54