From 9eff42f7fedd2227f97f2f74ef5a466621c3d577 Mon Sep 17 00:00:00 2001 From: ianlee Date: Tue, 12 Mar 2024 14:24:08 +0900 Subject: [PATCH] init --- .dockerignore | 5 + .github/mergify.yml | 53 + .github/workflows/chart-lint.yml | 33 + .github/workflows/check-links.yml | 26 + .github/workflows/ci.yml | 225 + .github/workflows/dco.yml | 9 + .github/workflows/deploy-manifest.yaml | 37 + .github/workflows/docker-image.yml | 97 + .github/workflows/main-latest.yml | 34 + .github/workflows/release.yml | 37 + .github/workflows/tool-docker-image.yml | 101 + .github/workflows/weekly.yml | 64 + .gitignore | 54 + Dockerfile | 32 + LICENSE | 201 + Makefile | 430 + OWNERS | 10 + PROJECT | 41 + README.md | 112 + apis/milvus.io/v1alpha1/components_types.go | 148 + apis/milvus.io/v1alpha1/dependencies_types.go | 116 + apis/milvus.io/v1alpha1/doc.go | 20 + apis/milvus.io/v1alpha1/groupversion_info.go | 44 + .../v1alpha1/groupversion_info_test.go | 13 + apis/milvus.io/v1alpha1/milvus_types.go | 136 + apis/milvus.io/v1alpha1/milvus_webhook.go | 86 + .../milvus.io/v1alpha1/milvuscluster_types.go | 188 + apis/milvus.io/v1alpha1/persistence_types.go | 43 + apis/milvus.io/v1alpha1/values_types.go | 50 + apis/milvus.io/v1alpha1/values_types_test.go | 41 + .../v1alpha1/zz_generated.deepcopy.go | 795 + apis/milvus.io/v1beta1/components_types.go | 261 + apis/milvus.io/v1beta1/dependencies_types.go | 132 + apis/milvus.io/v1beta1/doc.go | 20 + apis/milvus.io/v1beta1/groupversion_info.go | 44 + .../v1beta1/groupversion_info_test.go | 13 + apis/milvus.io/v1beta1/label_annotations.go | 111 + .../v1beta1/label_annotations_test.go | 52 + apis/milvus.io/v1beta1/milvus_types.go | 462 + apis/milvus.io/v1beta1/milvus_types_test.go | 231 + apis/milvus.io/v1beta1/milvus_webhook.go | 504 + apis/milvus.io/v1beta1/milvus_webhook_test.go | 367 + apis/milvus.io/v1beta1/milvusupgrade_types.go | 209 + .../v1beta1/milvusupgrade_types_test.go | 23 + .../v1beta1/milvusupgrade_webhook.go | 112 + .../v1beta1/milvusupgrade_webhook_test.go | 53 + apis/milvus.io/v1beta1/persistence_types.go | 51 + apis/milvus.io/v1beta1/values_types.go | 83 + apis/milvus.io/v1beta1/values_types_test.go | 41 + .../v1beta1/zz_generated.deepcopy.go | 953 + charts/milvus-operator/.helmignore | 23 + charts/milvus-operator/Chart.yaml | 32 + charts/milvus-operator/ci/default-values.yaml | 11 + charts/milvus-operator/ci/job-values.yaml | 11 + charts/milvus-operator/templates/NOTES.txt | 6 + charts/milvus-operator/templates/_helpers.tpl | 73 + .../templates/checker_role.yaml | 347 + .../templates/checker_rolebinding.yaml | 14 + .../templates/checker_serviceaccount.yaml | 15 + .../templates/clusterrole.yaml | 248 + .../templates/clusterrolebinding.yaml | 15 + charts/milvus-operator/templates/crds.yaml | 13749 +++++++++++++++ .../milvus-operator/templates/deployment.yaml | 66 + charts/milvus-operator/templates/job.yaml | 42 + .../mutatingwebhookconfiguration.yaml | 49 + charts/milvus-operator/templates/role.yaml | 40 + .../templates/rolebinding.yaml | 16 + charts/milvus-operator/templates/service.yaml | 31 + .../templates/serviceaccount.yaml | 13 + .../templates/servicemonitor.yaml | 21 + .../validatingwebhookconfiguration.yaml | 49 + charts/milvus-operator/values.yaml | 204 + codecov.yaml | 11 + config/assets/templates/migration.yaml.tmpl | 19 + .../assets/templates/milvus-cluster.yaml.tmpl | 51 + config/assets/templates/milvus.yaml.tmpl | 13 + config/cert/csr.conf | 25 + .../crd/bases/milvus.io_milvusclusters.yaml | 6317 +++++++ config/crd/bases/milvus.io_milvuses.yaml | 7265 ++++++++ .../crd/bases/milvus.io_milvusupgrades.yaml | 156 + config/crd/kustomization.yaml | 25 + config/crd/kustomizeconfig.yaml | 19 + .../crd/patches/cainjection_in_milvuses.yaml | 7 + .../cainjection_in_milvusupgrades.yaml | 7 + config/crd/patches/webhook_in_milvuses.yaml | 16 + .../patches/webhook_in_milvusupgrades.yaml | 16 + config/default/job_args_patch.yaml | 14 + config/default/kustomization.yaml | 62 + config/default/manager_auth_proxy_patch.yaml | 19 + config/default/manager_config_patch.yaml | 19 + config/default/manager_webhook_patch.yaml | 25 + config/default/webhookcainjection_patch.yaml | 15 + config/dev/debug_service.yaml | 14 + config/dev/kustomization.yaml | 6 + config/dev/manager_dev_patch.yaml | 17 + config/dev/webhook_patch.yaml | 4 + config/helm/certificate/kustomization.yaml | 13 + .../certificate/patch_certificate_dns.yaml | 8 + .../certificate/patch_certificate_secret.yaml | 6 + config/helm/crds/kustomization.yaml | 15 + config/helm/crds/webhook_patch.yaml | 16 + config/helm/deployment/kustomization.yaml | 38 + .../deployment/patch_deployment_metadata.yaml | 15 + .../patch_deployment_resources.yaml | 6 + .../deployment/patch_deployment_security.yaml | 27 + .../deployment/patch_deployment_webhook.yaml | 12 + config/helm/rbac/kustomization.yaml | 13 + .../rbac/patch_leaderelection_binding.yaml | 8 + config/helm/rbac/patch_manager_binding.yaml | 8 + config/helm/webhook/kustomization.yaml | 17 + .../mutatingwebhook_endpoint_patch.yaml | 13 + .../validatingwebhook_endpoint_patch.yaml | 13 + config/kind/kind-dev.yaml | 4 + config/manager/checker.yaml | 25 + config/manager/controller_manager_config.yaml | 11 + config/manager/kustomization.yaml | 19 + config/manager/manager.yaml | 47 + config/manager/namespace.yaml | 4 + config/prometheus/kustomization.yaml | 2 + config/prometheus/monitor.yaml | 20 + .../rbac/auth_proxy_client_clusterrole.yaml | 9 + config/rbac/auth_proxy_role.yaml | 17 + config/rbac/auth_proxy_role_binding.yaml | 11 + config/rbac/auth_proxy_service.yaml | 13 + config/rbac/kustomization.yaml | 18 + config/rbac/leader_election_role.yaml | 37 + config/rbac/leader_election_role_binding.yaml | 12 + config/rbac/milvus_editor_role.yaml | 24 + config/rbac/milvus_viewer_role.yaml | 20 + config/rbac/milvusupgrade_editor_role.yaml | 24 + config/rbac/milvusupgrade_viewer_role.yaml | 20 + config/rbac/role.yaml | 247 + config/rbac/role_binding.yaml | 12 + config/rbac/service_account.yaml | 5 + config/samples/beta/README.md | 4 + config/samples/beta/milvus_azure.yaml | 32 + .../beta/milvus_azure_connection_string.yaml | 27 + config/samples/beta/milvus_azure_iam.yaml | 36 + config/samples/cluster_demo.yaml | 57 + config/samples/demo.yaml | 36 + config/samples/milvus_cluster_default.yaml | 12 + config/samples/milvus_cluster_minimum.yaml | 116 + config/samples/milvus_cluster_mixcoord.yaml | 16 + config/samples/milvus_cluster_resource.yaml | 43 + config/samples/milvus_config.yaml | 18 + config/samples/milvus_default.yaml | 5 + config/samples/milvus_deletion.yaml | 18 + .../samples/milvus_external_dependencies.yaml | 29 + config/samples/milvus_gcs.yaml | 36 + config/samples/milvus_gcs_iam.yaml | 33 + config/samples/milvus_kafka.yaml | 23 + config/samples/milvus_minimum.yaml | 20 + config/samples/milvus_natsmq.yaml | 15 + config/samples/milvus_resource.yaml | 19 + config/samples/milvus_rocksmq.yaml | 15 + config/samples/milvus_rolling_update.yaml | 9 + config/samples/milvus_s3.yaml | 30 + config/samples/milvus_s3_iam.yaml | 33 + config/samples/milvusupgrade.yaml | 18 + config/webhook/kustomization.yaml | 6 + config/webhook/kustomizeconfig.yaml | 25 + config/webhook/manifests.yaml | 96 + config/webhook/service.yaml | 12 + ct.yaml | 4 + deploy/manifests/deployment.yaml | 14729 ++++++++++++++++ docs/CRD/(deprecated)milvus-cluster.md | 3 + docs/CRD/milvus.md | 492 + docs/administration/allocate-resources.md | 46 + docs/administration/configure-milvus.md | 59 + .../manage-dependencies/message-storage.md | 282 + .../manage-dependencies/meta-storage.md | 82 + .../manage-dependencies/object-storage.md | 208 + docs/administration/monitor-and-alert.md | 5 + docs/administration/scale-a-milvus-cluster.md | 85 + .../security/enable-authentication.md | 113 + .../security/encryption-in-transit.md | 549 + docs/administration/upgrade.md | 155 + docs/arch/arch.md | 14 + docs/arch/reconclie.md | 69 + docs/images/arch.jpg | Bin 0 -> 91029 bytes docs/installation/installation.md | 146 + docs/installation/kind-installation.md | 45 + go.mod | 222 + go.sum | 1505 ++ hack/boilerplate.go.txt | 15 + hack/generate-groups.sh | 96 + hack/update-codegen.sh | 15 + local.Dockerfile | 10 + main.go | 116 + pkg/client/clientset/versioned/clientset.go | 96 + pkg/client/clientset/versioned/doc.go | 19 + .../versioned/fake/clientset_generated.go | 81 + pkg/client/clientset/versioned/fake/doc.go | 19 + .../clientset/versioned/fake/register.go | 55 + pkg/client/clientset/versioned/scheme/doc.go | 19 + .../clientset/versioned/scheme/register.go | 55 + .../versioned/typed/milvus.io/v1beta1/doc.go | 19 + .../typed/milvus.io/v1beta1/fake/doc.go | 19 + .../milvus.io/v1beta1/fake/fake_milvus.go | 129 + .../v1beta1/fake/fake_milvus.io_client.go | 39 + .../milvus.io/v1beta1/generated_expansion.go | 20 + .../typed/milvus.io/v1beta1/milvus.go | 177 + .../milvus.io/v1beta1/milvus.io_client.go | 88 + .../informers/externalversions/factory.go | 179 + .../informers/externalversions/generic.go | 61 + .../internalinterfaces/factory_interfaces.go | 39 + .../externalversions/milvus.io/interface.go | 45 + .../milvus.io/v1beta1/interface.go | 44 + .../milvus.io/v1beta1/milvus.go | 89 + .../milvus.io/v1beta1/expansion_generated.go | 26 + .../listers/milvus.io/v1beta1/milvus.go | 98 + pkg/config/config.go | 96 + pkg/config/config_test.go | 51 + pkg/controllers/common_test.go | 67 + pkg/controllers/component_condition.go | 238 + pkg/controllers/component_condition_test.go | 300 + pkg/controllers/components.go | 615 + pkg/controllers/components_test.go | 641 + pkg/controllers/conditions.go | 359 + pkg/controllers/conditions_test.go | 376 + pkg/controllers/configmaps.go | 148 + pkg/controllers/configmaps_test.go | 156 + pkg/controllers/dependencies.go | 194 + pkg/controllers/dependencies_test.go | 188 + pkg/controllers/dependency_graph.go | 60 + pkg/controllers/deployment_updater.go | 395 + pkg/controllers/deployment_updater_test.go | 239 + pkg/controllers/deployments.go | 343 + pkg/controllers/deployments_test.go | 247 + pkg/controllers/endpoint_check_cache.go | 89 + pkg/controllers/endpoint_check_cache_test.go | 44 + pkg/controllers/error_detail.go | 203 + pkg/controllers/error_detail_test.go | 239 + pkg/controllers/external_interfaces.go | 39 + pkg/controllers/group_runner.go | 149 + pkg/controllers/group_runner_test.go | 102 + pkg/controllers/groups.go | 100 + pkg/controllers/groups_test.go | 67 + pkg/controllers/ingress.go | 120 + pkg/controllers/ingress_test.go | 130 + pkg/controllers/k8s_default_values.go | 29 + pkg/controllers/log.go | 68 + pkg/controllers/log_test.go | 52 + pkg/controllers/metrics.go | 69 + pkg/controllers/milvus.go | 158 + pkg/controllers/milvus_controller.go | 299 + pkg/controllers/milvus_controller_test.go | 229 + pkg/controllers/milvus_test.go | 217 + .../milvuscluster/convert_controller.go | 149 + pkg/controllers/milvusupgrade_controller.go | 113 + .../milvusupgrade_controller_test.go | 90 + pkg/controllers/milvusupgrade_fsm.go | 660 + pkg/controllers/milvusupgrade_fsm_test.go | 700 + pkg/controllers/podmonitor.go | 94 + pkg/controllers/podmonitor_test.go | 109 + pkg/controllers/pvc.go | 90 + pkg/controllers/pvc_test.go | 72 + pkg/controllers/query_node.go | 315 + pkg/controllers/query_node_mode_changer.go | 205 + .../query_node_mode_changer_test.go | 367 + pkg/controllers/query_node_test.go | 500 + pkg/controllers/query_node_util.go | 387 + pkg/controllers/query_node_util_test.go | 805 + pkg/controllers/rollout_util.go | 193 + pkg/controllers/rollout_util_test.go | 301 + pkg/controllers/services.go | 110 + pkg/controllers/services_test.go | 116 + pkg/controllers/setup.go | 171 + pkg/controllers/status_cluster.go | 589 + pkg/controllers/status_cluster_test.go | 702 + pkg/controllers/utils.go | 477 + pkg/controllers/utils_test.go | 535 + pkg/external/iam/azure.go | 33 + pkg/external/iam/gcp.go | 21 + pkg/external/kafka.go | 114 + pkg/external/kafka_test.go | 141 + pkg/external/minio.go | 87 + pkg/external/minio_test.go | 134 + pkg/helm/helm.go | 139 + pkg/helm/interface.go | 55 + pkg/helm/values/testing.go | 9 + pkg/helm/values/values.go | 89 + pkg/manager/manager.go | 67 + pkg/milvus/config.go | 133 + pkg/provisioner/cert_manager.go | 214 + pkg/provisioner/cert_manager_test.go | 93 + pkg/util/diff.go | 69 + pkg/util/k8s_client.go | 258 + pkg/util/k8s_client_test.go | 237 + pkg/util/rest/rest_client.go | 98 + pkg/util/testing.go | 11 + pkg/util/testing_test.go | 13 + pkg/util/util.go | 179 + pkg/util/util_test.go | 318 + pkg/util/yamlparser/file.go | 41 + pkg/util/yamlparser/file_test.go | 32 + scripts/bump-version.sh | 34 + scripts/debug.sh | 5 + scripts/init.sh | 3 + scripts/run-helm.sh | 10 + scripts/run.sh | 11 + test/after-upgrade.py | 106 + test/batch-create/main.go | 183 + test/batch-delete/main.go | 101 + test/before-upgrade.py | 123 + test/hello-milvus-job.yaml | 27 + test/hello-milvus.py | 176 + test/mc-2.1.yaml | 41 + test/mc-upgrade.yaml | 10 + test/mi-upgrade.yaml | 10 + test/milvus-2.1.yaml | 27 + test/milvus-upgrade.sh | 29 + test/min-mc-alpha.yaml | 142 + test/min-mc-feature.yaml | 64 + test/min-mc-kafka.yaml | 60 + test/min-mc-mixture.yaml | 145 + test/min-mc.yaml | 143 + test/min-milvus-alpha.yaml | 57 + test/min-milvus-feature.yaml | 61 + test/min-milvus-kafka.yaml | 61 + test/min-milvus.yaml | 61 + test/sit.sh | 193 + test/upgrade.sh | 18 + test/upgrade.yaml | 15 + test/user.yaml | 6 + test/values.yaml | 8 + tool.Dockerfile | 30 + tool/checker/main.go | 40 + tool/cp/main.go | 47 + tool/iam-verify/main.go | 59 + tool/merge/main.go | 100 + 331 files changed, 78126 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/mergify.yml create mode 100644 .github/workflows/chart-lint.yml create mode 100644 .github/workflows/check-links.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/dco.yml create mode 100644 .github/workflows/deploy-manifest.yaml create mode 100644 .github/workflows/docker-image.yml create mode 100644 .github/workflows/main-latest.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/tool-docker-image.yml create mode 100644 .github/workflows/weekly.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100755 LICENSE create mode 100644 Makefile create mode 100644 OWNERS create mode 100644 PROJECT create mode 100644 README.md create mode 100644 apis/milvus.io/v1alpha1/components_types.go create mode 100644 apis/milvus.io/v1alpha1/dependencies_types.go create mode 100644 apis/milvus.io/v1alpha1/doc.go create mode 100644 apis/milvus.io/v1alpha1/groupversion_info.go create mode 100644 apis/milvus.io/v1alpha1/groupversion_info_test.go create mode 100644 apis/milvus.io/v1alpha1/milvus_types.go create mode 100644 apis/milvus.io/v1alpha1/milvus_webhook.go create mode 100644 apis/milvus.io/v1alpha1/milvuscluster_types.go create mode 100644 apis/milvus.io/v1alpha1/persistence_types.go create mode 100644 apis/milvus.io/v1alpha1/values_types.go create mode 100644 apis/milvus.io/v1alpha1/values_types_test.go create mode 100644 apis/milvus.io/v1alpha1/zz_generated.deepcopy.go create mode 100644 apis/milvus.io/v1beta1/components_types.go create mode 100644 apis/milvus.io/v1beta1/dependencies_types.go create mode 100644 apis/milvus.io/v1beta1/doc.go create mode 100644 apis/milvus.io/v1beta1/groupversion_info.go create mode 100644 apis/milvus.io/v1beta1/groupversion_info_test.go create mode 100644 apis/milvus.io/v1beta1/label_annotations.go create mode 100644 apis/milvus.io/v1beta1/label_annotations_test.go create mode 100644 apis/milvus.io/v1beta1/milvus_types.go create mode 100644 apis/milvus.io/v1beta1/milvus_types_test.go create mode 100644 apis/milvus.io/v1beta1/milvus_webhook.go create mode 100644 apis/milvus.io/v1beta1/milvus_webhook_test.go create mode 100644 apis/milvus.io/v1beta1/milvusupgrade_types.go create mode 100644 apis/milvus.io/v1beta1/milvusupgrade_types_test.go create mode 100644 apis/milvus.io/v1beta1/milvusupgrade_webhook.go create mode 100644 apis/milvus.io/v1beta1/milvusupgrade_webhook_test.go create mode 100644 apis/milvus.io/v1beta1/persistence_types.go create mode 100644 apis/milvus.io/v1beta1/values_types.go create mode 100644 apis/milvus.io/v1beta1/values_types_test.go create mode 100644 apis/milvus.io/v1beta1/zz_generated.deepcopy.go create mode 100644 charts/milvus-operator/.helmignore create mode 100644 charts/milvus-operator/Chart.yaml create mode 100644 charts/milvus-operator/ci/default-values.yaml create mode 100644 charts/milvus-operator/ci/job-values.yaml create mode 100644 charts/milvus-operator/templates/NOTES.txt create mode 100644 charts/milvus-operator/templates/_helpers.tpl create mode 100644 charts/milvus-operator/templates/checker_role.yaml create mode 100644 charts/milvus-operator/templates/checker_rolebinding.yaml create mode 100644 charts/milvus-operator/templates/checker_serviceaccount.yaml create mode 100644 charts/milvus-operator/templates/clusterrole.yaml create mode 100644 charts/milvus-operator/templates/clusterrolebinding.yaml create mode 100644 charts/milvus-operator/templates/crds.yaml create mode 100644 charts/milvus-operator/templates/deployment.yaml create mode 100644 charts/milvus-operator/templates/job.yaml create mode 100644 charts/milvus-operator/templates/mutatingwebhookconfiguration.yaml create mode 100644 charts/milvus-operator/templates/role.yaml create mode 100644 charts/milvus-operator/templates/rolebinding.yaml create mode 100644 charts/milvus-operator/templates/service.yaml create mode 100644 charts/milvus-operator/templates/serviceaccount.yaml create mode 100644 charts/milvus-operator/templates/servicemonitor.yaml create mode 100644 charts/milvus-operator/templates/validatingwebhookconfiguration.yaml create mode 100644 charts/milvus-operator/values.yaml create mode 100644 codecov.yaml create mode 100644 config/assets/templates/migration.yaml.tmpl create mode 100644 config/assets/templates/milvus-cluster.yaml.tmpl create mode 100644 config/assets/templates/milvus.yaml.tmpl create mode 100644 config/cert/csr.conf create mode 100644 config/crd/bases/milvus.io_milvusclusters.yaml create mode 100644 config/crd/bases/milvus.io_milvuses.yaml create mode 100644 config/crd/bases/milvus.io_milvusupgrades.yaml create mode 100644 config/crd/kustomization.yaml create mode 100644 config/crd/kustomizeconfig.yaml create mode 100644 config/crd/patches/cainjection_in_milvuses.yaml create mode 100644 config/crd/patches/cainjection_in_milvusupgrades.yaml create mode 100644 config/crd/patches/webhook_in_milvuses.yaml create mode 100644 config/crd/patches/webhook_in_milvusupgrades.yaml create mode 100644 config/default/job_args_patch.yaml create mode 100644 config/default/kustomization.yaml create mode 100644 config/default/manager_auth_proxy_patch.yaml create mode 100644 config/default/manager_config_patch.yaml create mode 100644 config/default/manager_webhook_patch.yaml create mode 100644 config/default/webhookcainjection_patch.yaml create mode 100644 config/dev/debug_service.yaml create mode 100644 config/dev/kustomization.yaml create mode 100644 config/dev/manager_dev_patch.yaml create mode 100644 config/dev/webhook_patch.yaml create mode 100644 config/helm/certificate/kustomization.yaml create mode 100644 config/helm/certificate/patch_certificate_dns.yaml create mode 100644 config/helm/certificate/patch_certificate_secret.yaml create mode 100644 config/helm/crds/kustomization.yaml create mode 100644 config/helm/crds/webhook_patch.yaml create mode 100644 config/helm/deployment/kustomization.yaml create mode 100644 config/helm/deployment/patch_deployment_metadata.yaml create mode 100644 config/helm/deployment/patch_deployment_resources.yaml create mode 100644 config/helm/deployment/patch_deployment_security.yaml create mode 100644 config/helm/deployment/patch_deployment_webhook.yaml create mode 100644 config/helm/rbac/kustomization.yaml create mode 100644 config/helm/rbac/patch_leaderelection_binding.yaml create mode 100644 config/helm/rbac/patch_manager_binding.yaml create mode 100644 config/helm/webhook/kustomization.yaml create mode 100644 config/helm/webhook/mutatingwebhook_endpoint_patch.yaml create mode 100644 config/helm/webhook/validatingwebhook_endpoint_patch.yaml create mode 100644 config/kind/kind-dev.yaml create mode 100644 config/manager/checker.yaml create mode 100644 config/manager/controller_manager_config.yaml create mode 100644 config/manager/kustomization.yaml create mode 100644 config/manager/manager.yaml create mode 100644 config/manager/namespace.yaml create mode 100644 config/prometheus/kustomization.yaml create mode 100644 config/prometheus/monitor.yaml create mode 100644 config/rbac/auth_proxy_client_clusterrole.yaml create mode 100644 config/rbac/auth_proxy_role.yaml create mode 100644 config/rbac/auth_proxy_role_binding.yaml create mode 100644 config/rbac/auth_proxy_service.yaml create mode 100644 config/rbac/kustomization.yaml create mode 100644 config/rbac/leader_election_role.yaml create mode 100644 config/rbac/leader_election_role_binding.yaml create mode 100644 config/rbac/milvus_editor_role.yaml create mode 100644 config/rbac/milvus_viewer_role.yaml create mode 100644 config/rbac/milvusupgrade_editor_role.yaml create mode 100644 config/rbac/milvusupgrade_viewer_role.yaml create mode 100644 config/rbac/role.yaml create mode 100644 config/rbac/role_binding.yaml create mode 100644 config/rbac/service_account.yaml create mode 100644 config/samples/beta/README.md create mode 100644 config/samples/beta/milvus_azure.yaml create mode 100644 config/samples/beta/milvus_azure_connection_string.yaml create mode 100644 config/samples/beta/milvus_azure_iam.yaml create mode 100644 config/samples/cluster_demo.yaml create mode 100644 config/samples/demo.yaml create mode 100644 config/samples/milvus_cluster_default.yaml create mode 100644 config/samples/milvus_cluster_minimum.yaml create mode 100644 config/samples/milvus_cluster_mixcoord.yaml create mode 100644 config/samples/milvus_cluster_resource.yaml create mode 100644 config/samples/milvus_config.yaml create mode 100644 config/samples/milvus_default.yaml create mode 100644 config/samples/milvus_deletion.yaml create mode 100644 config/samples/milvus_external_dependencies.yaml create mode 100644 config/samples/milvus_gcs.yaml create mode 100644 config/samples/milvus_gcs_iam.yaml create mode 100644 config/samples/milvus_kafka.yaml create mode 100644 config/samples/milvus_minimum.yaml create mode 100644 config/samples/milvus_natsmq.yaml create mode 100644 config/samples/milvus_resource.yaml create mode 100644 config/samples/milvus_rocksmq.yaml create mode 100644 config/samples/milvus_rolling_update.yaml create mode 100644 config/samples/milvus_s3.yaml create mode 100644 config/samples/milvus_s3_iam.yaml create mode 100644 config/samples/milvusupgrade.yaml create mode 100644 config/webhook/kustomization.yaml create mode 100644 config/webhook/kustomizeconfig.yaml create mode 100644 config/webhook/manifests.yaml create mode 100644 config/webhook/service.yaml create mode 100644 ct.yaml create mode 100644 deploy/manifests/deployment.yaml create mode 100644 docs/CRD/(deprecated)milvus-cluster.md create mode 100644 docs/CRD/milvus.md create mode 100644 docs/administration/allocate-resources.md create mode 100644 docs/administration/configure-milvus.md create mode 100644 docs/administration/manage-dependencies/message-storage.md create mode 100644 docs/administration/manage-dependencies/meta-storage.md create mode 100644 docs/administration/manage-dependencies/object-storage.md create mode 100644 docs/administration/monitor-and-alert.md create mode 100644 docs/administration/scale-a-milvus-cluster.md create mode 100644 docs/administration/security/enable-authentication.md create mode 100644 docs/administration/security/encryption-in-transit.md create mode 100644 docs/administration/upgrade.md create mode 100644 docs/arch/arch.md create mode 100644 docs/arch/reconclie.md create mode 100644 docs/images/arch.jpg create mode 100644 docs/installation/installation.md create mode 100644 docs/installation/kind-installation.md create mode 100644 go.mod create mode 100644 go.sum create mode 100644 hack/boilerplate.go.txt create mode 100755 hack/generate-groups.sh create mode 100755 hack/update-codegen.sh create mode 100644 local.Dockerfile create mode 100644 main.go create mode 100644 pkg/client/clientset/versioned/clientset.go create mode 100644 pkg/client/clientset/versioned/doc.go create mode 100644 pkg/client/clientset/versioned/fake/clientset_generated.go create mode 100644 pkg/client/clientset/versioned/fake/doc.go create mode 100644 pkg/client/clientset/versioned/fake/register.go create mode 100644 pkg/client/clientset/versioned/scheme/doc.go create mode 100644 pkg/client/clientset/versioned/scheme/register.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/doc.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/fake/doc.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/fake/fake_milvus.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/fake/fake_milvus.io_client.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/generated_expansion.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/milvus.go create mode 100644 pkg/client/clientset/versioned/typed/milvus.io/v1beta1/milvus.io_client.go create mode 100644 pkg/client/informers/externalversions/factory.go create mode 100644 pkg/client/informers/externalversions/generic.go create mode 100644 pkg/client/informers/externalversions/internalinterfaces/factory_interfaces.go create mode 100644 pkg/client/informers/externalversions/milvus.io/interface.go create mode 100644 pkg/client/informers/externalversions/milvus.io/v1beta1/interface.go create mode 100644 pkg/client/informers/externalversions/milvus.io/v1beta1/milvus.go create mode 100644 pkg/client/listers/milvus.io/v1beta1/expansion_generated.go create mode 100644 pkg/client/listers/milvus.io/v1beta1/milvus.go create mode 100644 pkg/config/config.go create mode 100644 pkg/config/config_test.go create mode 100644 pkg/controllers/common_test.go create mode 100644 pkg/controllers/component_condition.go create mode 100644 pkg/controllers/component_condition_test.go create mode 100644 pkg/controllers/components.go create mode 100644 pkg/controllers/components_test.go create mode 100644 pkg/controllers/conditions.go create mode 100644 pkg/controllers/conditions_test.go create mode 100644 pkg/controllers/configmaps.go create mode 100644 pkg/controllers/configmaps_test.go create mode 100644 pkg/controllers/dependencies.go create mode 100644 pkg/controllers/dependencies_test.go create mode 100644 pkg/controllers/dependency_graph.go create mode 100644 pkg/controllers/deployment_updater.go create mode 100644 pkg/controllers/deployment_updater_test.go create mode 100644 pkg/controllers/deployments.go create mode 100644 pkg/controllers/deployments_test.go create mode 100644 pkg/controllers/endpoint_check_cache.go create mode 100644 pkg/controllers/endpoint_check_cache_test.go create mode 100644 pkg/controllers/error_detail.go create mode 100644 pkg/controllers/error_detail_test.go create mode 100644 pkg/controllers/external_interfaces.go create mode 100644 pkg/controllers/group_runner.go create mode 100644 pkg/controllers/group_runner_test.go create mode 100644 pkg/controllers/groups.go create mode 100644 pkg/controllers/groups_test.go create mode 100644 pkg/controllers/ingress.go create mode 100644 pkg/controllers/ingress_test.go create mode 100644 pkg/controllers/k8s_default_values.go create mode 100644 pkg/controllers/log.go create mode 100644 pkg/controllers/log_test.go create mode 100644 pkg/controllers/metrics.go create mode 100644 pkg/controllers/milvus.go create mode 100644 pkg/controllers/milvus_controller.go create mode 100644 pkg/controllers/milvus_controller_test.go create mode 100644 pkg/controllers/milvus_test.go create mode 100644 pkg/controllers/milvuscluster/convert_controller.go create mode 100644 pkg/controllers/milvusupgrade_controller.go create mode 100644 pkg/controllers/milvusupgrade_controller_test.go create mode 100644 pkg/controllers/milvusupgrade_fsm.go create mode 100644 pkg/controllers/milvusupgrade_fsm_test.go create mode 100644 pkg/controllers/podmonitor.go create mode 100644 pkg/controllers/podmonitor_test.go create mode 100644 pkg/controllers/pvc.go create mode 100644 pkg/controllers/pvc_test.go create mode 100644 pkg/controllers/query_node.go create mode 100644 pkg/controllers/query_node_mode_changer.go create mode 100644 pkg/controllers/query_node_mode_changer_test.go create mode 100644 pkg/controllers/query_node_test.go create mode 100644 pkg/controllers/query_node_util.go create mode 100644 pkg/controllers/query_node_util_test.go create mode 100644 pkg/controllers/rollout_util.go create mode 100644 pkg/controllers/rollout_util_test.go create mode 100644 pkg/controllers/services.go create mode 100644 pkg/controllers/services_test.go create mode 100644 pkg/controllers/setup.go create mode 100644 pkg/controllers/status_cluster.go create mode 100644 pkg/controllers/status_cluster_test.go create mode 100644 pkg/controllers/utils.go create mode 100644 pkg/controllers/utils_test.go create mode 100644 pkg/external/iam/azure.go create mode 100644 pkg/external/iam/gcp.go create mode 100644 pkg/external/kafka.go create mode 100644 pkg/external/kafka_test.go create mode 100644 pkg/external/minio.go create mode 100644 pkg/external/minio_test.go create mode 100644 pkg/helm/helm.go create mode 100644 pkg/helm/interface.go create mode 100644 pkg/helm/values/testing.go create mode 100644 pkg/helm/values/values.go create mode 100644 pkg/manager/manager.go create mode 100644 pkg/milvus/config.go create mode 100644 pkg/provisioner/cert_manager.go create mode 100644 pkg/provisioner/cert_manager_test.go create mode 100644 pkg/util/diff.go create mode 100644 pkg/util/k8s_client.go create mode 100644 pkg/util/k8s_client_test.go create mode 100644 pkg/util/rest/rest_client.go create mode 100644 pkg/util/testing.go create mode 100644 pkg/util/testing_test.go create mode 100644 pkg/util/util.go create mode 100644 pkg/util/util_test.go create mode 100644 pkg/util/yamlparser/file.go create mode 100644 pkg/util/yamlparser/file_test.go create mode 100755 scripts/bump-version.sh create mode 100644 scripts/debug.sh create mode 100755 scripts/init.sh create mode 100755 scripts/run-helm.sh create mode 100755 scripts/run.sh create mode 100644 test/after-upgrade.py create mode 100644 test/batch-create/main.go create mode 100644 test/batch-delete/main.go create mode 100644 test/before-upgrade.py create mode 100644 test/hello-milvus-job.yaml create mode 100644 test/hello-milvus.py create mode 100644 test/mc-2.1.yaml create mode 100644 test/mc-upgrade.yaml create mode 100644 test/mi-upgrade.yaml create mode 100644 test/milvus-2.1.yaml create mode 100755 test/milvus-upgrade.sh create mode 100644 test/min-mc-alpha.yaml create mode 100644 test/min-mc-feature.yaml create mode 100644 test/min-mc-kafka.yaml create mode 100644 test/min-mc-mixture.yaml create mode 100644 test/min-mc.yaml create mode 100644 test/min-milvus-alpha.yaml create mode 100644 test/min-milvus-feature.yaml create mode 100644 test/min-milvus-kafka.yaml create mode 100644 test/min-milvus.yaml create mode 100755 test/sit.sh create mode 100755 test/upgrade.sh create mode 100644 test/upgrade.yaml create mode 100644 test/user.yaml create mode 100644 test/values.yaml create mode 100644 tool.Dockerfile create mode 100644 tool/checker/main.go create mode 100644 tool/cp/main.go create mode 100644 tool/iam-verify/main.go create mode 100644 tool/merge/main.go diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..243f81a5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +# More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file +# Ignore all files which are not go type +!**/*.go +!**/*.mod +!**/*.sum diff --git a/.github/mergify.yml b/.github/mergify.yml new file mode 100644 index 00000000..a376c9ee --- /dev/null +++ b/.github/mergify.yml @@ -0,0 +1,53 @@ +pull_request_rules: + - name: remove hold when CI passed or documentation + conditions: + - or: + - label=ci-passed + - label=documentation + actions: + label: + remove: + - do-not-merge/hold + - name: add hold when CI not passed or documentation + conditions: + - label!=ci-passed + - label!=documentation + actions: + label: + add: + - do-not-merge/hold + - name: remove ci-pass when CI not passed + conditions: + - or: + - check-success!=check + - check-success!=Code Check (ubuntu18.04) + - check-success!=Unit Test (ubuntu18.04) + - check-success!=System Integration Test (ubuntu18.04) + - check-success!=System Integration Test for Mixture (ubuntu18.04) + - check-success!=System Integration Test for Upgrade (ubuntu18.04) + - check-success!=System Integration Test for New Feature (ubuntu18.04) + - check-success!=System Integration Test for Milvus Upgrade (ubuntu18.04) + - check-success!=Test Deploy by Manifest (ubuntu18.04) + - check-success!=codecov/patch + - check-success!=codecov/project + actions: + label: + remove: + - ci-passed + - name: add ci-pass when CI passed + conditions: + - check-success=check + - check-success=Code Check (ubuntu18.04) + - check-success=Unit Test (ubuntu18.04) + - check-success=System Integration Test (ubuntu18.04) + - check-success=System Integration Test for Mixture (ubuntu18.04) + - check-success=System Integration Test for Upgrade (ubuntu18.04) + - check-success=System Integration Test for New Feature (ubuntu18.04) + - check-success=System Integration Test for Milvus Upgrade (ubuntu18.04) + - check-success=Test Deploy by Manifest (ubuntu18.04) + - check-success=codecov/patch + - check-success=codecov/project + actions: + label: + add: + - ci-passed diff --git a/.github/workflows/chart-lint.yml b/.github/workflows/chart-lint.yml new file mode 100644 index 00000000..11731040 --- /dev/null +++ b/.github/workflows/chart-lint.yml @@ -0,0 +1,33 @@ +name: Chart Lint Test + +on: + pull_request: + paths: + - 'charts/**' + +jobs: + chart-lint-test: + name: Chart Lint Test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Set up Helm + uses: azure/setup-helm@v1 + with: + version: v3.4.0 + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.1.0 + + - name: Run chart-testing (lint) + run: ct lint --all --config ct.yaml + + - name: Create KinD cluster + uses: helm/kind-action@v1.2.0 + + - name: Run chart-testing (install) + id: install + run: ct install --all --config ct.yaml diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml new file mode 100644 index 00000000..0181618d --- /dev/null +++ b/.github/workflows/check-links.yml @@ -0,0 +1,26 @@ +name: Markdown Links Check + +on: + push: + branches: + - master + paths: + - '**.md' + pull_request: + paths: + - '**.md' + +jobs: + markdown-link-check: + name: Broken Links + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + - name: Run link check + uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + use-quiet-mode: 'no' + use-verbose-mode: 'yes' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..d880c0bb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,225 @@ +name: CI + +# This workflow is triggered on any golang code, makefile, workflow changes to repository. +on: + push: + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - 'docs/**' + +jobs: + code-check: + name: Code Check + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: true + matrix: + os: [ubuntu18.04] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: 1.18 + - name: Cache Go Mod Pkg + uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go- + - name: Code Check + run: | + make code-check + unit-test: + name: Unit Test + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Go + uses: actions/setup-go@v2 + with: + go-version: 1.18 + - name: Cache Go Mod Pkg + uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: ${{ runner.os }}-go- + - name: Cache TestBin + uses: actions/cache@v2 + with: + path: testbin + key: ubuntu${{ matrix.ubuntu }}-testbin + restore-keys: ubuntu${{ matrix.ubuntu }}-testbin + - name: Kubernetes KinD Cluster + uses: container-tools/kind-action@v1 + - name: Unit Test + run: | + make go-generate + make test-only + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v2 + with: + files: ./cover.out + name: ubuntu-${{ matrix.ubuntu }}-unittests + + sit: + name: System Integration Test + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Free Up Disk Space + run: + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /usr/local/share/boost /opt/ghc + - name: Maximize build space + uses: easimon/maximize-build-space@v7 + with: + root-reserve-mb: 20480 + swap-size-mb: 1024 + remove-dotnet: 'true' + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Integration Test + run: | + make sit-test + + sit-mixture: + name: System Integration Test for Mixture + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Free Up Disk Space + run: + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /usr/local/share/boost /opt/ghc + - name: Maximize build space + uses: easimon/maximize-build-space@v7 + with: + root-reserve-mb: 20480 + swap-size-mb: 1024 + remove-dotnet: 'true' + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Integration Test + run: | + make sit-test test_mode=mixture + sit-new-feature: + name: System Integration Test for New Feature + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Free Up Disk Space + run: + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /usr/local/share/boost /opt/ghc + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Test NewFeature + run: | + make sit-test test_mode=feature + sit-milvus-upgrade: + name: System Integration Test for Milvus Upgrade + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Free Up Disk Space + run: + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /usr/local/share/boost /opt/ghc + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Test Upgrade + run: | + make test-milvus-upgrade + sit-upgrade: + name: System Integration Test for Upgrade + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Free Up Disk Space + run: + sudo rm -rf /usr/local/lib/android /usr/share/dotnet /usr/local/share/boost /opt/ghc + - name: Checkout + uses: actions/checkout@v2 + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Prepare Docker Images + run: | + make sit-prepare-images + make sit-load-images + - name: Test Upgrade + run: | + make test-upgrade diff --git a/.github/workflows/dco.yml b/.github/workflows/dco.yml new file mode 100644 index 00000000..b02c2a46 --- /dev/null +++ b/.github/workflows/dco.yml @@ -0,0 +1,9 @@ +name: DCO Check + +on: [pull_request] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: tisonkun/actions-dco@v1.1 diff --git a/.github/workflows/deploy-manifest.yaml b/.github/workflows/deploy-manifest.yaml new file mode 100644 index 00000000..044fc0c9 --- /dev/null +++ b/.github/workflows/deploy-manifest.yaml @@ -0,0 +1,37 @@ +name: Test Deploy With Minifest + +# This workflow is triggered on any golang code, makefile, workflow changes to repository. +on: + push: + paths-ignore: + - 'docs/**' + pull_request: + paths-ignore: + - 'docs/**' + +jobs: + deploy-by-manifest: + name: Test Deploy by Manifest + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy by manifest + run: | + make deploy-by-manifest + - name: Test Webhook + run : | + set -ex + kubectl create -f ./config/samples/milvus_minimum.yaml + kubectl delete -f ./config/samples/milvus_minimum.yaml + kubectl create -f ./config/samples/milvus_cluster_minimum.yaml + kubectl delete -f ./config/samples/milvus_cluster_minimum.yaml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 00000000..fde32f64 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,97 @@ +name: Build and Push on Tag + +# This workflow is triggered on new tag pushed to the repository. +# ref doc: https://docs.docker.com/build/ci/github-actions/multi-platform/ +on: + push: + tags: + - "*" +env: + REGISTRY_IMAGE: milvusdb/milvus-operator + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + - name: Checkout + uses: actions/checkout@v4 + - name: Get version from system time after release step + id: extracter + run: | + echo "::set-output name=git_tag::$(echo "${{ github.ref }}" | awk -F '/' '{print $3}')" + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.MILVUSDB_DOCKER_USER }} + password: ${{ secrets.MILVUSDB_DOCKER_PWD }} + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.MILVUSDB_DOCKER_USER }} + password: ${{ secrets.MILVUSDB_DOCKER_PWD }} + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} + \ No newline at end of file diff --git a/.github/workflows/main-latest.yml b/.github/workflows/main-latest.yml new file mode 100644 index 00000000..8a1ed8a8 --- /dev/null +++ b/.github/workflows/main-latest.yml @@ -0,0 +1,34 @@ +name: Build and Push Latest on Main + +# This workflow is triggered on new pushed to the main branch. +on: + push: + branches: + - main + +jobs: + publish-builder: + name: Publish Builder + runs-on: ubuntu-latest + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + env: + OS_NAME: ${{ matrix.os }} + REGISTRY_NAME: milvusdb/milvus-operator + IMAGE_TAG: "main-latest" + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Build Docker Image + shell: bash + run: | + docker build -t ${REGISTRY_NAME}:${IMAGE_TAG} . + - name: Push Docker Image + shell: bash + run: | + docker login -u ${{ secrets.MILVUSDB_DOCKER_USER }} \ + -p ${{ secrets.MILVUSDB_DOCKER_PWD }} + docker push ${REGISTRY_NAME}:${IMAGE_TAG} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..7e6e44f0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,37 @@ +name: Release Charts + +# This workflow is triggered on pushes or pull request to the repository. +on: + push: + tags: + - "*" + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + - name: Set up Helm + uses: azure/setup-helm@v1 + with: + version: v3.4.0 + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.1.0 + + - name: Run chart-testing (lint) + run: ct lint --all --config ct.yaml + + - name: Run chart-releaser + uses: helm/chart-releaser-action@v1.2.1 + env: + CR_TOKEN: "${{ secrets.CR_TOKEN }}" diff --git a/.github/workflows/tool-docker-image.yml b/.github/workflows/tool-docker-image.yml new file mode 100644 index 00000000..6546ad95 --- /dev/null +++ b/.github/workflows/tool-docker-image.yml @@ -0,0 +1,101 @@ +name: Release Config Tool + +# This workflow is triggered on new tag pushed to the repository. +# ref doc: https://docs.docker.com/build/ci/github-actions/multi-platform/ +on: + push: + branches: + - "release_tool" +env: + REGISTRY_IMAGE: milvusdb/milvus-config-tool + TAG: v0.3.0 +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + steps: + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + - name: Checkout + uses: actions/checkout@v4 + - name: Get version from system time after release step + id: extracter + run: | + echo "::set-output name=git_tag::$(echo "${{ github.ref }}" | awk -F '/' '{print $3}')" + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.MILVUSDB_DOCKER_USER }} + password: ${{ secrets.MILVUSDB_DOCKER_PWD }} + - name: Build and push by digest + id: build + uses: docker/build-push-action@v5 + with: + context: . + file: ./tool.Dockerfile + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_IMAGE }} + tags: | + ${{ env.TAG }} + latest + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.MILVUSDB_DOCKER_USER }} + password: ${{ secrets.MILVUSDB_DOCKER_PWD }} + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} + \ No newline at end of file diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml new file mode 100644 index 00000000..4f565872 --- /dev/null +++ b/.github/workflows/weekly.yml @@ -0,0 +1,64 @@ +name: Weekly Test +on: + schedule: + # * is a special character in YAML so you have to quote this string + # ┌───────────── minute (0 - 59) + # │ ┌───────────── hour (0 - 23) + # │ │ ┌───────────── day of the month (1 - 31) + # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) + # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) + # │ │ │ │ │ + # │ │ │ │ │ + # │ │ │ │ │ + - cron: '0 23 * * 0' + +jobs: + daily-kafka: + name: System Integration Test for Kafka + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Integration Test + run: | + make sit-test test_mode=kafka + + daily-alpha: + name: System Integration Test for v1alpha1 + runs-on: ubuntu-latest + timeout-minutes: 40 + strategy: + fail-fast: false + matrix: + os: [ubuntu18.04] + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Prepare Docker Images + run: | + make sit-prepare-images + - name: Setup KinD Cluster + uses: engineerd/setup-kind@v0.5.0 + with: + version: "v0.11.1" + - name: Deploy to KinD + run: | + make sit-deploy + - name: Integration Test + run: | + make sit-test test_mode=alpha \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5a61384b --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.tgz +bin +testbin/* +tmp +config/dev/webhook_patch_ca.yaml + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Kubernetes Generated files - skip generated files, except for vendored files + +!vendor/**/zz_generated.* + +# editor and IDE paraphernalia +.idea +*.swp +*.swo +*~ +.vscode + +__debug_bin +*.DS_Store + +## goreleaser +dist/ +vendor/ + +## generated +test/*_gen.yaml +*_mock.go + +# Helm packages +charts/index.yaml +charts/*.tgz +charts/milvus-operator/charts/*.tgz + +# output +out/ +*.bak + +# helm chart +config/assets/charts + +.gocache/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..c9a7c694 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM golang:1.18 as builder + +WORKDIR /workspace +# ENV GOPROXY https://goproxy.cn +# Copy the Go Modules manifests +# # cache deps before building and copying source so that we don't need to re-download as much +# # and so that source changes don't invalidate our downloaded layer +# +# # Copy the go source +COPY go.mod go.mod +COPY go.sum go.sum +RUN go mod download +# +# # Build +COPY main.go main.go +COPY apis/ apis/ +COPY pkg/ pkg/ +COPY tool/ tool/ +COPY config/assets/templates out/config/assets/templates +COPY scripts/ scripts/ +COPY Makefile Makefile +RUN make docker-prepare +# +# # Use distroless as minimal base image to package the manager binary +# # Refer to https://github.com/GoogleContainerTools/distroless for more details +FROM alpine:3.18 +WORKDIR / +COPY --from=builder /workspace/out/ / + +USER 65532:65532 + +ENTRYPOINT ["/manager"] diff --git a/LICENSE b/LICENSE new file mode 100755 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..38b89d4c --- /dev/null +++ b/Makefile @@ -0,0 +1,430 @@ + +# Image URL to use all building/pushing image targets +IMG ?= milvusdb/milvus-operator:dev-latest +TOOL_IMG ?= milvus-config-tool:dev-latest +SIT_IMG ?= milvus-operator:sit +VERSION ?= 0.9.8 +TOOL_VERSION ?= 0.3.0 +MILVUS_HELM_VERSION ?= milvus-4.1.23 +RELEASE_IMG ?= milvusdb/milvus-operator:v$(VERSION) +TOOL_RELEASE_IMG ?= milvusdb/milvus-config-tool:v$(TOOL_VERSION) +KIND_CLUSTER ?= kind + +# Produce CRDs that work back to Kubernetes 1.11 (no version conversion) +CRD_OPTIONS ?= "crd:preserveUnknownFields=false,maxDescLen=0" +# cert-manager +CERT_MANAGER_MANIFEST ?= "https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml" + +# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) +ifeq (,$(shell go env GOBIN)) +GOBIN=$(shell go env GOPATH)/bin +else +GOBIN=$(shell go env GOBIN) +endif + +CERT_DIR = ${TMPDIR}/k8s-webhook-server/serving-certs +CSR_CONF = config/cert/csr.conf +DEV_HOOK_PATCH = config/dev/webhook_patch.yaml + +# Setting SHELL to bash allows bash commands to be executed by recipes. +# This is a requirement for 'setup-envtest.sh' in the test target. +# Options are set to exit when a recipe line exits non-zero or a piped command fails. +SHELL = /usr/bin/env bash -o pipefail +.SHELLFLAGS = -ec + +all: build + +##@ General + +# The help target prints out all targets with their descriptions organized +# beneath their categories. The categories are represented by '##@' and the +# target descriptions by '##'. The awk commands is responsible for reading the +# entire set of makefiles included in this invocation, looking for lines of the +# file as xyz: ## something, and then pretty-format the target and help. Then, +# if there's a line with ##@ something, that gets pretty-printed as a category. +# More info on the usage of ANSI control characters for terminal formatting: +# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters +# More info on the awk command: +# http://linuxcommand.org/lc3_adv_awk.php + +help: ## Display this help. + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) + +##@ Development + +manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. + $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases + +generate: controller-gen go-generate ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. + $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." + +generate-all: generate deploy-manifests + +go-generate: + go install github.com/golang/mock/mockgen@v1.6.0 + go generate ./... + +generate-client-groups: + ./hack/update-codegen.sh + +fmt: ## Run go fmt against code. + go fmt ./... + +vet: ## Run go vet against code. + go vet ./... + +ENVTEST_ASSETS_DIR=$(shell pwd)/testbin +test: manifests generate fmt vet test-only ## Run tests. + +code-check: go-generate fmt vet + +test-only: ## -race requires cgo + CGO_ENABLED=1 go test -race ./... -coverprofile tmp.out; cat tmp.out | sed '/zz_generated.deepcopy.go/d' | sed '/_mock.go/d' > cover.out + +##@ Build +VERSION_PATH=github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1 +BUILD_LDFLAGS=-X '$(VERSION_PATH).Version=$(VERSION)' -X '$(VERSION_PATH).MilvusHelmVersion=$(MILVUS_HELM_VERSION)' + +build: generate fmt vet ## Build manager binary. + go build -o bin/manager -ldflags="$(BUILD_LDFLAGS)" main.go + +build-only: + go build -o bin/manager -ldflags="$(BUILD_LDFLAGS)" main.go + +build-config-tool: + mkdir -p out + CGO_ENABLED=0 go build -ldflags="-s -w" -o out/merge ./tool/merge + CGO_ENABLED=0 go build -ldflags="-s -w" -o out/cp ./tool/cp + CGO_ENABLED=0 go build -ldflags="-s -w" -o out/iam-verify ./tool/iam-verify + +build-release: build-config-tool + mkdir -p out + CGO_ENABLED=0 go build -ldflags="$(BUILD_LDFLAGS)" -o out/manager main.go + CGO_ENABLED=0 go build -ldflags="-s -w" -o out/checker ./tool/checker + +run: manifests generate fmt vet ## Run a controller from your host. + go run ./main.go + +docker-build: ## Build docker image with the manager. + docker build -t ${IMG} . + +docker-push: ## Push docker image with the manager. + docker push ${IMG} + +out/config/assets/templates: + mkdir -p out/config/assets + cp -r config/assets/templates out/config/assets/templates + +docker-prepare: build-release out/config/assets/templates + mkdir -p ./out/config/assets/charts/ + wget https://github.com/zilliztech/milvus-helm/raw/${MILVUS_HELM_VERSION}/charts/milvus/charts/etcd-6.3.3.tgz -O ./etcd.tgz + wget https://github.com/zilliztech/milvus-helm/raw/${MILVUS_HELM_VERSION}/charts/milvus/charts/minio-8.0.17.tgz -O ./minio.tgz + wget https://github.com/zilliztech/milvus-helm/raw/${MILVUS_HELM_VERSION}/charts/milvus/charts/pulsar-2.7.8.tgz -O ./pulsar.tgz + wget https://github.com/zilliztech/milvus-helm/raw/${MILVUS_HELM_VERSION}/charts/milvus/charts/kafka-15.5.1.tgz -O ./kafka.tgz + tar -xf ./etcd.tgz -C ./out/config/assets/charts/ + tar -xf ./minio.tgz -C ./out/config/assets/charts/ + tar -xf ./pulsar.tgz -C ./out/config/assets/charts/ + tar -xf ./kafka.tgz -C ./out/config/assets/charts/ + wget https://github.com/zilliztech/milvus-helm/raw/${MILVUS_HELM_VERSION}/charts/milvus/values.yaml -O ./out/config/assets/charts/values.yaml + cp ./scripts/run.sh ./out/run.sh + cp ./scripts/run-helm.sh ./out/run-helm.sh + cp ./scripts/init.sh ./out/init.sh + +docker-tool-prepare: build-config-tool + mkdir -p out/tool + cp ./scripts/run-helm.sh ./out/tool/run-helm.sh + cp ./out/merge ./out/tool/merge + cp ./out/cp ./out/tool/cp + cp ./out/iam-verify ./out/tool/iam-verify + +docker-tool-build: + docker build --platform=linux/amd64 -t ${TOOL_RELEASE_IMG}-amd64 -f tool.Dockerfile . + docker build --platform=linux/arm64 -t ${TOOL_RELEASE_IMG}-arm64 -f tool.Dockerfile . + +docker-tool-push: + docker manifest create ${TOOL_RELEASE_IMG} ${TOOL_RELEASE_IMG}-amd64 ${TOOL_RELEASE_IMG}-arm64 + docker manifest push ${TOOL_RELEASE_IMG} + +docker-local-build: + docker build -t ${IMG} -f local.Dockerfile . + +docker-local: build-release docker-local-build + +##@ Deployment + +install: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config. + $(KUSTOMIZE) build config/crd | kubectl apply -f - + +uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. + $(KUSTOMIZE) build config/crd | kubectl delete -f - + +deploy: ## Deploy controller to the K8s cluster specified in ~/.kube/config. +# cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} +# $(KUSTOMIZE) build config/default | kubectl apply -f - + kubectl apply -f deploy/manifests/deployment.yaml + +undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. +# $(KUSTOMIZE) build config/default | kubectl delete -f - + kubectl delete -f deploy/manifests/deployment.yaml + +deploy-dev: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config. + cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG} + $(KUSTOMIZE) build config/dev | kubectl apply -f - + +deploy-cert-manager: + kubectl apply -f ${CERT_MANAGER_MANIFEST} + kubectl wait --timeout=3m --for=condition=Ready pods -l app.kubernetes.io/instance=cert-manager -n cert-manager + +undeploy-cert-manager: + kubectl delete -f ${CERT_MANAGER_MANIFEST} + +deploy-manifests: manifests kustomize helm-generate + # add namespace + echo "---" > deploy/manifests/deployment.yaml + cat config/manager/namespace.yaml >> deploy/manifests/deployment.yaml + helm template milvus-operator --create-namespace -n milvus-operator ./charts/milvus-operator-$(VERSION).tgz >> deploy/manifests/deployment.yaml + +kind-dev: kind + sudo $(KIND) create cluster --config config/kind/kind-dev.yaml --name ${KIND_CLUSTER} + +uninstall-kind-dev: kind + sudo $(KIND) delete cluster --name ${KIND_CLUSTER} + +# Install local certificate +# Required for webhook server to start +dev-cert: + $(RM) -r $(CERT_DIR) + mkdir -p $(CERT_DIR) + openssl genrsa -out $(CERT_DIR)/ca.key 2048 + openssl req -x509 -new -nodes -key $(CERT_DIR)/ca.key -subj "/CN=host.docker.internal" -days 10000 -out $(CERT_DIR)/ca.crt + openssl genrsa -out $(CERT_DIR)/tls.key 2048 + openssl req -new -SHA256 -newkey rsa:2048 -nodes -keyout $(CERT_DIR)/tls.key -out $(CERT_DIR)/tls.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=/OU=/CN=host.docker.internal" + openssl req -new -key $(CERT_DIR)/tls.key -out $(CERT_DIR)/tls.csr -config $(CSR_CONF) + openssl x509 -req -in $(CERT_DIR)/tls.csr -CA $(CERT_DIR)/ca.crt -CAkey $(CERT_DIR)/ca.key -CAcreateserial -out $(CERT_DIR)/tls.crt -days 10000 -extensions v3_ext -extfile $(CSR_CONF) + +CA64=$(shell base64 -i $(CERT_DIR)/ca.crt) +CA=$(CA64:K==) +dev-cert-apply: dev-cert + $(RM) -r config/dev/webhook_patch_ca.yaml + echo '- op: "add"' > config/dev/webhook_patch_ca.yaml + echo ' path: "/webhooks/0/clientConfig/caBundle"' >> config/dev/webhook_patch_ca.yaml + echo " value: $(CA)" >> config/dev/webhook_patch_ca.yaml + +CONTROLLER_GEN = $(shell pwd)/bin/controller-gen +controller-gen: ## Download controller-gen locally if necessary. + $(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.6.0) + +KUSTOMIZE = $(shell pwd)/bin/kustomize +kustomize: ## Download kustomize locally if necessary. + $(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v3@v3.8.7) + +KIND = $(shell pwd)/bin/kind +kind: ## Download kind locally if necessary. + $(call go-get-tool,$(KIND),sigs.k8s.io/kind@v0.11.1) + +##@ system integration test +sit-prepare-operator-images: + @echo "Preparing operator images" + docker build -t ${SIT_IMG} . + docker pull -q quay.io/jetstack/cert-manager-controller:v1.5.3 + docker pull -q quay.io/jetstack/cert-manager-webhook:v1.5.3 + docker pull -q quay.io/jetstack/cert-manager-cainjector:v1.5.3 + +sit-prepare-images: sit-prepare-operator-images + @echo "Preparing images" + docker pull milvusdb/milvus:v2.3.11 + + docker pull -q apachepulsar/pulsar:2.8.2 + docker pull -q bitnami/kafka:3.1.0-debian-10-r52 + docker pull -q milvusdb/etcd:3.5.5-r2 + docker pull -q minio/minio:RELEASE.2023-03-20T20-16-18Z + docker pull -q haorenfsa/pymilvus:latest + +sit-load-operator-images: + @echo "Loading operator images" + kind load docker-image ${SIT_IMG} --name ${KIND_CLUSTER} + kind load docker-image quay.io/jetstack/cert-manager-controller:v1.5.3 --name ${KIND_CLUSTER} + kind load docker-image quay.io/jetstack/cert-manager-webhook:v1.5.3 --name ${KIND_CLUSTER} + kind load docker-image quay.io/jetstack/cert-manager-cainjector:v1.5.3 --name ${KIND_CLUSTER} + +sit-load-images: sit-load-operator-images + @echo "Loading images" + kind load docker-image milvusdb/milvus:v2.3.11 + kind load docker-image apachepulsar/pulsar:2.8.2 --name ${KIND_CLUSTER} + kind load docker-image bitnami/kafka:3.1.0-debian-10-r52 --name ${KIND_CLUSTER} + kind load docker-image milvusdb/etcd:3.5.5-r2 --name ${KIND_CLUSTER} + kind load docker-image minio/minio:RELEASE.2023-03-20T20-16-18Z --name ${KIND_CLUSTER} + kind load docker-image haorenfsa/pymilvus:latest --name ${KIND_CLUSTER} + +sit-load-and-cleanup-images: sit-load-images + @echo "Clean up some big images to save disk space in github action" + docker rmi milvusdb/milvus:v2.3.11 + docker rmi apachepulsar/pulsar:2.8.2 + docker rmi bitnami/kafka:3.1.0-debian-10-r52 + docker rmi milvusdb/etcd:3.5.5-r2 + docker rmi minio/minio:RELEASE.2023-03-20T20-16-18Z + +sit-generate-manifest: + cat deploy/manifests/deployment.yaml | sed "s#${RELEASE_IMG}#${SIT_IMG}#g" > test/test_gen.yaml + +sit-deploy: sit-load-and-cleanup-images + @echo "Deploying" + $(HELM) -n milvus-operator install --set image.repository=milvus-operator,image.tag=sit,resources.requests.cpu=10m --create-namespace milvus-operator ./charts/milvus-operator + kubectl -n milvus-operator describe pods + @echo "Waiting for operator to be ready" + kubectl -n milvus-operator wait --for=condition=complete job/milvus-operator-checker --timeout=6m + kubectl -n milvus-operator rollout restart deploy/milvus-operator + kubectl -n milvus-operator wait --timeout=3m --for=condition=available deployments/milvus-operator + sleep 5 #wait for the service to be ready + +sit-test: + ./test/sit.sh ${test_mode} + +cleanup-sit: + kubectl delete -f test/test_gen.yaml + +test-milvus-upgrade: + ./test/milvus-upgrade.sh + +test-upgrade: + ./test/upgrade.sh + +# go-get-tool will 'go get' any package $2 and install it to $1. +PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) +define go-get-tool +@[ -f $(1) ] || { \ +set -e ;\ +TMP_DIR=$$(mktemp -d) ;\ +cd $$TMP_DIR ;\ +go mod init tmp ;\ +echo "Downloading $(2)" ;\ +GOBIN=$(PROJECT_DIR)/bin go get $(2) ;\ +rm -rf $$TMP_DIR ;\ +} +endef + +#################### +# Helm chart # +#################### + +CHARTS_DIRECTORY := charts +CHART_MILVUS_OPERATOR := $(CHARTS_DIRECTORY)/milvus-operator + +CHART_REPO_URL := /milvus-operator/charts + +DO_NOT_EDIT := Code generated by make. DO NOT EDIT. + +# find helm or raise an error +.PHONY: helm +helm: +ifeq (, $(shell which helm 2> /dev/null)) + $(error Helm not found. Please install it: https://helm.sh/docs/intro/install/#from-script) +HELM=helm-not-found +else +HELM=$(shell which helm 2> /dev/null) +endif + +.PHONY: helm-generate $(KUSTOMIZE) $(HELM) +helm-generate: $(CHARTS_DIRECTORY)/index.yaml + +$(CHARTS_DIRECTORY)/index.yaml: $(CHARTS_DIRECTORY)/milvus-operator-$(VERSION).tgz + $(HELM) repo index \ + --url $(CHART_REPO_URL) \ + $(CHARTS_DIRECTORY) + +CHART_TEMPLATE_PATH := $(CHART_MILVUS_OPERATOR)/templates + +$(CHARTS_DIRECTORY)/milvus-operator-$(VERSION).tgz: $(CHART_MILVUS_OPERATOR)/templates/crds.yaml \ + $(wildcard $(CHART_MILVUS_OPERATOR)/assets/*) \ + $(CHART_TEMPLATE_PATH)/role.yaml $(CHART_TEMPLATE_PATH)/clusterrole.yaml \ + $(CHART_TEMPLATE_PATH)/rolebinding.yaml $(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml \ + $(CHART_TEMPLATE_PATH)/mutatingwebhookconfiguration.yaml $(CHART_TEMPLATE_PATH)/validatingwebhookconfiguration.yaml \ + $(CHART_TEMPLATE_PATH)/deployment.yaml + $(HELM) package $(CHART_MILVUS_OPERATOR) \ + --version $(VERSION) \ + --app-version $(VERSION) \ + --destination $(CHARTS_DIRECTORY) + +$(CHART_MILVUS_OPERATOR)/templates/crds.yaml: kustomize config/crd/bases + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > '$@' + echo '{{- if .Values.installCRDs }}' >> '$@' + $(KUSTOMIZE) build config/helm/crds/ | \ + sed "s/'\({{[^}}]*}}\)'/\1/g">> '$@' + echo '{{- end -}}' >> '$@' + +$(CHART_TEMPLATE_PATH)/deployment.yaml: kustomize $(wildcard config/helm/deployment/*) $(wildcard config/manager/*) $(wildcard config/config/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/deployment.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/deployment | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=Deployment' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/deployment.yaml + +$(CHART_TEMPLATE_PATH)/role.yaml: kustomize $(wildcard config/helm/rbac/*) $(wildcard config/rbac/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/role.yaml + echo '{{- if .Values.rbac.create }}' >> $(CHART_TEMPLATE_PATH)/role.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/rbac | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=Role' | \ + $(KUSTOMIZE) cfg grep --annotate=false --invert-match 'kind=ClusterRole' | \ + $(KUSTOMIZE) cfg grep --annotate=false --invert-match 'kind=RoleBinding' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/role.yaml + echo '{{- end -}}' >> $(CHART_TEMPLATE_PATH)/role.yaml + +$(CHART_TEMPLATE_PATH)/clusterrole.yaml: kustomize $(wildcard config/helm/rbac/*) $(wildcard config/rbac/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/clusterrole.yaml + echo '{{- if .Values.rbac.create }}' >> $(CHART_TEMPLATE_PATH)/clusterrole.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/rbac | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=ClusterRole' | \ + $(KUSTOMIZE) cfg grep --annotate=false --invert-match 'kind=ClusterRoleBinding' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/clusterrole.yaml + echo '{{- end -}}' >> $(CHART_TEMPLATE_PATH)/clusterrole.yaml + +$(CHART_TEMPLATE_PATH)/rolebinding.yaml: kustomize $(wildcard config/helm/rbac/*) $(wildcard config/rbac/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/rolebinding.yaml + echo '{{- if .Values.rbac.create }}' >> $(CHART_TEMPLATE_PATH)/rolebinding.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/rbac | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=RoleBinding' | \ + $(KUSTOMIZE) cfg grep --annotate=false --invert-match 'kind=ClusterRoleBinding' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/rolebinding.yaml + echo '{{- end -}}' >> $(CHART_TEMPLATE_PATH)/rolebinding.yaml + +$(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml: kustomize $(wildcard config/helm/rbac/*) $(wildcard config/rbac/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml + echo '{{- if .Values.rbac.create }}' >> $(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/rbac | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=ClusterRoleBinding' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml + echo '{{- end -}}' >> $(CHART_TEMPLATE_PATH)/clusterrolebinding.yaml + +$(CHART_TEMPLATE_PATH)/validatingwebhookconfiguration.yaml: kustomize $(wildcard config/helm/webhook/*) $(wildcard config/webhook/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/validatingwebhookconfiguration.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/webhook | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=ValidatingWebhookConfiguration' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/validatingwebhookconfiguration.yaml + +$(CHART_TEMPLATE_PATH)/mutatingwebhookconfiguration.yaml: kustomize $(wildcard config/helm/webhook/*) $(wildcard config/webhook/*) + echo '{{- /* $(DO_NOT_EDIT) */ -}}' > $(CHART_TEMPLATE_PATH)/mutatingwebhookconfiguration.yaml + $(KUSTOMIZE) build --reorder legacy config/helm/webhook | \ + $(KUSTOMIZE) cfg grep --annotate=false 'kind=MutatingWebhookConfiguration' | \ + sed "s/'\({{[^}}]*}}\)'/\1/g" \ + >> $(CHART_TEMPLATE_PATH)/mutatingwebhookconfiguration.yaml + +deploy-by-manifest: sit-prepare-operator-images sit-load-operator-images sit-generate-manifest + @echo "Deploying Milvus Operator" + kubectl apply -f ./test/test_gen.yaml + @echo "Waiting for the operator to be ready..." + kubectl -n milvus-operator wait --for=condition=complete job/milvus-operator-checker --timeout=6m + kubectl -n milvus-operator rollout restart deploy/milvus-operator + kubectl -n milvus-operator wait --timeout=3m --for=condition=available deployments/milvus-operator + sleep 5 #wait for the service to be ready + +debug-start: dev-cert + kubectl -n milvus-operator patch deployment/milvus-operator --patch '{"spec":{"template":{"spec":{"containers":[{"name":"manager","args":["-namespace","milvus-operator","-name","milvus-operator","--health-probe-bind-address=:8081","--metrics-bind-address=:8080","--leader-elect","--stop-reconcilers=all"]}]}}}}' + go run ./main.go -debug + +debug-stop: + kubectl -n milvus-operator patch deployment/milvus-operator --patch '{"spec":{"template":{"spec":{"containers":[{"name":"manager","args":["-namespace","milvus-operator","-name","milvus-operator","--health-probe-bind-address=:8081","--metrics-bind-address=:8080","--leader-elect"]}]}}}}' diff --git a/OWNERS b/OWNERS new file mode 100644 index 00000000..4cb3c709 --- /dev/null +++ b/OWNERS @@ -0,0 +1,10 @@ +filters: + ".*": + approvers: + - zwd1208 + - haorenfsa + - loveeachday + reviewers: + - zwd1208 + - haorenfsa + - loveeachday \ No newline at end of file diff --git a/PROJECT b/PROJECT new file mode 100644 index 00000000..a5b35a4c --- /dev/null +++ b/PROJECT @@ -0,0 +1,41 @@ +domain: milvus.io +layout: +- go.kubebuilder.io/v3 +multigroup: true +projectName: milvus-operator +repo: github.com/milvus-io/milvus-operator +resources: +# TODO: deprecated +- api: + crdVersion: v1 + namespaced: true + controller: true + domain: milvus.io + kind: MilvusCluster + path: github.com/milvus-io/milvus-operator/apis/milvus.io/v1alpha1 + version: v1alpha1 + webhooks: + defaulting: true + validation: true + webhookVersion: v1 +- api: + crdVersion: v1 + namespaced: true + controller: true + domain: milvus.io + kind: Milvus + path: github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1 + version: v1beta1 + webhooks: + defaulting: true + validation: true + webhookVersion: v1 +- api: + crdVersion: v1 + namespaced: true + controller: true + domain: milvus.io + kind: MilvusUpgrade + path: github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1 + version: v1beta1 +version: "3" diff --git a/README.md b/README.md new file mode 100644 index 00000000..ab5a9ff1 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# Milvus Operator + +[![CI Pipeline](https://github.com/zilliztech/milvus-operator/actions/workflows/ci.yml/badge.svg)](https://github.com/zilliztech/milvus-operator/actions/workflows/ci.yml/badge.svg) +[![codecov](https://codecov.io/gh/zilliztech/milvus-operator/branch/main/graph/badge.svg?token=DAXmgusBQq)](https://codecov.io/gh/zilliztech/milvus-operator) +[![Go Reference](https://pkg.go.dev/badge/github.com/zilliztech/milvus-operator.svg)](https://pkg.go.dev/github.com/zilliztech/milvus-operator) +license + + +> **ATTENTIONS:** THE `MAIN` BRANCH MAY BE IN AN UNSTABLE OR EVEN BROKEN STATE DURING DEVELOPMENT. + +## Overview +[Milvus](https://milvus.io) is a cloud-native, open-source vector database built to manage embedding vectors generated by machine learning models and neural networks. It extends the capabilities of best-in-class approximate nearest neighbor (ANN) search libraries (e.g. Faiss, NMSLIB, Annoy) and features on-demand scalability, and high availability. + +The Milvus Operator provides an easy and solid solution to deploy and manage a full Milvus service stack including both the milvus components and its relevant dependencies such as etcd, pulsar and minio to the target [Kubernetes](https://kubernetes.io/) clusters in a scalable and high-available way. The Milvus Operator defines a `Milvus` custom resources on top of Kubernetes [Custom Resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). The Kubernetes API can then be used in a declarative way to manage Milvus deployment stack and ensure its scalability and high-availability operation. + +# Getting started +## Deploy milvus operator + +Install or upgrade to latest version with helm: + +```shell +helm repo add milvus-operator https://zilliztech.github.io/milvus-operator/ +helm repo update milvus-operator +helm -n milvus-operator upgrade --install --create-namespace milvus-operator milvus-operator/milvus-operator +``` + +Or with kubectl & raw manifests: + +```shell +kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v0.9.8/deploy/manifests/deployment.yaml +``` + +For more infomation Check [Installation Instructions](docs/installation/installation.md) + +## Create milvus demo instance +```shell +kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/demo.yaml +``` + +> Note: The demo instance starts a standalone milvus & its dependencies with the least resources requests. It is not suitable for production environment. For more deployment examples please check https://github.com/zilliztech/milvus-operator/blob/main/config/samples + +# Versioning + +Versions of the underlying components are listed below: + + + +|Components| Milvus| Pulsar / Kafka| Etcd| MinIO| +|---|---|---|---|---| +|Versions| v2.3.11 `[1]`| 2.8.2 / 3.1.0 | 3.5.5-2 |RELEASE.2023-03-20T20-16-18Z| + + +> `[1]` Version of milvus is the default version we will use, you can set it to other version. The Compatibility with milvus releases is showed below. + +## Compatibility With Milvus Releases + + + +|Milvus Versions| <=v2.0.0-rc8| v2.0.0-pre-ga| >=v2.0.0| +|---|---|---|---| +|Compatibility| ✖️| ✔️| ✔️| + +## Compatibility With Milvus-Operator Earlier Releases + + + +|Milvus Operator Versions| <0.4.0| >=0.4.0| +|---|---|---| +|Compatibility| ✖️| ✔️| + + +# Install / upgrade milvus-operator of a specific version + +Use helm: + +```shell +helm upgrade --install milvus-operator \ + -n milvus-operator --create-namespace \ + https://github.com/zilliztech/milvus-operator/releases/download/v0.9.8/milvus-operator-0.9.8.tgz +``` + +Or use kubectl & raw manifests: + +```shell +kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v0.9.8/deploy/manifests/deployment.yaml +``` + + +# Documentations +- [Installation](docs/installation/installation.md) +- [Install KinD for development](docs/installation/kind-installation.md) +- Administration Guides: + - [Configure Milvus with Milvus Operator](docs/administration/configure-milvus.md) + - Manage Dependencies: + - [Configure Meta Storge](docs/administration/manage-dependencies/meta-storage.md) + - [Configure Object Storage](docs/administration/manage-dependencies/object-storage.md) + - [Configure Message Storage](docs/administration/manage-dependencies/message-storage.md) + - [Monitor And Alert](docs/administration/monitor-and-alert.md) + - [Allocate Resources](docs/administration/allocate-resources.md) + - [Scale A Milvus Cluster](docs/administration/scale-a-milvus-cluster.md) + - [Upgrade](docs/administration/upgrade.md) + - Security: + - [Enable TLS](docs/administration/security/encryption-in-transit.md) + - [Enable Authentication](docs/administration/security/enable-authentication.md) +- [Milvus CRD Reference](docs/CRD/milvus.md) +- [How it works](docs/arch/arch.md) diff --git a/apis/milvus.io/v1alpha1/components_types.go b/apis/milvus.io/v1alpha1/components_types.go new file mode 100644 index 00000000..024e2fcd --- /dev/null +++ b/apis/milvus.io/v1alpha1/components_types.go @@ -0,0 +1,148 @@ +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +type ComponentType string + +const ( + RootCoord ComponentType = "rootCoord" + DataCoord ComponentType = "dataCoord" + QueryCoord ComponentType = "queryCoord" + IndexCoord ComponentType = "indexCoord" + DataNode ComponentType = "dataNode" + QueryNode ComponentType = "queryNode" + IndexNode ComponentType = "indexNode" + Proxy ComponentType = "proxy" +) + +var ( + MilvusComponentTypes = []ComponentType{ + RootCoord, DataCoord, QueryCoord, IndexCoord, DataNode, QueryNode, IndexNode, Proxy, + } + MilvusCoordTypes = []ComponentType{ + RootCoord, DataCoord, QueryCoord, IndexCoord, + } +) + +func (t ComponentType) String() string { + return string(t) +} + +type ComponentSpec struct { + // +kubebuilder:validation:Optional + Image string `json:"image,omitempty"` + + // +kubebuilder:validation:Optional + ImagePullPolicy *corev1.PullPolicy `json:"imagePullPolicy,omitempty"` + + // +kubebuilder:validation:Optional + ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"` + + // +kubebuilder:validation:Optional + Env []corev1.EnvVar `json:"env,omitempty"` + + // +kubebuilder:validation:Optional + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + + // +kubebuilder:validation:Optional + Affinity *corev1.Affinity `json:"affinity,omitempty"` + + // +kubebuilder:validation:Optional + Tolerations []corev1.Toleration `json:"tolerations,omitempty"` + + // +kubebuilder:validation:Optional + Resources *corev1.ResourceRequirements `json:"resources,omitempty"` +} + +type MilvusComponents struct { + ComponentSpec `json:",inline"` + + // +kubebuilder:validation:Optional + DisableMetric bool `json:"disableMetric,omitempty"` + + // +kubebuilder:validation:Optional + Proxy MilvusProxy `json:"proxy,omitempty"` + + // +kubebuilder:validation:Optional + RootCoord MilvusRootCoord `json:"rootCoord,omitempty"` + + // +kubebuilder:validation:Optional + IndexCoord MilvusIndexCoord `json:"indexCoord,omitempty"` + + // +kubebuilder:validation:Optional + DataCoord MilvusDataCoord `json:"dataCoord,omitempty"` + + // +kubebuilder:validation:Optional + QueryCoord MilvusQueryCoord `json:"queryCoord,omitempty"` + + // +kubebuilder:validation:Optional + IndexNode MilvusIndexNode `json:"indexNode,omitempty"` + + // +kubebuilder:validation:Optional + DataNode MilvusDataNode `json:"dataNode,omitempty"` + + // +kubebuilder:validation:Optional + QueryNode MilvusQueryNode `json:"queryNode,omitempty"` +} + +type Component struct { + ComponentSpec `json:",inline"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:default=1 + Replicas *int32 `json:"replicas,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=65535 + Port int32 `json:"port,omitempty"` +} + +type MilvusQueryNode struct { + Component `json:",inline"` +} + +type MilvusDataNode struct { + Component `json:",inline"` +} + +type MilvusIndexNode struct { + Component `json:",inline"` +} + +type MilvusProxy struct { + Component `json:",inline"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum={"ClusterIP", "NodePort", "LoadBalancer"} + // +kubebuilder:default="ClusterIP" + ServiceType corev1.ServiceType `json:"serviceType,omitempty"` + + // +kubebuilder:validation:Optional + ServiceLabels map[string]string `json:"serviceLabels,omitempty"` + + // +kubebuilder:validation:Optional + ServiceAnnotations map[string]string `json:"serviceAnnotations,omitempty"` + + // +kubebuilder:validation:Optional + Ingress *MilvusIngress `json:"ingress,omitempty"` +} + +type MilvusRootCoord struct { + Component `json:",inline"` +} + +type MilvusDataCoord struct { + Component `json:",inline"` +} + +type MilvusQueryCoord struct { + Component `json:",inline"` +} + +type MilvusIndexCoord struct { + Component `json:",inline"` +} diff --git a/apis/milvus.io/v1alpha1/dependencies_types.go b/apis/milvus.io/v1alpha1/dependencies_types.go new file mode 100644 index 00000000..4b0e26e0 --- /dev/null +++ b/apis/milvus.io/v1alpha1/dependencies_types.go @@ -0,0 +1,116 @@ +package v1alpha1 + +type DependencyDeletionPolicy string + +const ( + DeletionPolicyDelete DependencyDeletionPolicy = "Delete" + DeletionPolicyRetain DependencyDeletionPolicy = "Retain" +) + +const ( + StorageTypeMinIO = "MinIO" + StorageTypeS3 = "S3" +) + +type MilvusDependencies struct { + // +kubebuilder:validation:Optional + Etcd MilvusEtcd `json:"etcd"` + + // +kubebuilder:validation:Optional + Storage MilvusStorage `json:"storage"` +} + +type MilvusClusterDependencies struct { + // +kubebuilder:validation:Optional + Etcd MilvusEtcd `json:"etcd"` + + // +kubebuilder:default:="pulsar" + // +kubebuilder:validation:Enum:={"pulsar", "kafka"} + // +kubebuilder:validation:Optional + MsgStreamType string `json:"msgStreamType,omitempty"` + + // +kubebuilder:validation:Optional + Pulsar MilvusPulsar `json:"pulsar,omitempty"` + + // +kubebuilder:validation:Optional + Kafka MilvusKafka `json:"kafka,omitempty"` + + // +kubebuilder:validation:Optional + Storage MilvusStorage `json:"storage"` +} + +const ( + MsgStreamTypePulsar = "pulsar" + MsgStreamTypeKafka = "kafka" +) + +type MilvusEtcd struct { + // +kubebuilder:validation:Optional + Endpoints []string `json:"endpoints"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` +} + +type InClusterConfig struct { + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Values Values `json:"values,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum:={"Delete", "Retain"} + // +kubebuilder:default:="Retain" + DeletionPolicy DependencyDeletionPolicy `json:"deletionPolicy"` + + // +kubebuilder:validation:Optional + PVCDeletion bool `json:"pvcDeletion,omitempty"` +} + +type MilvusStorage struct { + // +kubebuilder:default:="MinIO" + // +kubebuilder:validation:Enum:={"MinIO", "S3"} + // +kubebuilder:validation:Optional + Type string `json:"type"` + + // +kubebuilder:validation:Optional + SecretRef string `json:"secretRef"` + + // +kubebuilder:validation:Optional + Endpoint string `json:"endpoint"` + + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` +} + +type MilvusPulsar struct { + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + Endpoint string `json:"endpoint"` +} + +// MilvusKafka configuration +type MilvusKafka struct { + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + BrokerList []string `json:"brokerList,omitempty"` +} diff --git a/apis/milvus.io/v1alpha1/doc.go b/apis/milvus.io/v1alpha1/doc.go new file mode 100644 index 00000000..d7848c7b --- /dev/null +++ b/apis/milvus.io/v1alpha1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +groupName=milvus.io + +package v1alpha1 diff --git a/apis/milvus.io/v1alpha1/groupversion_info.go b/apis/milvus.io/v1alpha1/groupversion_info.go new file mode 100644 index 00000000..0665da98 --- /dev/null +++ b/apis/milvus.io/v1alpha1/groupversion_info.go @@ -0,0 +1,44 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package v1alpha1 contains API Schema definitions for the v1alpha1 API group +// +kubebuilder:object:generate=true +// +groupName=milvus.io +package v1alpha1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects + GroupVersion = schema.GroupVersion{Group: "milvus.io", Version: "v1alpha1"} + + // for code-generator + SchemeGroupVersion = GroupVersion + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return GroupVersion.WithResource(resource).GroupResource() +} diff --git a/apis/milvus.io/v1alpha1/groupversion_info_test.go b/apis/milvus.io/v1alpha1/groupversion_info_test.go new file mode 100644 index 00000000..26045abc --- /dev/null +++ b/apis/milvus.io/v1alpha1/groupversion_info_test.go @@ -0,0 +1,13 @@ +package v1alpha1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestResource(t *testing.T) { + ret := Resource("test") + assert.Equal(t, "milvus.io", ret.Group) + assert.Equal(t, "test", ret.Resource) +} diff --git a/apis/milvus.io/v1alpha1/milvus_types.go b/apis/milvus.io/v1alpha1/milvus_types.go new file mode 100644 index 00000000..d12dd34f --- /dev/null +++ b/apis/milvus.io/v1alpha1/milvus_types.go @@ -0,0 +1,136 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1beta1 "github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1" + corev1 "k8s.io/api/core/v1" + networkv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// MilvusSpec defines the desired state of Milvus +type MilvusSpec struct { + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // +kubebuilder:validation:Optional + v1beta1.ComponentSpec `json:",inline"` + + // +kubebuilder:validation:Optional + Replicas *int32 `json:"replicas,omitempty"` + + // +kubebuilder:validation:Optional + Persistence v1beta1.Persistence `json:"persistence,omitempty"` + + // +kubebuilder:validation:Optional + Ingress *v1beta1.MilvusIngress `json:"ingress,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum={"ClusterIP", "NodePort", "LoadBalancer"} + // +kubebuilder:default="ClusterIP" + ServiceType corev1.ServiceType `json:"serviceType,omitempty"` + + // +kubebuilder:validation:Optional + DisableMetric bool `json:"disableMetric,omitempty"` + + // +kubebuilder:validation:Optional + ServiceLabels map[string]string `json:"serviceLabels,omitempty"` + + // +kubebuilder:validation:Optional + ServiceAnnotations map[string]string `json:"serviceAnnotations,omitempty"` + + // +kubebuilder:validation:Optional + Dep v1beta1.MilvusDependencies `json:"dependencies,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Conf v1beta1.Values `json:"config,omitempty"` +} + +// MilvusStatus defines the observed state of Milvus +type MilvusStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // Status indicates the overall status of the Milvus + // Status can be "Creating", "Healthy" and "Unhealthy" + // +kubebuilder:default:="Creating" + Status MilvusHealthStatus `json:"status"` + + // Conditions of each components + Conditions []MilvusCondition `json:"conditions,omitempty"` + + // Endpoint of milvus cluster + Endpoint string `json:"endpoint,omitempty"` + + IngressStatus networkv1.IngressStatus `json:"ingress,omitempty"` + + // +kubebuilder:validation:Optional + Replicas MilvusReplicas `json:"replicas,omitempty"` +} + +// MilvusReplicas is the replicas of milvus components +type MilvusReplicas struct { + //+kubebuilder:validation:Optional + Proxy int `json:"proxy,omitempty"` + //+kubebuilder:validation:Optional + RootCoord int `json:"rootCoord,omitempty"` + //+kubebuilder:validation:Optional + DataCoord int `json:"dataCoord,omitempty"` + //+kubebuilder:validation:Optional + IndexCoord int `json:"indexCoord,omitempty"` + //+kubebuilder:validation:Optional + QueryCoord int `json:"queryCoord,omitempty"` + //+kubebuilder:validation:Optional + DataNode int `json:"dataNode,omitempty"` + //+kubebuilder:validation:Optional + IndexNode int `json:"indexNode,omitempty"` + //+kubebuilder:validation:Optional + QueryNode int `json:"queryNode,omitempty"` + //+kubebuilder:validation:Optional + Standalone int `json:"standalone,omitempty"` +} + +// +genclient +// +genclient:noStatus +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=milvuses,singular=milvus,shortName=mi +// Milvus is the Schema for the milvus API +type Milvus struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MilvusSpec `json:"spec,omitempty"` + Status v1beta1.MilvusStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true +// MilvusList contains a list of Milvus +type MilvusList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Milvus `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Milvus{}, &MilvusList{}) +} diff --git a/apis/milvus.io/v1alpha1/milvus_webhook.go b/apis/milvus.io/v1alpha1/milvus_webhook.go new file mode 100644 index 00000000..a8ab2f53 --- /dev/null +++ b/apis/milvus.io/v1alpha1/milvus_webhook.go @@ -0,0 +1,86 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1beta1 "github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1" + ctrl "sigs.k8s.io/controller-runtime" + "sigs.k8s.io/controller-runtime/pkg/conversion" + logf "sigs.k8s.io/controller-runtime/pkg/log" +) + +var milvuslog = logf.Log.WithName("milvus-v1alpha1") + +func (r *Milvus) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} + +// ConvertTo converts this Milvus to the Hub version (v1beta1). +func (r *Milvus) ConvertTo(dstRaw conversion.Hub) error { + dst := dstRaw.(*v1beta1.Milvus) + dst.ObjectMeta = r.ObjectMeta + r.Spec.ConvertSpecTo(&dst.Spec) + dst.Status = r.Status + return nil +} + +func (r *MilvusSpec) ConvertSpecTo(dst *v1beta1.MilvusSpec) { + dst.Mode = v1beta1.MilvusModeStandalone + dst.Conf = r.Conf + dst.Dep = r.Dep + dst.Dep.RocksMQ.Persistence = r.Persistence + dst.Com = v1beta1.MilvusComponents{ + DisableMetric: r.DisableMetric, + Standalone: &v1beta1.MilvusStandalone{ + ServiceComponent: v1beta1.ServiceComponent{ + Component: v1beta1.Component{ + ComponentSpec: r.ComponentSpec, + Replicas: r.Replicas, + Port: 19530, + }, + ServiceType: r.ServiceType, + ServiceLabels: r.ServiceLabels, + ServiceAnnotations: r.ServiceAnnotations, + Ingress: r.Ingress, + }, + }, + } +} + +// ConvertFrom converts from the Hub version to this version. +func (r *Milvus) ConvertFrom(srcRaw conversion.Hub) error { + src := srcRaw.(*v1beta1.Milvus) + r.Spec.Conf = src.Spec.Conf + r.Spec.Dep = src.Spec.Dep + r.Spec.DisableMetric = src.Spec.Com.DisableMetric + if src.Spec.Com.Standalone == nil { + src.Spec.Com.Standalone = &v1beta1.MilvusStandalone{} + } + r.Spec.ComponentSpec = src.Spec.Com.Standalone.ComponentSpec + + r.Spec.Replicas = src.Spec.Com.Standalone.Replicas + r.Spec.ServiceType = src.Spec.Com.Standalone.ServiceType + r.Spec.ServiceLabels = src.Spec.Com.Standalone.ServiceLabels + r.Spec.ServiceAnnotations = src.Spec.Com.Standalone.ServiceAnnotations + r.Spec.Ingress = src.Spec.Com.Standalone.Ingress + + r.ObjectMeta = src.ObjectMeta + r.Status = src.Status + return nil +} diff --git a/apis/milvus.io/v1alpha1/milvuscluster_types.go b/apis/milvus.io/v1alpha1/milvuscluster_types.go new file mode 100644 index 00000000..229f76a0 --- /dev/null +++ b/apis/milvus.io/v1alpha1/milvuscluster_types.go @@ -0,0 +1,188 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + v1beta1 "github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// MilvusClusterSpec defines the desired state of MilvusCluster +type MilvusClusterSpec struct { + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // +kubebuilder:validation:Optional + Com v1beta1.MilvusComponents `json:"components,omitempty"` + + // +kubebuilder:validation:Optional + Dep v1beta1.MilvusDependencies `json:"dependencies,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Conf v1beta1.Values `json:"config,omitempty"` +} + +// MilvusIngress defines the ingress of MilvusCluster +// TODO: add docs +type MilvusIngress struct { + // +kubebuilder:validation:Optional + Labels map[string]string `json:"labels,omitempty"` + + // +kubebuilder:validation:Optional + Annotations map[string]string `json:"annotations,omitempty"` + + // +kubebuilder:validation:Optional + IngressClassName *string `json:"ingressClassName,omitempty"` + + // +kubebuilder:validation:Optional + Hosts []string `json:"hosts,omitempty"` + + // TLSSecretRefs is a map of TLS secret to hosts + // +kubebuilder:validation:Optional + TLSSecretRefs map[string][]string `json:"tlsSecretRefs,omitempty"` +} + +// MiluvsConditionType is a valid value for MiluvsConditionType.Type. +type MiluvsConditionType string + +// MilvusHealthStatus is a type for milvus status. +type MilvusHealthStatus string + +const ( + // StatusCreating is the status of creating. + StatusCreating MilvusHealthStatus = "Creating" + // StatusHealthy is the status of healthy. + StatusHealthy MilvusHealthStatus = "Healthy" + // StatusUnHealthy is the status of unhealthy. + StatusUnHealthy MilvusHealthStatus = "Unhealthy" + + // EtcdReady means the Etcd is ready. + EtcdReady MiluvsConditionType = "EtcdReady" + // StorageReady means the Storage is ready. + StorageReady MiluvsConditionType = "StorageReady" + // MsgStreamReady means the MsgStream is ready. + MsgStreamReady MiluvsConditionType = "MsgStreamReady" + // MilvusReady means all components of Milvus are ready. + MilvusReady MiluvsConditionType = "MilvusReady" + + // ReasonEndpointsHealthy means the endpoint is healthy + ReasonEndpointsHealthy string = "EndpointsHealthy" + // ReasonMilvusHealthy means milvus cluster is healthy + ReasonMilvusHealthy string = "ReasonMilvusHealthy" + // ReasonMilvusClusterHealthy means milvus cluster is healthy + ReasonMilvusClusterHealthy string = "MilvusClusterHealthy" + // ReasonMilvusClusterNotHealthy means at least one of milvus component is not healthy + ReasonMilvusComponentNotHealthy string = "MilvusComponentNotHealthy" + + ReasonEtcdReady = "EtcdReady" + ReasonEtcdNotReady = "EtcdNotReady" + ReasonS3Ready = "S3StorageAssumeReady" + ReasonStorageReady = "StorageReady" + ReasonStorageNotReady = "StorageNotReady" + ReasonMsgStreamReady = "MsgStreamReady" + ReasonMsgStreamNotReady = "MsgStreamReady" + ReasonSecretNotExist = "SecretNotExist" + ReasonSecretErr = "SecretError" + ReasonSecretDecodeErr = "SecretDecodeError" + ReasonClientErr = "ClientError" + ReasonDependencyNotReady = "DependencyNotReady" +) + +// MilvusEtcdStatus contains a list of all etcd endpoints status +type MilvusEtcdStatus struct { + Endpoint string `json:"endpoint"` + Healthy bool `json:"healthy"` + Error string `json:"error,omitempty"` +} + +// MilvusStorageStatus contains a list of all storage endpoints status +type MilvusStorageStatus struct { + Endpoint string `json:"endpoint"` + Status string `json:"status"` + Uptime string `json:"uptime,omitempty"` + Error string `json:"error,omitempty"` +} + +// MilvusCondition contains details for the current condition of this milvus/milvus cluster instance +type MilvusCondition struct { + // Type is the type of the condition. + Type MiluvsConditionType `json:"type"` + // Status is the status of the condition. + // Can be True, False, Unknown. + Status corev1.ConditionStatus `json:"status"` + // Last time the condition transitioned from one status to another. + // +optional + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + // Unique, one-word, CamelCase reason for the condition's last transition. + // +optional + Reason string `json:"reason,omitempty"` + // Human-readable message indicating details about last transition. + // +optional + Message string `json:"message,omitempty"` +} + +// +genclient +// +genclient:noStatus + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=milvusclusters,singular=milvuscluster,shortName=mc;mic +// MilvusCluster is the Schema for the milvusclusters API +type MilvusCluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MilvusClusterSpec `json:"spec,omitempty"` + Status v1beta1.MilvusStatus `json:"status,omitempty"` +} + +// ConvertTo converts to v1beta1.Milvus +func (r *MilvusCluster) ConvertToMilvus(dst *v1beta1.Milvus) { + dst.Namespace = r.Namespace + dst.Name = r.Name + dst.Labels = r.Labels + dst.Annotations = r.Annotations + dst.Spec.Mode = v1beta1.MilvusModeCluster + dst.Spec.Com = r.Spec.Com + dst.Spec.Conf = r.Spec.Conf + dst.Spec.Dep = r.Spec.Dep + dst.Default() +} + +// UpdateStatusFrom updates status from v1beta1.Milvus +func (r *MilvusCluster) UpdateStatusFrom(src *v1beta1.Milvus) { + r.Status = src.Status +} + +// +kubebuilder:object:root=true +// MilvusClusterList contains a list of MilvusCluster +type MilvusClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []MilvusCluster `json:"items"` +} + +func init() { + SchemeBuilder.Register(&MilvusCluster{}, &MilvusClusterList{}) +} diff --git a/apis/milvus.io/v1alpha1/persistence_types.go b/apis/milvus.io/v1alpha1/persistence_types.go new file mode 100644 index 00000000..faeec74f --- /dev/null +++ b/apis/milvus.io/v1alpha1/persistence_types.go @@ -0,0 +1,43 @@ +package v1alpha1 + +import corev1 "k8s.io/api/core/v1" + +// Persistence is persistence for milvus +type Persistence struct { + // If Enabled, will create/use pvc for data persistence + // +kubebuilder:validation:Optional + Enabled bool `json:"enabled,omitempty"` + // +kubebuilder:validation:Optional + // +kubebuilder:default:="/var/lib/milvus" + MountPath string `json:"mountPath,omitempty"` + // +kubebuilder:validation:Optional + PVCDeletion bool `json:"pvcDeletion,omitempty"` + // +kubebuilder:validation:Optional + PersistentVolumeClaim PersistentVolumeClaim `json:"persistentVolumeClaim,omitempty"` +} + +// PersistentVolumeClaim for milvus +type PersistentVolumeClaim struct { + // ExistingClaim if not empty, will use existing pvc, else create a pvc + // +kubebuilder:validation:Optional + ExistingClaim string `json:"existingClaim,omitempty"` + + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: http://kubernetes.io/docs/user-guide/labels + // +optional + Labels map[string]string `json:"labels,omitempty"` + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: http://kubernetes.io/docs/user-guide/annotations + // +optional + Annotations map[string]string `json:"annotations,omitempty"` + + // Spec defines the desired characteristics of a volume requested by a pod author. + // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims + // +kubebuilder:validation:Optional + Spec corev1.PersistentVolumeClaimSpec `json:"spec,omitempty"` +} diff --git a/apis/milvus.io/v1alpha1/values_types.go b/apis/milvus.io/v1alpha1/values_types.go new file mode 100644 index 00000000..0d6fb992 --- /dev/null +++ b/apis/milvus.io/v1alpha1/values_types.go @@ -0,0 +1,50 @@ +package v1alpha1 + +import "encoding/json" + +type Values struct { + // Work around for https://github.com/kubernetes-sigs/kubebuilder/issues/528 + Data map[string]interface{} `json:"-"` +} + +func (v Values) MarshalJSON() ([]byte, error) { + return json.Marshal(v.Data) +} + +func (v *Values) UnmarshalJSON(data []byte) error { + var out map[string]interface{} + + err := json.Unmarshal(data, &out) + if err != nil { + return err + } + + v.Data = out + + return nil +} + +// DeepCopyInto is an deepcopy function, copying the receiver, writing +// into out. In must be non-nil. Declaring this here prevents it from +// being generated in `zz_generated.deepcopy.go`. +// +// This exists here to work around https://github.com/kubernetes/code-generator/issues/50, +// and partially around https://github.com/kubernetes-sigs/controller-tools/pull/126 +// and https://github.com/kubernetes-sigs/controller-tools/issues/294. +func (v *Values) DeepCopyInto(out *Values) { + b, err := json.Marshal(v.Data) + if err != nil { + // The marshal should have been performed cleanly as otherwise + // the resource would not have been created by the API server. + panic(err) + } + + var c map[string]interface{} + + err = json.Unmarshal(b, &c) + if err != nil { + panic(err) + } + + out.Data = c +} diff --git a/apis/milvus.io/v1alpha1/values_types_test.go b/apis/milvus.io/v1alpha1/values_types_test.go new file mode 100644 index 00000000..f720e523 --- /dev/null +++ b/apis/milvus.io/v1alpha1/values_types_test.go @@ -0,0 +1,41 @@ +package v1alpha1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestValues_MarshalUnmarshalJSON(t *testing.T) { + values := Values{ + Data: map[string]interface{}{ + "key": "value", + }, + } + + expected := `{"key":"value"}` + actual, err := values.MarshalJSON() + if err != nil { + t.Errorf("unexpected error: %v", err) + } + assert.Equal(t, expected, string(actual)) + + var values2 Values + err = values2.UnmarshalJSON(actual) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + assert.Equal(t, values, values2) +} +func TestValues_DeepCopyInfo(t *testing.T) { + values := &Values{ + Data: map[string]interface{}{ + "key": "value", + }, + } + values2 := &Values{} + values.DeepCopyInto(values2) + assert.NotSame(t, values, values2) + assert.NotSame(t, values.Data, values2.Data) + assert.Equal(t, values, values2) +} diff --git a/apis/milvus.io/v1alpha1/zz_generated.deepcopy.go b/apis/milvus.io/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..80319d69 --- /dev/null +++ b/apis/milvus.io/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,795 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "github.com/milvus-io/milvus-operator/apis/milvus.io/v1beta1" + "k8s.io/api/core/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Component) DeepCopyInto(out *Component) { + *out = *in + in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Component. +func (in *Component) DeepCopy() *Component { + if in == nil { + return nil + } + out := new(Component) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ComponentSpec) DeepCopyInto(out *ComponentSpec) { + *out = *in + if in.ImagePullPolicy != nil { + in, out := &in.ImagePullPolicy, &out.ImagePullPolicy + *out = new(v1.PullPolicy) + **out = **in + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]v1.LocalObjectReference, len(*in)) + copy(*out, *in) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]v1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Affinity != nil { + in, out := &in.Affinity, &out.Affinity + *out = new(v1.Affinity) + (*in).DeepCopyInto(*out) + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]v1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(v1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentSpec. +func (in *ComponentSpec) DeepCopy() *ComponentSpec { + if in == nil { + return nil + } + out := new(ComponentSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InClusterConfig) DeepCopyInto(out *InClusterConfig) { + *out = *in + in.Values.DeepCopyInto(&out.Values) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InClusterConfig. +func (in *InClusterConfig) DeepCopy() *InClusterConfig { + if in == nil { + return nil + } + out := new(InClusterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Milvus) DeepCopyInto(out *Milvus) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Milvus. +func (in *Milvus) DeepCopy() *Milvus { + if in == nil { + return nil + } + out := new(Milvus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Milvus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusCluster) DeepCopyInto(out *MilvusCluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusCluster. +func (in *MilvusCluster) DeepCopy() *MilvusCluster { + if in == nil { + return nil + } + out := new(MilvusCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusCluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusClusterDependencies) DeepCopyInto(out *MilvusClusterDependencies) { + *out = *in + in.Etcd.DeepCopyInto(&out.Etcd) + in.Pulsar.DeepCopyInto(&out.Pulsar) + in.Kafka.DeepCopyInto(&out.Kafka) + in.Storage.DeepCopyInto(&out.Storage) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusClusterDependencies. +func (in *MilvusClusterDependencies) DeepCopy() *MilvusClusterDependencies { + if in == nil { + return nil + } + out := new(MilvusClusterDependencies) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusClusterList) DeepCopyInto(out *MilvusClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MilvusCluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusClusterList. +func (in *MilvusClusterList) DeepCopy() *MilvusClusterList { + if in == nil { + return nil + } + out := new(MilvusClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusClusterSpec) DeepCopyInto(out *MilvusClusterSpec) { + *out = *in + in.Com.DeepCopyInto(&out.Com) + in.Dep.DeepCopyInto(&out.Dep) + in.Conf.DeepCopyInto(&out.Conf) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusClusterSpec. +func (in *MilvusClusterSpec) DeepCopy() *MilvusClusterSpec { + if in == nil { + return nil + } + out := new(MilvusClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusComponents) DeepCopyInto(out *MilvusComponents) { + *out = *in + in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) + in.Proxy.DeepCopyInto(&out.Proxy) + in.RootCoord.DeepCopyInto(&out.RootCoord) + in.IndexCoord.DeepCopyInto(&out.IndexCoord) + in.DataCoord.DeepCopyInto(&out.DataCoord) + in.QueryCoord.DeepCopyInto(&out.QueryCoord) + in.IndexNode.DeepCopyInto(&out.IndexNode) + in.DataNode.DeepCopyInto(&out.DataNode) + in.QueryNode.DeepCopyInto(&out.QueryNode) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusComponents. +func (in *MilvusComponents) DeepCopy() *MilvusComponents { + if in == nil { + return nil + } + out := new(MilvusComponents) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusCondition) DeepCopyInto(out *MilvusCondition) { + *out = *in + if in.LastTransitionTime != nil { + in, out := &in.LastTransitionTime, &out.LastTransitionTime + *out = (*in).DeepCopy() + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusCondition. +func (in *MilvusCondition) DeepCopy() *MilvusCondition { + if in == nil { + return nil + } + out := new(MilvusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDataCoord) DeepCopyInto(out *MilvusDataCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDataCoord. +func (in *MilvusDataCoord) DeepCopy() *MilvusDataCoord { + if in == nil { + return nil + } + out := new(MilvusDataCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDataNode) DeepCopyInto(out *MilvusDataNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDataNode. +func (in *MilvusDataNode) DeepCopy() *MilvusDataNode { + if in == nil { + return nil + } + out := new(MilvusDataNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDependencies) DeepCopyInto(out *MilvusDependencies) { + *out = *in + in.Etcd.DeepCopyInto(&out.Etcd) + in.Storage.DeepCopyInto(&out.Storage) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDependencies. +func (in *MilvusDependencies) DeepCopy() *MilvusDependencies { + if in == nil { + return nil + } + out := new(MilvusDependencies) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusEtcd) DeepCopyInto(out *MilvusEtcd) { + *out = *in + if in.Endpoints != nil { + in, out := &in.Endpoints, &out.Endpoints + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusEtcd. +func (in *MilvusEtcd) DeepCopy() *MilvusEtcd { + if in == nil { + return nil + } + out := new(MilvusEtcd) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusEtcdStatus) DeepCopyInto(out *MilvusEtcdStatus) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusEtcdStatus. +func (in *MilvusEtcdStatus) DeepCopy() *MilvusEtcdStatus { + if in == nil { + return nil + } + out := new(MilvusEtcdStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIndexCoord) DeepCopyInto(out *MilvusIndexCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIndexCoord. +func (in *MilvusIndexCoord) DeepCopy() *MilvusIndexCoord { + if in == nil { + return nil + } + out := new(MilvusIndexCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIndexNode) DeepCopyInto(out *MilvusIndexNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIndexNode. +func (in *MilvusIndexNode) DeepCopy() *MilvusIndexNode { + if in == nil { + return nil + } + out := new(MilvusIndexNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIngress) DeepCopyInto(out *MilvusIngress) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.IngressClassName != nil { + in, out := &in.IngressClassName, &out.IngressClassName + *out = new(string) + **out = **in + } + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.TLSSecretRefs != nil { + in, out := &in.TLSSecretRefs, &out.TLSSecretRefs + *out = make(map[string][]string, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIngress. +func (in *MilvusIngress) DeepCopy() *MilvusIngress { + if in == nil { + return nil + } + out := new(MilvusIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusKafka) DeepCopyInto(out *MilvusKafka) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } + if in.BrokerList != nil { + in, out := &in.BrokerList, &out.BrokerList + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusKafka. +func (in *MilvusKafka) DeepCopy() *MilvusKafka { + if in == nil { + return nil + } + out := new(MilvusKafka) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusList) DeepCopyInto(out *MilvusList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Milvus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusList. +func (in *MilvusList) DeepCopy() *MilvusList { + if in == nil { + return nil + } + out := new(MilvusList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusProxy) DeepCopyInto(out *MilvusProxy) { + *out = *in + in.Component.DeepCopyInto(&out.Component) + if in.ServiceLabels != nil { + in, out := &in.ServiceLabels, &out.ServiceLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.ServiceAnnotations != nil { + in, out := &in.ServiceAnnotations, &out.ServiceAnnotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(MilvusIngress) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusProxy. +func (in *MilvusProxy) DeepCopy() *MilvusProxy { + if in == nil { + return nil + } + out := new(MilvusProxy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusPulsar) DeepCopyInto(out *MilvusPulsar) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusPulsar. +func (in *MilvusPulsar) DeepCopy() *MilvusPulsar { + if in == nil { + return nil + } + out := new(MilvusPulsar) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusQueryCoord) DeepCopyInto(out *MilvusQueryCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusQueryCoord. +func (in *MilvusQueryCoord) DeepCopy() *MilvusQueryCoord { + if in == nil { + return nil + } + out := new(MilvusQueryCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusQueryNode) DeepCopyInto(out *MilvusQueryNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusQueryNode. +func (in *MilvusQueryNode) DeepCopy() *MilvusQueryNode { + if in == nil { + return nil + } + out := new(MilvusQueryNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusReplicas) DeepCopyInto(out *MilvusReplicas) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusReplicas. +func (in *MilvusReplicas) DeepCopy() *MilvusReplicas { + if in == nil { + return nil + } + out := new(MilvusReplicas) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusRootCoord) DeepCopyInto(out *MilvusRootCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusRootCoord. +func (in *MilvusRootCoord) DeepCopy() *MilvusRootCoord { + if in == nil { + return nil + } + out := new(MilvusRootCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusSpec) DeepCopyInto(out *MilvusSpec) { + *out = *in + in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } + in.Persistence.DeepCopyInto(&out.Persistence) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(v1beta1.MilvusIngress) + (*in).DeepCopyInto(*out) + } + if in.ServiceLabels != nil { + in, out := &in.ServiceLabels, &out.ServiceLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.ServiceAnnotations != nil { + in, out := &in.ServiceAnnotations, &out.ServiceAnnotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Dep.DeepCopyInto(&out.Dep) + in.Conf.DeepCopyInto(&out.Conf) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusSpec. +func (in *MilvusSpec) DeepCopy() *MilvusSpec { + if in == nil { + return nil + } + out := new(MilvusSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStatus) DeepCopyInto(out *MilvusStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]MilvusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.IngressStatus.DeepCopyInto(&out.IngressStatus) + out.Replicas = in.Replicas +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStatus. +func (in *MilvusStatus) DeepCopy() *MilvusStatus { + if in == nil { + return nil + } + out := new(MilvusStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStorage) DeepCopyInto(out *MilvusStorage) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStorage. +func (in *MilvusStorage) DeepCopy() *MilvusStorage { + if in == nil { + return nil + } + out := new(MilvusStorage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStorageStatus) DeepCopyInto(out *MilvusStorageStatus) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStorageStatus. +func (in *MilvusStorageStatus) DeepCopy() *MilvusStorageStatus { + if in == nil { + return nil + } + out := new(MilvusStorageStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Persistence) DeepCopyInto(out *Persistence) { + *out = *in + in.PersistentVolumeClaim.DeepCopyInto(&out.PersistentVolumeClaim) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Persistence. +func (in *Persistence) DeepCopy() *Persistence { + if in == nil { + return nil + } + out := new(Persistence) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PersistentVolumeClaim) DeepCopyInto(out *PersistentVolumeClaim) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaim. +func (in *PersistentVolumeClaim) DeepCopy() *PersistentVolumeClaim { + if in == nil { + return nil + } + out := new(PersistentVolumeClaim) + in.DeepCopyInto(out) + return out +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Values. +func (in *Values) DeepCopy() *Values { + if in == nil { + return nil + } + out := new(Values) + in.DeepCopyInto(out) + return out +} diff --git a/apis/milvus.io/v1beta1/components_types.go b/apis/milvus.io/v1beta1/components_types.go new file mode 100644 index 00000000..f4182977 --- /dev/null +++ b/apis/milvus.io/v1beta1/components_types.go @@ -0,0 +1,261 @@ +package v1beta1 + +import ( + corev1 "k8s.io/api/core/v1" +) + +type ComponentType string + +const ( + RootCoord ComponentType = "rootCoord" + DataCoord ComponentType = "dataCoord" + QueryCoord ComponentType = "queryCoord" + IndexCoord ComponentType = "indexCoord" + DataNode ComponentType = "dataNode" + QueryNode ComponentType = "queryNode" + IndexNode ComponentType = "indexNode" + Proxy ComponentType = "proxy" +) + +var ( + MilvusComponentTypes = []ComponentType{ + RootCoord, DataCoord, QueryCoord, IndexCoord, DataNode, QueryNode, IndexNode, Proxy, + } + MilvusCoordTypes = []ComponentType{ + RootCoord, DataCoord, QueryCoord, IndexCoord, + } +) + +func (t ComponentType) String() string { + return string(t) +} + +type ComponentSpec struct { + // Paused is used to pause the component's deployment rollout + // +kubebuilder:validation:Optional + Paused bool `json:"paused"` + + // +kubebuilder:validation:Optional + PodLabels map[string]string `json:"podLabels,omitempty"` + + // +kubebuilder:validation:Optional + PodAnnotations map[string]string `json:"podAnnotations,omitempty"` + + // +kubebuilder:validation:Optional + Image string `json:"image,omitempty"` + + // Commands override the default commands & args of the container + // +kubebuilder:validation:Optional + Commands []string `json:"commands,omitempty"` + + // RunWithSubProcess whether to run milvus with flag --run-with-subprocess + // note: supported in 2.2.15, 2.3.2+ + // +kubebuilder:validation:Optional + RunWithSubProcess *bool `json:"runWithSubProcess,omitempty"` + + // +kubebuilder:validation:Optional + ImagePullPolicy *corev1.PullPolicy `json:"imagePullPolicy,omitempty"` + + // +kubebuilder:validation:Optional + ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"` + + // +kubebuilder:validation:Optional + Env []corev1.EnvVar `json:"env,omitempty"` + + // SchedulerName is the name of the scheduler to use for one component + // +kubebuilder:validation:Optional + SchedulerName string `json:"schedulerName,omitempty"` + + // +kubebuilder:validation:Optional + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + + // +kubebuilder:validation:Optional + Affinity *corev1.Affinity `json:"affinity,omitempty"` + + // +kubebuilder:validation:Optional + Tolerations []corev1.Toleration `json:"tolerations,omitempty"` + + // +kubebuilder:validation:Optional + Resources *corev1.ResourceRequirements `json:"resources,omitempty"` + + // +kubebuilder:validation:Optional + VolumeMounts []corev1.VolumeMount `json:"volumeMounts,omitempty"` + + // Volumes is same as corev1.Volume, we use a Values here to avoid the CRD become too large + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Volumes []Values `json:"volumes,omitempty"` + + // ServiceAccountName usually used for situations like accessing s3 with IAM role + // +kubebuilder:validation:Optional + ServiceAccountName string `json:"serviceAccountName,omitempty"` + + // PriorityClassName indicates the pod's priority. + // +kubebuilder:validation:Optional + PriorityClassName string `json:"priorityClassName,omitempty"` +} + +// ImageUpdateMode is how the milvus components' image should be updated. works only when rolling update is enabled. +type ImageUpdateMode string + +const ( + // ImageUpdateModeRollingUpgrade means all components' image will be updated in a rolling upgrade order + ImageUpdateModeRollingUpgrade ImageUpdateMode = "rollingUpgrade" + // ImageUpdateModeRollingDowngrade means all components' image will be updated in a rolling downgrade order + ImageUpdateModeRollingDowngrade ImageUpdateMode = "rollingDowngrade" + // ImageUpdateModeAll means all components' image will be updated immediately to spec.image + ImageUpdateModeAll ImageUpdateMode = "all" +) + +type MilvusComponents struct { + ComponentSpec `json:",inline"` + + // ImageUpdateMode is how the milvus components' image should be updated. works only when rolling update is enabled. + // +kubebuilder:validation:Enum=rollingUpgrade;rollingDowngrade;all + // +kubebuilder:default:="rollingUpgrade" + // +kubebuilder:validation:Optional + ImageUpdateMode ImageUpdateMode `json:"imageUpdateMode,omitempty"` + + // Note: it's still in beta, do not use for production. EnableRollingUpdate whether to enable rolling update for milvus component + // there is nearly zero downtime for rolling update + // TODO: enable rolling update by default for next major version + // +kubebuilder:validation:Optional + EnableRollingUpdate *bool `json:"enableRollingUpdate,omitempty"` + + // +kubebuilder:validation:Optional + DisableMetric bool `json:"disableMetric"` + + // MetricInterval the interval of podmonitor metric scraping in string + // +kubebuilder:validation:Optional + MetricInterval string `json:"metricInterval"` + + // ToolImage specify tool image to merge milvus config to original one in image, default uses same image as milvus-operator + // +kubebuilder:validation:Optional + ToolImage string `json:"toolImage,omitempty"` + + // UpdateToolImage when milvus-operator upgraded, whether milvus should restart to update the tool image, too + // otherwise, the tool image will be updated when milvus deploy's podTemplate changed + // +kubebuilder:validation:Optional + UpdateToolImage bool `json:"updateToolImage,omitempty"` + + // UpdateConfigMapOnly when enabled, will not rollout pods. By default pods will be restarted when configmap changed + // +kubebuilder:validation:Optional + UpdateConfigMapOnly bool `json:"updateConfigMapOnly,omitempty"` + + // +kubebuilder:validation:Optional + Proxy *MilvusProxy `json:"proxy,omitempty"` + + // +kubebuilder:validation:Optional + MixCoord *MilvusMixCoord `json:"mixCoord,omitempty"` + + // +kubebuilder:validation:Optional + RootCoord *MilvusRootCoord `json:"rootCoord,omitempty"` + + // +kubebuilder:validation:Optional + IndexCoord *MilvusIndexCoord `json:"indexCoord,omitempty"` + + // +kubebuilder:validation:Optional + DataCoord *MilvusDataCoord `json:"dataCoord,omitempty"` + + // +kubebuilder:validation:Optional + QueryCoord *MilvusQueryCoord `json:"queryCoord,omitempty"` + + // +kubebuilder:validation:Optional + IndexNode *MilvusIndexNode `json:"indexNode,omitempty"` + + // +kubebuilder:validation:Optional + DataNode *MilvusDataNode `json:"dataNode,omitempty"` + + // +kubebuilder:validation:Optional + QueryNode *MilvusQueryNode `json:"queryNode,omitempty"` + + // +kubebuilder:validation:Optional + Standalone *MilvusStandalone `json:"standalone,omitempty"` +} + +type Component struct { + ComponentSpec `json:",inline"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Minimum=0 + Replicas *int32 `json:"replicas,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=65535 + // not used for now + Port int32 `json:"port,omitempty"` + + // SideCars is same as []corev1.Container, we use a Values here to avoid the CRD become too large + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + SideCars []Values `json:"sidecars,omitempty"` + + // SideCars is same as []corev1.Container, we use a Values here to avoid the CRD become too large + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + InitContainers []Values `json:"initContainers,omitempty"` +} + +type MilvusQueryNode struct { + Component `json:",inline"` +} + +type MilvusDataNode struct { + Component `json:",inline"` +} + +type MilvusIndexNode struct { + Component `json:",inline"` +} + +type MilvusProxy struct { + ServiceComponent `json:",inline"` +} + +// MilvusMixCoord is a mixture of rootCoord, indexCoord, queryCoord & dataCoord +type MilvusMixCoord struct { + Component `json:",inline"` +} + +type MilvusRootCoord struct { + Component `json:",inline"` +} + +type MilvusDataCoord struct { + Component `json:",inline"` +} + +type MilvusQueryCoord struct { + Component `json:",inline"` +} + +type MilvusIndexCoord struct { + Component `json:",inline"` +} + +type MilvusStandalone struct { + ServiceComponent `json:",inline"` +} + +// ServiceComponent is the milvus component that exposes service +type ServiceComponent struct { + Component `json:",inline"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum={"ClusterIP", "NodePort", "LoadBalancer"} + // +kubebuilder:default="ClusterIP" + ServiceType corev1.ServiceType `json:"serviceType,omitempty"` + + // +kubebuilder:validation:Optional + ServiceRestfulPort int32 `json:"serviceRestfulPort,omitempty"` + + // +kubebuilder:validation:Optional + ServiceLabels map[string]string `json:"serviceLabels,omitempty"` + + // +kubebuilder:validation:Optional + ServiceAnnotations map[string]string `json:"serviceAnnotations,omitempty"` + + // +kubebuilder:validation:Optional + Ingress *MilvusIngress `json:"ingress,omitempty"` +} diff --git a/apis/milvus.io/v1beta1/dependencies_types.go b/apis/milvus.io/v1beta1/dependencies_types.go new file mode 100644 index 00000000..c00749e3 --- /dev/null +++ b/apis/milvus.io/v1beta1/dependencies_types.go @@ -0,0 +1,132 @@ +package v1beta1 + +type DependencyDeletionPolicy string + +const ( + DeletionPolicyDelete DependencyDeletionPolicy = "Delete" + DeletionPolicyRetain DependencyDeletionPolicy = "Retain" +) + +const ( + StorageTypeMinIO = "MinIO" + StorageTypeS3 = "S3" + StorageTypeAzure = "Azure" +) + +type MilvusDependencies struct { + // +kubebuilder:validation:Optional + Etcd MilvusEtcd `json:"etcd"` + + // +kubebuilder:validation:Enum:={"pulsar", "kafka", "rocksmq", "natsmq", "custom", ""} + // +kubebuilder:validation:Optional + // MsgStreamType default to pulsar for cluster, rocksmq for standalone + MsgStreamType MsgStreamType `json:"msgStreamType,omitempty"` + + // +kubebuilder:validation:Optional + Pulsar MilvusPulsar `json:"pulsar,omitempty"` + + // +kubebuilder:validation:Optional + Kafka MilvusKafka `json:"kafka,omitempty"` + + // +kubebuilder:validation:Optional + RocksMQ MilvusBuildInMQ `json:"rocksmq,omitempty"` + + // +kubebuilder:validation:Optional + NatsMQ MilvusBuildInMQ `json:"natsmq,omitempty"` + + // +kubebuilder:validation:Optional + Storage MilvusStorage `json:"storage"` + + // CustomMsgStream user can implements reconciler on this field + // milvus-operator will not check the mq status + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + // +nullable + CustomMsgStream Values `json:"customMsgStream,omitempty"` +} + +type MsgStreamType string + +const ( + MsgStreamTypePulsar MsgStreamType = "pulsar" + MsgStreamTypeKafka MsgStreamType = "kafka" + MsgStreamTypeRocksMQ MsgStreamType = "rocksmq" + MsgStreamTypeNatsMQ MsgStreamType = "natsmq" + MsgStreamTypeCustom MsgStreamType = "custom" +) + +type MilvusEtcd struct { + // +kubebuilder:validation:Optional + Endpoints []string `json:"endpoints"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` +} + +type InClusterConfig struct { + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Values Values `json:"values,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum:={"Delete", "Retain"} + // +kubebuilder:default:="Retain" + DeletionPolicy DependencyDeletionPolicy `json:"deletionPolicy"` + + // +kubebuilder:validation:Optional + PVCDeletion bool `json:"pvcDeletion,omitempty"` +} + +type MilvusStorage struct { + // +kubebuilder:default:="MinIO" + // +kubebuilder:validation:Enum:={"MinIO", "S3", "Azure", ""} + // +kubebuilder:validation:Optional + Type string `json:"type"` + + // +kubebuilder:validation:Optional + SecretRef string `json:"secretRef"` + + // +kubebuilder:validation:Optional + Endpoint string `json:"endpoint"` + + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` +} + +// MilvusBuildInMQ (rocksmq or natsmq) configuration +type MilvusBuildInMQ struct { + Persistence Persistence `json:"persistence,omitempty"` +} + +type MilvusPulsar struct { + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + Endpoint string `json:"endpoint"` +} + +// MilvusKafka configuration +type MilvusKafka struct { + // +kubebuilder:validation:Optional + InCluster *InClusterConfig `json:"inCluster,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:default:=false + External bool `json:"external,omitempty"` + + // +kubebuilder:validation:Optional + BrokerList []string `json:"brokerList,omitempty"` +} diff --git a/apis/milvus.io/v1beta1/doc.go b/apis/milvus.io/v1beta1/doc.go new file mode 100644 index 00000000..b40db4da --- /dev/null +++ b/apis/milvus.io/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package +// +groupName=milvus.io + +package v1beta1 diff --git a/apis/milvus.io/v1beta1/groupversion_info.go b/apis/milvus.io/v1beta1/groupversion_info.go new file mode 100644 index 00000000..884fa576 --- /dev/null +++ b/apis/milvus.io/v1beta1/groupversion_info.go @@ -0,0 +1,44 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// package v1beta1 contains API Schema definitions for the v1beta1 API group +// +kubebuilder:object:generate=true +// +groupName=milvus.io +package v1beta1 + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/scheme" +) + +var ( + // GroupVersion is group version used to register these objects + GroupVersion = schema.GroupVersion{Group: "milvus.io", Version: "v1beta1"} + + // for code-generator + SchemeGroupVersion = GroupVersion + + // SchemeBuilder is used to add go types to the GroupVersionKind scheme + SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return GroupVersion.WithResource(resource).GroupResource() +} diff --git a/apis/milvus.io/v1beta1/groupversion_info_test.go b/apis/milvus.io/v1beta1/groupversion_info_test.go new file mode 100644 index 00000000..1ff3c765 --- /dev/null +++ b/apis/milvus.io/v1beta1/groupversion_info_test.go @@ -0,0 +1,13 @@ +package v1beta1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestResource(t *testing.T) { + ret := Resource("test") + assert.Equal(t, "milvus.io", ret.Group) + assert.Equal(t, "test", ret.Resource) +} diff --git a/apis/milvus.io/v1beta1/label_annotations.go b/apis/milvus.io/v1beta1/label_annotations.go new file mode 100644 index 00000000..90b03c62 --- /dev/null +++ b/apis/milvus.io/v1beta1/label_annotations.go @@ -0,0 +1,111 @@ +package v1beta1 + +import ( + "strconv" + + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + MilvusIO = "milvus.io/" + OperatorVersionLabel = MilvusIO + "operator-version" + // DependencyValuesLegacySyncedAnnotation : For legacy versions before v0.5.1, default value is not set to CR. + // So if they upgrade to v0.5.1+, if the dependency default values in milvus-helm updated + // the inCluster dependencies will get restarted. So we sync defaults first to prevent this + DependencyValuesLegacySyncedAnnotation = MilvusIO + "dependency-values-legacy-synced" + DependencyValuesMergedAnnotation = MilvusIO + "dependency-values-merged" + LegacyVersion = "v0.5.0-legacy" + FalseStr = "false" + TrueStr = "true" + UpgradeAnnotation = MilvusIO + "upgrade" + AnnotationUpgrading = "upgrading" + AnnotationUpgraded = "upgraded" + StoppedAtAnnotation = MilvusIO + "stopped-at" + + // PodServiceLabelAddedAnnotation is to indicate whether the milvus.io/service=true label is added to proxy & standalone pods + // previously, we use milvus.io/component: proxy / standalone; to select the service pods + // but now we want to support a standalone updating to cluster without downtime + // so instead we use milvus.io/service="true" to select the service pods + PodServiceLabelAddedAnnotation = MilvusIO + "pod-service-label-added" + // ServiceLabel is the label to indicate whether the pod is a service pod + ServiceLabel = MilvusIO + "service" + + // query node rolling related labels + MilvusIOLabelQueryNodeGroupId = MilvusIO + "querynode-group-id" + MilvusIOLabelQueryNodeRolling = MilvusIO + "querynode-rolling-id" + // query node rolling related annotations + MilvusIOAnnotationCurrentQueryNodeGroupId = MilvusIO + "current-querynode-group-id" + MilvusIOAnnotationChangingQueryNodeMode = MilvusIO + "changing-querynode-mode" +) + +// +kubebuilder:object:generate=false +type LabelsImpl struct{} + +var singletonLabels = &LabelsImpl{} + +func Labels() *LabelsImpl { + return singletonLabels +} + +func (LabelsImpl) IsChangeQueryNodeMode(m Milvus) bool { + return m.Annotations[MilvusIOAnnotationChangingQueryNodeMode] == TrueStr +} + +func (LabelsImpl) SetChangingQueryNodeMode(m *Milvus, changing bool) { + if changing { + m.Annotations[MilvusIOAnnotationChangingQueryNodeMode] = TrueStr + return + } + delete(m.Annotations, MilvusIOAnnotationChangingQueryNodeMode) +} + +func (LabelsImpl) GetLabelQueryNodeGroupID(obj client.Object) string { + labels := obj.GetLabels() + if len(labels) < 1 { + return "" + } + return labels[MilvusIOLabelQueryNodeGroupId] +} + +func (l LabelsImpl) SetQueryNodeGroupID(labels map[string]string, groupId int) { + l.SetQueryNodeGroupIDStr(labels, strconv.Itoa(groupId)) +} + +func (l LabelsImpl) SetQueryNodeGroupIDStr(labels map[string]string, groupIdStr string) { + labels[MilvusIOLabelQueryNodeGroupId] = groupIdStr +} + +func (LabelsImpl) GetCurrentQueryNodeGroupId(m *Milvus) string { + annot := m.GetAnnotations() + if len(annot) < 1 { + return "" + } + return annot[MilvusIOAnnotationCurrentQueryNodeGroupId] +} + +func (l LabelsImpl) SetCurrentQueryNodeGroupID(m *Milvus, groupId int) { + l.SetCurrentQueryNodeGroupIDStr(m, strconv.Itoa(groupId)) +} + +func (LabelsImpl) SetCurrentQueryNodeGroupIDStr(m *Milvus, groupId string) { + m.Annotations[MilvusIOAnnotationCurrentQueryNodeGroupId] = groupId +} + +// IsQueryNodeRolling: if not empty, it means the query node has no rolling in progress +func (LabelsImpl) IsQueryNodeRolling(m Milvus) bool { + return len(m.Labels[MilvusIOLabelQueryNodeRolling]) > 0 +} + +func (LabelsImpl) GetQueryNodeRollingId(m Milvus) string { + return m.Labels[MilvusIOLabelQueryNodeRolling] +} + +func (LabelsImpl) SetQueryNodeRolling(m *Milvus, rolling bool) { + if rolling { + if len(m.Labels[MilvusIOLabelQueryNodeRolling]) == 0 { + m.Labels[MilvusIOLabelQueryNodeRolling] = strconv.Itoa(int(m.GetGeneration())) + } + return + } + delete(m.Labels, MilvusIOLabelQueryNodeRolling) +} diff --git a/apis/milvus.io/v1beta1/label_annotations_test.go b/apis/milvus.io/v1beta1/label_annotations_test.go new file mode 100644 index 00000000..8403feb1 --- /dev/null +++ b/apis/milvus.io/v1beta1/label_annotations_test.go @@ -0,0 +1,52 @@ +package v1beta1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLabelsImpl_IsChangeQueryNodeMode_SetChangingQueryNodeMode(t *testing.T) { + mc := Milvus{} + mc.Default() + assert.False(t, Labels().IsChangeQueryNodeMode(mc)) + Labels().SetChangingQueryNodeMode(&mc, true) + assert.True(t, Labels().IsChangeQueryNodeMode(mc)) + Labels().SetChangingQueryNodeMode(&mc, false) + assert.False(t, Labels().IsChangeQueryNodeMode(mc)) +} + +func TestLabelsImpl_GetLabelQueryNodeGroupID_SetQueryNodeGroupID(t *testing.T) { + mc := Milvus{} + mc.Default() + assert.Equal(t, "", Labels().GetLabelQueryNodeGroupID(&mc)) + Labels().SetQueryNodeGroupID(mc.Labels, 1) + assert.Equal(t, "1", Labels().GetLabelQueryNodeGroupID(&mc)) + Labels().SetQueryNodeGroupID(mc.Labels, 0) + assert.Equal(t, "0", Labels().GetLabelQueryNodeGroupID(&mc)) + +} + +func TestLabelsImpl_GetCurrentQueryNodeGroupId_SetCurrentQueryNodeGroupID(t *testing.T) { + mc := Milvus{} + mc.Default() + assert.Equal(t, "", Labels().GetCurrentQueryNodeGroupId(&mc)) + Labels().SetCurrentQueryNodeGroupID(&mc, 1) + assert.Equal(t, "1", Labels().GetCurrentQueryNodeGroupId(&mc)) + Labels().SetCurrentQueryNodeGroupID(&mc, 0) + assert.Equal(t, "0", Labels().GetCurrentQueryNodeGroupId(&mc)) +} + +func TestLabelsImpl_IsQueryNodeRolling_GetQueryNodeRollingId_SetQueryNodeRolling(t *testing.T) { + mc := Milvus{} + mc.Generation = 1 + mc.Default() + assert.False(t, Labels().IsQueryNodeRolling(mc)) + assert.Equal(t, "", Labels().GetQueryNodeRollingId(mc)) + Labels().SetQueryNodeRolling(&mc, true) + assert.True(t, Labels().IsQueryNodeRolling(mc)) + assert.Equal(t, "1", Labels().GetQueryNodeRollingId(mc)) + Labels().SetQueryNodeRolling(&mc, false) + assert.False(t, Labels().IsQueryNodeRolling(mc)) + assert.Equal(t, "", Labels().GetQueryNodeRollingId(mc)) +} diff --git a/apis/milvus.io/v1beta1/milvus_types.go b/apis/milvus.io/v1beta1/milvus_types.go new file mode 100644 index 00000000..2f06c04a --- /dev/null +++ b/apis/milvus.io/v1beta1/milvus_types.go @@ -0,0 +1,462 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "strings" + "time" + + "github.com/coreos/go-semver/semver" + "github.com/milvus-io/milvus-operator/pkg/provisioner" + "github.com/pkg/errors" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + networkv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// MilvusSpec defines the desired state of Milvus +type MilvusSpec struct { + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum:={"cluster", "standalone"} + // +kubebuilder:default:="standalone" + Mode MilvusMode `json:"mode,omitempty"` + + // +kubebuilder:validation:Optional + Com MilvusComponents `json:"components,omitempty"` + + // +kubebuilder:validation:Optional + Dep MilvusDependencies `json:"dependencies,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + Conf Values `json:"config,omitempty"` + + // +kubebuilder:validation:Optional + // +kubebuilder:pruning:PreserveUnknownFields + // +nullable + HookConf Values `json:"hookConfig,omitempty"` +} + +// IsStopping returns true if the MilvusSpec has replicas serving +func (ms MilvusSpec) IsStopping() bool { + if *ms.Com.Standalone.Replicas != 0 { + return false + } + if ms.Mode == MilvusModeStandalone { + return true + } + // cluster + if ms.Com.MixCoord != nil { + if *ms.Com.MixCoord.Replicas != 0 { + return false + } + } else { + // not mixcoord + if *ms.Com.IndexCoord.Replicas != 0 { + return false + } + if *ms.Com.DataCoord.Replicas != 0 { + return false + } + if *ms.Com.QueryCoord.Replicas != 0 { + return false + } + if *ms.Com.RootCoord.Replicas != 0 { + return false + } + } + if *ms.Com.Proxy.Replicas != 0 { + return false + } + if *ms.Com.DataNode.Replicas != 0 { + return false + } + if *ms.Com.IndexNode.Replicas != 0 { + return false + } + if *ms.Com.QueryNode.Replicas != 0 { + return false + } + return true +} + +func (ms MilvusSpec) GetServiceComponent() *ServiceComponent { + if ms.Mode == MilvusModeCluster { + return &ms.Com.Proxy.ServiceComponent + } + return &ms.Com.Standalone.ServiceComponent +} + +// GetMilvusVersionByImage returns the version of Milvus by ms.Com.ComponentSpec.Image +func (ms MilvusSpec) GetMilvusVersionByImage() (*semver.Version, error) { + // parse format: registry/namespace/image:tag + splited := strings.Split(ms.Com.ComponentSpec.Image, ":") + if len(splited) != 2 { + return nil, errors.Errorf("unknown version of image[%s]", splited[0]) + } + return provisioner.GetSemanticVersion(splited[1]) +} + +func (ms *MilvusSpec) GetPersistenceConfig() *Persistence { + switch ms.Dep.MsgStreamType { + case MsgStreamTypeRocksMQ: + return &ms.Dep.RocksMQ.Persistence + case MsgStreamTypeNatsMQ: + return &ms.Dep.NatsMQ.Persistence + } + return nil +} + +// MilvusMode defines the mode of Milvus deployment +type MilvusMode string + +const ( + MilvusModeCluster MilvusMode = "cluster" + MilvusModeStandalone MilvusMode = "standalone" +) + +// MilvusStatus defines the observed state of Milvus +type MilvusStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // Status indicates the overall status of the Milvus + // Status can be "Pending", "Healthy", "Unhealthy", "Stopped" + // +kubebuilder:default:="Pending" + Status MilvusHealthStatus `json:"status"` + + // Conditions of each components + Conditions []MilvusCondition `json:"conditions,omitempty"` + + // Endpoint of milvus cluster + Endpoint string `json:"endpoint,omitempty"` + + // IngressStatus of the ingress created by milvus + IngressStatus networkv1.IngressStatus `json:"ingress,omitempty"` + + // DeprecatedReplicas is deprecated, will be removed in next major version, use ComponentsDeployStatus instead + // DeprecatedReplicas is the number of updated replicas in ready status + // +kubebuilder:validation:Optional + DeprecatedReplicas MilvusReplicas `json:"replicas,omitempty"` + + // ComponentsDeployStatus contains the map of component's name to the status of each component deployment + // it is used to check the status of rolling update of each component + // +optional + ComponentsDeployStatus map[string]ComponentDeployStatus `json:"componentsDeployStatus,omitempty"` + + // RollingMode is the version of rolling mode the milvus CR is using + RollingMode RollingMode `json:"rollingModeVersion,omitempty"` + + // ObservedGeneration has same usage as deployment.status.observedGeneration + // it represents the .metadata.generation that the condition was set based upon. + // For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + // with respect to the current state of the instance. + // +optional + // +kubebuilder:validation:Minimum=0 + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"` +} + +// RollingMode we have changed our rolling mode several times, so we use this enum to track the version of rolling mode the milvus CR is using +type RollingMode int + +// RollingMode definitions +const ( + RollingModeNotSet RollingMode = iota + // this mode has 1 query node deployment, uses k8s deployment's default rolling update strategy + RollingModeV1 + // this mode has 2 query node deployment, operator takes care of querynode rolling update + RollingModeV2 +) + +type ComponentDeployStatus struct { + // Generation of the deployment + Generation int64 `json:"generation"` + // Image of the deployment + // it's used to check if the component is updated in rolling update + Image string `json:"image"` + // Status of the deployment + Status appsv1.DeploymentStatus `json:"status"` +} + +// DeploymentState is defined according to https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#deployment-status +// It's enum of "Progressing", "Complete", "Failed", "Paused" +type DeploymentState string + +const ( + DeploymentProgressing DeploymentState = "Progressing" + DeploymentComplete DeploymentState = "Complete" + DeploymentFailed DeploymentState = "Failed" + DeploymentPaused DeploymentState = "Paused" +) + +var ( + // NewReplicaSetAvailableReason is the Complelete Reason + NewReplicaSetAvailableReason = "NewReplicaSetAvailable" + DeploymentPausedReason = "DeploymentPaused" +) + +func (c ComponentDeployStatus) GetState() DeploymentState { + if c.Status.ObservedGeneration < c.Generation { + return DeploymentProgressing + } + processingCondition := getDeploymentConditionByType(c.Status.Conditions, appsv1.DeploymentProgressing) + if processingCondition == nil { + return DeploymentProgressing + } + if processingCondition.Reason == DeploymentPausedReason { + return DeploymentPaused + } + if processingCondition.Status != corev1.ConditionTrue { + return DeploymentFailed + } + // we may get bad conclusion when strategy is recreate: https://github.com/kubernetes/kubernetes/issues/115538 + if processingCondition.Reason == NewReplicaSetAvailableReason { + return DeploymentComplete + } + return DeploymentProgressing +} + +// getDeploymentConditionByType returns the condition with the provided type. if no condition is found, return nil +func getDeploymentConditionByType(conditions []appsv1.DeploymentCondition, conditionType appsv1.DeploymentConditionType) *appsv1.DeploymentCondition { + for _, condition := range conditions { + if condition.Type == conditionType { + return &condition + } + } + return nil +} + +// MilvusReplicas is the replicas of milvus components +type MilvusReplicas struct { + //+kubebuilder:validation:Optional + Proxy int `json:"proxy,omitempty"` + //+kubebuilder:validation:Optional + MixCoord int `json:"mixCoord,omitempty"` + //+kubebuilder:validation:Optional + RootCoord int `json:"rootCoord,omitempty"` + //+kubebuilder:validation:Optional + DataCoord int `json:"dataCoord,omitempty"` + //+kubebuilder:validation:Optional + IndexCoord int `json:"indexCoord,omitempty"` + //+kubebuilder:validation:Optional + QueryCoord int `json:"queryCoord,omitempty"` + //+kubebuilder:validation:Optional + DataNode int `json:"dataNode,omitempty"` + //+kubebuilder:validation:Optional + IndexNode int `json:"indexNode,omitempty"` + //+kubebuilder:validation:Optional + QueryNode int `json:"queryNode,omitempty"` + //+kubebuilder:validation:Optional + Standalone int `json:"standalone,omitempty"` +} + +// MilvusIngress defines the ingress of MilvusCluster +// TODO: add docs +type MilvusIngress struct { + // +kubebuilder:validation:Optional + Labels map[string]string `json:"labels,omitempty"` + + // +kubebuilder:validation:Optional + Annotations map[string]string `json:"annotations,omitempty"` + + // +kubebuilder:validation:Optional + IngressClassName *string `json:"ingressClassName,omitempty"` + + // +kubebuilder:validation:Optional + Hosts []string `json:"hosts,omitempty"` + + // TLSSecretRefs is a map of TLS secret to hosts + // +kubebuilder:validation:Optional + TLSSecretRefs map[string][]string `json:"tlsSecretRefs,omitempty"` +} + +// MilvusCondition contains details for the current condition of this milvus/milvus cluster instance +type MilvusCondition struct { + // Type is the type of the condition. + Type MilvusConditionType `json:"type"` + // Status is the status of the condition. + // Can be True, False, Unknown. + Status corev1.ConditionStatus `json:"status"` + // Last time the condition transitioned from one status to another. + // +optional + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + // Unique, one-word, CamelCase reason for the condition's last transition. + // +optional + Reason string `json:"reason,omitempty"` + // Human-readable message indicating details about last transition. + // +optional + Message string `json:"message,omitempty"` +} + +// InitLabelAnnotation init nil label and annotation for object +func InitLabelAnnotation(obj client.Object) { + if obj.GetAnnotations() == nil { + obj.SetAnnotations(make(map[string]string)) + } + if obj.GetLabels() == nil { + obj.SetLabels(make(map[string]string)) + } +} + +func GetMilvusConditionByType(status *MilvusStatus, conditionType MilvusConditionType) *MilvusCondition { + for _, condition := range status.Conditions { + if condition.Type == conditionType { + return &condition + } + } + return nil +} + +func (m *Milvus) SetStoppedAtAnnotation(t time.Time) { + m.GetAnnotations()[StoppedAtAnnotation] = t.Format(time.RFC3339) +} + +func (m *Milvus) RemoveStoppedAtAnnotation() { + delete(m.GetAnnotations(), StoppedAtAnnotation) +} + +// MilvusConditionType is a valid value for MilvusConditionType.Type. +type MilvusConditionType string + +// MilvusHealthStatus is a type for milvus status. +type MilvusHealthStatus string + +const ( + // StatusPending is the status of creating or restarting. + StatusPending MilvusHealthStatus = "Pending" + // StatusHealthy is the status of healthy. + StatusHealthy MilvusHealthStatus = "Healthy" + // StatusUnhealthy is the status of unhealthy. + StatusUnhealthy MilvusHealthStatus = "Unhealthy" + // StatusDeleting is the status of deleting. + StatusDeleting MilvusHealthStatus = "Deleting" + // StatusStopped is the status of stopped. + StatusStopped MilvusHealthStatus = "Stopped" + + // EtcdReady means the Etcd is ready. + EtcdReady MilvusConditionType = "EtcdReady" + // StorageReady means the Storage is ready. + StorageReady MilvusConditionType = "StorageReady" + // MsgStreamReady means the MsgStream is ready. + MsgStreamReady MilvusConditionType = "MsgStreamReady" + // MilvusReady means all components of Milvus are ready. + MilvusReady MilvusConditionType = "MilvusReady" + // MilvusUpdated means the Milvus has updated according to its spec. + MilvusUpdated MilvusConditionType = "MilvusUpdated" + + // ReasonEndpointsHealthy means the endpoint is healthy + ReasonEndpointsHealthy string = "EndpointsHealthy" + // ReasonMilvusHealthy means milvus cluster is healthy + ReasonMilvusHealthy string = "ReasonMilvusHealthy" + // ReasonMilvusComponentNotHealthy means at least one of milvus component is not healthy + ReasonMilvusComponentNotHealthy string = "MilvusComponentNotHealthy" + // ReasonMilvusStopped means milvus cluster is stopped + ReasonMilvusStopped string = "MilvusStopped" + // ReasonMilvusStopping means milvus cluster is stopping + ReasonMilvusStopping string = "MilvusStopping" + // ReasonMilvusComponentsUpdated means milvus components are updated + ReasonMilvusComponentsUpdated string = "MilvusComponentsUpdated" + // ReasonMilvusComponentsUpdating means some milvus components are not updated + ReasonMilvusComponentsUpdating string = "MilvusComponentsUpdating" + // ReasonMilvusUpgradingImage means milvus is upgrading image + ReasonMilvusUpgradingImage string = "MilvusUpgradingImage" + // ReasonMilvusDowngradingImage means milvus is downgrading image + ReasonMilvusDowngradingImage string = "MilvusDowngradingImage" + + ReasonEtcdReady = "EtcdReady" + ReasonEtcdNotReady = "EtcdNotReady" + ReasonS3Ready = "S3StorageAssumeReady" + ReasonStorageReady = "StorageReady" + ReasonStorageNotReady = "StorageNotReady" + ReasonMsgStreamReady = "MsgStreamReady" + ReasonMsgStreamNotReady = "MsgStreamNotReady" + ReasonSecretNotExist = "SecretNotExist" + ReasonSecretErr = "SecretError" + ReasonSecretDecodeErr = "SecretDecodeError" + ReasonClientErr = "ClientError" + ReasonDependencyNotReady = "DependencyNotReady" + + MsgMilvusHasTerminatingPods = "Milvus has terminating pods" +) + +// +genclient +// +genclient:noStatus +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:path=milvuses,singular=milvus,shortName=mi +// +kubebuilder:storageversion +// +kubebuilder:printcolumn:name="Mode",type="string",JSONPath=".spec.mode",description="Milvus mode" +// +kubebuilder:printcolumn:name="Status",type="string",JSONPath=".status.status",description="Milvus status" +// +kubebuilder:printcolumn:name="Updated",type="string",JSONPath=".status.conditions[?(@.type==\"MilvusUpdated\")].status",description="Milvus updated" +// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp" +// Milvus is the Schema for the milvus API +type Milvus struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MilvusSpec `json:"spec,omitempty"` + Status MilvusStatus `json:"status,omitempty"` +} + +func (m *Milvus) IsFirstTimeStarting() bool { + return len(m.Status.Status) < 1 +} + +func (m *Milvus) IsChangingMode() bool { + if m.Spec.Mode == MilvusModeStandalone { + return false + } + // is cluster + if m.Spec.Com.Standalone == nil { + return false + } + return m.Spec.Com.Standalone.Replicas != nil && *m.Spec.Com.Standalone.Replicas > 0 +} + +func (m *Milvus) IsPodServiceLabelAdded() bool { + if len(m.Annotations) < 1 { + return false + } + return m.Annotations[PodServiceLabelAddedAnnotation] == TrueStr +} + +// Hub marks this type as a conversion hub. +func (*Milvus) Hub() {} + +func (m *Milvus) IsRollingUpdateEnabled() bool { + return m.Spec.Com.EnableRollingUpdate != nil && *m.Spec.Com.EnableRollingUpdate +} + +// +kubebuilder:object:root=true +// MilvusList contains a list of Milvus +type MilvusList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Milvus `json:"items"` +} + +func init() { + SchemeBuilder.Register(&Milvus{}, &MilvusList{}) +} diff --git a/apis/milvus.io/v1beta1/milvus_types_test.go b/apis/milvus.io/v1beta1/milvus_types_test.go new file mode 100644 index 00000000..f87ef12e --- /dev/null +++ b/apis/milvus.io/v1beta1/milvus_types_test.go @@ -0,0 +1,231 @@ +package v1beta1 + +import ( + "log" + "testing" + "time" + + "github.com/milvus-io/milvus-operator/pkg/util" + "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" +) + +func TestGetMilvusConditionByType(t *testing.T) { + s := &MilvusStatus{} + ret := GetMilvusConditionByType(s, MilvusReady) + assert.Nil(t, ret) + + s.Conditions = []MilvusCondition{ + { + Type: MilvusReady, + }, + } + ret = GetMilvusConditionByType(s, MilvusReady) + assert.NotNil(t, ret) +} + +func Test_SetStoppedAtAnnotation_RemoveStoppedAtAnnotation(t *testing.T) { + myTimeStr := "2020-01-01T00:00:00Z" + myTime, _ := time.Parse(time.RFC3339, myTimeStr) + m := &Milvus{} + InitLabelAnnotation(m) + m.SetStoppedAtAnnotation(myTime) + assert.Equal(t, m.GetAnnotations()[StoppedAtAnnotation], myTimeStr) + m.RemoveStoppedAtAnnotation() + _, exists := m.GetAnnotations()[StoppedAtAnnotation] + assert.False(t, exists) +} + +func TestComponentDeployStatus_GetState(t *testing.T) { + c := &ComponentDeployStatus{ + Generation: 1, + } + t.Run("no status, progressing", func(t *testing.T) { + + assert.Equal(t, c.GetState(), DeploymentProgressing) + }) + + c.Generation = 2 + c.Status.ObservedGeneration = 1 + t.Run("new generation not observed, progressing", func(t *testing.T) { + assert.Equal(t, c.GetState(), DeploymentProgressing) + }) + + c.Status.ObservedGeneration = 2 + t.Run("condition progressing not found, progressing", func(t *testing.T) { + + assert.Equal(t, c.GetState(), DeploymentProgressing) + }) + + t.Run("failed", func(t *testing.T) { + c.Status.Conditions = []appsv1.DeploymentCondition{ + { + Type: appsv1.DeploymentProgressing, + Status: corev1.ConditionFalse, + }, + } + assert.Equal(t, c.GetState(), DeploymentFailed) + }) + + t.Run("complete", func(t *testing.T) { + c.Status.Conditions = []appsv1.DeploymentCondition{ + { + Type: appsv1.DeploymentProgressing, + Status: corev1.ConditionTrue, + Reason: NewReplicaSetAvailableReason, + }, + } + assert.Equal(t, c.GetState(), DeploymentComplete) + }) + + t.Run("progressing", func(t *testing.T) { + c.Status.Conditions = []appsv1.DeploymentCondition{ + { + Type: appsv1.DeploymentProgressing, + Status: corev1.ConditionTrue, + Reason: "test", + }, + } + assert.Equal(t, c.GetState(), DeploymentProgressing) + }) +} + +func TestMilvusSpec_IsStopping(t *testing.T) { + m := &Milvus{} + m.Default() + t.Run("standalone not stopping", func(t *testing.T) { + assert.False(t, m.Spec.IsStopping()) + }) + + replica0 := int32(0) + com := &m.Spec.Com + t.Run("standalone stopping", func(t *testing.T) { + com.Standalone.Replicas = &replica0 + assert.True(t, m.Spec.IsStopping()) + }) + + m.Spec.Mode = MilvusModeCluster + com.MixCoord = &MilvusMixCoord{} + m.Default() + log.Print(m) + com.Proxy.Replicas = &replica0 + com.IndexNode.Replicas = &replica0 + com.DataNode.Replicas = &replica0 + com.QueryNode.Replicas = &replica0 + t.Run("mixcoord not stopping", func(t *testing.T) { + assert.False(t, m.Spec.IsStopping()) + }) + + com.MixCoord.Replicas = &replica0 + t.Run("mixcoord stopping", func(t *testing.T) { + assert.True(t, m.Spec.IsStopping()) + }) + + com.MixCoord = nil + m.Default() + t.Run("cluster not stopping", func(t *testing.T) { + assert.False(t, m.Spec.IsStopping()) + }) + + com.RootCoord.Replicas = &replica0 + com.IndexCoord.Replicas = &replica0 + com.DataCoord.Replicas = &replica0 + com.QueryCoord.Replicas = &replica0 + t.Run("cluster stopping", func(t *testing.T) { + assert.True(t, m.Spec.IsStopping()) + }) +} + +func TestGetServiceComponent(t *testing.T) { + m := Milvus{} + m.Default() + assert.Equal(t, &m.Spec.Com.Standalone.ServiceComponent, m.Spec.GetServiceComponent()) + + m = Milvus{} + m.Spec.Mode = MilvusModeCluster + m.Default() + assert.Equal(t, &m.Spec.Com.Proxy.ServiceComponent, m.Spec.GetServiceComponent()) +} + +func TestIsRollingUpdateEnabled(t *testing.T) { + m := Milvus{} + m.Default() + assert.False(t, m.IsRollingUpdateEnabled()) + + m.Spec.Com.EnableRollingUpdate = util.BoolPtr(false) + assert.False(t, m.IsRollingUpdateEnabled()) + + m.Spec.Com.EnableRollingUpdate = util.BoolPtr(true) + assert.True(t, m.IsRollingUpdateEnabled()) +} + +func TestMilvus_IsChangingMode(t *testing.T) { + m := Milvus{} + + t.Run("standalone", func(t *testing.T) { + m.Default() + assert.False(t, m.IsChangingMode()) + }) + + t.Run("standalone to cluster", func(t *testing.T) { + m.Spec.Mode = MilvusModeCluster + m.Default() + assert.True(t, m.IsChangingMode()) + }) + + t.Run("standalone to cluster finished", func(t *testing.T) { + m.Spec.Com.Standalone.Replicas = nil + m.Default() + assert.False(t, m.IsChangingMode()) + }) +} + +func TestMilvus_IsPodServiceLabelAdded(t *testing.T) { + m := Milvus{} + + t.Run("new node default true", func(t *testing.T) { + m.Default() + assert.True(t, m.IsPodServiceLabelAdded()) + }) + + t.Run("old node default false", func(t *testing.T) { + m.Annotations[PodServiceLabelAddedAnnotation] = "" + assert.False(t, m.IsPodServiceLabelAdded()) + }) +} + +func TestGetMilvusVersionByGlobalImage(t *testing.T) { + m := Milvus{} + _, err := m.Spec.GetMilvusVersionByImage() + assert.Error(t, err) + + m.Default() + _, err = m.Spec.GetMilvusVersionByImage() + assert.NoError(t, err) + + m.Spec.Com.ComponentSpec.Image = "milvusdb/milvus:v2.3.1-beta1" + ver, err := m.Spec.GetMilvusVersionByImage() + assert.NoError(t, err) + assert.Equal(t, int64(2), ver.Major) + assert.Equal(t, int64(3), ver.Minor) + assert.Equal(t, int64(1), ver.Patch) + assert.Equal(t, "beta1", ver.PreRelease.Slice()[0]) + + m.Spec.Com.ComponentSpec.Image = "harbor.milvus.io/milvus/milvus:latest" + _, err = m.Spec.GetMilvusVersionByImage() + assert.Error(t, err) +} + +func TestGetPersistenceConfig(t *testing.T) { + m := Milvus{} + m.Spec.Dep.MsgStreamType = MsgStreamTypePulsar + assert.Nil(t, m.Spec.GetPersistenceConfig()) + + m.Spec.Dep.MsgStreamType = MsgStreamTypeRocksMQ + m.Spec.Dep.NatsMQ.Persistence.Enabled = true + assert.Same(t, &m.Spec.Dep.RocksMQ.Persistence, m.Spec.GetPersistenceConfig()) + + m.Spec.Dep.MsgStreamType = MsgStreamTypeNatsMQ + assert.Same(t, &m.Spec.Dep.NatsMQ.Persistence, m.Spec.GetPersistenceConfig()) +} diff --git a/apis/milvus.io/v1beta1/milvus_webhook.go b/apis/milvus.io/v1beta1/milvus_webhook.go new file mode 100644 index 00000000..68b541f5 --- /dev/null +++ b/apis/milvus.io/v1beta1/milvus_webhook.go @@ -0,0 +1,504 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "fmt" + "reflect" + + "github.com/milvus-io/milvus-operator/pkg/config" + "github.com/milvus-io/milvus-operator/pkg/helm/values" + "github.com/milvus-io/milvus-operator/pkg/util" + "github.com/pkg/errors" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + ctrl "sigs.k8s.io/controller-runtime" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/webhook" +) + +// log is for logging in this package. +var milvuslog = logf.Log.WithName("milvus-resource") + +func (r *Milvus) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} + +// TODO(user): EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! + +//+kubebuilder:webhook:path=/mutate-milvus-io-v1beta1-milvus,mutating=true,failurePolicy=fail,sideEffects=None,groups=milvus.io,resources=milvuses,verbs=create;update,versions=v1beta1,name=mmilvus.kb.io,admissionReviewVersions=v1 + +var _ webhook.Defaulter = &Milvus{} + +// Default implements webhook.Defaulter so a webhook will be registered for the type +func (r *Milvus) Default() { + r.DefaultMeta() + r.DefaultMode() + r.DefaultComponents() + r.DefaultDependencies() + r.DefaultConf() +} + +// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation. +//+kubebuilder:webhook:path=/validate-milvus-io-v1beta1-milvus,mutating=false,failurePolicy=fail,sideEffects=None,groups=milvus.io,resources=milvuses,verbs=create;update,versions=v1beta1,name=vmilvus.kb.io,admissionReviewVersions=v1 + +var _ webhook.Validator = &Milvus{} + +// ValidateCreate implements webhook.Validator so a webhook will be registered for the type +func (r *Milvus) ValidateCreate() error { + var allErrs field.ErrorList + if err := r.validateCommon(); err != nil { + allErrs = append(allErrs, err) + } + + if errs := r.validateExternal(); len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + + if len(allErrs) == 0 { + return nil + } + + return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Milvus"}, r.Name, allErrs) +} + +func (r *Milvus) validateCommon() *field.Error { + if err := r.validateEnableRolingUpdate(); err != nil { + return err + } + // examine values + if err := r.validatePersistConfig(); err != nil { + return err + } + return nil +} + +func (r *Milvus) validateEnableRolingUpdate() *field.Error { + if r.Spec.Com.EnableRollingUpdate == nil { + return nil + } + if !*r.Spec.Com.EnableRollingUpdate { + return nil + } + + if r.Spec.Mode == MilvusModeCluster { + return nil + } + switch r.Spec.Dep.MsgStreamType { + case MsgStreamTypeKafka, MsgStreamTypePulsar, MsgStreamTypeCustom: + return nil + } + fp := field.NewPath("spec").Child("components").Child("enableRollingUpdate") + return field.Invalid(fp, r.Spec.Com.EnableRollingUpdate, "enableRollingUpdate is not supported for msgStream rocksmq or natsmq. Set it to false or set spec.msgStreamType to kafka/pulsar") +} + +func (r *Milvus) validatePersistConfig() *field.Error { + persistconfig := r.Spec.GetPersistenceConfig() + if persistconfig == nil { + return nil + } + if err := persistconfig.PersistentVolumeClaim.Spec.AsObject(new(corev1.PersistentVolumeClaimSpec)); err != nil { + fp := field.NewPath("spec").Child("dependencies").Child("rocksmq/natsmq").Child("persistence").Child("persistentVolumeClaim").Child("spec") + return field.Invalid(fp, persistconfig, err.Error()) + } + return nil +} + +// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type +func (r *Milvus) ValidateUpdate(old runtime.Object) error { + _, ok := old.(*Milvus) + if !ok { + return errors.Errorf("failed type assertion on kind: %s", old.GetObjectKind().GroupVersionKind().String()) + } + + var allErrs field.ErrorList + if err := r.validateCommon(); err != nil { + allErrs = append(allErrs, err) + } + + if errs := r.validateExternal(); len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + + if len(allErrs) == 0 { + return nil + } + + return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: "Milvus"}, r.Name, allErrs) +} + +// ValidateDelete implements webhook.Validator so a webhook will be registered for the type +func (r *Milvus) ValidateDelete() error { + return nil +} + +func (r *Milvus) validateExternal() field.ErrorList { + var allErrs field.ErrorList + fp := field.NewPath("spec").Child("dependencies") + + if r.Spec.Dep.Etcd.External && len(r.Spec.Dep.Etcd.Endpoints) == 0 { + allErrs = append(allErrs, required(fp.Child("etcd").Child("endpoints"))) + } + + if r.Spec.Dep.Storage.External && len(r.Spec.Dep.Storage.Endpoint) == 0 { + allErrs = append(allErrs, required(fp.Child("storage").Child("endpoint"))) + } + + switch r.Spec.Dep.MsgStreamType { + case MsgStreamTypeKafka: + if r.Spec.Dep.Kafka.External && len(r.Spec.Dep.Kafka.BrokerList) == 0 { + allErrs = append(allErrs, required(fp.Child("kafka").Child("brokerList"))) + } + case MsgStreamTypePulsar: + if r.Spec.Dep.Pulsar.External && len(r.Spec.Dep.Pulsar.Endpoint) == 0 { + allErrs = append(allErrs, required(fp.Child("pulsar").Child("endpoint"))) + } + } + + return allErrs +} + +func required(mainPath *field.Path) *field.Error { + return field.Required(mainPath, fmt.Sprintf("%s should be configured", mainPath.String())) +} + +func deleteUnsettableConf(conf map[string]interface{}) { + util.DeleteValue(conf, "minio", "address") + util.DeleteValue(conf, "minio", "port") + util.DeleteValue(conf, "pulsar", "address") + util.DeleteValue(conf, "pulsar", "port") + util.DeleteValue(conf, "etcd", "endpoints") + + for _, t := range MilvusComponentTypes { + util.DeleteValue(conf, t.String(), "port") + } + for _, t := range MilvusCoordTypes { + util.DeleteValue(conf, t.String(), "address") + } +} + +var ( + Version = "unknown" + MilvusHelmVersion = "unknown" +) + +func setDefaultStr(ptr *string, defaultValue string) { + if len(*ptr) < 1 { + *ptr = defaultValue + } +} + +func (r *Milvus) DefaultMeta() { + setDefaultStr(&r.Namespace, "default") + if len(r.Labels) < 1 { + r.Labels = make(map[string]string) + } + if len(r.Annotations) < 1 { + r.Annotations = make(map[string]string) + } + if len(r.Labels[OperatorVersionLabel]) < 1 { + if len(r.Status.Status) > 0 { + r.Labels[OperatorVersionLabel] = LegacyVersion + r.Annotations[DependencyValuesLegacySyncedAnnotation] = FalseStr + } else { + r.Labels[OperatorVersionLabel] = Version + } + } + if r.IsFirstTimeStarting() { + r.Annotations[PodServiceLabelAddedAnnotation] = TrueStr + } +} + +func (r *Milvus) DefaultMode() { + if r.Spec.Mode == "" { + r.Spec.Mode = MilvusModeStandalone + } +} + +func (r *Milvus) DefaultComponents() { + spec := &r.Spec + setDefaultStr(&spec.Com.Image, config.DefaultMilvusImage) + if spec.Com.ImageUpdateMode == "" { + spec.Com.ImageUpdateMode = ImageUpdateModeRollingUpgrade + } + if spec.Com.Standalone == nil { + spec.Com.Standalone = &MilvusStandalone{} + } + if spec.Mode == MilvusModeCluster { + if spec.Com.Proxy == nil { + spec.Com.Proxy = &MilvusProxy{} + } + if spec.Com.MixCoord == nil { + if spec.Com.RootCoord == nil { + spec.Com.RootCoord = &MilvusRootCoord{} + } + if spec.Com.DataCoord == nil { + spec.Com.DataCoord = &MilvusDataCoord{} + } + if spec.Com.IndexCoord == nil { + spec.Com.IndexCoord = &MilvusIndexCoord{} + } + if spec.Com.QueryCoord == nil { + spec.Com.QueryCoord = &MilvusQueryCoord{} + } + } + if spec.Com.DataNode == nil { + spec.Com.DataNode = &MilvusDataNode{} + } + if spec.Com.IndexNode == nil { + spec.Com.IndexNode = &MilvusIndexNode{} + } + if spec.Com.QueryNode == nil { + spec.Com.QueryNode = &MilvusQueryNode{} + } + } + r.defaultComponentsReplicas() +} + +func (r *Milvus) defaultComponentsReplicas() { + spec := &r.Spec + defaultReplicas := int32(1) + defaultNoReplicas := int32(0) + if spec.Mode == MilvusModeCluster { + if spec.Com.Standalone.Replicas == nil { + spec.Com.Standalone.Replicas = &defaultNoReplicas + } + if spec.Com.MixCoord != nil { + if spec.Com.MixCoord.Replicas == nil { + spec.Com.MixCoord.Replicas = &defaultReplicas + } + } else { + if spec.Com.Proxy.Replicas == nil { + spec.Com.Proxy.Replicas = &defaultReplicas + } + if spec.Com.RootCoord.Replicas == nil { + spec.Com.RootCoord.Replicas = &defaultReplicas + } + if spec.Com.DataCoord.Replicas == nil { + spec.Com.DataCoord.Replicas = &defaultReplicas + } + if spec.Com.IndexCoord.Replicas == nil { + spec.Com.IndexCoord.Replicas = &defaultReplicas + } + if spec.Com.QueryCoord.Replicas == nil { + spec.Com.QueryCoord.Replicas = &defaultReplicas + } + if spec.Com.DataNode.Replicas == nil { + spec.Com.DataNode.Replicas = &defaultReplicas + } + if spec.Com.IndexNode.Replicas == nil { + spec.Com.IndexNode.Replicas = &defaultReplicas + } + if spec.Com.QueryNode.Replicas == nil { + spec.Com.QueryNode.Replicas = &defaultReplicas + } + } + } else { + if spec.Com.Standalone.Replicas == nil { + spec.Com.Standalone.Replicas = &defaultReplicas + } + } +} + +func (r *Milvus) DefaultDependencies() { + r.defaultEtcd() + r.defaultMsgStream() + r.defaultStorage() + r.setDefaultValueMerged() +} + +func (r *Milvus) defaultEtcd() { + if !r.Spec.Dep.Etcd.External { + r.Spec.Dep.Etcd.Endpoints = []string{fmt.Sprintf("%s-etcd.%s:2379", r.Name, r.Namespace)} + if r.Spec.Dep.Etcd.InCluster == nil { + r.Spec.Dep.Etcd.InCluster = &InClusterConfig{} + } + if r.Spec.Dep.Etcd.InCluster.Values.Data == nil { + r.Spec.Dep.Etcd.InCluster.Values.Data = map[string]interface{}{} + } + if r.Spec.Mode == MilvusModeStandalone { + if _, exists := r.Spec.Dep.Etcd.InCluster.Values.Data["replicaCount"]; !exists { + r.Spec.Dep.Etcd.InCluster.Values.Data["replicaCount"] = 1 + } + } + r.defaultValuesByDependency(values.DependencyKindEtcd) + if r.Spec.Dep.Etcd.InCluster.DeletionPolicy == "" { + r.Spec.Dep.Etcd.InCluster.DeletionPolicy = DeletionPolicyRetain + } + if r.Spec.Dep.Etcd.Endpoints == nil { + r.Spec.Dep.Etcd.Endpoints = []string{} + } + } + +} + +// make sure r.Spec.Dep.$(dependency).InCluster not nil +func (r *Milvus) defaultValuesByDependency(dependency values.DependencyKind) { + if r.isLegacy() { + r.setDefaultValueMerged() + } + if r.defaultValuesMerged() { + return + } + valuesPtr := reflect.ValueOf(r.Spec.Dep).FieldByName(string(dependency)). + FieldByName("InCluster").Elem().FieldByName("Values").Addr().Interface().(*Values) + valueData := util.DeepCopyValues( + values.GetDefaultValuesProvider(). + GetDefaultValues(dependency)) + + util.MergeValues(valueData, valuesPtr.Data) + valuesPtr.Data = valueData +} + +func (r *Milvus) LegacyNeedSyncValues() bool { + return r.isLegacy() && r.Annotations[DependencyValuesLegacySyncedAnnotation] != TrueStr +} + +func (r *Milvus) SetLegacySynced() { + r.Annotations[DependencyValuesLegacySyncedAnnotation] = TrueStr +} + +func (r *Milvus) isLegacy() bool { + return r.Labels[OperatorVersionLabel] == LegacyVersion +} + +func (r *Milvus) setDefaultValueMerged() { + r.Annotations[DependencyValuesMergedAnnotation] = TrueStr +} + +func (r *Milvus) defaultValuesMerged() bool { + return r.Annotations[DependencyValuesMergedAnnotation] == TrueStr +} + +func (r *Milvus) defaultMsgStream() { + if r.Spec.Dep.MsgStreamType == "" { + switch r.Spec.Mode { + case MilvusModeStandalone: + r.Spec.Dep.MsgStreamType = MsgStreamTypeRocksMQ + case MilvusModeCluster: + r.Spec.Dep.MsgStreamType = MsgStreamTypePulsar + } + } + switch r.Spec.Dep.MsgStreamType { + case MsgStreamTypeKafka: + if !r.Spec.Dep.Kafka.External { + r.Spec.Dep.Kafka.BrokerList = []string{fmt.Sprintf("%s-kafka.%s:9092", r.Name, r.Namespace)} + if r.Spec.Dep.Kafka.InCluster == nil { + r.Spec.Dep.Kafka.InCluster = &InClusterConfig{} + } + if r.Spec.Dep.Kafka.InCluster.Values.Data == nil { + r.Spec.Dep.Kafka.InCluster.Values.Data = map[string]interface{}{} + } + r.defaultValuesByDependency(values.DependencyKindKafka) + if r.Spec.Dep.Kafka.InCluster.DeletionPolicy == "" { + r.Spec.Dep.Kafka.InCluster.DeletionPolicy = DeletionPolicyRetain + } + } + case MsgStreamTypePulsar: + if !r.Spec.Dep.Pulsar.External { + r.Spec.Dep.Pulsar.Endpoint = fmt.Sprintf("%s-pulsar-proxy.%s:6650", r.Name, r.Namespace) + if r.Spec.Dep.Pulsar.InCluster == nil { + r.Spec.Dep.Pulsar.InCluster = &InClusterConfig{} + } + if r.Spec.Dep.Pulsar.InCluster.Values.Data == nil { + r.Spec.Dep.Pulsar.InCluster.Values.Data = map[string]interface{}{} + } + r.defaultValuesByDependency(values.DependencyKindPulsar) + if r.Spec.Dep.Pulsar.InCluster.DeletionPolicy == "" { + r.Spec.Dep.Pulsar.InCluster.DeletionPolicy = DeletionPolicyRetain + } + } + } +} + +func (r *Milvus) defaultStorage() { + setDefaultStr(&r.Spec.Dep.Storage.Type, "MinIO") + if !r.Spec.Dep.Storage.External { + r.Spec.Dep.Storage.Endpoint = fmt.Sprintf("%s-minio.%s:9000", r.Name, r.Namespace) + if r.Spec.Dep.Storage.InCluster == nil { + r.Spec.Dep.Storage.InCluster = &InClusterConfig{} + } + if r.Spec.Dep.Storage.InCluster.Values.Data == nil { + r.Spec.Dep.Storage.InCluster.Values.Data = map[string]interface{}{} + } + if r.Spec.Mode == MilvusModeStandalone { + if _, exists := r.Spec.Dep.Storage.InCluster.Values.Data["mode"]; !exists { + r.Spec.Dep.Storage.InCluster.Values.Data["mode"] = "standalone" + } + } + r.defaultValuesByDependency(values.DependencyKindStorage) + if r.Spec.Dep.Storage.InCluster.DeletionPolicy == "" { + r.Spec.Dep.Storage.InCluster.DeletionPolicy = DeletionPolicyRetain + } + r.Spec.Dep.Storage.SecretRef = r.Name + "-minio" + } +} + +func (r *Milvus) DefaultConf() { + if r.Spec.Conf.Data == nil { + r.Spec.Conf.Data = map[string]interface{}{} + } else { + deleteUnsettableConf(r.Spec.Conf.Data) + } + + if r.Spec.Com.EnableRollingUpdate == nil { + if r.isRollingUpdateEnabledByConfig() { + r.Spec.Com.EnableRollingUpdate = util.BoolPtr(true) + } + } + if r.Spec.Com.EnableRollingUpdate != nil && + *r.Spec.Com.EnableRollingUpdate { + r.setRollingUpdate(true) + } +} + +var rollingUpdateConfigFields = []string{ + "rootCoord", + "dataCoord", + "indexCoord", + "queryCoord", +} + +// EnableActiveStandByConfig is a config in coordinators to determine whether a coordinator can be rolling updated +const EnableActiveStandByConfig = "enableActiveStandby" + +func (r *Milvus) isRollingUpdateEnabledByConfig() bool { + if r.Spec.Mode != MilvusModeCluster { + switch r.Spec.Dep.MsgStreamType { + case MsgStreamTypeRocksMQ, MsgStreamTypeNatsMQ: + return false + } + } + for _, configFieldName := range rollingUpdateConfigFields { + enableActiveStandBy, _ := util.GetBoolValue(r.Spec.Conf.Data, configFieldName, EnableActiveStandByConfig) + if !enableActiveStandBy { + return false + } + } + return true +} + +func (r *Milvus) setRollingUpdate(enabled bool) { + for _, configFieldName := range rollingUpdateConfigFields { + util.SetValue(r.Spec.Conf.Data, enabled, configFieldName, EnableActiveStandByConfig) + } +} diff --git a/apis/milvus.io/v1beta1/milvus_webhook_test.go b/apis/milvus.io/v1beta1/milvus_webhook_test.go new file mode 100644 index 00000000..ab9a9fe7 --- /dev/null +++ b/apis/milvus.io/v1beta1/milvus_webhook_test.go @@ -0,0 +1,367 @@ +package v1beta1 + +import ( + "testing" + + "github.com/milvus-io/milvus-operator/pkg/config" + "github.com/milvus-io/milvus-operator/pkg/util" + "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +func TestMilvus_Default_NotExternal(t *testing.T) { + // prepare default + replica1 := int32(1) + defaultComponent := Component{ + Replicas: &replica1, + } + replica0 := int32(0) + stoppedComponent := Component{ + Replicas: &replica0, + } + defaultInClusterConfig := &InClusterConfig{ + DeletionPolicy: DeletionPolicyRetain, + Values: Values{ + Data: map[string]interface{}{}, + }, + } + + etcdStandaloneDefaultInClusterConfig := defaultInClusterConfig.DeepCopy() + etcdStandaloneDefaultInClusterConfig.Values.Data["replicaCount"] = 1 + + minioStandAloneDefaultInClusterConfig := defaultInClusterConfig.DeepCopy() + minioStandAloneDefaultInClusterConfig.Values.Data["mode"] = "standalone" + + var crName = "mc" + + var standaloneDefault = MilvusSpec{ + Mode: MilvusModeStandalone, + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + Endpoints: []string{"mc-etcd.default:2379"}, + InCluster: etcdStandaloneDefaultInClusterConfig, + }, + MsgStreamType: MsgStreamTypeRocksMQ, + Storage: MilvusStorage{ + Type: StorageTypeMinIO, + Endpoint: "mc-minio.default:9000", + SecretRef: crName + "-minio", + InCluster: minioStandAloneDefaultInClusterConfig, + }, + }, + Com: MilvusComponents{ + ImageUpdateMode: ImageUpdateModeRollingUpgrade, + ComponentSpec: ComponentSpec{ + Image: config.DefaultMilvusImage, + }, + Standalone: &MilvusStandalone{ + ServiceComponent: ServiceComponent{ + Component: defaultComponent, + }, + }, + }, + Conf: Values{ + Data: map[string]interface{}{}, + }, + } + + t.Run("standalone not external ok", func(t *testing.T) { + mc := Milvus{ObjectMeta: metav1.ObjectMeta{Name: crName}} + mc.Spec.Mode = MilvusModeStandalone + mc.Default() + assert.Equal(t, standaloneDefault, mc.Spec) + }) + + t.Run("standalone already set default ok", func(t *testing.T) { + mc := Milvus{ObjectMeta: metav1.ObjectMeta{Name: crName}} + mc.Spec.Mode = MilvusModeStandalone + mc.Default() + assert.Equal(t, int32(1), *mc.Spec.Com.Standalone.Replicas) + newReplica := int32(2) + mc.Spec.Com.Standalone.Replicas = &newReplica + mc.Default() + assert.Equal(t, newReplica, *mc.Spec.Com.Standalone.Replicas) + }) + + clusterDefault := *standaloneDefault.DeepCopy() + clusterDefault.Mode = MilvusModeCluster + clusterDefault.Dep.MsgStreamType = MsgStreamTypePulsar + clusterDefault.Dep.Pulsar = MilvusPulsar{ + Endpoint: "mc-pulsar-proxy.default:6650", + InCluster: defaultInClusterConfig, + } + delete(clusterDefault.Dep.Etcd.InCluster.Values.Data, "replicaCount") + delete(clusterDefault.Dep.Storage.InCluster.Values.Data, "mode") + clusterDefault.Com = MilvusComponents{ + ImageUpdateMode: ImageUpdateModeRollingUpgrade, + ComponentSpec: ComponentSpec{ + Image: config.DefaultMilvusImage, + }, + Proxy: &MilvusProxy{ + ServiceComponent: ServiceComponent{ + Component: defaultComponent, + }, + }, + RootCoord: &MilvusRootCoord{ + Component: defaultComponent, + }, + DataCoord: &MilvusDataCoord{ + Component: defaultComponent, + }, + IndexCoord: &MilvusIndexCoord{ + Component: defaultComponent, + }, + QueryCoord: &MilvusQueryCoord{ + Component: defaultComponent, + }, + DataNode: &MilvusDataNode{ + Component: defaultComponent, + }, + IndexNode: &MilvusIndexNode{ + Component: defaultComponent, + }, + QueryNode: &MilvusQueryNode{ + Component: defaultComponent, + }, + Standalone: &MilvusStandalone{ + ServiceComponent: ServiceComponent{ + Component: stoppedComponent, + }, + }, + } + t.Run("cluster not external ok", func(t *testing.T) { + mc := Milvus{ObjectMeta: metav1.ObjectMeta{Name: crName}} + mc.Spec.Mode = MilvusModeCluster + mc.Default() + assert.Equal(t, clusterDefault, mc.Spec) + }) + + t.Run("cluster already set default ok", func(t *testing.T) { + mc := Milvus{ObjectMeta: metav1.ObjectMeta{Name: crName}} + mc.Spec.Mode = MilvusModeCluster + newReplica := int32(2) + mc.Spec.Com.RootCoord = &MilvusRootCoord{} + mc.Spec.Com.RootCoord.Replicas = &newReplica + mc.Default() + assert.Equal(t, newReplica, *mc.Spec.Com.RootCoord.Replicas) + }) + +} + +func TestMilvus_Default_ExternalDepOK(t *testing.T) { + var crName = "mc" + + var defaultSpec = MilvusSpec{ + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + External: true, + }, + MsgStreamType: MsgStreamTypePulsar, + Pulsar: MilvusPulsar{ + External: true, + }, + Storage: MilvusStorage{ + External: true, + Type: "MinIO", + }, + }, + } + + mc := Milvus{ + ObjectMeta: metav1.ObjectMeta{Name: crName}, + Spec: MilvusSpec{ + Mode: MilvusModeCluster, + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + External: true, + }, + Pulsar: MilvusPulsar{ + External: true, + }, + Storage: MilvusStorage{ + External: true, + }, + }, + }, + } + mc.Default() + assert.Equal(t, defaultSpec.Dep, mc.Spec.Dep) +} + +func TestMilvus_Default_DeleteUnSetableOK(t *testing.T) { + var crName = "mc" + + var conf = Values{ + Data: map[string]interface{}{ + "minio": map[string]interface{}{ + "conf": "value", + }, + }, + } + + mc := Milvus{ + ObjectMeta: metav1.ObjectMeta{Name: crName}, + Spec: MilvusSpec{ + Conf: Values{ + Data: map[string]interface{}{ + "minio": map[string]interface{}{ + "address": "myHost", + "conf": "value", + }, + }, + }, + }, + } + mc.Default() + assert.Equal(t, conf, mc.Spec.Conf) +} + +func TestMilvus_ValidateCreate_NoError(t *testing.T) { + mc := Milvus{} + err := mc.ValidateCreate() + assert.NoError(t, err) + + mc.Default() + err = mc.ValidateCreate() + assert.NoError(t, err) +} + +func TestMilvus_ValidateCreate_Invalid1(t *testing.T) { + mc := Milvus{ + Spec: MilvusSpec{ + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + External: true, + }, + }, + }, + } + err := mc.ValidateCreate() + assert.Error(t, err) +} + +func TestMilvus_ValidateCreate_Invalid3(t *testing.T) { + mc := Milvus{ + Spec: MilvusSpec{ + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + External: true, + }, + Storage: MilvusStorage{ + External: true, + }, + Pulsar: MilvusPulsar{ + External: true, + }, + }, + }, + } + err := mc.ValidateCreate() + assert.Error(t, err) +} + +func TestMilvus_ValidateUpdate_NoError(t *testing.T) { + mc := Milvus{} + err := mc.ValidateUpdate(&mc) + assert.NoError(t, err) +} + +func TestMilvus_ValidateUpdate_Invalid(t *testing.T) { + new := Milvus{ + Spec: MilvusSpec{ + Dep: MilvusDependencies{ + Etcd: MilvusEtcd{ + External: true, + }, + }, + }, + } + old := Milvus{} + err := new.ValidateUpdate(&old) + assert.Error(t, err) +} + +func TestMilvus_ValidateUpdate_KindAssertionFailed(t *testing.T) { + new := Milvus{} + old := appsv1.Deployment{} + err := new.ValidateUpdate(&old) + assert.Error(t, err) +} + +func Test_DefaultLabels_Legacy(t *testing.T) { + new := Milvus{} + new.Status.Status = StatusHealthy + new.DefaultMeta() + assert.Equal(t, new.Labels[OperatorVersionLabel], LegacyVersion) +} + +func Test_DefaultConf_EnableRollingUpdate(t *testing.T) { + + t.Run("default nil", func(t *testing.T) { + m := Milvus{} + m.DefaultConf() + assert.Nil(t, m.Spec.Com.EnableRollingUpdate) + }) + + t.Run("enable by config", func(t *testing.T) { + m := Milvus{} + m.Spec.Conf.Data = map[string]interface{}{} + m.setRollingUpdate(true) + m.DefaultConf() + assert.True(t, *m.Spec.Com.EnableRollingUpdate) + }) + + t.Run("set true", func(t *testing.T) { + m := Milvus{} + m.Spec.Com.EnableRollingUpdate = util.BoolPtr(true) + m.DefaultConf() + assert.True(t, m.isRollingUpdateEnabledByConfig()) + }) + + t.Run("set false", func(t *testing.T) { + m := Milvus{} + m.Spec.Com.EnableRollingUpdate = util.BoolPtr(false) + m.DefaultConf() + assert.False(t, m.isRollingUpdateEnabledByConfig()) + }) + + t.Run("rocksmq false", func(t *testing.T) { + m := Milvus{} + m.DefaultConf() + m.setRollingUpdate(true) + m.Spec.Com.EnableRollingUpdate = util.BoolPtr(true) + m.Spec.Dep.MsgStreamType = MsgStreamTypeRocksMQ + m.DefaultConf() + assert.False(t, m.isRollingUpdateEnabledByConfig()) + }) +} + +func TestMilvus_validateCommon(t *testing.T) { + mc := Milvus{} + t.Run("validate rollingupdate", func(t *testing.T) { + mc.Spec.Com.EnableRollingUpdate = util.BoolPtr(true) + err := mc.validateCommon() + assert.NotNil(t, err) + + mc.Spec.Dep.MsgStreamType = MsgStreamTypeKafka + err = mc.validateCommon() + assert.Nil(t, err) + }) + t.Run("validate persist default ok", func(t *testing.T) { + mc.Spec.Com.EnableRollingUpdate = util.BoolPtr(false) + mc.Spec.Dep.MsgStreamType = "" + mc.Default() + err := mc.validateCommon() + assert.Nil(t, err) + }) + t.Run("validate persist failed", func(t *testing.T) { + mc.Spec.Dep.MsgStreamType = MsgStreamTypeRocksMQ + mc.Spec.Com.EnableRollingUpdate = util.BoolPtr(false) + mc.Spec.Dep.RocksMQ.Persistence.PersistentVolumeClaim.Spec.Data = map[string]interface{}{ + "accessModes": "bad", + } + err := mc.validateCommon() + assert.Error(t, err) + }) +} diff --git a/apis/milvus.io/v1beta1/milvusupgrade_types.go b/apis/milvus.io/v1beta1/milvusupgrade_types.go new file mode 100644 index 00000000..6b534383 --- /dev/null +++ b/apis/milvus.io/v1beta1/milvusupgrade_types.go @@ -0,0 +1,209 @@ +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "reflect" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! +// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized. + +// MilvusUpgradeSpec defines the desired state of MilvusUpgrade +type MilvusUpgradeSpec struct { + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // Operation is the operation of MilvusUpgrade, it can be "upgrade" or "rollback", default as "upgrade" + // During upgration, you can modify operation to rollback to the previous version. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum=upgrade;rollback; + // +kubebuilder:default=upgrade + Operation MilvusOperation `json:"operation,omitempty"` + + // Milvus is the reference to Milvus instance to be upgraded + // +kubebuilder:validation:Required + Milvus ObjectReference `json:"milvus"` + + // SourceVersion is the version of Milvus to be upgraded from + // +kubebuilder:validation:Required + SourceVersion string `json:"sourceVersion"` + + // TargetVersion is the version of Milvus to be upgraded to + // +kubebuilder:validation:Required + TargetVersion string `json:"targetVersion"` + + // TargetImage is the image of milvus target version. + // milvus-operator will use official image if TargetImage is not set. + // +kubebuilder:validation:Optional + TargetImage string `json:"targetImage"` + + // ToolImage is the image of milvus upgrade tool. + // milvus-operator will use official image if ToolImage is not set. + // +kubebuilder:validation:Optional + ToolImage string `json:"toolImage,omitempty"` + + // MaxRetry is the max retry times when upgrade failed + // +kubebuilder:validation:Optional + // +kubebuilder:default:=3 + MaxRetry int `json:"maxRetry,omitempty"` + + // RollbackIfFailed indicates whether to rollback if upgrade failed. + // +kubebuilder:validation:Optional + // +kubebuilder:default:=true + RollbackIfFailed bool `json:"rollbackIfFailed,omitempty"` + + // BackupPVC is the pvc name for backup data. + // If not provided, milvus-operator will auto-create one with default storage-class which will be deleted after upgration. + // +kubebuilder:validation:Optional + BackupPVC string `json:"backupPVC"` +} + +type ObjectReference struct { + // +kubebuilder:validation:Optional + Namespace string `json:"namespace,omitempty"` + // +kubebuilder:validation:Required + Name string `json:"name"` +} + +func (o ObjectReference) Object() types.NamespacedName { + return types.NamespacedName{ + Namespace: o.Namespace, + Name: o.Name, + } +} + +// MilvusOperation is the operation of MilvusUpgrade +type MilvusOperation string + +// MilvusOperation type definitions +const ( + OperationUpgrade MilvusOperation = "upgrade" + OperationRollback MilvusOperation = "rollback" +) + +// MilvusUpgradeStatus defines the observed state of MilvusUpgrade +type MilvusUpgradeStatus struct { + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster + // Important: Run "make" to regenerate code after modifying this file + + // +optional + State MilvusUpgradeState `json:"state,omitempty"` + + // Conditions: available condtition types types: CheckingUpgrationState Upgraded Rollbacked + // +optional + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty"` + + // SourceImage is the image of milvus source version. recorded for rollback + // +optional + SourceImage string `json:"sourceImage,omitempty"` + + // MetaStorageChanged indicates whether meta storage changed during upgrade + // if true, milvus-operator needs to restore meta storge from bakup before start milvus when rollback + // +optional + MetaStorageChanged bool `json:"metaStorageChanged,omitempty"` + + // MetaBackuped indicates whether meta storage has been backuped + // +optional + MetaBackuped bool `json:"metaBackuped,omitempty"` + + // IsRollbacking indicates whether milvus is rollbacking + // +optional + IsRollbacking bool `json:"isRollbacking,omitempty"` + + // ReplicasBeforeUpgrade are replicas befor + // +optional + ReplicasBeforeUpgrade *MilvusReplicas `json:"replicasBeforeUprade,omitempty"` + + // BackupPVC is pvc stores meta backup + // +optional + BackupPVC string `json:"backupPVC,omitempty"` + + // RetriedTimes is the times that operator has retried to upgrade milvus + // +optional + RetriedTimes int `json:"retriedTimes"` +} + +type MilvusUpgradeState string + +func (s MilvusUpgradeState) NeedRequeue() bool { + return !milvusUpgradeNoRequeueStates[s] +} + +const ( + // State in upgrade process + UpgradeStatePending MilvusUpgradeState = "" + UpgradeStateOldVersionStopping MilvusUpgradeState = "OldVersionStopping" + UpgradeStateBackupMeta MilvusUpgradeState = "BackupMeta" + UpgradeStateUpdatingMeta MilvusUpgradeState = "UpdatingMeta" + UpgradeStateNewVersionStarting MilvusUpgradeState = "NewVersionStarting" + UpgradeStateSucceeded MilvusUpgradeState = "Succeeded" + + UpgradeStateBakupMetaFailed MilvusUpgradeState = "BakupMetaFailed" + UpgradeStateUpdateMetaFailed MilvusUpgradeState = "UpdateMetaFailed" + + // State in rollback process + UpgradeStateRollbackNewVersionStopping MilvusUpgradeState = "RollbackNewVersionStopping" + UpgradeStateRollbackRestoringOldMeta MilvusUpgradeState = "RollbackRestoringOldMeta" + UpgradeStateRollbackOldVersionStarting MilvusUpgradeState = "RollbackOldVersionStarting" + UpgradeStateRollbackSucceeded MilvusUpgradeState = "RollbackedSucceeded" + + UpgradeStateRollbackFailed MilvusUpgradeState = "RollbackFailed" +) + +// milvusUpgradeNoRequeueStates are states that will not requeue +var milvusUpgradeNoRequeueStates = map[MilvusUpgradeState]bool{ + UpgradeStateSucceeded: true, + UpgradeStateBakupMetaFailed: true, + UpgradeStateUpdateMetaFailed: true, + UpgradeStateRollbackSucceeded: true, + UpgradeStateRollbackFailed: true, +} + +//+kubebuilder:object:root=true +//+kubebuilder:subresource:status + +// MilvusUpgrade is the Schema for the milvusupgrades API +type MilvusUpgrade struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec MilvusUpgradeSpec `json:"spec,omitempty"` + Status MilvusUpgradeStatus `json:"status,omitempty"` +} + +//+kubebuilder:object:root=true + +// MilvusUpgradeList contains a list of MilvusUpgrade +type MilvusUpgradeList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []MilvusUpgrade `json:"items"` +} + +var MilvusUpgradeKind = reflect.TypeOf(MilvusUpgrade{}).Name() + +func init() { + SchemeBuilder.Register(&MilvusUpgrade{}, &MilvusUpgradeList{}) +} diff --git a/apis/milvus.io/v1beta1/milvusupgrade_types_test.go b/apis/milvus.io/v1beta1/milvusupgrade_types_test.go new file mode 100644 index 00000000..ccf33184 --- /dev/null +++ b/apis/milvus.io/v1beta1/milvusupgrade_types_test.go @@ -0,0 +1,23 @@ +package v1beta1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestObjectReference_Object(t *testing.T) { + s := new(ObjectReference) + obj := s.Object() + assert.Equal(t, s.Namespace, obj.Namespace) + assert.Equal(t, s.Name, obj.Name) +} + +func TestMilvusUpgradeState_NeedRequeue(t *testing.T) { + s := UpgradeStateSucceeded + assert.False(t, s.NeedRequeue()) + s = UpgradeStatePending + assert.True(t, s.NeedRequeue()) + s = UpgradeStateOldVersionStopping + assert.True(t, s.NeedRequeue()) +} diff --git a/apis/milvus.io/v1beta1/milvusupgrade_webhook.go b/apis/milvus.io/v1beta1/milvusupgrade_webhook.go new file mode 100644 index 00000000..07a6cfcf --- /dev/null +++ b/apis/milvus.io/v1beta1/milvusupgrade_webhook.go @@ -0,0 +1,112 @@ +package v1beta1 + +import ( + "fmt" + + "github.com/milvus-io/milvus-operator/pkg/config" + "golang.org/x/mod/semver" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + ctrl "sigs.k8s.io/controller-runtime" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/webhook" +) + +// log is for logging in this package. +var mulog = logf.Log.WithName("milvus-upgrade") + +func (r *MilvusUpgrade) SetupWebhookWithManager(mgr ctrl.Manager) error { + return ctrl.NewWebhookManagedBy(mgr). + For(r). + Complete() +} + +// TODO(user): EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! + +//+kubebuilder:webhook:path=/mutate-milvus-io-v1beta1-milvusupgrade,mutating=true,failurePolicy=fail,sideEffects=None,groups=milvus.io,resources=milvusupgrades,verbs=create;update,versions=v1beta1,name=mmilvusupgrade.kb.io,admissionReviewVersions=v1 + +var _ webhook.Defaulter = &MilvusUpgrade{} + +const defaultToolImage = "milvusdb/meta-migration:v2.2.0-bugfix-20230112" + +// Default implements webhook.Defaulter so a webhook will be registered for the type +func (r *MilvusUpgrade) Default() { + if r.Spec.TargetImage == "" { + r.Spec.TargetImage = fmt.Sprintf("%s:v%s", config.DefaultMilvusBaseImage, RemovePrefixV(r.Spec.TargetVersion)) + } + if r.Spec.ToolImage == "" { + r.Spec.ToolImage = defaultToolImage + } +} + +// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation. +//+kubebuilder:webhook:path=/validate-milvus-io-v1beta1-milvusupgrade,mutating=false,failurePolicy=fail,sideEffects=None,groups=milvus.io,resources=milvusupgrades,verbs=create;update,versions=v1beta1,name=vmilvusupgrade.kb.io,admissionReviewVersions=v1 + +var _ webhook.Validator = &MilvusUpgrade{} + +// ValidateCreate implements webhook.Validator so a webhook will be registered for the type +func (r *MilvusUpgrade) ValidateCreate() error { + return r.Validate() +} + +func AddPrefixV(version string) string { + if version == "" { + return "" + } + if version[0] == 'v' { + return version + } + return "v" + version +} + +func RemovePrefixV(version string) string { + if version == "" { + return "" + } + if version[0] == 'v' { + return version[1:] + } + return version +} + +func (r MilvusUpgrade) Validate() error { + s := &r.Spec + var allErrs field.ErrorList + srcVer := AddPrefixV(s.SourceVersion) + if !semver.IsValid(srcVer) { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec").Child("sourceVersion"), srcVer, "sourceVersion is not a valid sematic version")) + } + + if semver.Compare(srcVer, "v2.0.1") < 0 { + // <2.0.0 or 2.0.0-rcx + if semver.Compare(srcVer, "v2.0.0") < 0 || semver.Build(srcVer) != "" { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec").Child("sourceVersion"), srcVer, "sourceVersion must be greater than 2.0.0")) + } + } + + targetVer := AddPrefixV(s.TargetVersion) + if !semver.IsValid(targetVer) { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec").Child("targetVersion"), targetVer, "targetVersion is not a valid sematic version")) + } + if semver.Compare(targetVer, "v2.2.0") < 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("spec").Child("targetVersion"), targetVer, "targetVersion must be greater than 2.2.0")) + } + if len(allErrs) > 0 { + return apierrors.NewInvalid(schema.GroupKind{Group: GroupVersion.Group, Kind: MilvusUpgradeKind}, r.Name, allErrs) + } + return nil +} + +// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type +func (r *MilvusUpgrade) ValidateUpdate(old runtime.Object) error { + mulog.Info("validate update", "name", r.Name) + return r.Validate() +} + +// ValidateDelete implements webhook.Validator so a webhook will be registered for the type +func (r *MilvusUpgrade) ValidateDelete() error { + mulog.Info("validate delete", "name", r.Name) + return nil +} diff --git a/apis/milvus.io/v1beta1/milvusupgrade_webhook_test.go b/apis/milvus.io/v1beta1/milvusupgrade_webhook_test.go new file mode 100644 index 00000000..12de986c --- /dev/null +++ b/apis/milvus.io/v1beta1/milvusupgrade_webhook_test.go @@ -0,0 +1,53 @@ +package v1beta1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestMilvusUpgrade_Default(t *testing.T) { + r := new(MilvusUpgrade) + r.Spec.TargetVersion = "2.2.0" + r.Default() + assert.Equal(t, "milvusdb/milvus:v2.2.0", r.Spec.TargetImage) + assert.Equal(t, defaultToolImage, r.Spec.ToolImage) + + r.Spec.TargetVersion = "v2.2.0" + r.Default() + assert.Equal(t, "milvusdb/milvus:v2.2.0", r.Spec.TargetImage) +} + +func TestMilvusUpgrade_Validate(t *testing.T) { + r := new(MilvusUpgrade) + assert.Error(t, r.Validate()) + + t.Run("not support source versions", func(t *testing.T) { + r.Spec.SourceVersion = "1.0" + r.Spec.TargetVersion = "2.2.0" + assert.Error(t, r.Validate()) + + r.Spec.SourceVersion = "2.0.0-rc1" + r.Spec.TargetVersion = "2.2.0" + assert.Error(t, r.Validate()) + }) + + t.Run("not support target versions", func(t *testing.T) { + r.Spec.SourceVersion = "2.1.0" + r.Spec.TargetVersion = "2.0.0" + assert.Error(t, r.Validate()) + }) + + t.Run("ok", func(t *testing.T) { + r.Spec.SourceVersion = "v2.0.0" + r.Spec.TargetVersion = "v2.2.0" + assert.NoError(t, r.Validate()) + + r.Spec.SourceVersion = "2.1.4" + r.Spec.TargetVersion = "2.2.0" + assert.NoError(t, r.Validate()) + assert.NoError(t, r.ValidateCreate()) + assert.NoError(t, r.ValidateUpdate(r)) + assert.NoError(t, r.ValidateDelete()) + }) +} diff --git a/apis/milvus.io/v1beta1/persistence_types.go b/apis/milvus.io/v1beta1/persistence_types.go new file mode 100644 index 00000000..895787b4 --- /dev/null +++ b/apis/milvus.io/v1beta1/persistence_types.go @@ -0,0 +1,51 @@ +package v1beta1 + +import corev1 "k8s.io/api/core/v1" + +const RocksMQPersistPath = "/var/lib/milvus" + +// Persistence is persistence for milvus +type Persistence struct { + // If Enabled, will create/use pvc for data persistence + // +kubebuilder:validation:Optional + Enabled bool `json:"enabled,omitempty"` + // +kubebuilder:validation:Optional + PVCDeletion bool `json:"pvcDeletion,omitempty"` + // +kubebuilder:validation:Optional + PersistentVolumeClaim PersistentVolumeClaim `json:"persistentVolumeClaim,omitempty"` +} + +// PersistentVolumeClaim for milvus +type PersistentVolumeClaim struct { + // ExistingClaim if not empty, will use existing pvc, else create a pvc + // +kubebuilder:validation:Optional + ExistingClaim string `json:"existingClaim,omitempty"` + + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: http://kubernetes.io/docs/user-guide/labels + // +optional + Labels map[string]string `json:"labels,omitempty"` + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: http://kubernetes.io/docs/user-guide/annotations + // +optional + Annotations map[string]string `json:"annotations,omitempty"` + + // Spec defines the desired characteristics of a volume requested by a pod author. + // It's same as corev1.PersistentVolumeClaimSpec, we use a Values here to avoid the CRD become too large + // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims + // +optional + // +nullable + // +kubebuilder:pruning:PreserveUnknownFields + Spec Values `json:"spec,omitempty"` +} + +func (p *PersistentVolumeClaim) GetSpec() *corev1.PersistentVolumeClaimSpec { + ret := new(corev1.PersistentVolumeClaimSpec) + p.Spec.AsObject(ret) + return ret +} diff --git a/apis/milvus.io/v1beta1/values_types.go b/apis/milvus.io/v1beta1/values_types.go new file mode 100644 index 00000000..0f26276b --- /dev/null +++ b/apis/milvus.io/v1beta1/values_types.go @@ -0,0 +1,83 @@ +package v1beta1 + +import ( + "encoding/json" + "fmt" + "reflect" +) + +type Values struct { + // Work around for https://github.com/kubernetes-sigs/kubebuilder/issues/528 + Data map[string]interface{} `json:"-"` +} + +func (v Values) MarshalJSON() ([]byte, error) { + return json.Marshal(v.Data) +} + +func (v *Values) UnmarshalJSON(data []byte) error { + var out map[string]interface{} + + err := json.Unmarshal(data, &out) + if err != nil { + return err + } + + v.Data = out + + return nil +} + +// DeepCopyInto is an deepcopy function, copying the receiver, writing +// into out. In must be non-nil. Declaring this here prevents it from +// being generated in `zz_generated.deepcopy.go`. +// +// This exists here to work around https://github.com/kubernetes/code-generator/issues/50, +// and partially around https://github.com/kubernetes-sigs/controller-tools/pull/126 +// and https://github.com/kubernetes-sigs/controller-tools/issues/294. +func (v *Values) DeepCopyInto(out *Values) { + b, err := json.Marshal(v.Data) + if err != nil { + // The marshal should have been performed cleanly as otherwise + // the resource would not have been created by the API server. + panic(err) + } + + var c map[string]interface{} + + err = json.Unmarshal(b, &c) + if err != nil { + panic(err) + } + + out.Data = c +} + +func (v Values) MustAsObj(obj interface{}) { + err := v.AsObject(obj) + if err != nil { + panic(err) + } +} + +func (v Values) AsObject(obj interface{}) error { + marshaled, err := json.Marshal(v) + if err != nil { + return fmt.Errorf("failed to marshal values: %v", err) + } + if err := json.Unmarshal(marshaled, obj); err != nil { + return fmt.Errorf("failed to unmarshal values as obj[%s]: %v", reflect.TypeOf(obj), err) + } + return nil +} + +func (v *Values) FromObject(obj interface{}) error { + marshaled, err := json.Marshal(obj) + if err != nil { + return fmt.Errorf("failed to marshal values: %v", err) + } + if err := json.Unmarshal(marshaled, &v.Data); err != nil { + return fmt.Errorf("failed to unmarshal values: %v", err) + } + return nil +} diff --git a/apis/milvus.io/v1beta1/values_types_test.go b/apis/milvus.io/v1beta1/values_types_test.go new file mode 100644 index 00000000..f536fab6 --- /dev/null +++ b/apis/milvus.io/v1beta1/values_types_test.go @@ -0,0 +1,41 @@ +package v1beta1 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestValues_MarshalUnmarshalJSON(t *testing.T) { + values := Values{ + Data: map[string]interface{}{ + "key": "value", + }, + } + + expected := `{"key":"value"}` + actual, err := values.MarshalJSON() + if err != nil { + t.Errorf("unexpected error: %v", err) + } + assert.Equal(t, expected, string(actual)) + + var values2 Values + err = values2.UnmarshalJSON(actual) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + assert.Equal(t, values, values2) +} +func TestValues_DeepCopyInfo(t *testing.T) { + values := &Values{ + Data: map[string]interface{}{ + "key": "value", + }, + } + values2 := &Values{} + values.DeepCopyInto(values2) + assert.NotSame(t, values, values2) + assert.NotSame(t, values.Data, values2.Data) + assert.Equal(t, values, values2) +} diff --git a/apis/milvus.io/v1beta1/zz_generated.deepcopy.go b/apis/milvus.io/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..ba6d840d --- /dev/null +++ b/apis/milvus.io/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,953 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright 2021. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by controller-gen. DO NOT EDIT. + +package v1beta1 + +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Component) DeepCopyInto(out *Component) { + *out = *in + in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } + if in.SideCars != nil { + in, out := &in.SideCars, &out.SideCars + *out = make([]Values, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Values, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Component. +func (in *Component) DeepCopy() *Component { + if in == nil { + return nil + } + out := new(Component) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ComponentDeployStatus) DeepCopyInto(out *ComponentDeployStatus) { + *out = *in + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentDeployStatus. +func (in *ComponentDeployStatus) DeepCopy() *ComponentDeployStatus { + if in == nil { + return nil + } + out := new(ComponentDeployStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ComponentSpec) DeepCopyInto(out *ComponentSpec) { + *out = *in + if in.PodLabels != nil { + in, out := &in.PodLabels, &out.PodLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.PodAnnotations != nil { + in, out := &in.PodAnnotations, &out.PodAnnotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Commands != nil { + in, out := &in.Commands, &out.Commands + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.RunWithSubProcess != nil { + in, out := &in.RunWithSubProcess, &out.RunWithSubProcess + *out = new(bool) + **out = **in + } + if in.ImagePullPolicy != nil { + in, out := &in.ImagePullPolicy, &out.ImagePullPolicy + *out = new(v1.PullPolicy) + **out = **in + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]v1.LocalObjectReference, len(*in)) + copy(*out, *in) + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]v1.EnvVar, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Affinity != nil { + in, out := &in.Affinity, &out.Affinity + *out = new(v1.Affinity) + (*in).DeepCopyInto(*out) + } + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]v1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(v1.ResourceRequirements) + (*in).DeepCopyInto(*out) + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]v1.VolumeMount, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Values, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentSpec. +func (in *ComponentSpec) DeepCopy() *ComponentSpec { + if in == nil { + return nil + } + out := new(ComponentSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InClusterConfig) DeepCopyInto(out *InClusterConfig) { + *out = *in + in.Values.DeepCopyInto(&out.Values) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InClusterConfig. +func (in *InClusterConfig) DeepCopy() *InClusterConfig { + if in == nil { + return nil + } + out := new(InClusterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Milvus) DeepCopyInto(out *Milvus) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Milvus. +func (in *Milvus) DeepCopy() *Milvus { + if in == nil { + return nil + } + out := new(Milvus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Milvus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusBuildInMQ) DeepCopyInto(out *MilvusBuildInMQ) { + *out = *in + in.Persistence.DeepCopyInto(&out.Persistence) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusBuildInMQ. +func (in *MilvusBuildInMQ) DeepCopy() *MilvusBuildInMQ { + if in == nil { + return nil + } + out := new(MilvusBuildInMQ) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusComponents) DeepCopyInto(out *MilvusComponents) { + *out = *in + in.ComponentSpec.DeepCopyInto(&out.ComponentSpec) + if in.EnableRollingUpdate != nil { + in, out := &in.EnableRollingUpdate, &out.EnableRollingUpdate + *out = new(bool) + **out = **in + } + if in.Proxy != nil { + in, out := &in.Proxy, &out.Proxy + *out = new(MilvusProxy) + (*in).DeepCopyInto(*out) + } + if in.MixCoord != nil { + in, out := &in.MixCoord, &out.MixCoord + *out = new(MilvusMixCoord) + (*in).DeepCopyInto(*out) + } + if in.RootCoord != nil { + in, out := &in.RootCoord, &out.RootCoord + *out = new(MilvusRootCoord) + (*in).DeepCopyInto(*out) + } + if in.IndexCoord != nil { + in, out := &in.IndexCoord, &out.IndexCoord + *out = new(MilvusIndexCoord) + (*in).DeepCopyInto(*out) + } + if in.DataCoord != nil { + in, out := &in.DataCoord, &out.DataCoord + *out = new(MilvusDataCoord) + (*in).DeepCopyInto(*out) + } + if in.QueryCoord != nil { + in, out := &in.QueryCoord, &out.QueryCoord + *out = new(MilvusQueryCoord) + (*in).DeepCopyInto(*out) + } + if in.IndexNode != nil { + in, out := &in.IndexNode, &out.IndexNode + *out = new(MilvusIndexNode) + (*in).DeepCopyInto(*out) + } + if in.DataNode != nil { + in, out := &in.DataNode, &out.DataNode + *out = new(MilvusDataNode) + (*in).DeepCopyInto(*out) + } + if in.QueryNode != nil { + in, out := &in.QueryNode, &out.QueryNode + *out = new(MilvusQueryNode) + (*in).DeepCopyInto(*out) + } + if in.Standalone != nil { + in, out := &in.Standalone, &out.Standalone + *out = new(MilvusStandalone) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusComponents. +func (in *MilvusComponents) DeepCopy() *MilvusComponents { + if in == nil { + return nil + } + out := new(MilvusComponents) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusCondition) DeepCopyInto(out *MilvusCondition) { + *out = *in + if in.LastTransitionTime != nil { + in, out := &in.LastTransitionTime, &out.LastTransitionTime + *out = (*in).DeepCopy() + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusCondition. +func (in *MilvusCondition) DeepCopy() *MilvusCondition { + if in == nil { + return nil + } + out := new(MilvusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDataCoord) DeepCopyInto(out *MilvusDataCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDataCoord. +func (in *MilvusDataCoord) DeepCopy() *MilvusDataCoord { + if in == nil { + return nil + } + out := new(MilvusDataCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDataNode) DeepCopyInto(out *MilvusDataNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDataNode. +func (in *MilvusDataNode) DeepCopy() *MilvusDataNode { + if in == nil { + return nil + } + out := new(MilvusDataNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusDependencies) DeepCopyInto(out *MilvusDependencies) { + *out = *in + in.Etcd.DeepCopyInto(&out.Etcd) + in.Pulsar.DeepCopyInto(&out.Pulsar) + in.Kafka.DeepCopyInto(&out.Kafka) + in.RocksMQ.DeepCopyInto(&out.RocksMQ) + in.NatsMQ.DeepCopyInto(&out.NatsMQ) + in.Storage.DeepCopyInto(&out.Storage) + in.CustomMsgStream.DeepCopyInto(&out.CustomMsgStream) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusDependencies. +func (in *MilvusDependencies) DeepCopy() *MilvusDependencies { + if in == nil { + return nil + } + out := new(MilvusDependencies) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusEtcd) DeepCopyInto(out *MilvusEtcd) { + *out = *in + if in.Endpoints != nil { + in, out := &in.Endpoints, &out.Endpoints + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusEtcd. +func (in *MilvusEtcd) DeepCopy() *MilvusEtcd { + if in == nil { + return nil + } + out := new(MilvusEtcd) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIndexCoord) DeepCopyInto(out *MilvusIndexCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIndexCoord. +func (in *MilvusIndexCoord) DeepCopy() *MilvusIndexCoord { + if in == nil { + return nil + } + out := new(MilvusIndexCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIndexNode) DeepCopyInto(out *MilvusIndexNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIndexNode. +func (in *MilvusIndexNode) DeepCopy() *MilvusIndexNode { + if in == nil { + return nil + } + out := new(MilvusIndexNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusIngress) DeepCopyInto(out *MilvusIngress) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.IngressClassName != nil { + in, out := &in.IngressClassName, &out.IngressClassName + *out = new(string) + **out = **in + } + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.TLSSecretRefs != nil { + in, out := &in.TLSSecretRefs, &out.TLSSecretRefs + *out = make(map[string][]string, len(*in)) + for key, val := range *in { + var outVal []string + if val == nil { + (*out)[key] = nil + } else { + in, out := &val, &outVal + *out = make([]string, len(*in)) + copy(*out, *in) + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusIngress. +func (in *MilvusIngress) DeepCopy() *MilvusIngress { + if in == nil { + return nil + } + out := new(MilvusIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusKafka) DeepCopyInto(out *MilvusKafka) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } + if in.BrokerList != nil { + in, out := &in.BrokerList, &out.BrokerList + *out = make([]string, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusKafka. +func (in *MilvusKafka) DeepCopy() *MilvusKafka { + if in == nil { + return nil + } + out := new(MilvusKafka) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusList) DeepCopyInto(out *MilvusList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Milvus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusList. +func (in *MilvusList) DeepCopy() *MilvusList { + if in == nil { + return nil + } + out := new(MilvusList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusMixCoord) DeepCopyInto(out *MilvusMixCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusMixCoord. +func (in *MilvusMixCoord) DeepCopy() *MilvusMixCoord { + if in == nil { + return nil + } + out := new(MilvusMixCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusProxy) DeepCopyInto(out *MilvusProxy) { + *out = *in + in.ServiceComponent.DeepCopyInto(&out.ServiceComponent) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusProxy. +func (in *MilvusProxy) DeepCopy() *MilvusProxy { + if in == nil { + return nil + } + out := new(MilvusProxy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusPulsar) DeepCopyInto(out *MilvusPulsar) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusPulsar. +func (in *MilvusPulsar) DeepCopy() *MilvusPulsar { + if in == nil { + return nil + } + out := new(MilvusPulsar) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusQueryCoord) DeepCopyInto(out *MilvusQueryCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusQueryCoord. +func (in *MilvusQueryCoord) DeepCopy() *MilvusQueryCoord { + if in == nil { + return nil + } + out := new(MilvusQueryCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusQueryNode) DeepCopyInto(out *MilvusQueryNode) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusQueryNode. +func (in *MilvusQueryNode) DeepCopy() *MilvusQueryNode { + if in == nil { + return nil + } + out := new(MilvusQueryNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusReplicas) DeepCopyInto(out *MilvusReplicas) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusReplicas. +func (in *MilvusReplicas) DeepCopy() *MilvusReplicas { + if in == nil { + return nil + } + out := new(MilvusReplicas) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusRootCoord) DeepCopyInto(out *MilvusRootCoord) { + *out = *in + in.Component.DeepCopyInto(&out.Component) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusRootCoord. +func (in *MilvusRootCoord) DeepCopy() *MilvusRootCoord { + if in == nil { + return nil + } + out := new(MilvusRootCoord) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusSpec) DeepCopyInto(out *MilvusSpec) { + *out = *in + in.Com.DeepCopyInto(&out.Com) + in.Dep.DeepCopyInto(&out.Dep) + in.Conf.DeepCopyInto(&out.Conf) + in.HookConf.DeepCopyInto(&out.HookConf) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusSpec. +func (in *MilvusSpec) DeepCopy() *MilvusSpec { + if in == nil { + return nil + } + out := new(MilvusSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStandalone) DeepCopyInto(out *MilvusStandalone) { + *out = *in + in.ServiceComponent.DeepCopyInto(&out.ServiceComponent) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStandalone. +func (in *MilvusStandalone) DeepCopy() *MilvusStandalone { + if in == nil { + return nil + } + out := new(MilvusStandalone) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStatus) DeepCopyInto(out *MilvusStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]MilvusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.IngressStatus.DeepCopyInto(&out.IngressStatus) + out.DeprecatedReplicas = in.DeprecatedReplicas + if in.ComponentsDeployStatus != nil { + in, out := &in.ComponentsDeployStatus, &out.ComponentsDeployStatus + *out = make(map[string]ComponentDeployStatus, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStatus. +func (in *MilvusStatus) DeepCopy() *MilvusStatus { + if in == nil { + return nil + } + out := new(MilvusStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusStorage) DeepCopyInto(out *MilvusStorage) { + *out = *in + if in.InCluster != nil { + in, out := &in.InCluster, &out.InCluster + *out = new(InClusterConfig) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusStorage. +func (in *MilvusStorage) DeepCopy() *MilvusStorage { + if in == nil { + return nil + } + out := new(MilvusStorage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusUpgrade) DeepCopyInto(out *MilvusUpgrade) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusUpgrade. +func (in *MilvusUpgrade) DeepCopy() *MilvusUpgrade { + if in == nil { + return nil + } + out := new(MilvusUpgrade) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusUpgrade) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusUpgradeList) DeepCopyInto(out *MilvusUpgradeList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MilvusUpgrade, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusUpgradeList. +func (in *MilvusUpgradeList) DeepCopy() *MilvusUpgradeList { + if in == nil { + return nil + } + out := new(MilvusUpgradeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MilvusUpgradeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusUpgradeSpec) DeepCopyInto(out *MilvusUpgradeSpec) { + *out = *in + out.Milvus = in.Milvus +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusUpgradeSpec. +func (in *MilvusUpgradeSpec) DeepCopy() *MilvusUpgradeSpec { + if in == nil { + return nil + } + out := new(MilvusUpgradeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MilvusUpgradeStatus) DeepCopyInto(out *MilvusUpgradeStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]metav1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ReplicasBeforeUpgrade != nil { + in, out := &in.ReplicasBeforeUpgrade, &out.ReplicasBeforeUpgrade + *out = new(MilvusReplicas) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MilvusUpgradeStatus. +func (in *MilvusUpgradeStatus) DeepCopy() *MilvusUpgradeStatus { + if in == nil { + return nil + } + out := new(MilvusUpgradeStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ObjectReference) DeepCopyInto(out *ObjectReference) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectReference. +func (in *ObjectReference) DeepCopy() *ObjectReference { + if in == nil { + return nil + } + out := new(ObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Persistence) DeepCopyInto(out *Persistence) { + *out = *in + in.PersistentVolumeClaim.DeepCopyInto(&out.PersistentVolumeClaim) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Persistence. +func (in *Persistence) DeepCopy() *Persistence { + if in == nil { + return nil + } + out := new(Persistence) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PersistentVolumeClaim) DeepCopyInto(out *PersistentVolumeClaim) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaim. +func (in *PersistentVolumeClaim) DeepCopy() *PersistentVolumeClaim { + if in == nil { + return nil + } + out := new(PersistentVolumeClaim) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServiceComponent) DeepCopyInto(out *ServiceComponent) { + *out = *in + in.Component.DeepCopyInto(&out.Component) + if in.ServiceLabels != nil { + in, out := &in.ServiceLabels, &out.ServiceLabels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.ServiceAnnotations != nil { + in, out := &in.ServiceAnnotations, &out.ServiceAnnotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(MilvusIngress) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceComponent. +func (in *ServiceComponent) DeepCopy() *ServiceComponent { + if in == nil { + return nil + } + out := new(ServiceComponent) + in.DeepCopyInto(out) + return out +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Values. +func (in *Values) DeepCopy() *Values { + if in == nil { + return nil + } + out := new(Values) + in.DeepCopyInto(out) + return out +} diff --git a/charts/milvus-operator/.helmignore b/charts/milvus-operator/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/charts/milvus-operator/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/milvus-operator/Chart.yaml b/charts/milvus-operator/Chart.yaml new file mode 100644 index 00000000..4f2ed615 --- /dev/null +++ b/charts/milvus-operator/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +name: milvus-operator +description: A Helm chart for deploying Milvus Operator +kubeVersion: '>= 1.16.0-0' + +home: https://github.com/zilliztech/milvus-operator + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.9.8 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "0.9.8" + +maintainers: +- name: zilliztech + email: devops@zilliz.com + url: https://zilliz.com diff --git a/charts/milvus-operator/ci/default-values.yaml b/charts/milvus-operator/ci/default-values.yaml new file mode 100644 index 00000000..15435f88 --- /dev/null +++ b/charts/milvus-operator/ci/default-values.yaml @@ -0,0 +1,11 @@ +# check and install the dependencies when enabled, this need an extra service account with privileged clusterroles +installDependencies: + enable: true + serviceAccount: + # serviceAccount.create -- Specifies whether a service account should be created + create: true + # serviceAccount.annotations -- Annotations to add to the service account + annotations: {} + # serviceAccount.name -- The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "milvus-dep-sa" diff --git a/charts/milvus-operator/ci/job-values.yaml b/charts/milvus-operator/ci/job-values.yaml new file mode 100644 index 00000000..15435f88 --- /dev/null +++ b/charts/milvus-operator/ci/job-values.yaml @@ -0,0 +1,11 @@ +# check and install the dependencies when enabled, this need an extra service account with privileged clusterroles +installDependencies: + enable: true + serviceAccount: + # serviceAccount.create -- Specifies whether a service account should be created + create: true + # serviceAccount.annotations -- Annotations to add to the service account + annotations: {} + # serviceAccount.name -- The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "milvus-dep-sa" diff --git a/charts/milvus-operator/templates/NOTES.txt b/charts/milvus-operator/templates/NOTES.txt new file mode 100644 index 00000000..923de632 --- /dev/null +++ b/charts/milvus-operator/templates/NOTES.txt @@ -0,0 +1,6 @@ +Milvus Operator Is Starting, use `kubectl get -n {{ .Release.Namespace }} deploy/{{ .Release.Name }}` to check if its successfully installed +If Operator not started successfully, check the checker's log with `kubectl -n {{ .Release.Namespace }} logs job/{{ .Release.Name }}-checker` +Full Installation doc can be found in https://github.com/zilliztech/milvus-operator/blob/main/docs/installation/installation.md +Quick start with `kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/main/config/samples/milvus_minimum.yaml` +More samples can be found in https://github.com/zilliztech/milvus-operator/tree/main/config/samples +CRD Documentation can be found in https://github.com/zilliztech/milvus-operator/tree/main/docs/CRD diff --git a/charts/milvus-operator/templates/_helpers.tpl b/charts/milvus-operator/templates/_helpers.tpl new file mode 100644 index 00000000..8c67df85 --- /dev/null +++ b/charts/milvus-operator/templates/_helpers.tpl @@ -0,0 +1,73 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "chart.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "chart.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "chart.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "chart.labels" -}} +helm.sh/chart: {{ include "chart.chart" . }} +{{ include "chart.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "chart.selectorLabels" -}} +app.kubernetes.io/name: {{ include "chart.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "chart.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "chart.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + +{{- define "chart.checkerServiceAccountName" -}} +{{- if .Values.installDependencies.enable }} +{{- if .Values.installDependencies.serviceAccount.create }} +{{- default (printf "%s-checker" (include "chart.fullname" .)) .Values.installDependencies.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} +{{- end }} diff --git a/charts/milvus-operator/templates/checker_role.yaml b/charts/milvus-operator/templates/checker_role.yaml new file mode 100644 index 00000000..0220f79a --- /dev/null +++ b/charts/milvus-operator/templates/checker_role.yaml @@ -0,0 +1,347 @@ +{{- if .Values.installDependencies.enable -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: '{{ include "chart.fullname" . }}-checker-role' +rules: +- apiGroups: + - "" + resources: + - configmaps + - secrets + - services + - namespaces + - events + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - deployments + - pods + - secrets + - services + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvus/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - podmonitors + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - ingresses/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + - clusterroles + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices/status + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - auditregistration.k8s.io + resources: + - auditsinks + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - cert-manager.io + - acme.cert-manager.io + resources: + - certificates + - certificates/status + - certificates/finalizers + - issuers + - issuers/status + - issuers/finalizers + - clusterissuers + - clusterissuers/status + - clusterissuers/finalizers + - orders + - orders/status + - orders/finalizers + - certificaterequests + - certificaterequests/status + - certificaterequests/finalizers + - challenges + - challenges/status + - challenges/finalizers + - signers + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch + - approve + - sign +- apiGroups: + - networking.x-k8s.io + - route.openshift.io + - authorization.k8s.io + - certificates.k8s.io + - coordination.k8s.io + resources: + - httproutes + - httproutes/finalizers + - gateways + - gateways/finalizers + - routes/custom-host + - subjectaccessreviews + - signers + - certificatesigningrequests + - certificatesigningrequests/status + - leases + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - sign +{{- end -}} diff --git a/charts/milvus-operator/templates/checker_rolebinding.yaml b/charts/milvus-operator/templates/checker_rolebinding.yaml new file mode 100644 index 00000000..052cd689 --- /dev/null +++ b/charts/milvus-operator/templates/checker_rolebinding.yaml @@ -0,0 +1,14 @@ +{{- if .Values.installDependencies.enable -}} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: '{{ include "chart.fullname" . }}-checker-rolebinding' +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: '{{ include "chart.fullname" . }}-checker-role' +subjects: +- kind: ServiceAccount + name: {{ include "chart.checkerServiceAccountName" . | quote }} + namespace: {{ .Release.Namespace | quote }} +{{- end -}} diff --git a/charts/milvus-operator/templates/checker_serviceaccount.yaml b/charts/milvus-operator/templates/checker_serviceaccount.yaml new file mode 100644 index 00000000..12792db1 --- /dev/null +++ b/charts/milvus-operator/templates/checker_serviceaccount.yaml @@ -0,0 +1,15 @@ +{{- if .Values.installDependencies.enable -}} +{{- if .Values.installDependencies.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "chart.checkerServiceAccountName" . | quote }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "chart.labels" . | nindent 4 }} + {{- with .Values.installDependencies.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/charts/milvus-operator/templates/clusterrole.yaml b/charts/milvus-operator/templates/clusterrole.yaml new file mode 100644 index 00000000..f9ab53f5 --- /dev/null +++ b/charts/milvus-operator/templates/clusterrole.yaml @@ -0,0 +1,248 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: '{{ include "chart.fullname" . }}-manager-role' +rules: +- apiGroups: + - "" + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - deployments + - pods + - secrets + - services + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusclusters/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvuses/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusupgrades/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - podmonitors + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +{{- end -}} diff --git a/charts/milvus-operator/templates/clusterrolebinding.yaml b/charts/milvus-operator/templates/clusterrolebinding.yaml new file mode 100644 index 00000000..ddfc27e2 --- /dev/null +++ b/charts/milvus-operator/templates/clusterrolebinding.yaml @@ -0,0 +1,15 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: '{{ include "chart.fullname" . }}-manager-rolebinding' +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: '{{ include "chart.fullname" . }}-manager-role' +subjects: +- kind: ServiceAccount + name: {{ include "chart.serviceAccountName" . | quote }} + namespace: {{ .Release.Namespace | quote }} +{{- end -}} diff --git a/charts/milvus-operator/templates/crds.yaml b/charts/milvus-operator/templates/crds.yaml new file mode 100644 index 00000000..df1967c0 --- /dev/null +++ b/charts/milvus-operator/templates/crds.yaml @@ -0,0 +1,13749 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +{{- if .Values.installCRDs }} +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusclusters.milvus.io +spec: + group: milvus.io + names: + kind: MilvusCluster + listKind: MilvusClusterList + plural: milvusclusters + shortNames: + - mc + - mic + singular: milvuscluster + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + name: milvuses.milvus.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + name: '{{. | include "chart.fullname"}}-webhook-service' + namespace: {{ .Release.Namespace }} + path: /convert + conversionReviewVersions: + - v1 + group: milvus.io + names: + kind: Milvus + listKind: MilvusList + plural: milvuses + shortNames: + - mi + singular: milvus + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + disableMetric: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + replicas: + format: int32 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Milvus mode + jsonPath: .spec.mode + name: Mode + type: string + - description: Milvus status + jsonPath: .status.status + name: Status + type: string + - description: Milvus updated + jsonPath: .status.conditions[?(@.type=="MilvusUpdated")].status + name: Updated + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + hookConfig: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + mode: + default: standalone + enum: + - cluster + - standalone + type: string + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusupgrades.milvus.io +spec: + group: milvus.io + names: + kind: MilvusUpgrade + listKind: MilvusUpgradeList + plural: milvusupgrades + singular: milvusupgrade + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + backupPVC: + type: string + maxRetry: + default: 3 + type: integer + milvus: + properties: + name: + type: string + namespace: + type: string + required: + - name + type: object + operation: + default: upgrade + enum: + - upgrade + - rollback + type: string + rollbackIfFailed: + default: true + type: boolean + sourceVersion: + type: string + targetImage: + type: string + targetVersion: + type: string + toolImage: + type: string + required: + - milvus + - sourceVersion + - targetVersion + type: object + status: + properties: + backupPVC: + type: string + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + maxLength: 32768 + type: string + observedGeneration: + format: int64 + minimum: 0 + type: integer + reason: + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + enum: + - "True" + - "False" + - Unknown + type: string + type: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + isRollbacking: + type: boolean + metaBackuped: + type: boolean + metaStorageChanged: + type: boolean + replicasBeforeUprade: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + retriedTimes: + type: integer + sourceImage: + type: string + state: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +{{- end -}} diff --git a/charts/milvus-operator/templates/deployment.yaml b/charts/milvus-operator/templates/deployment.yaml new file mode 100644 index 00000000..4e99f279 --- /dev/null +++ b/charts/milvus-operator/templates/deployment.yaml @@ -0,0 +1,66 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: {{- include "chart.labels" . | nindent 4 }} + name: {{ include "chart.fullname" . | quote }} + namespace: {{ .Release.Namespace | quote }} +spec: + selector: + matchLabels: {{- include "chart.selectorLabels" . | nindent 6 }} + template: + metadata: + annotations: {{- toYaml .Values.podAnnotations | nindent 8 }} + labels: {{- include "chart.selectorLabels" . | nindent 8 }} + spec: + affinity: {{- toYaml .Values.affinity | nindent 8 }} + containers: + - args: + - -namespace + - {{ .Release.Namespace | quote }} + - -name + - {{ include "chart.fullname" . | quote }} + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /manager + image: '{{.Values.image.repository}}:{{.Values.image.tag|default .Chart.AppVersion}}' + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + - containerPort: 8080 + name: metrics + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: {{- toYaml .Values.resources | nindent 10 }} + securityContext: + allowPrivilegeEscalation: {{ .Values.allowPrivilegeEscalation }} + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + nodeSelector: {{- toYaml .Values.nodeSelector | nindent 8 }} + securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} + serviceAccountName: {{ include "chart.serviceAccountName" . | quote }} + terminationGracePeriodSeconds: 10 + tolerations: {{- toYaml .Values.tolerations | nindent 8 }} + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: '{{ include "chart.fullname" . }}-webhook-cert' diff --git a/charts/milvus-operator/templates/job.yaml b/charts/milvus-operator/templates/job.yaml new file mode 100644 index 00000000..5b057eef --- /dev/null +++ b/charts/milvus-operator/templates/job.yaml @@ -0,0 +1,42 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: {{- toYaml .Values.checker.annotations | nindent 4 }} + labels: {{- include "chart.labels" . | nindent 4 }} + name: "{{ .Release.Name }}-checker" + namespace: {{ .Release.Namespace | quote }} +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + securityContext: + runAsNonRoot: true + serviceAccountName: {{ include "chart.checkerServiceAccountName" . | quote }} + restartPolicy: OnFailure + containers: + - name: checker + image: '{{.Values.image.repository}}:{{.Values.image.tag|default .Chart.AppVersion}}' + imagePullPolicy: {{ .Values.image.pullPolicy | quote }} + command: ["/checker"] + args: + - "-namespace={{ .Release.Namespace }}" + - "-name={{ .Release.Name }}" + {{- if .Values.checker.disableCertManagerCheck }} + - "-disable-cert-manager-check" + {{- end }} + {{- if .Values.checker.disableCertManagerInstall }} + - "-disable-cert-manager-install" + {{- end }} + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 50m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/milvus-operator/templates/mutatingwebhookconfiguration.yaml b/charts/milvus-operator/templates/mutatingwebhookconfiguration.yaml new file mode 100644 index 00000000..1966e743 --- /dev/null +++ b/charts/milvus-operator/templates/mutatingwebhookconfiguration.yaml @@ -0,0 +1,49 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + name: '{{ include "chart.fullname" . }}-mutating-webhook-configuration' +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: {{ .Release.Namespace | quote }} + path: /mutate-milvus-io-v1beta1-milvus + port: 443 + failurePolicy: Fail + name: mmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: {{ .Release.Namespace | quote }} + path: /mutate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: mmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None diff --git a/charts/milvus-operator/templates/role.yaml b/charts/milvus-operator/templates/role.yaml new file mode 100644 index 00000000..567f6f7a --- /dev/null +++ b/charts/milvus-operator/templates/role.yaml @@ -0,0 +1,40 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: '{{ include "chart.fullname" . }}-leader-election-role' + namespace: {{ .Release.Namespace | quote }} +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 +{{- end -}} diff --git a/charts/milvus-operator/templates/rolebinding.yaml b/charts/milvus-operator/templates/rolebinding.yaml new file mode 100644 index 00000000..9b1d7c9c --- /dev/null +++ b/charts/milvus-operator/templates/rolebinding.yaml @@ -0,0 +1,16 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: '{{ include "chart.fullname" . }}-leader-election-rolebinding' + namespace: {{ .Release.Namespace | quote }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: '{{ include "chart.fullname" . }}-leader-election-role' +subjects: +- kind: ServiceAccount + name: {{ include "chart.serviceAccountName" . | quote }} + namespace: {{ .Release.Namespace | quote }} +{{- end -}} diff --git a/charts/milvus-operator/templates/service.yaml b/charts/milvus-operator/templates/service.yaml new file mode 100644 index 00000000..6d4564f4 --- /dev/null +++ b/charts/milvus-operator/templates/service.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + service-kind: metrics + {{- include "chart.labels" . | nindent 4 }} + name: '{{ include "chart.fullname" . }}-metrics-service' + namespace: {{ .Release.Namespace | quote }} +spec: + ports: + - name: metrics + port: 8443 + targetPort: metrics + selector: + {{- include "chart.selectorLabels" . | nindent 4 }} +--- +apiVersion: v1 +kind: Service +metadata: + labels: + {{- include "chart.labels" . | nindent 4 }} + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: {{ .Release.Namespace | quote }} +spec: + ports: + - port: 443 + targetPort: webhook-server + protocol: TCP + name: https + selector: + {{- include "chart.selectorLabels" . | nindent 4 }} diff --git a/charts/milvus-operator/templates/serviceaccount.yaml b/charts/milvus-operator/templates/serviceaccount.yaml new file mode 100644 index 00000000..73601b66 --- /dev/null +++ b/charts/milvus-operator/templates/serviceaccount.yaml @@ -0,0 +1,13 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "chart.serviceAccountName" . | quote }} + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "chart.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/milvus-operator/templates/servicemonitor.yaml b/charts/milvus-operator/templates/servicemonitor.yaml new file mode 100644 index 00000000..410afb56 --- /dev/null +++ b/charts/milvus-operator/templates/servicemonitor.yaml @@ -0,0 +1,21 @@ +{{- if .Values.monitoringEnabled -}} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + {{- include "chart.labels" . | nindent 4 }} + name: '{{ include "chart.fullname" . }}-metrics-monitor' + namespace: {{ .Release.Namespace | quote }} +spec: + endpoints: + - path: /metrics + port: metrics + scheme: http + selector: + matchLabels: + service-kind: metrics + {{- include "chart.selectorLabels" . | nindent 6 }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace | quote }} +{{- end }} \ No newline at end of file diff --git a/charts/milvus-operator/templates/validatingwebhookconfiguration.yaml b/charts/milvus-operator/templates/validatingwebhookconfiguration.yaml new file mode 100644 index 00000000..b913da00 --- /dev/null +++ b/charts/milvus-operator/templates/validatingwebhookconfiguration.yaml @@ -0,0 +1,49 @@ +{{- /* Code generated by make. DO NOT EDIT. */ -}} +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + name: '{{ include "chart.fullname" . }}-validating-webhook-configuration' +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: {{ .Release.Namespace | quote }} + path: /validate-milvus-io-v1beta1-milvus + port: 443 + failurePolicy: Fail + name: vmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: {{ .Release.Namespace | quote }} + path: /validate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: vmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None diff --git a/charts/milvus-operator/values.yaml b/charts/milvus-operator/values.yaml new file mode 100644 index 00000000..d0bc0f83 --- /dev/null +++ b/charts/milvus-operator/values.yaml @@ -0,0 +1,204 @@ +# Default values for milvus-operator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. +image: + # image.repository -- The image repository whose default is the chart appVersion. + repository: milvusdb/milvus-operator + # image.pullPolicy -- The image pull policy for the controller. + pullPolicy: IfNotPresent + # image.tag -- The image tag whose default is the chart appVersion. + tag: "v0.9.8" + +# installCRDs -- If true, CRD resources will be installed as part of the Helm chart. If enabled, when uninstalling CRD resources will be deleted causing all installed custom resources to be DELETED +installCRDs: true + +monitoringEnabled: false + +checker: + disableCertManagerCheck: false + disableCertManagerInstall: false + # checker.annotations -- Annotations to add to the checker job + annotations: {} + +# check and install the dependencies when enabled, this need an extra service account with privileged clusterroles +installDependencies: + enable: true + serviceAccount: + # serviceAccount.create -- Specifies whether a service account should be created + create: true + # serviceAccount.annotations -- Annotations to add to the service account + annotations: {} + # serviceAccount.name -- The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +nameOverride: "" +fullnameOverride: "" + +# imagePullSecrets -- Reference to one or more secrets to be used when pulling images +# +# For example: +# `[ +# {"name":"image-pull-secret"} +# ]` +imagePullSecrets: [] + +# priorityClassName -- priority class to be used for the milvus-operator pods +priorityClassName: "" + +leaderElection: + # leaderElection.namespace -- The namespace used to store the ConfigMap for leader election + namespace: "kube-system" + +rbac: + # rbac.create -- Whether to install Role Based Access Control + create: true + +# replicaCount -- Number of replicas for the controller +replicaCount: 1 + + +# strategy -- Expects input structure as per specification +# For example: +# `{ +# "type": "RollingUpdate", +# "rollingUpdate": { +# "maxSurge": 0, +# "maxUnavailable": 1 +# } +# }` +strategy: {} + +serviceAccount: + # serviceAccount.create -- Specifies whether a service account should be created + create: true + # serviceAccount.annotations -- Annotations to add to the service account + annotations: {} + # serviceAccount.name -- The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + + +# resources -- Expects input structure as per specification +resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 100Mi + +# volumes -- Expects input structure as per specification +# For example: +# `[ +# { +# "name": "test-volume", +# "awsElasticBlockStore": { +# "volumeID": "", +# "fsType": "ext4" +# } +# } +# ]` +volumes: [] + +# volumeMounts -- Expects input structure as per specification +# For example: +# `[ +# { +# "mountPath": "/test-ebs", +# "name": "test-volume" +# } +# ]` +volumeMounts: [] + +# deploymentAnnotations -- Additional annotations to add to the controller Deployment +deploymentAnnotations: {} + +# podAnnotations -- Additional annotations to add to the controller Pods +podAnnotations: {} + +# podLabels -- Additional labels to add to the controller Pods +podLabels: {} + +# podSecurityContext -- Expects input structure as per specification +# For example: +# `{ +# "fsGroup": 2000, +# "runAsUser": 1000, +# "runAsNonRoot": true +# }` +podSecurityContext: + runAsUser: 65532 + runAsNonRoot: true + +# allowPrivilegeEscalation -- Allow privilege escalation for the controller Pods +allowPrivilegeEscalation: false + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + + +# autoscaling: +# enabled: false +# minReplicas: 1 +# maxReplicas: 100 +# targetCPUUtilizationPercentage: 80 +# # targetMemoryUtilizationPercentage: 80 + +# nodeSelector -- Expects input structure as per specification +# For example: +# `[ +# { +# "matchExpressions": [ +# { +# "key": "kubernetes.io/e2e-az-name", +# "operator": "In", +# "values": [ +# "e2e-az1", +# "e2e-az2" +# ] +# } +# ] +# } +# ]` +nodeSelector: {} + +# tolerations -- Expects input structure as per specification +# For example: +# `[ +# { +# "key": "foo.bar.com/role", +# "operator": "Equal", +# "value": "master", +# "effect": "NoSchedule" +# } +# ]` +tolerations: [] + +# affinity -- Expects input structure as per specification +# For example: +# `{ +# "nodeAffinity": { +# "requiredDuringSchedulingIgnoredDuringExecution": { +# "nodeSelectorTerms": [ +# { +# "matchExpressions": [ +# { +# "key": "foo.bar.com/role", +# "operator": "In", +# "values": [ +# "master" +# ] +# } +# ] +# } +# ] +# } +# } +# }` +affinity: {} diff --git a/codecov.yaml b/codecov.yaml new file mode 100644 index 00000000..30e06499 --- /dev/null +++ b/codecov.yaml @@ -0,0 +1,11 @@ +ignore: + - "**/zz_generated.deepcopy.go" + - "**/*_mock.go" +coverage: + status: + project: + default: + target: 80% + patch: + default: + target: 20% \ No newline at end of file diff --git a/config/assets/templates/migration.yaml.tmpl b/config/assets/templates/migration.yaml.tmpl new file mode 100644 index 00000000..e086f165 --- /dev/null +++ b/config/assets/templates/migration.yaml.tmpl @@ -0,0 +1,19 @@ +cmd: + type: {{ .Command }} + +config: + sourceVersion: {{ .SourceVersion }} + targetVersion: {{ .TargetVersion }} + backupFilePath: /milvus/data/migration.bak + +metastore: + type: etcd + +etcd: + {{- range .Endpoints }} + endpoints: + - {{ .}} + {{- end }} + rootPath: {{ .RootPath }} + metaSubPath: {{ .MetaSubPath | default "meta" }} + kvSubPath: {{ .KvSubPath | default "kv" }} diff --git a/config/assets/templates/milvus-cluster.yaml.tmpl b/config/assets/templates/milvus-cluster.yaml.tmpl new file mode 100644 index 00000000..162967ad --- /dev/null +++ b/config/assets/templates/milvus-cluster.yaml.tmpl @@ -0,0 +1,51 @@ +etcd: + {{- range .Spec.Dep.Etcd.Endpoints }} + endpoints: + - {{ .}} + {{- end }} + rootPath: {{ .Name }} +minio: + address: localhost + port: 9000 + useSSL: false + bucketName: {{ .Name }} + rootPath: files + +pulsar: + address: localhost + port: 6650 + maxMessageSize: 5242880 # 5 * 1024 * 1024 Bytes + +kafka: + {{- range .Spec.Dep.Kafka.BrokerList }} + brokerList: + - {{ .}} + {{- end }} + +rootCoord: + port: {{ .Spec.Com.RootCoord.Port | default 53100 }} + +proxy: + port: {{ .Spec.Com.Proxy.Port | default 19530 }} + +queryCoord: + port: {{ .Spec.Com.QueryCoord.Port | default 19531 }} + +queryNode: + port: {{ .Spec.Com.QueryNode.Port | default 21123 }} + +indexCoord: + port: {{ .Spec.Com.IndexCoord.Port | default 31000 }} + +indexNode: + port: {{ .Spec.Com.IndexNode.Port | default 21121 }} + +dataCoord: + port: {{ .Spec.Com.DataCoord.Port | default 13333 }} + +dataNode: + port: {{ .Spec.Com.DataNode.Port | default 21124 }} + +msgChannel: + chanNamePrefix: + cluster: {{ .Name }} diff --git a/config/assets/templates/milvus.yaml.tmpl b/config/assets/templates/milvus.yaml.tmpl new file mode 100644 index 00000000..a089f84d --- /dev/null +++ b/config/assets/templates/milvus.yaml.tmpl @@ -0,0 +1,13 @@ +etcd: + {{- range .Spec.Dep.Etcd.Endpoints }} + endpoints: + - {{ .}} + {{- end }} + rootPath: {{ .Name }} + +minio: + bucketName: {{ .Name }} + +msgChannel: + chanNamePrefix: + cluster: {{ .Name }} diff --git a/config/cert/csr.conf b/config/cert/csr.conf new file mode 100644 index 00000000..4dd6a342 --- /dev/null +++ b/config/cert/csr.conf @@ -0,0 +1,25 @@ +[ req ] +default_bits = 2048 +prompt = no +default_md = sha256 +req_extensions = req_ext +distinguished_name = dn + +[ dn ] +C = CN +ST = Shanghai +L = Shanghai +CN = host.docker.internal + +[ req_ext ] +subjectAltName = @alt_names + +[ alt_names ] +DNS.1 = host.docker.internal + +[ v3_ext ] +authorityKeyIdentifier=keyid,issuer:always +basicConstraints=CA:FALSE +keyUsage=keyEncipherment,dataEncipherment +extendedKeyUsage=serverAuth,clientAuth +subjectAltName=@alt_names \ No newline at end of file diff --git a/config/crd/bases/milvus.io_milvusclusters.yaml b/config/crd/bases/milvus.io_milvusclusters.yaml new file mode 100644 index 00000000..4be29578 --- /dev/null +++ b/config/crd/bases/milvus.io_milvusclusters.yaml @@ -0,0 +1,6317 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusclusters.milvus.io +spec: + group: milvus.io + names: + kind: MilvusCluster + listKind: MilvusClusterList + plural: milvusclusters + shortNames: + - mc + - mic + singular: milvuscluster + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/config/crd/bases/milvus.io_milvuses.yaml b/config/crd/bases/milvus.io_milvuses.yaml new file mode 100644 index 00000000..3f3b307d --- /dev/null +++ b/config/crd/bases/milvus.io_milvuses.yaml @@ -0,0 +1,7265 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvuses.milvus.io +spec: + group: milvus.io + names: + kind: Milvus + listKind: MilvusList + plural: milvuses + shortNames: + - mi + singular: milvus + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + disableMetric: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + replicas: + format: int32 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Milvus mode + jsonPath: .spec.mode + name: Mode + type: string + - description: Milvus status + jsonPath: .status.status + name: Status + type: string + - description: Milvus updated + jsonPath: .status.conditions[?(@.type=="MilvusUpdated")].status + name: Updated + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + hookConfig: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + mode: + default: standalone + enum: + - cluster + - standalone + type: string + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/config/crd/bases/milvus.io_milvusupgrades.yaml b/config/crd/bases/milvus.io_milvusupgrades.yaml new file mode 100644 index 00000000..e03d0242 --- /dev/null +++ b/config/crd/bases/milvus.io_milvusupgrades.yaml @@ -0,0 +1,156 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusupgrades.milvus.io +spec: + group: milvus.io + names: + kind: MilvusUpgrade + listKind: MilvusUpgradeList + plural: milvusupgrades + singular: milvusupgrade + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + backupPVC: + type: string + maxRetry: + default: 3 + type: integer + milvus: + properties: + name: + type: string + namespace: + type: string + required: + - name + type: object + operation: + default: upgrade + enum: + - upgrade + - rollback + type: string + rollbackIfFailed: + default: true + type: boolean + sourceVersion: + type: string + targetImage: + type: string + targetVersion: + type: string + toolImage: + type: string + required: + - milvus + - sourceVersion + - targetVersion + type: object + status: + properties: + backupPVC: + type: string + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + maxLength: 32768 + type: string + observedGeneration: + format: int64 + minimum: 0 + type: integer + reason: + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + enum: + - "True" + - "False" + - Unknown + type: string + type: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + isRollbacking: + type: boolean + metaBackuped: + type: boolean + metaStorageChanged: + type: boolean + replicasBeforeUprade: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + retriedTimes: + type: integer + sourceImage: + type: string + state: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/config/crd/kustomization.yaml b/config/crd/kustomization.yaml new file mode 100644 index 00000000..4a089c30 --- /dev/null +++ b/config/crd/kustomization.yaml @@ -0,0 +1,25 @@ +# This kustomization.yaml is not intended to be run by itself, +# since it depends on service name and namespace that are out of this kustomize package. +# It should be run by config/default +resources: +- bases/milvus.io_milvuses.yaml +- bases/milvus.io_milvusclusters.yaml +- bases/milvus.io_milvusupgrades.yaml +#+kubebuilder:scaffold:crdkustomizeresource + +patchesStrategicMerge: +# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix. +# patches here are for enabling the conversion webhook for each CRD +- patches/webhook_in_milvuses.yaml +#- patches/webhook_in_milvusupgrades.yaml +#+kubebuilder:scaffold:crdkustomizewebhookpatch + +# [CERTMANAGER] To enable webhook, uncomment all the sections with [CERTMANAGER] prefix. +# patches here are for enabling the CA injection for each CRD +- patches/cainjection_in_milvuses.yaml +#- patches/cainjection_in_milvusupgrades.yaml +#+kubebuilder:scaffold:crdkustomizecainjectionpatch + +# the following config is for teaching kustomize how to do kustomization for CRDs. +configurations: +- kustomizeconfig.yaml diff --git a/config/crd/kustomizeconfig.yaml b/config/crd/kustomizeconfig.yaml new file mode 100644 index 00000000..ec5c150a --- /dev/null +++ b/config/crd/kustomizeconfig.yaml @@ -0,0 +1,19 @@ +# This file is for teaching kustomize how to substitute name and namespace reference in CRD +nameReference: +- kind: Service + version: v1 + fieldSpecs: + - kind: CustomResourceDefinition + version: v1 + group: apiextensions.k8s.io + path: spec/conversion/webhook/clientConfig/service/name + +namespace: +- kind: CustomResourceDefinition + version: v1 + group: apiextensions.k8s.io + path: spec/conversion/webhook/clientConfig/service/namespace + create: false + +varReference: +- path: metadata/annotations diff --git a/config/crd/patches/cainjection_in_milvuses.yaml b/config/crd/patches/cainjection_in_milvuses.yaml new file mode 100644 index 00000000..bb9a64cb --- /dev/null +++ b/config/crd/patches/cainjection_in_milvuses.yaml @@ -0,0 +1,7 @@ +# The following patch adds a directive for certmanager to inject CA into the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: milvus-operator/milvus-operator-serving-cert + name: milvuses.milvus.io diff --git a/config/crd/patches/cainjection_in_milvusupgrades.yaml b/config/crd/patches/cainjection_in_milvusupgrades.yaml new file mode 100644 index 00000000..62df935a --- /dev/null +++ b/config/crd/patches/cainjection_in_milvusupgrades.yaml @@ -0,0 +1,7 @@ +# The following patch adds a directive for certmanager to inject CA into the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) + name: milvusupgrades.milvus.io diff --git a/config/crd/patches/webhook_in_milvuses.yaml b/config/crd/patches/webhook_in_milvuses.yaml new file mode 100644 index 00000000..172853da --- /dev/null +++ b/config/crd/patches/webhook_in_milvuses.yaml @@ -0,0 +1,16 @@ +# The following patch enables a conversion webhook for the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: milvuses.milvus.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + namespace: system + name: webhook-service + path: /convert + conversionReviewVersions: + - v1 diff --git a/config/crd/patches/webhook_in_milvusupgrades.yaml b/config/crd/patches/webhook_in_milvusupgrades.yaml new file mode 100644 index 00000000..e7aaec94 --- /dev/null +++ b/config/crd/patches/webhook_in_milvusupgrades.yaml @@ -0,0 +1,16 @@ +# The following patch enables a conversion webhook for the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: milvusupgrades.milvus.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + namespace: system + name: webhook-service + path: /convert + conversionReviewVersions: + - v1 diff --git a/config/default/job_args_patch.yaml b/config/default/job_args_patch.yaml new file mode 100644 index 00000000..753c552a --- /dev/null +++ b/config/default/job_args_patch.yaml @@ -0,0 +1,14 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: checker +spec: + template: + spec: + containers: + - name: checker + args: + - -namespace + - $(DEPLOYMENT_NAMESPACE) + - -name + - $(DEPLOYMENT_NAME) \ No newline at end of file diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml new file mode 100644 index 00000000..26f7c8fa --- /dev/null +++ b/config/default/kustomization.yaml @@ -0,0 +1,62 @@ +# Adds namespace to all resources. +namespace: milvus-operator + +# Value of this field is prepended to the +# names of all resources, e.g. a deployment named +# "wordpress" becomes "alices-wordpress". +# Note that it should also match with the prefix (text before '-') of the namespace +# field above. +namePrefix: milvus-operator- + +# Labels to add to all resources and selectors. +#commonLabels: +# someName: someValue + +bases: +- ../crd +- ../rbac +- ../manager +# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in +# crd/kustomization.yaml +- ../webhook +# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required. +# - ../certmanager +# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'. +#- ../prometheus + +patchesStrategicMerge: +# Protect the /metrics endpoint by putting it behind auth. +# If you want your controller-manager to expose the /metrics +# endpoint w/o any authn/z, please comment the following line. +- manager_auth_proxy_patch.yaml + +# Mount the controller config file for loading manager configurations +# through a ComponentConfig type +#- manager_config_patch.yaml + +# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix including the one in +# crd/kustomization.yaml +- manager_webhook_patch.yaml + +# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. +# Uncomment 'CERTMANAGER' sections in crd/kustomization.yaml to enable the CA injection in the admission webhooks. +# 'CERTMANAGER' needs to be enabled to use ca injection +- webhookcainjection_patch.yaml + +- job_args_patch.yaml + +vars: +- name: DEPLOYMENT_NAMESPACE # namespace of the deployment + objref: + kind: Deployment + group: apps + version: v1 + name: controller-manager # this name should match the one in manager.yaml + fieldref: + fieldpath: metadata.namespace +- name: DEPLOYMENT_NAME + objref: + kind: Deployment + group: apps + version: v1 + name: controller-manager # this name should match the one in manager.yaml \ No newline at end of file diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml new file mode 100644 index 00000000..2a36ed0e --- /dev/null +++ b/config/default/manager_auth_proxy_patch.yaml @@ -0,0 +1,19 @@ +# This patch inject a sidecar container which is a HTTP proxy for the +# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager +spec: + template: + spec: + containers: + - name: manager + args: + - -namespace + - $(DEPLOYMENT_NAMESPACE) + - -name + - $(DEPLOYMENT_NAME) + - "--health-probe-bind-address=:8081" + - "--metrics-bind-address=:8080" + - "--leader-elect" diff --git a/config/default/manager_config_patch.yaml b/config/default/manager_config_patch.yaml new file mode 100644 index 00000000..e846a379 --- /dev/null +++ b/config/default/manager_config_patch.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager +spec: + template: + spec: + containers: + - name: manager + args: + - "--config=controller_manager_config.yaml" + volumeMounts: + - name: manager-config + mountPath: /controller_manager_config.yaml + subPath: controller_manager_config.yaml + volumes: + - name: manager-config + configMap: + name: manager-config diff --git a/config/default/manager_webhook_patch.yaml b/config/default/manager_webhook_patch.yaml new file mode 100644 index 00000000..08dc68ae --- /dev/null +++ b/config/default/manager_webhook_patch.yaml @@ -0,0 +1,25 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager +spec: + template: + spec: + containers: + - name: manager + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + - containerPort: 8080 + name: metrics + protocol: TCP + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: milvus-operator-webhook-cert diff --git a/config/default/webhookcainjection_patch.yaml b/config/default/webhookcainjection_patch.yaml new file mode 100644 index 00000000..a17a96ab --- /dev/null +++ b/config/default/webhookcainjection_patch.yaml @@ -0,0 +1,15 @@ +# This patch add annotation to admission webhook config and +# the variables $(CERTIFICATE_NAMESPACE) and $(CERTIFICATE_NAME) will be substituted by kustomize. +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: mutating-webhook-configuration + annotations: + cert-manager.io/inject-ca-from: milvus-operator/milvus-operator-serving-cert +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: validating-webhook-configuration + annotations: + cert-manager.io/inject-ca-from: milvus-operator/milvus-operator-serving-cert diff --git a/config/dev/debug_service.yaml b/config/dev/debug_service.yaml new file mode 100644 index 00000000..30015551 --- /dev/null +++ b/config/dev/debug_service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: milvus-operator-debug + namespace: milvus-operator +spec: + ports: + - nodePort: 31666 + port: 31666 + protocol: TCP + targetPort: 31666 + selector: + control-plane: controller-manager + type: NodePort \ No newline at end of file diff --git a/config/dev/kustomization.yaml b/config/dev/kustomization.yaml new file mode 100644 index 00000000..c3a4583d --- /dev/null +++ b/config/dev/kustomization.yaml @@ -0,0 +1,6 @@ +resources: +- ../default +- debug_service.yaml + +patchesStrategicMerge: +- manager_dev_patch.yaml diff --git a/config/dev/manager_dev_patch.yaml b/config/dev/manager_dev_patch.yaml new file mode 100644 index 00000000..26b91e25 --- /dev/null +++ b/config/dev/manager_dev_patch.yaml @@ -0,0 +1,17 @@ +# This patch inject a sidecar container which is a HTTP proxy for the +# controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager + namespace: system +spec: + template: + spec: + containers: + - name: manager + env: + - name: GOPROXY + value: https://goproxy.cn + - name: DEBUG + value: 'true' \ No newline at end of file diff --git a/config/dev/webhook_patch.yaml b/config/dev/webhook_patch.yaml new file mode 100644 index 00000000..e13e7216 --- /dev/null +++ b/config/dev/webhook_patch.yaml @@ -0,0 +1,4 @@ +- op: "remove" + path: "/metadata/annotations/cert-manager.io~1inject-ca-from" +- op: "remove" + path: "/webhooks/0/clientConfig/service" \ No newline at end of file diff --git a/config/helm/certificate/kustomization.yaml b/config/helm/certificate/kustomization.yaml new file mode 100644 index 00000000..ffcbd195 --- /dev/null +++ b/config/helm/certificate/kustomization.yaml @@ -0,0 +1,13 @@ +namePrefix: '{{ include "chart.fullname" . }}-' + +namespace: '{{ .Release.Namespace | quote }}' + +generatorOptions: + disableNameSuffixHash: true + +patchesStrategicMerge: +- patch_certificate_dns.yaml +- patch_certificate_secret.yaml + +bases: +- ../../certmanager diff --git a/config/helm/certificate/patch_certificate_dns.yaml b/config/helm/certificate/patch_certificate_dns.yaml new file mode 100644 index 00000000..dff2c56e --- /dev/null +++ b/config/helm/certificate/patch_certificate_dns.yaml @@ -0,0 +1,8 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: serving-cert +spec: + dnsNames: + - '{{ include "chart.fullname" . }}-webhook-service.{{ .Release.Namespace }}.svc' + - '{{ include "chart.fullname" . }}-webhook-service.{{ .Release.Namespace }}.svc.cluster.local' diff --git a/config/helm/certificate/patch_certificate_secret.yaml b/config/helm/certificate/patch_certificate_secret.yaml new file mode 100644 index 00000000..48bf9f15 --- /dev/null +++ b/config/helm/certificate/patch_certificate_secret.yaml @@ -0,0 +1,6 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: serving-cert +spec: + secretName: '{{ include "chart.fullname" . }}-webhook-cert' diff --git a/config/helm/crds/kustomization.yaml b/config/helm/crds/kustomization.yaml new file mode 100644 index 00000000..4dca6002 --- /dev/null +++ b/config/helm/crds/kustomization.yaml @@ -0,0 +1,15 @@ +namePrefix: '{{ include "chart.fullname" . }}-' + +namespace: '{{ .Release.Namespace }}' + +generatorOptions: + disableNameSuffixHash: true + +commonAnnotations: + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + +patchesStrategicMerge: +- webhook_patch.yaml + +bases: +- ../../crd diff --git a/config/helm/crds/webhook_patch.yaml b/config/helm/crds/webhook_patch.yaml new file mode 100644 index 00000000..993ab82a --- /dev/null +++ b/config/helm/crds/webhook_patch.yaml @@ -0,0 +1,16 @@ +# The following patch enables a conversion webhook for the CRD +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: milvuses.milvus.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + namespace: '{{.Release.Namespace}}' + name: '{{. | include "chart.fullname"}}-webhook-service' + path: /convert + conversionReviewVersions: + - v1 diff --git a/config/helm/deployment/kustomization.yaml b/config/helm/deployment/kustomization.yaml new file mode 100644 index 00000000..c9d08fca --- /dev/null +++ b/config/helm/deployment/kustomization.yaml @@ -0,0 +1,38 @@ +# namePrefix: '{{ include "chart.fullname" . }}-' + +namespace: '{{ .Release.Namespace | quote }}' + +generatorOptions: + disableNameSuffixHash: true + +images: +- name: milvusdb/milvus-operator + newName: '{{.Values.image.repository}}' + newTag: '{{.Values.image.tag|default .Chart.AppVersion}}' + +patches: +# - patch_deployment_config.yaml +- patch_deployment_webhook.yaml + +patchesJson6902: +- target: + version: v1 + group: apps + kind: Deployment + name: controller-manager + path: patch_deployment_metadata.yaml +- target: + version: v1 + group: apps + kind: Deployment + name: controller-manager + path: patch_deployment_resources.yaml +- target: + version: v1 + group: apps + kind: Deployment + name: controller-manager + path: patch_deployment_security.yaml + +bases: +- ../../default diff --git a/config/helm/deployment/patch_deployment_metadata.yaml b/config/helm/deployment/patch_deployment_metadata.yaml new file mode 100644 index 00000000..4bf89894 --- /dev/null +++ b/config/helm/deployment/patch_deployment_metadata.yaml @@ -0,0 +1,15 @@ + - op: replace + path: /metadata/name + value: '{{ include "chart.fullname" . | quote }}' + - op: replace + path: /metadata/labels + value: '{{- include "chart.labels" . | nindent 4 }}' + - op: replace + path: /spec/selector/matchLabels + value: '{{- include "chart.selectorLabels" . | nindent 6 }}' + - op: replace + path: /spec/template/metadata/labels + value: '{{- include "chart.selectorLabels" . | nindent 8 }}' + - op: replace + path: /spec/template/metadata/annotations + value: '{{- toYaml .Values.podAnnotations | nindent 8 }}' diff --git a/config/helm/deployment/patch_deployment_resources.yaml b/config/helm/deployment/patch_deployment_resources.yaml new file mode 100644 index 00000000..6d968be3 --- /dev/null +++ b/config/helm/deployment/patch_deployment_resources.yaml @@ -0,0 +1,6 @@ + - op: test + path: /spec/template/spec/containers/0/name + value: manager + - op: replace + path: /spec/template/spec/containers/0/resources + value: '{{- toYaml .Values.resources | nindent 10 }}' diff --git a/config/helm/deployment/patch_deployment_security.yaml b/config/helm/deployment/patch_deployment_security.yaml new file mode 100644 index 00000000..1697b12f --- /dev/null +++ b/config/helm/deployment/patch_deployment_security.yaml @@ -0,0 +1,27 @@ + - op: replace + path: /spec/template/spec/securityContext + value: '{{- toYaml .Values.podSecurityContext | nindent 8 }}' + - op: replace + path: /spec/template/spec/serviceAccountName + value: '{{ include "chart.serviceAccountName" . | quote }}' + - op: replace + path: /spec/template/spec/tolerations + value: '{{- toYaml .Values.tolerations | nindent 8 }}' + - op: replace + path: /spec/template/spec/affinity + value: '{{- toYaml .Values.affinity | nindent 8 }}' + - op: replace + path: /spec/template/spec/nodeSelector + value: '{{- toYaml .Values.nodeSelector | nindent 8 }}' +# - op: replace +# path: /spec/template/spec/imagePullSecrets +# value: '{{- toYaml .Values.imagePullSecrets | nindent 8 }}' + - op: test + path: /spec/template/spec/containers/0/name + value: manager + - op: replace + path: /spec/template/spec/containers/0/imagePullPolicy + value: '{{ .Values.image.pullPolicy | quote }}' + - op: replace + path: /spec/template/spec/containers/0/securityContext/allowPrivilegeEscalation + value: '{{ .Values.allowPrivilegeEscalation }}' diff --git a/config/helm/deployment/patch_deployment_webhook.yaml b/config/helm/deployment/patch_deployment_webhook.yaml new file mode 100644 index 00000000..12c7329d --- /dev/null +++ b/config/helm/deployment/patch_deployment_webhook.yaml @@ -0,0 +1,12 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager +spec: + template: + spec: + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: '{{ include "chart.fullname" . }}-webhook-cert' diff --git a/config/helm/rbac/kustomization.yaml b/config/helm/rbac/kustomization.yaml new file mode 100644 index 00000000..395e7c8a --- /dev/null +++ b/config/helm/rbac/kustomization.yaml @@ -0,0 +1,13 @@ +namePrefix: '{{ include "chart.fullname" . }}-' + +namespace: '{{ .Release.Namespace | quote }}' + +generatorOptions: + disableNameSuffixHash: true + +patches: +- patch_leaderelection_binding.yaml +- patch_manager_binding.yaml + +bases: +- ../../rbac diff --git a/config/helm/rbac/patch_leaderelection_binding.yaml b/config/helm/rbac/patch_leaderelection_binding.yaml new file mode 100644 index 00000000..b5bd7662 --- /dev/null +++ b/config/helm/rbac/patch_leaderelection_binding.yaml @@ -0,0 +1,8 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: 'leader-election-rolebinding' +subjects: +- kind: ServiceAccount + name: '{{ include "chart.serviceAccountName" . | quote }}' + namespace: '{{ .Release.Namespace | quote }}' diff --git a/config/helm/rbac/patch_manager_binding.yaml b/config/helm/rbac/patch_manager_binding.yaml new file mode 100644 index 00000000..87b03d02 --- /dev/null +++ b/config/helm/rbac/patch_manager_binding.yaml @@ -0,0 +1,8 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: manager-rolebinding +subjects: +- kind: ServiceAccount + name: '{{ include "chart.serviceAccountName" . | quote }}' + namespace: '{{ .Release.Namespace | quote }}' diff --git a/config/helm/webhook/kustomization.yaml b/config/helm/webhook/kustomization.yaml new file mode 100644 index 00000000..bf9f8c67 --- /dev/null +++ b/config/helm/webhook/kustomization.yaml @@ -0,0 +1,17 @@ +namePrefix: '{{ include "chart.fullname" . }}-' + +namespace: '{{ .Release.Namespace | quote }}' + +generatorOptions: + disableNameSuffixHash: true + +commonAnnotations: + # Trick so kustomize does not split the annotation value + cert-manager.io/inject-ca-from: '{{.Release.Namespace}}/{{. | include "chart.fullname"}}-serving-cert' + +patchesStrategicMerge: +- validatingwebhook_endpoint_patch.yaml +- mutatingwebhook_endpoint_patch.yaml + +bases: +- ../../webhook diff --git a/config/helm/webhook/mutatingwebhook_endpoint_patch.yaml b/config/helm/webhook/mutatingwebhook_endpoint_patch.yaml new file mode 100644 index 00000000..0a96ce31 --- /dev/null +++ b/config/helm/webhook/mutatingwebhook_endpoint_patch.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: mutating-webhook-configuration +webhooks: +- name: mmilvus.kb.io + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: '{{ .Release.Namespace | quote }}' + port: 443 + diff --git a/config/helm/webhook/validatingwebhook_endpoint_patch.yaml b/config/helm/webhook/validatingwebhook_endpoint_patch.yaml new file mode 100644 index 00000000..73cad258 --- /dev/null +++ b/config/helm/webhook/validatingwebhook_endpoint_patch.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: validating-webhook-configuration +webhooks: +- name: vmilvus.kb.io + clientConfig: + service: + name: '{{ include "chart.fullname" . }}-webhook-service' + namespace: '{{ .Release.Namespace | quote }}' + port: 443 + diff --git a/config/kind/kind-dev.yaml b/config/kind/kind-dev.yaml new file mode 100644 index 00000000..f76d19f3 --- /dev/null +++ b/config/kind/kind-dev.yaml @@ -0,0 +1,4 @@ +kind: Cluster +apiVersion: kind.x-k8s.io/v1alpha4 +nodes: +- role: control-plane diff --git a/config/manager/checker.yaml b/config/manager/checker.yaml new file mode 100644 index 00000000..8c5a8a12 --- /dev/null +++ b/config/manager/checker.yaml @@ -0,0 +1,25 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: checker +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + securityContext: + runAsNonRoot: true + serviceAccountName: checker + restartPolicy: OnFailure + containers: + - name: checker + image: milvusdb/milvus-operator:main-latest + command: ["/checker"] + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 200m + memory: 200Mi + securityContext: + allowPrivilegeEscalation: false \ No newline at end of file diff --git a/config/manager/controller_manager_config.yaml b/config/manager/controller_manager_config.yaml new file mode 100644 index 00000000..4ac53490 --- /dev/null +++ b/config/manager/controller_manager_config.yaml @@ -0,0 +1,11 @@ +apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 +kind: ControllerManagerConfig +health: + healthProbeBindAddress: :8081 +metrics: + bindAddress: :8080 +webhook: + port: 9443 +leaderElection: + leaderElect: true + resourceName: 71808ec5.milvus.io diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml new file mode 100644 index 00000000..2ed0540f --- /dev/null +++ b/config/manager/kustomization.yaml @@ -0,0 +1,19 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +images: +- name: controller + newName: milvusdb/milvus-operator + newTag: main-latest + +resources: +- namespace.yaml +- manager.yaml +- checker.yaml + +generatorOptions: + disableNameSuffixHash: true + +configMapGenerator: +- files: + - controller_manager_config.yaml + name: manager-config diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml new file mode 100644 index 00000000..2a42c228 --- /dev/null +++ b/config/manager/manager.yaml @@ -0,0 +1,47 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: controller-manager + labels: + control-plane: controller-manager +spec: + selector: + matchLabels: + control-plane: controller-manager + template: + metadata: + labels: + control-plane: controller-manager + spec: + securityContext: + runAsNonRoot: true + containers: + - command: + - /manager + args: + - --leader-elect + image: milvusdb/milvus-operator:main-latest + name: manager + securityContext: + allowPrivilegeEscalation: false + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 2 + memory: 4Gi + requests: + cpu: 200m + memory: 200Mi + serviceAccountName: controller-manager + terminationGracePeriodSeconds: 10 diff --git a/config/manager/namespace.yaml b/config/manager/namespace.yaml new file mode 100644 index 00000000..55e17106 --- /dev/null +++ b/config/manager/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: "v1" +kind: Namespace +metadata: + name: milvus-operator diff --git a/config/prometheus/kustomization.yaml b/config/prometheus/kustomization.yaml new file mode 100644 index 00000000..ed137168 --- /dev/null +++ b/config/prometheus/kustomization.yaml @@ -0,0 +1,2 @@ +resources: +- monitor.yaml diff --git a/config/prometheus/monitor.yaml b/config/prometheus/monitor.yaml new file mode 100644 index 00000000..d19136ae --- /dev/null +++ b/config/prometheus/monitor.yaml @@ -0,0 +1,20 @@ + +# Prometheus Monitor Service (Metrics) +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + labels: + control-plane: controller-manager + name: controller-manager-metrics-monitor + namespace: system +spec: + endpoints: + - path: /metrics + port: https + scheme: https + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + tlsConfig: + insecureSkipVerify: true + selector: + matchLabels: + control-plane: controller-manager diff --git a/config/rbac/auth_proxy_client_clusterrole.yaml b/config/rbac/auth_proxy_client_clusterrole.yaml new file mode 100644 index 00000000..51a75db4 --- /dev/null +++ b/config/rbac/auth_proxy_client_clusterrole.yaml @@ -0,0 +1,9 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: metrics-reader +rules: +- nonResourceURLs: + - "/metrics" + verbs: + - get diff --git a/config/rbac/auth_proxy_role.yaml b/config/rbac/auth_proxy_role.yaml new file mode 100644 index 00000000..80e1857c --- /dev/null +++ b/config/rbac/auth_proxy_role.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create diff --git a/config/rbac/auth_proxy_role_binding.yaml b/config/rbac/auth_proxy_role_binding.yaml new file mode 100644 index 00000000..6c622c03 --- /dev/null +++ b/config/rbac/auth_proxy_role_binding.yaml @@ -0,0 +1,11 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: proxy-role +subjects: +- kind: ServiceAccount + name: controller-manager diff --git a/config/rbac/auth_proxy_service.yaml b/config/rbac/auth_proxy_service.yaml new file mode 100644 index 00000000..34febbde --- /dev/null +++ b/config/rbac/auth_proxy_service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + control-plane: controller-manager + name: controller-manager-metrics-service +spec: + ports: + - name: https + port: 8443 + targetPort: https + selector: + control-plane: controller-manager diff --git a/config/rbac/kustomization.yaml b/config/rbac/kustomization.yaml new file mode 100644 index 00000000..fb5a2b88 --- /dev/null +++ b/config/rbac/kustomization.yaml @@ -0,0 +1,18 @@ +resources: +# All RBAC will be applied under this service account in +# the deployment namespace. You may comment out this resource +# if your manager will use a service account that exists at +# runtime. Be sure to update RoleBinding and ClusterRoleBinding +# subjects if changing service account names. +- service_account.yaml +- role.yaml +- role_binding.yaml +- leader_election_role.yaml +- leader_election_role_binding.yaml +# Comment the following 4 lines if you want to disable +# the auth proxy (https://github.com/brancz/kube-rbac-proxy) +# which protects your /metrics endpoint. +# - auth_proxy_service.yaml +# - auth_proxy_role.yaml +# - auth_proxy_role_binding.yaml +# - auth_proxy_client_clusterrole.yaml diff --git a/config/rbac/leader_election_role.yaml b/config/rbac/leader_election_role.yaml new file mode 100644 index 00000000..4190ec80 --- /dev/null +++ b/config/rbac/leader_election_role.yaml @@ -0,0 +1,37 @@ +# permissions to do leader election. +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: leader-election-role +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 diff --git a/config/rbac/leader_election_role_binding.yaml b/config/rbac/leader_election_role_binding.yaml new file mode 100644 index 00000000..1d1321ed --- /dev/null +++ b/config/rbac/leader_election_role_binding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: leader-election-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: leader-election-role +subjects: +- kind: ServiceAccount + name: controller-manager + namespace: system diff --git a/config/rbac/milvus_editor_role.yaml b/config/rbac/milvus_editor_role.yaml new file mode 100644 index 00000000..527f0a0d --- /dev/null +++ b/config/rbac/milvus_editor_role.yaml @@ -0,0 +1,24 @@ +# permissions for end users to edit milvus. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: milvus-editor-role +rules: +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvus/status + verbs: + - get diff --git a/config/rbac/milvus_viewer_role.yaml b/config/rbac/milvus_viewer_role.yaml new file mode 100644 index 00000000..f00400c1 --- /dev/null +++ b/config/rbac/milvus_viewer_role.yaml @@ -0,0 +1,20 @@ +# permissions for end users to view milvus. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: milvus-viewer-role +rules: +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - get + - list + - watch +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get diff --git a/config/rbac/milvusupgrade_editor_role.yaml b/config/rbac/milvusupgrade_editor_role.yaml new file mode 100644 index 00000000..586af13c --- /dev/null +++ b/config/rbac/milvusupgrade_editor_role.yaml @@ -0,0 +1,24 @@ +# permissions for end users to edit milvusupgrades. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: milvusupgrade-editor-role +rules: +- apiGroups: + - milvus.io + resources: + - milvusupgrades + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusupgrades/status + verbs: + - get diff --git a/config/rbac/milvusupgrade_viewer_role.yaml b/config/rbac/milvusupgrade_viewer_role.yaml new file mode 100644 index 00000000..a7aca725 --- /dev/null +++ b/config/rbac/milvusupgrade_viewer_role.yaml @@ -0,0 +1,20 @@ +# permissions for end users to view milvusupgrades. +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: milvusupgrade-viewer-role +rules: +- apiGroups: + - milvus.io + resources: + - milvusupgrades + verbs: + - get + - list + - watch +- apiGroups: + - milvus.io + resources: + - milvusupgrades/status + verbs: + - get diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml new file mode 100644 index 00000000..309055b8 --- /dev/null +++ b/config/rbac/role.yaml @@ -0,0 +1,247 @@ + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: manager-role +rules: +- apiGroups: + - "" + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - deployments + - pods + - secrets + - services + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusclusters/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvuses/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusupgrades/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - podmonitors + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch diff --git a/config/rbac/role_binding.yaml b/config/rbac/role_binding.yaml new file mode 100644 index 00000000..2070ede4 --- /dev/null +++ b/config/rbac/role_binding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: manager-role +subjects: +- kind: ServiceAccount + name: controller-manager + namespace: system diff --git a/config/rbac/service_account.yaml b/config/rbac/service_account.yaml new file mode 100644 index 00000000..7cd6025b --- /dev/null +++ b/config/rbac/service_account.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: controller-manager + namespace: system diff --git a/config/samples/beta/README.md b/config/samples/beta/README.md new file mode 100644 index 00000000..e57a3c62 --- /dev/null +++ b/config/samples/beta/README.md @@ -0,0 +1,4 @@ +# Beta Samples +Samples in this folder is not formally released. +It uses the dev image of milvus. +Be aware of the potential issues. diff --git a/config/samples/beta/milvus_azure.yaml b/config/samples/beta/milvus_azure.yaml new file mode 100644 index 00000000..590c3634 --- /dev/null +++ b/config/samples/beta/milvus_azure.yaml @@ -0,0 +1,32 @@ +# This sample file is used to deploy Milvus with Azure Storage as its object storage with access-key. +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + common: + storageType: remote + minio: + cloudProvider: azure + bucketName: + rootPath: milvus/my-release + useSSL: true + dependencies: + storage: + external: true + type: Azure + endpoint: core.windows.net:443 + secretRef: "my-release-azure-secret" +--- +apiVersion: v1 +kind: Secret +metadata: + name: my-release-azure-secret +type: Opaque +stringData: + accesskey: + secretkey: diff --git a/config/samples/beta/milvus_azure_connection_string.yaml b/config/samples/beta/milvus_azure_connection_string.yaml new file mode 100644 index 00000000..3e04dcfe --- /dev/null +++ b/config/samples/beta/milvus_azure_connection_string.yaml @@ -0,0 +1,27 @@ +# This sample file is used to deploy Milvus with Azure Storage as its object storage with connection string. +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + components: + env: + - name: AZURE_CONNECTION_STRING + value: + config: + common: + storageType: remote + minio: + cloudProvider: azure + bucketName: + rootPath: milvus/my-release + accessKeyID: + useSSL: true + dependencies: + storage: + external: true + type: Azure + endpoint: core.windows.net:443 diff --git a/config/samples/beta/milvus_azure_iam.yaml b/config/samples/beta/milvus_azure_iam.yaml new file mode 100644 index 00000000..c59630b7 --- /dev/null +++ b/config/samples/beta/milvus_azure_iam.yaml @@ -0,0 +1,36 @@ +# This sample file is used to deploy Milvus with Azure Storage as its object storage with AD workload identity. +# see: https://azure.github.io/azure-workload-identity/docs/ for detail +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + common: + storageType: remote + minio: + cloudProvider: azure + bucketName: + rootPath: milvus/my-release + useSSL: true + useIAM: true + accessKeyID: + components: + serviceAccountName: my-release-sa + podLabels: + azure.workload.identity/use: "true" + dependencies: + storage: + external: true + type: Azure + endpoint: core.windows.net:443 +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: my-release-sa + annotations: + azure.workload.identity/client-id: \ No newline at end of file diff --git a/config/samples/cluster_demo.yaml b/config/samples/cluster_demo.yaml new file mode 100644 index 00000000..e1a08173 --- /dev/null +++ b/config/samples/cluster_demo.yaml @@ -0,0 +1,57 @@ +# This is a sample to deploy a milvus cluster with minimum cost of resources. +# It should be used for testing and development purposes only. +# Total resources required is about: 0.25 CPU, 512 MiB memory +# When deleted, all the data in the Milvus will be lost. + +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + config: {} + components: + enableRollingUpdate: true + imageUpdateMode: rollingUpgrade + proxy: + replicas: 1 + serviceType: LoadBalancer + dataNode: + replicas: 1 + indexNode: + replicas: 1 + queryNode: + replicas: 1 + mixCoord: + replicas: 1 + dependencies: + etcd: + inCluster: + values: + replicaCount: 1 + deletionPolicy: Delete + pvcDeletion: true + storage: + inCluster: + values: + mode: standalone + resources: + requests: + memory: 100Mi + persistence: + size: 20Gi + deletionPolicy: Delete + pvcDeletion: true + msgStreamType: kafka + kafka: + inCluster: + values: + defaultReplicationFactor: 1 + offsetsTopicReplicationFactor: 1 + replicaCount: 1 + zookeeper: + replicaCount: 1 + deletionPolicy: Delete + pvcDeletion: true diff --git a/config/samples/demo.yaml b/config/samples/demo.yaml new file mode 100644 index 00000000..0d7b8c62 --- /dev/null +++ b/config/samples/demo.yaml @@ -0,0 +1,36 @@ +# This is a sample to deploy a milvus cluster with minimum cost of resources. +# It should be used for testing and development purposes only. +# Total resources required is about: 0.1 CPU, 100 MiB memory +# When deleted, all the data in the Milvus will be lost. + +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: {} + components: + standalone: + replicas: 1 + serviceType: LoadBalancer + dependencies: + etcd: + inCluster: + values: + replicaCount: 1 + deletionPolicy: Delete + pvcDeletion: true + storage: + inCluster: + values: + mode: standalone + resources: + requests: + memory: 100Mi + persistence: + size: 20Gi + deletionPolicy: Delete + pvcDeletion: true + \ No newline at end of file diff --git a/config/samples/milvus_cluster_default.yaml b/config/samples/milvus_cluster_default.yaml new file mode 100644 index 00000000..f5ed3e99 --- /dev/null +++ b/config/samples/milvus_cluster_default.yaml @@ -0,0 +1,12 @@ +# This is a sample to deploy a milvus cluster in milvus-operator's default configurations. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + dependencies: {} + components: {} + config: {} \ No newline at end of file diff --git a/config/samples/milvus_cluster_minimum.yaml b/config/samples/milvus_cluster_minimum.yaml new file mode 100644 index 00000000..13bd0eb5 --- /dev/null +++ b/config/samples/milvus_cluster_minimum.yaml @@ -0,0 +1,116 @@ +# This is a sample to deploy a milvus cluster using pulsar with minimum cost of resources. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + dependencies: + etcd: + inCluster: + values: + replicaCount: 1 + pulsar: + inCluster: + values: + components: + autorecovery: false + functions: false + toolset: false + pulsar_manager: false + monitoring: + prometheus: false + grafana: false + node_exporter: false + alert_manager: false + proxy: + replicaCount: 1 + resources: + requests: + cpu: 0.01 + memory: 256Mi + configData: + PULSAR_MEM: > + -Xms256m -Xmx256m + PULSAR_GC: > + -XX:MaxDirectMemorySize=256m + bookkeeper: + replicaCount: 2 + resources: + requests: + cpu: 0.01 + memory: 256Mi + configData: + PULSAR_MEM: > + -Xms256m + -Xmx256m + -XX:MaxDirectMemorySize=256m + PULSAR_GC: > + -Dio.netty.leakDetectionLevel=disabled + -Dio.netty.recycler.linkCapacity=1024 + -XX:+UseG1GC -XX:MaxGCPauseMillis=10 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis + -XX:ParallelGCThreads=32 + -XX:ConcGCThreads=32 + -XX:G1NewSizePercent=50 + -XX:+DisableExplicitGC + -XX:-ResizePLAB + -XX:+ExitOnOutOfMemoryError + -XX:+PerfDisableSharedMem + -XX:+PrintGCDetails + zookeeper: + replicaCount: 1 + resources: + requests: + cpu: 0.01 + memory: 256Mi + configData: + PULSAR_MEM: > + -Xms256m + -Xmx256m + PULSAR_GC: > + -Dcom.sun.management.jmxremote + -Djute.maxbuffer=10485760 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis -XX:+DisableExplicitGC + -XX:+PerfDisableSharedMem + -Dzookeeper.forceSync=no + broker: + replicaCount: 1 + resources: + requests: + cpu: 0.01 + memory: 256Mi + configData: + PULSAR_MEM: > + -Xms256m + -Xmx256m + PULSAR_GC: > + -XX:MaxDirectMemorySize=256m + -Dio.netty.leakDetectionLevel=disabled + -Dio.netty.recycler.linkCapacity=1024 + -XX:+ParallelRefProcEnabled + -XX:+UnlockExperimentalVMOptions + -XX:+DoEscapeAnalysis + -XX:ParallelGCThreads=32 + -XX:ConcGCThreads=32 + -XX:G1NewSizePercent=50 + -XX:+DisableExplicitGC + -XX:-ResizePLAB + -XX:+ExitOnOutOfMemoryError + storage: + inCluster: + values: + mode: standalone + config: + milvus: + log: + level: info + component: + proxy: + timeTickInterval: 150 \ No newline at end of file diff --git a/config/samples/milvus_cluster_mixcoord.yaml b/config/samples/milvus_cluster_mixcoord.yaml new file mode 100644 index 00000000..b9eaaaca --- /dev/null +++ b/config/samples/milvus_cluster_mixcoord.yaml @@ -0,0 +1,16 @@ +# This is a sample to deploy a milvus cluster using mixCoord instead of rootCoord, indexCoord, dataCoord and queryCoord. + +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + dependencies: {} + components: + # mixCoord deploys all coordinators in one 'mixture' deployment + mixCoord: + replicas: 1 + config: {} \ No newline at end of file diff --git a/config/samples/milvus_cluster_resource.yaml b/config/samples/milvus_cluster_resource.yaml new file mode 100644 index 00000000..da970531 --- /dev/null +++ b/config/samples/milvus_cluster_resource.yaml @@ -0,0 +1,43 @@ +# This is a sample to configure a milvus cluster's cpu and memory resources. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + components: + resources: + limits: + cpu: '4' + memory: 8Gi + requests: + cpu: 200m + memory: 512Mi + dataCoord: + replicas: 1 + dataNode: + replicas: 1 + indexCoord: + replicas: 1 + indexNode: + replicas: 1 + proxy: + replicas: 1 + serviceType: LoadBalancer + resources: + limits: + cpu: '2' + memory: 4Gi + requests: + cpu: 100m + memory: 128Mi + queryCoord: + replicas: 1 + queryNode: + replicas: 1 + rootCoord: + replicas: 1 + config: {} + dependencies: {} \ No newline at end of file diff --git a/config/samples/milvus_config.yaml b/config/samples/milvus_config.yaml new file mode 100644 index 00000000..e37c90b2 --- /dev/null +++ b/config/samples/milvus_config.yaml @@ -0,0 +1,18 @@ +# This is a sample to add custom configurations for milvus +# It changes the etcd's rootPath, minio's bucketName and log's level +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + dependencies: {} + components: {} + config: + etcd: + rootPath: my-release + minio: + bucketName: my-bucket + log: + level: debug \ No newline at end of file diff --git a/config/samples/milvus_default.yaml b/config/samples/milvus_default.yaml new file mode 100644 index 00000000..e42e12f2 --- /dev/null +++ b/config/samples/milvus_default.yaml @@ -0,0 +1,5 @@ +# This is a sample to deploy a standalone milvus in milvus-operator's default configurations. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release \ No newline at end of file diff --git a/config/samples/milvus_deletion.yaml b/config/samples/milvus_deletion.yaml new file mode 100644 index 00000000..15fe78ee --- /dev/null +++ b/config/samples/milvus_deletion.yaml @@ -0,0 +1,18 @@ +# This is a sample to deploy a milvus, that deletes all its dependencies and storage when the milvus is deleted. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + mode: cluster + dependencies: + etcd: + inCluster: + deletionPolicy: Delete + pvcDeletion: true + storage: + inCluster: + deletionPolicy: Delete + pvcDeletion: true \ No newline at end of file diff --git a/config/samples/milvus_external_dependencies.yaml b/config/samples/milvus_external_dependencies.yaml new file mode 100644 index 00000000..e3582d5d --- /dev/null +++ b/config/samples/milvus_external_dependencies.yaml @@ -0,0 +1,29 @@ +# This sample is used to deploy milvus with external dependencies +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + etcd: + rootPath: my-release + msgChannel: + chanNamePrefix: + cluster: my-release + minio: + bucketName: + # config the prefix of the bucket milvus will use + rootPath: milvus/my-release + dependencies: + etcd: + external: true + endpoints: ["", "", ""] + storage: + external: true + endpoint: "" + secretRef: "" + # if you want to use s3 check ./milvus_s3.yaml + type: MinIO diff --git a/config/samples/milvus_gcs.yaml b/config/samples/milvus_gcs.yaml new file mode 100644 index 00000000..73075f56 --- /dev/null +++ b/config/samples/milvus_gcs.yaml @@ -0,0 +1,36 @@ +# This sample file is used to deploy Milvus with GCS as its object storage. +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + minio: + cloudProvider: gcp + bucketName: + rootPath: milvus/my-release + useSSL: true + dependencies: + etcd: + inCluster: + values: + replicaCount: 1 + deletionPolicy: Delete + pvcDeletion: true + storage: + external: true + type: S3 + endpoint: storage.googleapis.com:443 + secretRef: "my-release-s3-secret" +--- +apiVersion: v1 +kind: Secret +metadata: + name: my-release-s3-secret +type: Opaque +stringData: + accesskey: + secretkey: diff --git a/config/samples/milvus_gcs_iam.yaml b/config/samples/milvus_gcs_iam.yaml new file mode 100644 index 00000000..d93cc21b --- /dev/null +++ b/config/samples/milvus_gcs_iam.yaml @@ -0,0 +1,33 @@ +# This sample file is used to deploy Milvus with GCS as its object storage +# and access GCS with AssumeRole. + +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + components: + serviceAccountName: my-release-sa + config: + minio: + cloudProvider: gcp + bucketName: + rootPath: milvus/my-release + useSSL: true + useIAM: true + dependencies: + storage: + external: true + type: S3 + # Note: you must use regional endpoint here, otherwise the minio client that milvus uses will fail to connect + endpoint: storage.googleapis.com:443 +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: my-release-sa + # gcp-service-account in the form of: @.iam.gserviceaccount.com + iam.gke.io/gcp-service-account: diff --git a/config/samples/milvus_kafka.yaml b/config/samples/milvus_kafka.yaml new file mode 100644 index 00000000..6aa26f32 --- /dev/null +++ b/config/samples/milvus_kafka.yaml @@ -0,0 +1,23 @@ +# This is an example of Milvus deployment with Kafka as the message stream. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + kafka: + # securityProtocol supports: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL + securityProtocol: PLAINTEXT + # saslMechanisms supports: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512 + saslMechanisms: PLAIN + saslUsername: "" + saslPassword: "" + dependencies: + msgStreamType: kafka + kafka: + inCluster: + deletionPolicy: Delete + pvcDeletion: true + diff --git a/config/samples/milvus_minimum.yaml b/config/samples/milvus_minimum.yaml new file mode 100644 index 00000000..75b0c844 --- /dev/null +++ b/config/samples/milvus_minimum.yaml @@ -0,0 +1,20 @@ +# This is a sample to deploy a milvus with minimum cost of resources. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + dependencies: + etcd: + inCluster: + values: + replicaCount: 1 + storage: + inCluster: + values: + mode: standalone + resources: + requests: + memory: 100Mi diff --git a/config/samples/milvus_natsmq.yaml b/config/samples/milvus_natsmq.yaml new file mode 100644 index 00000000..7ba28525 --- /dev/null +++ b/config/samples/milvus_natsmq.yaml @@ -0,0 +1,15 @@ +# This is a sample to deploy a standalone milvus with rocksmq. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + # for now natsmq only support standalone mode + mode: standalone + dependencies: + msgStreamType: natsmq + natsmq: + persistence: + enabled: true diff --git a/config/samples/milvus_resource.yaml b/config/samples/milvus_resource.yaml new file mode 100644 index 00000000..33dcb2f1 --- /dev/null +++ b/config/samples/milvus_resource.yaml @@ -0,0 +1,19 @@ +# This is a sample to configure a milvus's cpu and memory resources. + +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + components: + resources: + limits: + cpu: '4' + memory: 8Gi + requests: + cpu: '1' + memory: 2Gi + config: {} + dependencies: {} \ No newline at end of file diff --git a/config/samples/milvus_rocksmq.yaml b/config/samples/milvus_rocksmq.yaml new file mode 100644 index 00000000..2df411f8 --- /dev/null +++ b/config/samples/milvus_rocksmq.yaml @@ -0,0 +1,15 @@ +# This is a sample to deploy a standalone milvus with rocksmq. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + # rocksmq only support standalone mode + mode: standalone + dependencies: + msgStreamType: rocksmq + rocksmq: + persistence: + enabled: true diff --git a/config/samples/milvus_rolling_update.yaml b/config/samples/milvus_rolling_update.yaml new file mode 100644 index 00000000..dbecc5b0 --- /dev/null +++ b/config/samples/milvus_rolling_update.yaml @@ -0,0 +1,9 @@ +# This is a sample to deploy a standalone milvus in milvus-operator's default configurations. +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release +spec: + components: + enableRollingUpdate: true + imageUpdateMode: rollingUpgrade # rollingUpgrade / rollingDowngrade / all diff --git a/config/samples/milvus_s3.yaml b/config/samples/milvus_s3.yaml new file mode 100644 index 00000000..94315a00 --- /dev/null +++ b/config/samples/milvus_s3.yaml @@ -0,0 +1,30 @@ +# This sample file is used to deploy Milvus with AWS S3 as its object storage. +# # change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + config: + minio: + bucketName: + # config the prefix of the bucket milvus will use + rootPath: milvus/my-release + useSSL: true + dependencies: + storage: + external: true + type: S3 + endpoint: s3.amazonaws.com:443 + secretRef: "my-release-s3-secret" +--- +apiVersion: v1 +kind: Secret +metadata: + name: my-release-s3-secret +type: Opaque +stringData: + accesskey: + secretkey: diff --git a/config/samples/milvus_s3_iam.yaml b/config/samples/milvus_s3_iam.yaml new file mode 100644 index 00000000..1470874f --- /dev/null +++ b/config/samples/milvus_s3_iam.yaml @@ -0,0 +1,33 @@ +# This sample file is used to deploy Milvus with AWS S3 as its object storage +# and access AWS S3 with AssumeRole. + +# change the to match your environment +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: my-release + labels: + app: milvus +spec: + components: + serviceAccountName: my-release-sa + image: milvusdb/milvus-dev:master-latest + config: + minio: + bucketName: + rootPath: milvus/my-release + useSSL: true + useIAM: true + dependencies: + storage: + external: true + type: S3 + # Note: you must use regional endpoint here, otherwise the minio client that milvus uses will fail to connect + endpoint: s3..amazonaws.com:443 +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: my-release-sa + annotations: + eks.amazonaws.com/role-arn: diff --git a/config/samples/milvusupgrade.yaml b/config/samples/milvusupgrade.yaml new file mode 100644 index 00000000..4ec30dec --- /dev/null +++ b/config/samples/milvusupgrade.yaml @@ -0,0 +1,18 @@ +# This is a sample to upgrade a milvus from v2.1.4 to v2.2.0. +apiVersion: milvus.io/v1beta1 +kind: MilvusUpgrade +metadata: + name: my-release-upgrade +spec: + milvus: + namespace: default + name: my-release + sourceVersion: "v2.1.4" + targetVersion: "v2.2.0" + # below are some omit default values: + # targetImage: "milvusdb/milvus:v2.2.0" + # toolImage: "milvusdb/meta-migration:v2.2.0" + # operation: upgrade + # rollbackIfFailed: true + # backupPVC: "" + # maxRetry: 3 diff --git a/config/webhook/kustomization.yaml b/config/webhook/kustomization.yaml new file mode 100644 index 00000000..9cf26134 --- /dev/null +++ b/config/webhook/kustomization.yaml @@ -0,0 +1,6 @@ +resources: +- manifests.yaml +- service.yaml + +configurations: +- kustomizeconfig.yaml diff --git a/config/webhook/kustomizeconfig.yaml b/config/webhook/kustomizeconfig.yaml new file mode 100644 index 00000000..25e21e3c --- /dev/null +++ b/config/webhook/kustomizeconfig.yaml @@ -0,0 +1,25 @@ +# the following config is for teaching kustomize where to look at when substituting vars. +# It requires kustomize v2.1.0 or newer to work properly. +nameReference: +- kind: Service + version: v1 + fieldSpecs: + - kind: MutatingWebhookConfiguration + group: admissionregistration.k8s.io + path: webhooks/clientConfig/service/name + - kind: ValidatingWebhookConfiguration + group: admissionregistration.k8s.io + path: webhooks/clientConfig/service/name + +namespace: +- kind: MutatingWebhookConfiguration + group: admissionregistration.k8s.io + path: webhooks/clientConfig/service/namespace + create: true +- kind: ValidatingWebhookConfiguration + group: admissionregistration.k8s.io + path: webhooks/clientConfig/service/namespace + create: true + +varReference: +- path: metadata/annotations diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml new file mode 100644 index 00000000..cf783368 --- /dev/null +++ b/config/webhook/manifests.yaml @@ -0,0 +1,96 @@ + +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + creationTimestamp: null + name: mutating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /mutate-milvus-io-v1beta1-milvus + failurePolicy: Fail + name: mmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /mutate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: mmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None + +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + creationTimestamp: null + name: validating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /validate-milvus-io-v1beta1-milvus + failurePolicy: Fail + name: vmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: system + path: /validate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: vmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None diff --git a/config/webhook/service.yaml b/config/webhook/service.yaml new file mode 100644 index 00000000..31e0f829 --- /dev/null +++ b/config/webhook/service.yaml @@ -0,0 +1,12 @@ + +apiVersion: v1 +kind: Service +metadata: + name: webhook-service + namespace: system +spec: + ports: + - port: 443 + targetPort: 9443 + selector: + control-plane: controller-manager diff --git a/ct.yaml b/ct.yaml new file mode 100644 index 00000000..f151db8c --- /dev/null +++ b/ct.yaml @@ -0,0 +1,4 @@ +remote: origin +chart-dirs: + - charts +helm-extra-args: --timeout 900s \ No newline at end of file diff --git a/deploy/manifests/deployment.yaml b/deploy/manifests/deployment.yaml new file mode 100644 index 00000000..3d59dc3c --- /dev/null +++ b/deploy/manifests/deployment.yaml @@ -0,0 +1,14729 @@ +--- +apiVersion: "v1" +kind: Namespace +metadata: + name: milvus-operator +--- +# Source: milvus-operator/templates/checker_serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: "milvus-operator-checker" + namespace: "milvus-operator" + labels: + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm +--- +# Source: milvus-operator/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: "milvus-operator" + namespace: "milvus-operator" + labels: + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm +--- +# Source: milvus-operator/templates/crds.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: 'milvus-operator/milvus-operator-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusclusters.milvus.io +spec: + group: milvus.io + names: + kind: MilvusCluster + listKind: MilvusClusterList + plural: milvusclusters + shortNames: + - mc + - mic + singular: milvuscluster + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +# Source: milvus-operator/templates/crds.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: 'milvus-operator/milvus-operator-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + name: milvuses.milvus.io +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + name: 'milvus-operator-webhook-service' + namespace: milvus-operator + path: /convert + conversionReviewVersions: + - v1 + group: milvus.io + names: + kind: Milvus + listKind: MilvusList + plural: milvuses + shortNames: + - mi + singular: milvus + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + disableMetric: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + replicas: + format: int32 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - description: Milvus mode + jsonPath: .spec.mode + name: Mode + type: string + - description: Milvus status + jsonPath: .status.status + name: Status + type: string + - description: Milvus updated + jsonPath: .status.conditions[?(@.type=="MilvusUpdated")].status + name: Updated + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + components: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + dataCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + dataNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + disableMetric: + type: boolean + enableRollingUpdate: + type: boolean + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + imageUpdateMode: + default: rollingUpgrade + enum: + - rollingUpgrade + - rollingDowngrade + - all + type: string + indexCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + indexNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + metricInterval: + type: string + mixCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + priorityClassName: + type: string + proxy: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + queryNode: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + rootCoord: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + standalone: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + preference: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + properties: + podAffinityTerm: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + weight: + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + properties: + labelSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaceSelector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + type: object + type: object + namespaces: + items: + type: string + type: array + topologyKey: + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + commands: + items: + type: string + type: array + env: + items: + properties: + name: + type: string + value: + type: string + valueFrom: + properties: + configMapKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + fieldRef: + properties: + apiVersion: + type: string + fieldPath: + type: string + required: + - fieldPath + type: object + resourceFieldRef: + properties: + containerName: + type: string + divisor: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + type: string + required: + - resource + type: object + secretKeyRef: + properties: + key: + type: string + name: + type: string + optional: + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + image: + type: string + imagePullPolicy: + type: string + imagePullSecrets: + items: + properties: + name: + type: string + type: object + type: array + ingress: + properties: + annotations: + additionalProperties: + type: string + type: object + hosts: + items: + type: string + type: array + ingressClassName: + type: string + labels: + additionalProperties: + type: string + type: object + tlsSecretRefs: + additionalProperties: + items: + type: string + type: array + type: object + type: object + initContainers: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: string + type: object + paused: + type: boolean + podAnnotations: + additionalProperties: + type: string + type: object + podLabels: + additionalProperties: + type: string + type: object + port: + format: int32 + maximum: 65535 + minimum: 0 + type: integer + priorityClassName: + type: string + replicas: + format: int32 + minimum: 0 + type: integer + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + runWithSubProcess: + type: boolean + schedulerName: + type: string + serviceAccountName: + type: string + serviceAnnotations: + additionalProperties: + type: string + type: object + serviceLabels: + additionalProperties: + type: string + type: object + serviceRestfulPort: + format: int32 + type: integer + serviceType: + default: ClusterIP + enum: + - ClusterIP + - NodePort + - LoadBalancer + type: string + sidecars: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + tolerations: + items: + properties: + effect: + type: string + key: + type: string + operator: + type: string + tolerationSeconds: + format: int64 + type: integer + value: + type: string + type: object + type: array + toolImage: + type: string + updateConfigMapOnly: + type: boolean + updateToolImage: + type: boolean + volumeMounts: + items: + properties: + mountPath: + type: string + mountPropagation: + type: string + name: + type: string + readOnly: + type: boolean + subPath: + type: string + subPathExpr: + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + items: + type: object + type: array + x-kubernetes-preserve-unknown-fields: true + type: object + config: + type: object + x-kubernetes-preserve-unknown-fields: true + dependencies: + properties: + customMsgStream: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + etcd: + properties: + endpoints: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + kafka: + properties: + brokerList: + items: + type: string + type: array + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + msgStreamType: + enum: + - pulsar + - kafka + - rocksmq + - natsmq + - custom + - "" + type: string + natsmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + pulsar: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + type: object + rocksmq: + properties: + persistence: + properties: + enabled: + type: boolean + persistentVolumeClaim: + properties: + annotations: + additionalProperties: + type: string + type: object + existingClaim: + type: string + labels: + additionalProperties: + type: string + type: object + spec: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + pvcDeletion: + type: boolean + type: object + type: object + storage: + properties: + endpoint: + type: string + external: + default: false + type: boolean + inCluster: + properties: + deletionPolicy: + default: Retain + enum: + - Delete + - Retain + type: string + pvcDeletion: + type: boolean + values: + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + secretRef: + type: string + type: + default: MinIO + enum: + - MinIO + - S3 + - Azure + - "" + type: string + type: object + type: object + hookConfig: + nullable: true + type: object + x-kubernetes-preserve-unknown-fields: true + mode: + default: standalone + enum: + - cluster + - standalone + type: string + type: object + status: + properties: + componentsDeployStatus: + additionalProperties: + properties: + generation: + format: int64 + type: integer + image: + type: string + status: + properties: + availableReplicas: + format: int32 + type: integer + collisionCount: + format: int32 + type: integer + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + lastUpdateTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + observedGeneration: + format: int64 + type: integer + readyReplicas: + format: int32 + type: integer + replicas: + format: int32 + type: integer + unavailableReplicas: + format: int32 + type: integer + updatedReplicas: + format: int32 + type: integer + type: object + required: + - generation + - image + - status + type: object + type: object + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + type: string + reason: + type: string + status: + type: string + type: + type: string + required: + - status + - type + type: object + type: array + endpoint: + type: string + ingress: + properties: + loadBalancer: + properties: + ingress: + items: + properties: + hostname: + type: string + ip: + type: string + ports: + items: + properties: + error: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + port: + format: int32 + type: integer + protocol: + default: TCP + type: string + required: + - port + - protocol + type: object + type: array + x-kubernetes-list-type: atomic + type: object + type: array + type: object + type: object + observedGeneration: + format: int64 + minimum: 0 + type: integer + replicas: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + rollingModeVersion: + type: integer + status: + default: Pending + type: string + required: + - status + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +# Source: milvus-operator/templates/crds.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: 'milvus-operator/milvus-operator-serving-cert' + controller-gen.kubebuilder.io/version: v0.6.0 + creationTimestamp: null + name: milvusupgrades.milvus.io +spec: + group: milvus.io + names: + kind: MilvusUpgrade + listKind: MilvusUpgradeList + plural: milvusupgrades + singular: milvusupgrade + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object + spec: + properties: + backupPVC: + type: string + maxRetry: + default: 3 + type: integer + milvus: + properties: + name: + type: string + namespace: + type: string + required: + - name + type: object + operation: + default: upgrade + enum: + - upgrade + - rollback + type: string + rollbackIfFailed: + default: true + type: boolean + sourceVersion: + type: string + targetImage: + type: string + targetVersion: + type: string + toolImage: + type: string + required: + - milvus + - sourceVersion + - targetVersion + type: object + status: + properties: + backupPVC: + type: string + conditions: + items: + properties: + lastTransitionTime: + format: date-time + type: string + message: + maxLength: 32768 + type: string + observedGeneration: + format: int64 + minimum: 0 + type: integer + reason: + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + enum: + - "True" + - "False" + - Unknown + type: string + type: + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + isRollbacking: + type: boolean + metaBackuped: + type: boolean + metaStorageChanged: + type: boolean + replicasBeforeUprade: + properties: + dataCoord: + type: integer + dataNode: + type: integer + indexCoord: + type: integer + indexNode: + type: integer + mixCoord: + type: integer + proxy: + type: integer + queryCoord: + type: integer + queryNode: + type: integer + rootCoord: + type: integer + standalone: + type: integer + type: object + retriedTimes: + type: integer + sourceImage: + type: string + state: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +# Source: milvus-operator/templates/checker_role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: 'milvus-operator-checker-role' +rules: +- apiGroups: + - "" + resources: + - configmaps + - secrets + - services + - namespaces + - events + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - deployments + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - deployments + - pods + - secrets + - services + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvus/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - podmonitors + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + - ingresses/finalizers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + - clusterroles + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - apiregistration.k8s.io + resources: + - apiservices/status + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - auditregistration.k8s.io + resources: + - auditsinks + verbs: + - create + - get + - list + - patch + - update + - watch +- apiGroups: + - cert-manager.io + - acme.cert-manager.io + resources: + - certificates + - certificates/status + - certificates/finalizers + - issuers + - issuers/status + - issuers/finalizers + - clusterissuers + - clusterissuers/status + - clusterissuers/finalizers + - orders + - orders/status + - orders/finalizers + - certificaterequests + - certificaterequests/status + - certificaterequests/finalizers + - challenges + - challenges/status + - challenges/finalizers + - signers + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch + - approve + - sign +- apiGroups: + - networking.x-k8s.io + - route.openshift.io + - authorization.k8s.io + - certificates.k8s.io + - coordination.k8s.io + resources: + - httproutes + - httproutes/finalizers + - gateways + - gateways/finalizers + - routes/custom-host + - subjectaccessreviews + - signers + - certificatesigningrequests + - certificatesigningrequests/status + - leases + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - sign +--- +# Source: milvus-operator/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: 'milvus-operator-manager-role' +rules: +- apiGroups: + - "" + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - '*' + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - deployments + - pods + - secrets + - services + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusclusters/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusclusters/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvuses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvuses/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvuses/status + verbs: + - get + - patch + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - milvus.io + resources: + - milvusupgrades/finalizers + verbs: + - update +- apiGroups: + - milvus.io + resources: + - milvusupgrades/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - podmonitors + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - roles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +--- +# Source: milvus-operator/templates/checker_rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: 'milvus-operator-checker-rolebinding' +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: 'milvus-operator-checker-role' +subjects: +- kind: ServiceAccount + name: "milvus-operator-checker" + namespace: "milvus-operator" +--- +# Source: milvus-operator/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: 'milvus-operator-manager-rolebinding' +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: 'milvus-operator-manager-role' +subjects: +- kind: ServiceAccount + name: "milvus-operator" + namespace: "milvus-operator" +--- +# Source: milvus-operator/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: 'milvus-operator-leader-election-role' + namespace: "milvus-operator" +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 +--- +# Source: milvus-operator/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: 'milvus-operator-leader-election-rolebinding' + namespace: "milvus-operator" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: 'milvus-operator-leader-election-role' +subjects: +- kind: ServiceAccount + name: "milvus-operator" + namespace: "milvus-operator" +--- +# Source: milvus-operator/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + service-kind: metrics + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm + name: 'milvus-operator-metrics-service' + namespace: "milvus-operator" +spec: + ports: + - name: metrics + port: 8443 + targetPort: metrics + selector: + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator +--- +# Source: milvus-operator/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm + name: 'milvus-operator-webhook-service' + namespace: "milvus-operator" +spec: + ports: + - port: 443 + targetPort: webhook-server + protocol: TCP + name: https + selector: + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator +--- +# Source: milvus-operator/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm + name: "milvus-operator" + namespace: "milvus-operator" +spec: + selector: + matchLabels: + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + template: + metadata: + annotations: + {} + labels: + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + spec: + affinity: + {} + containers: + - args: + - -namespace + - "milvus-operator" + - -name + - "milvus-operator" + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /manager + image: 'milvusdb/milvus-operator:v0.9.8' + imagePullPolicy: "IfNotPresent" + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + - containerPort: 8080 + name: metrics + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + nodeSelector: + {} + securityContext: + runAsNonRoot: true + runAsUser: 65532 + serviceAccountName: "milvus-operator" + terminationGracePeriodSeconds: 10 + tolerations: + [] + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: 'milvus-operator-webhook-cert' +--- +# Source: milvus-operator/templates/job.yaml +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + {} + labels: + helm.sh/chart: milvus-operator-0.9.8 + app.kubernetes.io/name: milvus-operator + app.kubernetes.io/instance: milvus-operator + app.kubernetes.io/version: "0.9.8" + app.kubernetes.io/managed-by: Helm + name: "milvus-operator-checker" + namespace: "milvus-operator" +spec: + ttlSecondsAfterFinished: 100 + template: + spec: + securityContext: + runAsNonRoot: true + serviceAccountName: "milvus-operator-checker" + restartPolicy: OnFailure + containers: + - name: checker + image: 'milvusdb/milvus-operator:v0.9.8' + imagePullPolicy: "IfNotPresent" + command: ["/checker"] + args: + - "-namespace=milvus-operator" + - "-name=milvus-operator" + resources: + limits: + cpu: 500m + memory: 1Gi + requests: + cpu: 50m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false +--- +# Source: milvus-operator/templates/mutatingwebhookconfiguration.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: 'milvus-operator/milvus-operator-serving-cert' + name: 'milvus-operator-mutating-webhook-configuration' +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: 'milvus-operator-webhook-service' + namespace: "milvus-operator" + path: /mutate-milvus-io-v1beta1-milvus + port: 443 + failurePolicy: Fail + name: mmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: 'milvus-operator-webhook-service' + namespace: "milvus-operator" + path: /mutate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: mmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None +--- +# Source: milvus-operator/templates/validatingwebhookconfiguration.yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: 'milvus-operator/milvus-operator-serving-cert' + name: 'milvus-operator-validating-webhook-configuration' +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: 'milvus-operator-webhook-service' + namespace: "milvus-operator" + path: /validate-milvus-io-v1beta1-milvus + port: 443 + failurePolicy: Fail + name: vmilvus.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvuses + sideEffects: None +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: 'milvus-operator-webhook-service' + namespace: "milvus-operator" + path: /validate-milvus-io-v1beta1-milvusupgrade + failurePolicy: Fail + name: vmilvusupgrade.kb.io + rules: + - apiGroups: + - milvus.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - milvusupgrades + sideEffects: None diff --git a/docs/CRD/(deprecated)milvus-cluster.md b/docs/CRD/(deprecated)milvus-cluster.md new file mode 100644 index 00000000..913c045a --- /dev/null +++ b/docs/CRD/(deprecated)milvus-cluster.md @@ -0,0 +1,3 @@ +# Note + +The `MilvusCluster` CRD is deprecated. Please use `Milvus` CRD instead. diff --git a/docs/CRD/milvus.md b/docs/CRD/milvus.md new file mode 100644 index 00000000..a4251bca --- /dev/null +++ b/docs/CRD/milvus.md @@ -0,0 +1,492 @@ +# Custom Resource Definition +This document guides user to learn the related fields defined in the `Milvus` CRD and then customize their Milvus cluster deployment stack. + +Before you start, you should have a basic understanding of the Custom Resource (CR) in Kubernetes. If not, please refer to [Kubernetes CRD doc](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). + +*CRD version*: `v1beta1` + +## CRD spec +Describe the spec fields with YAML code snippets and comments. All the parts here share the head YAML code snippet shown below. + +``` yaml +apiVersion: milvus.io/v1beta1 +kind: Milvus +metadata: + name: milvus-sample + namespace: sample-ns +spec: + mode: standalone # Optional ("standalone", "cluster") default="standalone" + components: {} # Optional + dependencies: {} # Optional + config: {} # Optional +``` + +### Components + +Top field spec `components`(optional) includes components' **global spec** for all 9 types of components (including 8 components in cluster mode and the standalone component in standalone mode), and **private spec** for each component. + +``` yaml +spec: + components: + # Components specifications + + # Components global specifications + # ... Skipped fields + + # Components private specifications + # ... Skipped fields +``` + +#### Components Global Spec +The global configuration's for all 9 types of components which can be override by their **private spec**. It contains fields: + +- `image` proceeding fields sets default configurations about the `image` milvus cluster should use and how to pull it. +- `env` includes custom environment variables. +- `nodeSelector` & `tolerations` controll which k8s nodes the milvus work loads should be scheduled to. +- `resources`: compute resources required by each component + +Components global configurations example: +``` yaml +spec: + components: + # Components specifications + + # Components global specifications + + # Enable rolling update, supported in milvus v2.2.3. + # For compatity reason defaults to false, but we suggest you to enable it if you are using milvus v2.2.3 or above. + enableRollingUpdate: true # Optional default=false + + # imageUpdateMode is the mode when update components' image. + # rollingUpgrade: to update the components' image in the order of coords -> nodes -> proxy + # rollingDowngrade: to update the components' image in the order of proxy -> nodes -> coords + # all: to update all the components' image rightaway. + # one of rollingUpgrade / rollingDowngrade / all + imageUpdateMode: rollingUpgrade # Optional default=rollingUpgrade + + # Paused is used to pause all components' deployment rollout + paused: false # Optional + + # Global pod labels. + podLabels: # Optional + key: value + + # Global pod annotations. + podAnnotations: # Optional + key: value + + # Global image name for milvus components. It will override the default one. Default is determined by operator version + image: milvusdb/milvus:latest # Optional + + # Global image pull policy. It will override the the default one. + imagePullPolicy: IfNotPresent # Optional, default = IfNotPresent + + # Global image pull secrets. + imagePullSecrets: # Optional + - name: mySecret + # Global environment variables + env: # Optional + - name: key + value: value + + # Global nodeSelector. + # NodeSelector is a selector which must be true for the component to fit on a node. + # Selector which must match a node's labels for the pod to be scheduled on that node. + # More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/ + nodeSelector: # Optional + key: value + + # Global tolerations. + # If specified, the pod's tolerations. + # More info: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ + tolerations: {} # Optional + + # Global compute resources required. + # Compute Resources required by this component. + # Cannot be updated. + # More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + resources: # Optional + # Limits describes the maximum amount of compute resources allowed. + # More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + limits: {} # Optional + # Requests describes the minimum amount of compute resources required. + # If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + # otherwise to an implementation-defined value. + # More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + requests: {} # Optional + + # Global volumes for all components + # More info: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#volume-v1-core + volumes: [] # Optional + + # Global volumeMounts. + # More info: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#volumemount-v1-core + VolumeMounts: [] # Optional + + # Global serviceAccountName. + serviceAccountName: "" # Optional + + # Disable metrics collection for all components + disableMetrics: false # Optional + + # The interval of podmonitor metric scraping in string + metricInterval : "30s" # Optional + + # ToolImage specify tool image to merge milvus config to original one in image, default uses same image as milvus-operator + toolImage: "" # Optional + + # UpdateToolImage specifies when milvus-operator upgraded, whether milvus should restart to update the tool image, too + updateToolImage: false # Optional + + # Components private specifications + # ... Skipped fields +``` + +#### Components Private Spec +Configurations for each component. There are 9 types of components as in the code below: +``` yaml +spec: + # ... Skipped fields + + components: + # ... Skipped fields + + # cluster components: + proxy: {} # Optional + rootCoord: {} # Optional + indexCoord: {} # Optional + dataCoord: {} # Optional + queryCoord: {} # Optional + indexNode: {} # Optional + dataNode: {} # Optional + queryNode: {} # Optional + + # MixCoord is a mixture of all coordinators(rootCoord, indexCoord, dataCoord and queryCoord), running within a single pod & single process. Since the coordinators won't cost much resources, it's recommended to use mixCoord instead of the 4 coordinators. + mixCoord: {} # Optional + + # standalone component + standalone: {} # Optional +``` + +Each component has its own basic specifications that can overrides global ones: +- replica: number of replicas +- port: the port number that server will listen +- fields same as section **Components Global Spec** has stated above (including `image` fields, `env`, `nodeSelector`,`tolerations`, `resources`) + +Take `rootCoord` as example: +``` yaml +spec: + components: + # Global Component Spec fields + # ... Skipped fields + + rootCoord: # Optional + # Supply number of replicas. + replicas: 1 # Optional, default=1 + + # Port number the conponent's server will listen + port: 8080 # Optional + + # Private Component Spec fields overrides the global ones + image: milvusdb/milvus:latest # Optional + imagePullPolicy: IfNotPresent # Optional + imagePullSecrets: # Optional + - name: mySecret + env: # Optional + - name: key + value: value + nodeSelector: # Optional + - key: value + tolerations: {} # Optional + resources: {} # Optional + requests: {} # Optional + limits: {} # Optional + + # ... Skipped fields + # ... Skipped fields +``` + +The `proxy` & `standalone` component is special. These 2 spec have not only all basic fields as other components, but also specifications about its `serviceType` + +proxy component: + +``` yaml +spec: + components: + # Global Component Spec fields + # ... Skipped fields + + proxy: # Optional + serviceType: ClusterIP # Optional ("ClusterIP", "NodePort", "LoadBalancer") + # ... Skipped fields + + # ... Skipped fields + # ... Skipped fields +``` + +standalone component: +``` yaml +spec: + components: + # Global Component Spec fields + # ... Skipped fields + + standalone: # Optional + serviceType: ClusterIP # Optional ("ClusterIP", "NodePort", "LoadBalancer") + # ... Skipped fields + + # ... Skipped fields + # ... Skipped fields +``` + +### Config +Config overrides the fields of Milvus Cluster's config file template. + +For example, if you want to change etcd's rootPath and minIO's bucketname: + +``` yaml +spec: + dependencies: {} + components: {} + config: # Optional + etcd: + rootPath: my-release + minio: + bucketName: my-bucket +``` + +A complete set of config fields can be found at https://github.com/milvus-io/milvus/blob/master/configs/milvus.yaml + +NOTE! The fields of dependencies' address and port cannot be set in the Milvus Cluster CR. + + +### Dependencies +specifications for milvus's dependencies: +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + etcd: {} # Optional + storage: {} # Optional + + # Optional. msgStreamType determines which message stream to use. It should be one of "pulsar", "kafka", "rocksmq" + # "rocksmq" is only available for standalone mode + # by default, the operator will choose "pulsar" for cluster mode and "rocksmq" for standalone mode + msgStreamType: "kafka" + pulsar: {} # Optional + kafka: {} # Optional +``` + +#### Dependency ETCD +The dependency etcd may be specified as external or in-cluster: +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + etcd: # Optional + # Whether (=true) to use an existed external etcd as specified in the field endpoints or + # (=false) create a new etcd inside the same kubernetes cluster for milvus. + external: false # Optional default=false + # The external etcd endpoints if external=true + endpoints: + - 192.168.1.1:2379 + # in-Cluster etcd configuration if external=false + inCluster: + # deletionPolicy of etcd when the milvus cluster is deleted + deletionPolicy: Retain # Optional ("Delete", "Retain") default="Retain" + # When deletionPolicy="Delete" whether the PersistantVolumeClaim shoud be deleted when the etcd is deleted + pvcDeletion: false # Optional default=false + # ... Skipped fields + # ... Skipped fields +``` + +The `inCluster.values` field contains etcd's configurable helm values. For example if you want to deploy etcd in its minimun mode: + +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + etcd: # Optional + # ... Skipped fields + inCluster: + # ... Skipped fields + values: # Optional + replicaCount: 1 +``` + +A complete fields doc can be found at https://artifacthub.io/packages/helm/bitnami/etcd/6.3.3. + + +#### Dependency Storage +The dependency storage may be specified as external or in-cluster. When use in-cluster storage, only `MinIO` storage type is supported. +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + storage: # Optional + # Whether (=true) to use an existed external storage as specified in the field endpoints or + # (=false) create a new storage inside the same kubernetes cluster for milvus. + external: false # Optional default=false + type: "MinIO" # Optional ("MinIO", "S3") default:="MinIO" + # Secret reference of the storage if it has + secretRef: mySecret # Optional + # The external storage endpoint if external=true + endpoint: "storageEndpoint" + # in-Cluster storage configuration if external=false + inCluster: + # deletionPolicy of storage when the milvus cluster is deleted + deletionPolicy: Retain # Optional ("Delete", "Retain") default="Retain" + # When deletionPolicy="Delete" whether the PersistantVolumeClaim shoud be deleted when the storage is deleted + pvcDeletion: false # Optional default=false + # ... Skipped fields + # ... Skipped fields +``` + +The `inCluster.values` field contains minIO's configurable helm values. For example if you want to deploy minIO in its minimun mode: + +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + storage: # Optional + # ... Skipped fields + inCluster: + # ... Skipped fields + values: # Optional + mode: standalone +``` + +A complete fields doc can be found at https://github.com/zilliztech/milvus-helm/blob/master/charts/minio/values.yaml. + + +#### Dependency Pulsar +The dependency pulsar may be specified as external or in-cluster: +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + pulsar: # Optional + # Whether (=true) to use an existed external pulsar as specified in the field endpoints or + # (=false) create a new pulsar inside the same kubernetes cluster for milvus. + external: false # Optional default=false + # The external pulsar endpoints if external=true + endpoints: + - 192.168.1.1:6650 + # in-Cluster pulsar configuration if external=false + inCluster: + # deletionPolicy of pulsar when the milvus cluster is deleted + deletionPolicy: Retain # Optional ("Delete", "Retain") default="Retain" + # When deletionPolicy="Delete" whether the PersistantVolumeClaim shoud be deleted when the pulsar is deleted + pvcDeletion: false # Optional default=false + # ... Skipped fields + # ... Skipped fields +``` + +The `inCluster.values` field contains pulsar's configurable helm values. For example if you want to deploy pulsar in its minimun mode: + +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + pulsar: # Optional + # ... Skipped fields + inCluster: + # ... Skipped fields + values: + components: + autorecovery: false + zookeeper: + replicaCount: 1 + bookkeeper: + replicaCount: 1 + broker: + replicaCount: 1 + configData: + ## Enable `autoSkipNonRecoverableData` since bookkeeper is running + ## without persistence + autoSkipNonRecoverableData: "true" + managedLedgerDefaultEnsembleSize: "1" + managedLedgerDefaultWriteQuorum: "1" + managedLedgerDefaultAckQuorum: "1" + proxy: + replicaCount: 1 +``` + +A complete fields doc can be found at https://github.com/kafkaesque-io/pulsar-helm-chart/blob/pulsar-1.0.31/helm-chart-sources/pulsar/values.yaml. And some of its default values are overrided by fields under `pulsar:` in https://github.com/zilliztech/milvus-helm/blob/master/charts/milvus/values.yaml + +#### Dependency kafka +The dependency kafka may be specified as external or in-cluster: +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + kafka: # Optional + # Whether (=true) to use an existed external kafka as specified in the field endpoints or + # (=false) create a new pulsar inside the same kubernetes cluster for milvus. + external: false # Optional default=false + # The external kafka brokers if external=true + brokers: + - 192.168.1.1:9092 + # in-Cluster pulsar configuration if external=false + inCluster: + # deletionPolicy of pulsar when the milvus cluster is deleted + deletionPolicy: Retain # Optional ("Delete", "Retain") default="Retain" + # When deletionPolicy="Delete" whether the PersistantVolumeClaim shoud be deleted when the kafka is deleted + pvcDeletion: false # Optional default=false + # ... Skipped fields + # ... Skipped fields +``` + +The `inCluster.values` field contains kafka's configurable helm values. For example if you want to deploy pulsar in its minimun mode: + +``` yaml +spec: + # ... Skipped fields + dependencies: # Optional + kafka: # Optional + # ... Skipped fields + inCluster: + # ... Skipped fields + values: + defaultReplicationFactor: 1 + offsetsTopicReplicationFactor: 1 + replicaCount: 1 + zookeeper: + replicaCount: 1 +``` + +A complete fields doc can be found at https://github.com/bitnami/charts/blob/1fdd2283f0e5a8772e4a763b455733c77e01b119/bitnami/kafka/values.yaml. And some of its default values are overrided by fields under `kafka:` in https://github.com/zilliztech/milvus-helm/blob/master/charts/milvus/values.yaml + + +## Status +The status of the CR Milvus is described as below: +``` yaml +status: + # Show the generous status of the Milvus + # It can be "Pending", "Healthy", "Unhealthy", "Stopped" + # Healthy means all milvus components are ready + # Unhealthy means at least one milvus component is not ready + # Stopped means all milvus components are stopped + # Pending means it's being created or resumed from stopped status. + status: "Healthy" + # Contains details for the current condition of Milvus and its dependency + conditions: + # Condition type + # It can be "EtcdReady", "StorageReady", "MsgStream", "MilvusReady", "MilvusUpdated" + - type: "MilvusReady" + # Status is the status of the condition. + # Can be True, False, Unknown. + status: True + # Last time the condition transitioned from one status to another. + lastTransitionTime: