diff --git a/.gitfiles b/.gitfiles index be6e94472e..428f6db425 100644 --- a/.gitfiles +++ b/.gitfiles @@ -425,6 +425,9 @@ charts/vald/templates/index/job/correction/networkpolicy.yaml charts/vald/templates/index/job/creation/configmap.yaml charts/vald/templates/index/job/creation/cronjob.yaml charts/vald/templates/index/job/creation/networkpolicy.yaml +charts/vald/templates/index/job/deletion/configmap.yaml +charts/vald/templates/index/job/deletion/cronjob.yaml +charts/vald/templates/index/job/deletion/networkpolicy.yaml charts/vald/templates/index/job/readreplica/rotate/clusterrole.yaml charts/vald/templates/index/job/readreplica/rotate/clusterrolebinding.yaml charts/vald/templates/index/job/readreplica/rotate/configmap.yaml diff --git a/Makefile.d/k8s.mk b/Makefile.d/k8s.mk index a6b9ff0dfd..43d11a617a 100644 --- a/Makefile.d/k8s.mk +++ b/Makefile.d/k8s.mk @@ -40,6 +40,7 @@ k8s/manifest/update: \ --set manager.index.operator.enabled=true \ --set manager.index.saver.enabled=true \ --set manager.index.creator.enabled=true \ + --set manager.index.deleter.enabled=true \ --set manager.index.corrector.enabled=true \ --set gateway.mirror.enabled=true \ --output-dir $(TEMP_DIR) \ @@ -55,6 +56,7 @@ k8s/manifest/update: \ mv $(TEMP_DIR)/vald/templates/index/operator $(ROOTDIR)/k8s/index/operator mv $(TEMP_DIR)/vald/templates/index/job/correction $(ROOTDIR)/k8s/index/job/correction mv $(TEMP_DIR)/vald/templates/index/job/creation $(ROOTDIR)/k8s/index/job/creation + mv $(TEMP_DIR)/vald/templates/index/job/deletion $(ROOTDIR)/k8s/index/job/deletion mv $(TEMP_DIR)/vald/templates/index/job/save $(ROOTDIR)/k8s/index/job/save mv $(TEMP_DIR)/vald/templates/index/job/readreplica/rotate $(ROOTDIR)/k8s/index/job/readreplica/rotate rm -rf $(TEMP_DIR) diff --git a/charts/vald-helm-operator/crds/valdrelease.yaml b/charts/vald-helm-operator/crds/valdrelease.yaml index 58b6811818..292aecb4ae 100644 --- a/charts/vald-helm-operator/crds/valdrelease.yaml +++ b/charts/vald-helm-operator/crds/valdrelease.yaml @@ -10956,6 +10956,1182 @@ spec: pattern: ^v[0-9]+\.[0-9]+\.[0-9]$ type: string type: object + deleter: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + agent_namespace: + type: string + concurrency: + minimum: 1 + type: integer + discoverer: + properties: + agent_client_options: + properties: + addrs: + items: + type: string + type: array + backoff: + properties: + backoff_factor: + type: number + backoff_time_limit: + type: string + enable_error_log: + type: boolean + initial_duration: + type: string + jitter_limit: + type: string + maximum_duration: + type: string + retry_count: + type: integer + type: object + call_option: + type: object + x-kubernetes-preserve-unknown-fields: true + circuit_breaker: + properties: + closed_error_rate: + type: number + closed_refresh_timeout: + type: string + half_open_error_rate: + type: number + min_samples: + type: integer + open_timeout: + type: string + type: object + connection_pool: + properties: + enable_dns_resolver: + type: boolean + enable_rebalance: + type: boolean + old_conn_close_duration: + type: string + rebalance_duration: + type: string + size: + type: integer + type: object + content_subtype: + type: string + dial_option: + properties: + authority: + type: string + backoff_base_delay: + type: string + backoff_jitter: + type: number + backoff_max_delay: + type: string + backoff_multiplier: + type: number + disable_retry: + type: boolean + enable_backoff: + type: boolean + idle_timeout: + type: string + initial_connection_window_size: + type: integer + initial_window_size: + type: integer + insecure: + type: boolean + interceptors: + items: + enum: + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_call_attempts: + type: integer + max_header_list_size: + type: integer + max_msg_size: + type: integer + min_connection_timeout: + type: string + net: + properties: + dialer: + properties: + dual_stack_enabled: + type: boolean + keepalive: + type: string + timeout: + type: string + type: object + dns: + properties: + cache_enabled: + type: boolean + cache_expiration: + type: string + refresh_duration: + type: string + type: object + network: + enum: + - tcp + - udp + - unix + type: string + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + timeout: + type: string + user_agent: + type: string + write_buffer_size: + type: integer + type: object + health_check_duration: + type: string + max_recv_msg_size: + type: integer + max_retry_rpc_buffer_size: + type: integer + max_send_msg_size: + type: integer + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + wait_for_ready: + type: boolean + type: object + client: + properties: + addrs: + items: + type: string + type: array + backoff: + properties: + backoff_factor: + type: number + backoff_time_limit: + type: string + enable_error_log: + type: boolean + initial_duration: + type: string + jitter_limit: + type: string + maximum_duration: + type: string + retry_count: + type: integer + type: object + call_option: + type: object + x-kubernetes-preserve-unknown-fields: true + circuit_breaker: + properties: + closed_error_rate: + type: number + closed_refresh_timeout: + type: string + half_open_error_rate: + type: number + min_samples: + type: integer + open_timeout: + type: string + type: object + connection_pool: + properties: + enable_dns_resolver: + type: boolean + enable_rebalance: + type: boolean + old_conn_close_duration: + type: string + rebalance_duration: + type: string + size: + type: integer + type: object + content_subtype: + type: string + dial_option: + properties: + authority: + type: string + backoff_base_delay: + type: string + backoff_jitter: + type: number + backoff_max_delay: + type: string + backoff_multiplier: + type: number + disable_retry: + type: boolean + enable_backoff: + type: boolean + idle_timeout: + type: string + initial_connection_window_size: + type: integer + initial_window_size: + type: integer + insecure: + type: boolean + interceptors: + items: + enum: + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_call_attempts: + type: integer + max_header_list_size: + type: integer + max_msg_size: + type: integer + min_connection_timeout: + type: string + net: + properties: + dialer: + properties: + dual_stack_enabled: + type: boolean + keepalive: + type: string + timeout: + type: string + type: object + dns: + properties: + cache_enabled: + type: boolean + cache_expiration: + type: string + refresh_duration: + type: string + type: object + network: + enum: + - tcp + - udp + - unix + type: string + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + timeout: + type: string + user_agent: + type: string + write_buffer_size: + type: integer + type: object + health_check_duration: + type: string + max_recv_msg_size: + type: integer + max_retry_rpc_buffer_size: + type: integer + max_send_msg_size: + type: integer + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + wait_for_ready: + type: boolean + type: object + duration: + type: string + type: object + enabled: + type: boolean + env: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + image: + properties: + pullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + repository: + type: string + tag: + type: string + type: object + index_id: + type: string + initContainers: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + name: + type: string + node_name: + type: string + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + observability: + properties: + enabled: + type: boolean + metrics: + properties: + enable_cgo: + type: boolean + enable_goroutine: + type: boolean + enable_memory: + type: boolean + enable_version_info: + type: boolean + version_info_labels: + items: + enum: + - vald_version + - server_name + - git_commit + - build_time + - go_version + - go_os + - go_arch + - cgo_enabled + - algorithm_info + - build_cpu_info_flags + type: string + type: array + type: object + otlp: + properties: + attribute: + properties: + namespace: + type: string + node_name: + type: string + pod_name: + type: string + service_name: + type: string + type: object + collector_endpoint: + type: string + metrics_export_interval: + type: string + metrics_export_timeout: + type: string + trace_batch_timeout: + type: string + trace_export_timeout: + type: string + trace_max_export_batch_size: + type: integer + trace_max_queue_size: + type: integer + type: object + trace: + properties: + enabled: + type: boolean + type: object + type: object + schedule: + type: string + server_config: + properties: + full_shutdown_duration: + type: string + healths: + properties: + liveness: + properties: + enabled: + type: boolean + host: + type: string + livenessProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + readiness: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + readinessProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + startup: + properties: + enabled: + type: boolean + port: + maximum: 65535 + minimum: 0 + type: integer + startupProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + type: object + type: object + metrics: + properties: + pprof: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + type: object + servers: + properties: + grpc: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + grpc: + properties: + bidirectional_stream_concurrency: + type: integer + connection_timeout: + type: string + enable_admin: + type: boolean + enable_channelz: + type: boolean + enable_reflection: + type: boolean + header_table_size: + type: integer + initial_conn_window_size: + type: integer + initial_window_size: + type: integer + interceptors: + items: + enum: + - RecoverInterceptor + - AccessLogInterceptor + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + max_conn_age: + type: string + max_conn_age_grace: + type: string + max_conn_idle: + type: string + min_time: + type: string + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_concurrent_streams: + type: integer + max_header_list_size: + type: integer + max_receive_message_size: + type: integer + max_send_message_size: + type: integer + num_stream_workers: + type: integer + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + wait_for_handlers: + type: boolean + write_buffer_size: + type: integer + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + rest: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + startingDeadlineSeconds: + type: integer + suspend: + type: boolean + target_addrs: + items: + type: string + type: array + tolerations: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + ttlSecondsAfterFinished: + type: integer + version: + pattern: ^v[0-9]+\.[0-9]+\.[0-9]$ + type: string + type: object enabled: type: boolean env: diff --git a/charts/vald/README.md b/charts/vald/README.md index c89b636251..ae97b393a7 100644 --- a/charts/vald/README.md +++ b/charts/vald/README.md @@ -969,6 +969,46 @@ Run the following command to install the chart, | manager.index.creator.tolerations | list | `[]` | tolerations | | manager.index.creator.ttlSecondsAfterFinished | int | `86400` | ttl setting for K8s completed jobs | | manager.index.creator.version | string | `"v0.0.0"` | version of index manager config | +| manager.index.deleter.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[]` | node affinity preferred scheduling terms | +| manager.index.deleter.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms | list | `[]` | node affinity required node selectors | +| manager.index.deleter.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[]` | pod affinity preferred scheduling terms | +| manager.index.deleter.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution | list | `[]` | pod affinity required scheduling terms | +| manager.index.deleter.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution | list | `[]` | pod anti-affinity preferred scheduling terms | +| manager.index.deleter.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution | list | `[]` | pod anti-affinity required scheduling terms | +| manager.index.deleter.agent_namespace | string | `"_MY_POD_NAMESPACE_"` | namespace of agent pods to manage | +| manager.index.deleter.concurrency | int | `1` | concurrency for indexing | +| manager.index.deleter.discoverer.agent_client_options | object | `{"dial_option":{"net":{"dialer":{"keepalive":"15m"}}}}` | gRPC client options for agents (overrides defaults.grpc.client) | +| manager.index.deleter.discoverer.client | object | `{}` | gRPC client for discoverer (overrides defaults.grpc.client) | +| manager.index.deleter.discoverer.duration | string | `"500ms"` | refresh duration to discover | +| manager.index.deleter.enabled | bool | `false` | enable index deletion CronJob | +| manager.index.deleter.env | list | `[{"name":"MY_NODE_NAME","valueFrom":{"fieldRef":{"fieldPath":"spec.nodeName"}}},{"name":"MY_POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"MY_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]` | environment variables | +| manager.index.deleter.image.pullPolicy | string | `"Always"` | | +| manager.index.deleter.image.repository | string | `"vdaas/vald-index-deletion"` | image repository | +| manager.index.deleter.image.tag | string | `""` | image tag (overrides defaults.image.tag) | +| manager.index.deleter.initContainers[0].image | string | `"busybox:stable"` | | +| manager.index.deleter.initContainers[0].imagePullPolicy | string | `"Always"` | | +| manager.index.deleter.initContainers[0].name | string | `"wait-for-agent"` | | +| manager.index.deleter.initContainers[0].sleepDuration | int | `2` | | +| manager.index.deleter.initContainers[0].target | string | `"agent"` | | +| manager.index.deleter.initContainers[0].type | string | `"wait-for"` | | +| manager.index.deleter.initContainers[1].image | string | `"busybox:stable"` | | +| manager.index.deleter.initContainers[1].imagePullPolicy | string | `"Always"` | | +| manager.index.deleter.initContainers[1].name | string | `"wait-for-discoverer"` | | +| manager.index.deleter.initContainers[1].sleepDuration | int | `2` | | +| manager.index.deleter.initContainers[1].target | string | `"discoverer"` | | +| manager.index.deleter.initContainers[1].type | string | `"wait-for"` | | +| manager.index.deleter.name | string | `"vald-index-deletion"` | name of index deletion job | +| manager.index.deleter.nodeSelector | object | `{}` | node selector | +| manager.index.deleter.node_name | string | `""` | node name | +| manager.index.deleter.observability.otlp.attribute.service_name | string | `"vald-index-deletion"` | | +| manager.index.deleter.schedule | string | `"* * * * *"` | CronJob schedule setting for index deletion | +| manager.index.deleter.server_config | object | `{"healths":{"liveness":{},"readiness":{},"startup":{}},"metrics":{"pprof":{}},"servers":{"grpc":{},"rest":{}}}` | server config (overrides defaults.server_config) | +| manager.index.deleter.startingDeadlineSeconds | int | `43200` | startingDeadlineSeconds setting for K8s completed jobs | +| manager.index.deleter.suspend | bool | `false` | CronJob suspend setting for index deletion | +| manager.index.deleter.target_addrs | list | `[]` | indexing target addresses | +| manager.index.deleter.tolerations | list | `[]` | tolerations | +| manager.index.deleter.ttlSecondsAfterFinished | int | `86400` | ttl setting for K8s completed jobs | +| manager.index.deleter.version | string | `"v0.0.0"` | version of index manager config | | manager.index.enabled | bool | `true` | index manager enabled | | manager.index.env | list | `[{"name":"MY_NODE_NAME","valueFrom":{"fieldRef":{"fieldPath":"spec.nodeName"}}},{"name":"MY_POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"MY_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]` | environment variables | | manager.index.externalTrafficPolicy | string | `""` | external traffic policy (can be specified when service type is LoadBalancer or NodePort) : Cluster or Local | diff --git a/charts/vald/templates/index/job/deletion/configmap.yaml b/charts/vald/templates/index/job/deletion/configmap.yaml new file mode 100644 index 0000000000..2f4fb77174 --- /dev/null +++ b/charts/vald/templates/index/job/deletion/configmap.yaml @@ -0,0 +1,76 @@ +# +# Copyright (C) 2019-2025 vdaas.org vald team +# +# 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 +# +# https://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. +# +{{- $deleter := .Values.manager.index.deleter -}} +{{- $gateway := .Values.gateway.lb -}} +{{- $index := .Values.manager.index -}} +{{- $agent := .Values.agent -}} +{{- $discoverer := .Values.discoverer -}} +{{- if $deleter.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $deleter.name }}-config + labels: + app.kubernetes.io/name: {{ include "vald.name" . }} + helm.sh/chart: {{ include "vald.chart" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.Version }} + app.kubernetes.io/component: {{ $deleter.name }} +data: + config.yaml: | + --- + version: {{ $deleter.version }} + time_zone: {{ default .Values.defaults.time_zone $deleter.time_zone }} + logging: + {{- $logging := dict "Values" $deleter.logging "default" .Values.defaults.logging }} + {{- include "vald.logging" $logging | nindent 6 }} + server_config: + {{- $servers := dict "Values" $deleter.server_config "default" .Values.defaults.server_config }} + {{- include "vald.servers" $servers | nindent 6 }} + observability: + {{- $observability := dict "Values" $deleter.observability "default" .Values.defaults.observability }} + {{- include "vald.observability" $observability | nindent 6 }} + deleter: + index_id: {{ $deleter.index_id | quote }} + agent_port: {{ default .Values.defaults.server_config.servers.grpc.port $agent.server_config.servers.grpc.port }} + agent_name: {{ $agent.name | quote }} + agent_dns: {{ $agent.name }}.{{ .Release.Namespace }}.svc.cluster.local + agent_namespace: {{ $deleter.agent_namespace | quote }} + node_name: {{ $deleter.node_name | quote }} + concurrency: {{ $deleter.concurrency }} + {{- if $deleter.target_addrs }} + target_addrs: + {{- toYaml $deleter.target_addrs | nindent 8 }} + {{- else }} + target_addrs: [] + {{- end }} + discoverer: + duration: {{ $deleter.discoverer.duration }} + client: + {{- $discovererClient := $deleter.discoverer.client }} + {{- $discovererServerPort := $discoverer.server_config.servers.grpc.port }} + {{- $defaultDiscovererHost := printf "%s.%s.svc.cluster.local" $discoverer.name .Release.Namespace }} + {{- $defaultDiscovererPort := default .Values.defaults.server_config.servers.grpc.port $discovererServerPort }} + {{- $defaultDiscovererAddr := (list (printf "%s:%d" $defaultDiscovererHost (int64 $defaultDiscovererPort))) }} + {{- $discovererAddrs := dict "Values" $discovererClient.addrs "default" $defaultDiscovererAddr }} + {{- include "vald.grpc.client.addrs" $discovererAddrs | nindent 10 }} + {{- $discovererGRPCclient := dict "Values" $discovererClient "default" .Values.defaults.grpc.client }} + {{- include "vald.grpc.client" $discovererGRPCclient | nindent 10 }} + agent_client_options: + {{- include "vald.grpc.client.addrs" (dict "Values" $deleter.discoverer.agent_client_options.addrs) | nindent 10 }} + {{- include "vald.grpc.client" (dict "Values" $deleter.discoverer.agent_client_options "default" .Values.defaults.grpc.client) | nindent 10 }} +{{- end }} diff --git a/charts/vald/templates/index/job/deletion/cronjob.yaml b/charts/vald/templates/index/job/deletion/cronjob.yaml new file mode 100644 index 0000000000..3c25d58824 --- /dev/null +++ b/charts/vald/templates/index/job/deletion/cronjob.yaml @@ -0,0 +1,31 @@ +# +# Copyright (C) 2019-2025 vdaas.org vald team +# +# 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 +# +# https://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. +# +{{- $deleter := .Values.manager.index.deleter -}} +{{- if $deleter.enabled }} +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ $deleter.name }} + labels: + {{- include "vald.labels" (dict "Values" $deleter "default" .) | nindent 10 }} +spec: + schedule: {{ $deleter.schedule | quote }} + concurrencyPolicy: Forbid + suspend: {{ $deleter.suspend }} + startingDeadlineSeconds: {{ $deleter.startingDeadlineSeconds }} + jobTemplate: + {{- include "vald.index_job" (dict "Job" $deleter "default" . "type" "deleter") | nindent 10 }} +{{- end }} diff --git a/charts/vald/templates/index/job/deletion/networkpolicy.yaml b/charts/vald/templates/index/job/deletion/networkpolicy.yaml new file mode 100644 index 0000000000..c0deb961cb --- /dev/null +++ b/charts/vald/templates/index/job/deletion/networkpolicy.yaml @@ -0,0 +1,60 @@ +# +# Copyright (C) 2019-2025 vdaas.org vald team +# +# 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 +# +# https://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. +# + +{{- $agent := .Values.agent -}} +{{- $discoverer := .Values.discoverer -}} +{{- $deleter := .Values.manager.index.deleter -}} +{{- if and .Values.defaults.networkPolicy.enabled $deleter.enabled }} +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: {{ $deleter.name }}-allow +spec: + podSelector: + matchLabels: + app: {{ $deleter.name }} + policyTypes: + - Ingress + - Egress + ingress: + - from: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: kube-system + {{- if .Values.defaults.networkPolicy.custom.ingress }} + {{- toYaml .Values.defaults.networkPolicy.custom.ingress | nindent 4 }} + {{- end }} + egress: + - to: + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: {{ .Release.Namespace }} + podSelector: + matchLabels: + app: {{ $agent.name }} + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: {{ .Release.Namespace }} + podSelector: + matchLabels: + app: {{ $discoverer.name }} + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: kube-system + {{- if .Values.defaults.networkPolicy.custom.egress }} + {{- toYaml .Values.defaults.networkPolicy.custom.egress | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/vald/values.schema.json b/charts/vald/values.schema.json index ca25eaa809..41b41430bb 100644 --- a/charts/vald/values.schema.json +++ b/charts/vald/values.schema.json @@ -18542,6 +18542,2062 @@ } } }, + "deleter": { + "type": "object", + "properties": { + "affinity": { + "type": "object", + "properties": { + "nodeAffinity": { + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "description": "node affinity preferred scheduling terms", + "items": { "type": "object" } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "object", + "properties": { + "nodeSelectorTerms": { + "type": "array", + "description": "node affinity required node selectors", + "items": { "type": "object" } + } + } + } + } + }, + "podAffinity": { + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "description": "pod affinity preferred scheduling terms", + "items": { "type": "object" } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "description": "pod affinity required scheduling terms", + "items": { "type": "object" } + } + } + }, + "podAntiAffinity": { + "type": "object", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "description": "pod anti-affinity preferred scheduling terms", + "items": { "type": "object" } + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "type": "array", + "description": "pod anti-affinity required scheduling terms", + "items": { "type": "object" } + } + } + } + } + }, + "agent_namespace": { + "type": "string", + "description": "namespace of agent pods to manage" + }, + "concurrency": { + "type": "integer", + "description": "concurrency for indexing", + "minimum": 1 + }, + "discoverer": { + "type": "object", + "properties": { + "agent_client_options": { + "type": "object", + "properties": { + "addrs": { + "type": "array", + "description": "gRPC client addresses", + "items": { "type": "string" } + }, + "backoff": { + "type": "object", + "properties": { + "backoff_factor": { + "type": "number", + "description": "gRPC client backoff factor" + }, + "backoff_time_limit": { + "type": "string", + "description": "gRPC client backoff time limit" + }, + "enable_error_log": { + "type": "boolean", + "description": "gRPC client backoff log enabled" + }, + "initial_duration": { + "type": "string", + "description": "gRPC client backoff initial duration" + }, + "jitter_limit": { + "type": "string", + "description": "gRPC client backoff jitter limit" + }, + "maximum_duration": { + "type": "string", + "description": "gRPC client backoff maximum duration" + }, + "retry_count": { + "type": "integer", + "description": "gRPC client backoff retry count" + } + } + }, + "call_option": { "type": "object" }, + "circuit_breaker": { + "type": "object", + "properties": { + "closed_error_rate": { + "type": "number", + "description": "gRPC client circuitbreaker closed error rate" + }, + "closed_refresh_timeout": { + "type": "string", + "description": "gRPC client circuitbreaker closed refresh timeout" + }, + "half_open_error_rate": { + "type": "number", + "description": "gRPC client circuitbreaker half-open error rate" + }, + "min_samples": { + "type": "integer", + "description": "gRPC client circuitbreaker minimum sampling count" + }, + "open_timeout": { + "type": "string", + "description": "gRPC client circuitbreaker open timeout" + } + } + }, + "connection_pool": { + "type": "object", + "properties": { + "enable_dns_resolver": { + "type": "boolean", + "description": "enables gRPC client connection pool dns resolver, when enabled vald uses ip handshake exclude dns discovery which improves network performance" + }, + "enable_rebalance": { + "type": "boolean", + "description": "enables gRPC client connection pool rebalance" + }, + "old_conn_close_duration": { + "type": "string", + "description": "makes delay before gRPC client connection closing during connection pool rebalance" + }, + "rebalance_duration": { + "type": "string", + "description": "gRPC client connection pool rebalance duration" + }, + "size": { + "type": "integer", + "description": "gRPC client connection pool size" + } + } + }, + "content_subtype": { "type": "string" }, + "dial_option": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "description": "gRPC client dial option authority" + }, + "backoff_base_delay": { + "type": "string", + "description": "gRPC client dial option base backoff delay" + }, + "backoff_jitter": { + "type": "number", + "description": "gRPC client dial option base backoff delay" + }, + "backoff_max_delay": { + "type": "string", + "description": "gRPC client dial option max backoff delay" + }, + "backoff_multiplier": { + "type": "number", + "description": "gRPC client dial option base backoff delay" + }, + "disable_retry": { + "type": "boolean", + "description": "gRPC client dial option disables retry" + }, + "enable_backoff": { + "type": "boolean", + "description": "gRPC client dial option backoff enabled" + }, + "idle_timeout": { + "type": "string", + "description": "gRPC client dial option idle_timeout" + }, + "initial_connection_window_size": { + "type": "integer", + "description": "gRPC client dial option initial connection window size" + }, + "initial_window_size": { + "type": "integer", + "description": "gRPC client dial option initial window size" + }, + "insecure": { + "type": "boolean", + "description": "gRPC client dial option insecure enabled" + }, + "interceptors": { + "type": "array", + "description": "gRPC client interceptors", + "items": { + "type": "string", + "enum": [ + "TraceInterceptor", + "MetricInterceptor" + ] + } + }, + "keepalive": { + "type": "object", + "properties": { + "permit_without_stream": { + "type": "boolean", + "description": "gRPC client keep alive permit without stream" + }, + "time": { + "type": "string", + "description": "gRPC client keep alive time" + }, + "timeout": { + "type": "string", + "description": "gRPC client keep alive timeout" + } + } + }, + "max_call_attempts": { + "type": "integer", + "description": "gRPC client dial option number of max call attempts" + }, + "max_header_list_size": { + "type": "integer", + "description": "gRPC client dial option max header list size" + }, + "max_msg_size": { + "type": "integer", + "description": "gRPC client dial option max message size" + }, + "min_connection_timeout": { + "type": "string", + "description": "gRPC client dial option minimum connection timeout" + }, + "net": { + "type": "object", + "properties": { + "dialer": { + "type": "object", + "properties": { + "dual_stack_enabled": { + "type": "boolean", + "description": "gRPC client TCP dialer dual stack enabled" + }, + "keepalive": { + "type": "string", + "description": "gRPC client TCP dialer keep alive" + }, + "timeout": { + "type": "string", + "description": "gRPC client TCP dialer timeout" + } + } + }, + "dns": { + "type": "object", + "properties": { + "cache_enabled": { + "type": "boolean", + "description": "gRPC client DNS cache enabled" + }, + "cache_expiration": { + "type": "string", + "description": "gRPC client DNS cache expiration" + }, + "refresh_duration": { + "type": "string", + "description": "gRPC client DNS cache refresh duration" + } + } + }, + "network": { + "type": "string", + "description": "gRPC client dialer network type", + "enum": ["tcp", "udp", "unix"] + }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "tls": { + "type": "object", + "properties": { + "ca": { + "type": "string", + "description": "TLS ca path" + }, + "cert": { + "type": "string", + "description": "TLS cert path" + }, + "enabled": { + "type": "boolean", + "description": "TLS enabled" + }, + "insecure_skip_verify": { + "type": "boolean", + "description": "enable/disable skip SSL certificate verification" + }, + "key": { + "type": "string", + "description": "TLS key path" + } + } + } + } + }, + "read_buffer_size": { + "type": "integer", + "description": "gRPC client dial option read buffer size" + }, + "shared_write_buffer": { + "type": "boolean", + "description": "gRPC client dial option sharing write buffer" + }, + "timeout": { + "type": "string", + "description": "gRPC client dial option timeout" + }, + "user_agent": { + "type": "string", + "description": "gRPC client dial option user_agent" + }, + "write_buffer_size": { + "type": "integer", + "description": "gRPC client dial option write buffer size" + } + } + }, + "health_check_duration": { + "type": "string", + "description": "gRPC client health check duration" + }, + "max_recv_msg_size": { "type": "integer" }, + "max_retry_rpc_buffer_size": { "type": "integer" }, + "max_send_msg_size": { "type": "integer" }, + "tls": { + "type": "object", + "properties": { + "ca": { + "type": "string", + "description": "TLS ca path" + }, + "cert": { + "type": "string", + "description": "TLS cert path" + }, + "enabled": { + "type": "boolean", + "description": "TLS enabled" + }, + "insecure_skip_verify": { + "type": "boolean", + "description": "enable/disable skip SSL certificate verification" + }, + "key": { + "type": "string", + "description": "TLS key path" + } + } + }, + "wait_for_ready": { "type": "boolean" } + } + }, + "client": { + "type": "object", + "properties": { + "addrs": { + "type": "array", + "description": "gRPC client addresses", + "items": { "type": "string" } + }, + "backoff": { + "type": "object", + "properties": { + "backoff_factor": { + "type": "number", + "description": "gRPC client backoff factor" + }, + "backoff_time_limit": { + "type": "string", + "description": "gRPC client backoff time limit" + }, + "enable_error_log": { + "type": "boolean", + "description": "gRPC client backoff log enabled" + }, + "initial_duration": { + "type": "string", + "description": "gRPC client backoff initial duration" + }, + "jitter_limit": { + "type": "string", + "description": "gRPC client backoff jitter limit" + }, + "maximum_duration": { + "type": "string", + "description": "gRPC client backoff maximum duration" + }, + "retry_count": { + "type": "integer", + "description": "gRPC client backoff retry count" + } + } + }, + "call_option": { "type": "object" }, + "circuit_breaker": { + "type": "object", + "properties": { + "closed_error_rate": { + "type": "number", + "description": "gRPC client circuitbreaker closed error rate" + }, + "closed_refresh_timeout": { + "type": "string", + "description": "gRPC client circuitbreaker closed refresh timeout" + }, + "half_open_error_rate": { + "type": "number", + "description": "gRPC client circuitbreaker half-open error rate" + }, + "min_samples": { + "type": "integer", + "description": "gRPC client circuitbreaker minimum sampling count" + }, + "open_timeout": { + "type": "string", + "description": "gRPC client circuitbreaker open timeout" + } + } + }, + "connection_pool": { + "type": "object", + "properties": { + "enable_dns_resolver": { + "type": "boolean", + "description": "enables gRPC client connection pool dns resolver, when enabled vald uses ip handshake exclude dns discovery which improves network performance" + }, + "enable_rebalance": { + "type": "boolean", + "description": "enables gRPC client connection pool rebalance" + }, + "old_conn_close_duration": { + "type": "string", + "description": "makes delay before gRPC client connection closing during connection pool rebalance" + }, + "rebalance_duration": { + "type": "string", + "description": "gRPC client connection pool rebalance duration" + }, + "size": { + "type": "integer", + "description": "gRPC client connection pool size" + } + } + }, + "content_subtype": { "type": "string" }, + "dial_option": { + "type": "object", + "properties": { + "authority": { + "type": "string", + "description": "gRPC client dial option authority" + }, + "backoff_base_delay": { + "type": "string", + "description": "gRPC client dial option base backoff delay" + }, + "backoff_jitter": { + "type": "number", + "description": "gRPC client dial option base backoff delay" + }, + "backoff_max_delay": { + "type": "string", + "description": "gRPC client dial option max backoff delay" + }, + "backoff_multiplier": { + "type": "number", + "description": "gRPC client dial option base backoff delay" + }, + "disable_retry": { + "type": "boolean", + "description": "gRPC client dial option disables retry" + }, + "enable_backoff": { + "type": "boolean", + "description": "gRPC client dial option backoff enabled" + }, + "idle_timeout": { + "type": "string", + "description": "gRPC client dial option idle_timeout" + }, + "initial_connection_window_size": { + "type": "integer", + "description": "gRPC client dial option initial connection window size" + }, + "initial_window_size": { + "type": "integer", + "description": "gRPC client dial option initial window size" + }, + "insecure": { + "type": "boolean", + "description": "gRPC client dial option insecure enabled" + }, + "interceptors": { + "type": "array", + "description": "gRPC client interceptors", + "items": { + "type": "string", + "enum": [ + "TraceInterceptor", + "MetricInterceptor" + ] + } + }, + "keepalive": { + "type": "object", + "properties": { + "permit_without_stream": { + "type": "boolean", + "description": "gRPC client keep alive permit without stream" + }, + "time": { + "type": "string", + "description": "gRPC client keep alive time" + }, + "timeout": { + "type": "string", + "description": "gRPC client keep alive timeout" + } + } + }, + "max_call_attempts": { + "type": "integer", + "description": "gRPC client dial option number of max call attempts" + }, + "max_header_list_size": { + "type": "integer", + "description": "gRPC client dial option max header list size" + }, + "max_msg_size": { + "type": "integer", + "description": "gRPC client dial option max message size" + }, + "min_connection_timeout": { + "type": "string", + "description": "gRPC client dial option minimum connection timeout" + }, + "net": { + "type": "object", + "properties": { + "dialer": { + "type": "object", + "properties": { + "dual_stack_enabled": { + "type": "boolean", + "description": "gRPC client TCP dialer dual stack enabled" + }, + "keepalive": { + "type": "string", + "description": "gRPC client TCP dialer keep alive" + }, + "timeout": { + "type": "string", + "description": "gRPC client TCP dialer timeout" + } + } + }, + "dns": { + "type": "object", + "properties": { + "cache_enabled": { + "type": "boolean", + "description": "gRPC client DNS cache enabled" + }, + "cache_expiration": { + "type": "string", + "description": "gRPC client DNS cache expiration" + }, + "refresh_duration": { + "type": "string", + "description": "gRPC client DNS cache refresh duration" + } + } + }, + "network": { + "type": "string", + "description": "gRPC client dialer network type", + "enum": ["tcp", "udp", "unix"] + }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "tls": { + "type": "object", + "properties": { + "ca": { + "type": "string", + "description": "TLS ca path" + }, + "cert": { + "type": "string", + "description": "TLS cert path" + }, + "enabled": { + "type": "boolean", + "description": "TLS enabled" + }, + "insecure_skip_verify": { + "type": "boolean", + "description": "enable/disable skip SSL certificate verification" + }, + "key": { + "type": "string", + "description": "TLS key path" + } + } + } + } + }, + "read_buffer_size": { + "type": "integer", + "description": "gRPC client dial option read buffer size" + }, + "shared_write_buffer": { + "type": "boolean", + "description": "gRPC client dial option sharing write buffer" + }, + "timeout": { + "type": "string", + "description": "gRPC client dial option timeout" + }, + "user_agent": { + "type": "string", + "description": "gRPC client dial option user_agent" + }, + "write_buffer_size": { + "type": "integer", + "description": "gRPC client dial option write buffer size" + } + } + }, + "health_check_duration": { + "type": "string", + "description": "gRPC client health check duration" + }, + "max_recv_msg_size": { "type": "integer" }, + "max_retry_rpc_buffer_size": { "type": "integer" }, + "max_send_msg_size": { "type": "integer" }, + "tls": { + "type": "object", + "properties": { + "ca": { + "type": "string", + "description": "TLS ca path" + }, + "cert": { + "type": "string", + "description": "TLS cert path" + }, + "enabled": { + "type": "boolean", + "description": "TLS enabled" + }, + "insecure_skip_verify": { + "type": "boolean", + "description": "enable/disable skip SSL certificate verification" + }, + "key": { + "type": "string", + "description": "TLS key path" + } + } + }, + "wait_for_ready": { "type": "boolean" } + } + }, + "duration": { + "type": "string", + "description": "refresh duration to discover" + } + } + }, + "enabled": { + "type": "boolean", + "description": "enable index deletion CronJob" + }, + "env": { + "type": "array", + "description": "environment variables", + "items": { "type": "object" } + }, + "image": { + "type": "object", + "properties": { + "pullPolicy": { + "type": "string", + "description": "image pull policy", + "enum": ["Always", "Never", "IfNotPresent"] + }, + "repository": { + "type": "string", + "description": "image repository" + }, + "tag": { + "type": "string", + "description": "image tag (overrides defaults.image.tag)" + } + } + }, + "index_id": { + "type": "string", + "description": "index id for deletion" + }, + "initContainers": { + "type": "array", + "description": "init containers", + "items": { "type": "object" } + }, + "name": { + "type": "string", + "description": "name of index deletion job" + }, + "nodeSelector": { + "type": "object", + "description": "node selector" + }, + "node_name": { "type": "string", "description": "node name" }, + "observability": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "observability features enabled" + }, + "metrics": { + "type": "object", + "properties": { + "enable_cgo": { + "type": "boolean", + "description": "CGO metrics enabled" + }, + "enable_goroutine": { + "type": "boolean", + "description": "goroutine metrics enabled" + }, + "enable_memory": { + "type": "boolean", + "description": "memory metrics enabled" + }, + "enable_version_info": { + "type": "boolean", + "description": "version info metrics enabled" + }, + "version_info_labels": { + "type": "array", + "description": "enabled label names of version info", + "items": { + "type": "string", + "enum": [ + "vald_version", + "server_name", + "git_commit", + "build_time", + "go_version", + "go_os", + "go_arch", + "cgo_enabled", + "algorithm_info", + "build_cpu_info_flags" + ] + } + } + } + }, + "otlp": { + "type": "object", + "properties": { + "attribute": { + "type": "object", + "description": "default resource attribute", + "properties": { + "namespace": { + "type": "string", + "description": "namespace" + }, + "node_name": { + "type": "string", + "description": "node name" + }, + "pod_name": { + "type": "string", + "description": "pod name" + }, + "service_name": { + "type": "string", + "description": "service name" + } + } + }, + "collector_endpoint": { + "type": "string", + "description": "OpenTelemetry Collector endpoint" + }, + "metrics_export_interval": { + "type": "string", + "description": "metrics export interval" + }, + "metrics_export_timeout": { + "type": "string", + "description": "metrics export timeout" + }, + "trace_batch_timeout": { + "type": "string", + "description": "trace batch timeout" + }, + "trace_export_timeout": { + "type": "string", + "description": "trace export timeout" + }, + "trace_max_export_batch_size": { + "type": "integer", + "description": "trace maximum export batch size" + }, + "trace_max_queue_size": { + "type": "integer", + "description": "trace maximum queue size" + } + } + }, + "trace": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "trace enabled" + } + } + } + } + }, + "schedule": { + "type": "string", + "description": "CronJob schedule setting for index deletion" + }, + "server_config": { + "type": "object", + "properties": { + "full_shutdown_duration": { + "type": "string", + "description": "server full shutdown duration" + }, + "healths": { + "type": "object", + "properties": { + "liveness": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "liveness server enabled" + }, + "host": { + "type": "string", + "description": "liveness server host" + }, + "livenessProbe": { + "type": "object", + "properties": { + "failureThreshold": { + "type": "integer", + "description": "liveness probe failure threshold" + }, + "httpGet": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "liveness probe path" + }, + "port": { + "type": "string", + "description": "liveness probe port" + }, + "scheme": { + "type": "string", + "description": "liveness probe scheme" + } + } + }, + "initialDelaySeconds": { + "type": "integer", + "description": "liveness probe initial delay seconds" + }, + "periodSeconds": { + "type": "integer", + "description": "liveness probe period seconds" + }, + "successThreshold": { + "type": "integer", + "description": "liveness probe success threshold" + }, + "timeoutSeconds": { + "type": "integer", + "description": "liveness probe timeout seconds" + } + } + }, + "port": { + "type": "integer", + "description": "liveness server port", + "maximum": 65535, + "minimum": 0 + }, + "server": { + "type": "object", + "properties": { + "http": { + "type": "object", + "properties": { + "handler_timeout": { + "type": "string", + "description": "REST server handler timeout" + }, + "http2": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "HTTP2 server enabled" + }, + "handler_limit": { + "type": "integer", + "description": "Limits the number of http.Handler ServeHTTP goroutines which may run at a time over all connections. Negative or zero no limit." + }, + "max_concurrent_streams": { + "type": "integer", + "description": "The number of concurrent streams that each client may have open at a time." + }, + "max_decoder_header_table_size": { + "type": "integer", + "description": "Informs the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets. If zero, the default value of 4096 is used." + }, + "max_encoder_header_table_size": { + "type": "integer", + "description": "An upper limit for the header compression table used for encoding request headers." + }, + "max_read_frame_size": { + "type": "integer", + "description": "The largest frame this server is willing to read." + }, + "max_upload_buffer_per_connection": { + "type": "integer", + "description": "The size of the initial flow control window for each connections." + }, + "max_upload_buffer_per_stream": { + "type": "integer", + "description": "The size of the initial flow control window for each streams." + }, + "permit_prohibited_cipher_suites": { + "type": "boolean", + "description": "if true, permits the use of cipher suites prohibited by the HTTP/2 spec." + } + } + }, + "idle_timeout": { + "type": "string", + "description": "REST server idle timeout" + }, + "read_header_timeout": { + "type": "string", + "description": "REST server read header timeout" + }, + "read_timeout": { + "type": "string", + "description": "REST server read timeout" + }, + "shutdown_duration": { + "type": "string", + "description": "REST server shutdown duration" + }, + "write_timeout": { + "type": "string", + "description": "REST server write timeout" + } + } + }, + "mode": { + "type": "string", + "description": "REST server server mode" + }, + "network": { + "type": "string", + "description": "network mode", + "enum": [ + "tcp", + "tcp4", + "tcp6", + "udp", + "udp4", + "udp6", + "unix", + "unixgram", + "unixpacket" + ] + }, + "probe_wait_time": { + "type": "string", + "description": "REST server probe wait time" + }, + "restart": { "type": "boolean" }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "socket_path": { + "type": "string", + "description": "network socket_path" + } + } + }, + "servicePort": { + "type": "integer", + "description": "liveness server service port", + "maximum": 65535, + "minimum": 0 + } + } + }, + "readiness": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "readiness server enabled" + }, + "host": { + "type": "string", + "description": "readiness server host" + }, + "port": { + "type": "integer", + "description": "readiness server port", + "maximum": 65535, + "minimum": 0 + }, + "readinessProbe": { + "type": "object", + "properties": { + "failureThreshold": { + "type": "integer", + "description": "readiness probe failure threshold" + }, + "httpGet": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "readiness probe path" + }, + "port": { + "type": "string", + "description": "readiness probe port" + }, + "scheme": { + "type": "string", + "description": "readiness probe scheme" + } + } + }, + "initialDelaySeconds": { + "type": "integer", + "description": "readiness probe initial delay seconds" + }, + "periodSeconds": { + "type": "integer", + "description": "readiness probe period seconds" + }, + "successThreshold": { + "type": "integer", + "description": "readiness probe success threshold" + }, + "timeoutSeconds": { + "type": "integer", + "description": "readiness probe timeout seconds" + } + } + }, + "server": { + "type": "object", + "properties": { + "http": { + "type": "object", + "properties": { + "handler_timeout": { + "type": "string", + "description": "REST server handler timeout" + }, + "http2": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "HTTP2 server enabled" + }, + "handler_limit": { + "type": "integer", + "description": "Limits the number of http.Handler ServeHTTP goroutines which may run at a time over all connections. Negative or zero no limit." + }, + "max_concurrent_streams": { + "type": "integer", + "description": "The number of concurrent streams that each client may have open at a time." + }, + "max_decoder_header_table_size": { + "type": "integer", + "description": "Informs the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets. If zero, the default value of 4096 is used." + }, + "max_encoder_header_table_size": { + "type": "integer", + "description": "An upper limit for the header compression table used for encoding request headers." + }, + "max_read_frame_size": { + "type": "integer", + "description": "The largest frame this server is willing to read." + }, + "max_upload_buffer_per_connection": { + "type": "integer", + "description": "The size of the initial flow control window for each connections." + }, + "max_upload_buffer_per_stream": { + "type": "integer", + "description": "The size of the initial flow control window for each streams." + }, + "permit_prohibited_cipher_suites": { + "type": "boolean", + "description": "if true, permits the use of cipher suites prohibited by the HTTP/2 spec." + } + } + }, + "idle_timeout": { + "type": "string", + "description": "REST server idle timeout" + }, + "read_header_timeout": { + "type": "string", + "description": "REST server read header timeout" + }, + "read_timeout": { + "type": "string", + "description": "REST server read timeout" + }, + "shutdown_duration": { + "type": "string", + "description": "REST server shutdown duration" + }, + "write_timeout": { + "type": "string", + "description": "REST server write timeout" + } + } + }, + "mode": { + "type": "string", + "description": "REST server server mode" + }, + "network": { + "type": "string", + "description": "network mode", + "enum": [ + "tcp", + "tcp4", + "tcp6", + "udp", + "udp4", + "udp6", + "unix", + "unixgram", + "unixpacket" + ] + }, + "probe_wait_time": { + "type": "string", + "description": "REST server probe wait time" + }, + "restart": { "type": "boolean" }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "socket_path": { + "type": "string", + "description": "network socket_path" + } + } + }, + "servicePort": { + "type": "integer", + "description": "readiness server service port", + "maximum": 65535, + "minimum": 0 + } + } + }, + "startup": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "startup server enabled" + }, + "port": { + "type": "integer", + "description": "startup server port", + "maximum": 65535, + "minimum": 0 + }, + "startupProbe": { + "type": "object", + "properties": { + "failureThreshold": { + "type": "integer", + "description": "startup probe failure threshold" + }, + "httpGet": { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "startup probe path" + }, + "port": { + "type": "string", + "description": "startup probe port" + }, + "scheme": { + "type": "string", + "description": "startup probe scheme" + } + } + }, + "initialDelaySeconds": { + "type": "integer", + "description": "startup probe initial delay seconds" + }, + "periodSeconds": { + "type": "integer", + "description": "startup probe period seconds" + }, + "successThreshold": { + "type": "integer", + "description": "startup probe success threshold" + }, + "timeoutSeconds": { + "type": "integer", + "description": "startup probe timeout seconds" + } + } + } + } + } + } + }, + "metrics": { + "type": "object", + "properties": { + "pprof": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "pprof server enabled" + }, + "host": { + "type": "string", + "description": "pprof server host" + }, + "port": { + "type": "integer", + "description": "pprof server port", + "maximum": 65535, + "minimum": 0 + }, + "server": { + "type": "object", + "properties": { + "http": { + "type": "object", + "properties": { + "handler_timeout": { + "type": "string", + "description": "REST server handler timeout" + }, + "http2": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "HTTP2 server enabled" + }, + "handler_limit": { + "type": "integer", + "description": "Limits the number of http.Handler ServeHTTP goroutines which may run at a time over all connections. Negative or zero no limit." + }, + "max_concurrent_streams": { + "type": "integer", + "description": "The number of concurrent streams that each client may have open at a time." + }, + "max_decoder_header_table_size": { + "type": "integer", + "description": "Informs the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets. If zero, the default value of 4096 is used." + }, + "max_encoder_header_table_size": { + "type": "integer", + "description": "An upper limit for the header compression table used for encoding request headers." + }, + "max_read_frame_size": { + "type": "integer", + "description": "The largest frame this server is willing to read." + }, + "max_upload_buffer_per_connection": { + "type": "integer", + "description": "The size of the initial flow control window for each connections." + }, + "max_upload_buffer_per_stream": { + "type": "integer", + "description": "The size of the initial flow control window for each streams." + }, + "permit_prohibited_cipher_suites": { + "type": "boolean", + "description": "if true, permits the use of cipher suites prohibited by the HTTP/2 spec." + } + } + }, + "idle_timeout": { + "type": "string", + "description": "REST server idle timeout" + }, + "read_header_timeout": { + "type": "string", + "description": "REST server read header timeout" + }, + "read_timeout": { + "type": "string", + "description": "REST server read timeout" + }, + "shutdown_duration": { + "type": "string", + "description": "REST server shutdown duration" + }, + "write_timeout": { + "type": "string", + "description": "REST server write timeout" + } + } + }, + "mode": { + "type": "string", + "description": "REST server server mode" + }, + "network": { + "type": "string", + "description": "network mode", + "enum": [ + "tcp", + "tcp4", + "tcp6", + "udp", + "udp4", + "udp6", + "unix", + "unixgram", + "unixpacket" + ] + }, + "probe_wait_time": { + "type": "string", + "description": "REST server probe wait time" + }, + "restart": { "type": "boolean" }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "socket_path": { + "type": "string", + "description": "network socket_path" + } + } + }, + "servicePort": { + "type": "integer", + "description": "pprof server service port", + "maximum": 65535, + "minimum": 0 + } + } + } + } + }, + "servers": { + "type": "object", + "properties": { + "grpc": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "gRPC server enabled" + }, + "host": { + "type": "string", + "description": "gRPC server host" + }, + "port": { + "type": "integer", + "description": "gRPC server port", + "maximum": 65535, + "minimum": 0 + }, + "server": { + "type": "object", + "properties": { + "grpc": { + "type": "object", + "properties": { + "bidirectional_stream_concurrency": { + "type": "integer", + "description": "gRPC server bidirectional stream concurrency" + }, + "connection_timeout": { + "type": "string", + "description": "gRPC server connection timeout" + }, + "enable_admin": { + "type": "boolean", + "description": "gRPC server admin option" + }, + "enable_channelz": { + "type": "boolean", + "description": "gRPC server channelz option" + }, + "enable_reflection": { + "type": "boolean", + "description": "gRPC server reflection option" + }, + "header_table_size": { + "type": "integer", + "description": "gRPC server header table size" + }, + "initial_conn_window_size": { + "type": "integer", + "description": "gRPC server initial connection window size" + }, + "initial_window_size": { + "type": "integer", + "description": "gRPC server initial window size" + }, + "interceptors": { + "type": "array", + "description": "gRPC server interceptors", + "items": { + "type": "string", + "enum": [ + "RecoverInterceptor", + "AccessLogInterceptor", + "TraceInterceptor", + "MetricInterceptor" + ] + } + }, + "keepalive": { + "type": "object", + "properties": { + "max_conn_age": { + "type": "string", + "description": "gRPC server keep alive max connection age" + }, + "max_conn_age_grace": { + "type": "string", + "description": "gRPC server keep alive max connection age grace" + }, + "max_conn_idle": { + "type": "string", + "description": "gRPC server keep alive max connection idle" + }, + "min_time": { + "type": "string", + "description": "gRPC server keep alive min_time" + }, + "permit_without_stream": { + "type": "boolean", + "description": "gRPC server keep alive permit_without_stream" + }, + "time": { + "type": "string", + "description": "gRPC server keep alive time" + }, + "timeout": { + "type": "string", + "description": "gRPC server keep alive timeout" + } + } + }, + "max_concurrent_streams": { + "type": "integer", + "description": "gRPC server max concurrent stream size" + }, + "max_header_list_size": { + "type": "integer", + "description": "gRPC server max header list size" + }, + "max_receive_message_size": { + "type": "integer", + "description": "gRPC server max receive message size" + }, + "max_send_message_size": { + "type": "integer", + "description": "gRPC server max send message size" + }, + "num_stream_workers": { + "type": "integer", + "description": "gRPC server number of stream workers" + }, + "read_buffer_size": { + "type": "integer", + "description": "gRPC server read buffer size" + }, + "shared_write_buffer": { + "type": "boolean", + "description": "gRPC server write buffer sharing option" + }, + "wait_for_handlers": { + "type": "boolean", + "description": "gRPC server wait for handlers when stop" + }, + "write_buffer_size": { + "type": "integer", + "description": "gRPC server write buffer size" + } + } + }, + "mode": { + "type": "string", + "description": "gRPC server server mode" + }, + "network": { + "type": "string", + "description": "network mode", + "enum": [ + "tcp", + "tcp4", + "tcp6", + "udp", + "udp4", + "udp6", + "unix", + "unixgram", + "unixpacket" + ] + }, + "probe_wait_time": { + "type": "string", + "description": "gRPC server probe wait time" + }, + "restart": { + "type": "boolean", + "description": "This configuration enables automatic restart of the same configured server when it becomes unhealthy." + }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "socket_path": { + "type": "string", + "description": "server socket_path" + } + } + }, + "servicePort": { + "type": "integer", + "description": "gRPC server service port", + "maximum": 65535, + "minimum": 0 + } + } + }, + "rest": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "REST server enabled" + }, + "host": { + "type": "string", + "description": "REST server host" + }, + "port": { + "type": "integer", + "description": "REST server port", + "maximum": 65535, + "minimum": 0 + }, + "server": { + "type": "object", + "properties": { + "http": { + "type": "object", + "properties": { + "handler_timeout": { + "type": "string", + "description": "REST server handler timeout" + }, + "http2": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "HTTP2 server enabled" + }, + "handler_limit": { + "type": "integer", + "description": "Limits the number of http.Handler ServeHTTP goroutines which may run at a time over all connections. Negative or zero no limit." + }, + "max_concurrent_streams": { + "type": "integer", + "description": "The number of concurrent streams that each client may have open at a time." + }, + "max_decoder_header_table_size": { + "type": "integer", + "description": "Informs the remote endpoint of the maximum size of the header compression table used to decode header blocks, in octets. If zero, the default value of 4096 is used." + }, + "max_encoder_header_table_size": { + "type": "integer", + "description": "An upper limit for the header compression table used for encoding request headers." + }, + "max_read_frame_size": { + "type": "integer", + "description": "The largest frame this server is willing to read." + }, + "max_upload_buffer_per_connection": { + "type": "integer", + "description": "The size of the initial flow control window for each connections." + }, + "max_upload_buffer_per_stream": { + "type": "integer", + "description": "The size of the initial flow control window for each streams." + }, + "permit_prohibited_cipher_suites": { + "type": "boolean", + "description": "if true, permits the use of cipher suites prohibited by the HTTP/2 spec." + } + } + }, + "idle_timeout": { + "type": "string", + "description": "REST server idle timeout" + }, + "read_header_timeout": { + "type": "string", + "description": "REST server read header timeout" + }, + "read_timeout": { + "type": "string", + "description": "REST server read timeout" + }, + "shutdown_duration": { + "type": "string", + "description": "REST server shutdown duration" + }, + "write_timeout": { + "type": "string", + "description": "REST server write timeout" + } + } + }, + "mode": { + "type": "string", + "description": "REST server server mode" + }, + "network": { + "type": "string", + "description": "network mode", + "enum": [ + "tcp", + "tcp4", + "tcp6", + "udp", + "udp4", + "udp6", + "unix", + "unixgram", + "unixpacket" + ] + }, + "probe_wait_time": { + "type": "string", + "description": "REST server probe wait time" + }, + "restart": { "type": "boolean" }, + "socket_option": { + "type": "object", + "properties": { + "ip_recover_destination_addr": { + "type": "boolean", + "description": "server listen socket option for ip_recover_destination_addr functionality" + }, + "ip_transparent": { + "type": "boolean", + "description": "server listen socket option for ip_transparent functionality" + }, + "reuse_addr": { + "type": "boolean", + "description": "server listen socket option for reuse_addr functionality" + }, + "reuse_port": { + "type": "boolean", + "description": "server listen socket option for reuse_port functionality" + }, + "tcp_cork": { + "type": "boolean", + "description": "server listen socket option for tcp_cork functionality" + }, + "tcp_defer_accept": { + "type": "boolean", + "description": "server listen socket option for tcp_defer_accept functionality" + }, + "tcp_fast_open": { + "type": "boolean", + "description": "server listen socket option for tcp_fast_open functionality" + }, + "tcp_no_delay": { + "type": "boolean", + "description": "server listen socket option for tcp_no_delay functionality" + }, + "tcp_quick_ack": { + "type": "boolean", + "description": "server listen socket option for tcp_quick_ack functionality" + } + } + }, + "socket_path": { + "type": "string", + "description": "network socket_path" + } + } + }, + "servicePort": { + "type": "integer", + "description": "REST server service port", + "maximum": 65535, + "minimum": 0 + } + } + } + } + }, + "tls": { + "type": "object", + "properties": { + "ca": { + "type": "string", + "description": "TLS ca path" + }, + "cert": { + "type": "string", + "description": "TLS cert path" + }, + "enabled": { + "type": "boolean", + "description": "TLS enabled" + }, + "insecure_skip_verify": { + "type": "boolean", + "description": "enable/disable skip SSL certificate verification" + }, + "key": { + "type": "string", + "description": "TLS key path" + } + } + } + } + }, + "startingDeadlineSeconds": { + "type": "integer", + "description": "startingDeadlineSeconds setting for K8s completed jobs" + }, + "suspend": { + "type": "boolean", + "description": "CronJob suspend setting for index deletion" + }, + "target_addrs": { + "type": "array", + "description": "indexing target addresses", + "items": { "type": "string" } + }, + "tolerations": { + "type": "array", + "description": "tolerations", + "items": { "type": "object" } + }, + "ttlSecondsAfterFinished": { + "type": "integer", + "description": "ttl setting for K8s completed jobs" + }, + "version": { + "type": "string", + "description": "version of gateway config", + "pattern": "^v[0-9]+\\.[0-9]+\\.[0-9]$" + } + } + }, "enabled": { "type": "boolean", "description": "index manager enabled" diff --git a/charts/vald/values.yaml b/charts/vald/values.yaml index d6049c643a..2609d2e793 100644 --- a/charts/vald/values.yaml +++ b/charts/vald/values.yaml @@ -3602,6 +3602,139 @@ manager: net: dialer: keepalive: 15m #indexer fetches uncommitted index length, which includes huge payload so we need to set keepalive longer than usual + # @schema {"name": "manager.index.deleter", "type": "object"} + deleter: + # @schema {"name": "manager.index.deleter.name", "type": "string"} + # manager.index.deleter.name -- name of index deletion job + name: vald-index-deletion + # @schema {"name": "manager.index.deleter.image", "alias": "image"} + image: + # manager.index.deleter.image.repository -- image repository + repository: vdaas/vald-index-deletion + # manager.index.deleter.image.tag -- image tag (overrides defaults.image.tag) + tag: "" + # manager.index.image.pullPolicy -- image pull policy + pullPolicy: Always + # @schema {"name": "manager.index.deleter.server_config", "alias": "server_config"} + # manager.index.deleter.server_config -- server config (overrides defaults.server_config) + server_config: + servers: + rest: {} + grpc: {} + healths: + liveness: {} + readiness: {} + startup: {} + metrics: + pprof: {} + # @schema {"name": "manager.index.deleter.initContainers", "alias": "initContainers"} + # manager.index.creator.initContainers -- init containers + initContainers: + - type: wait-for + name: wait-for-agent + target: agent + image: busybox:stable + imagePullPolicy: Always + sleepDuration: 2 + - type: wait-for + name: wait-for-discoverer + target: discoverer + image: busybox:stable + imagePullPolicy: Always + sleepDuration: 2 + # @schema {"name": "manager.index.deleter.env", "alias": "env"} + # manager.index.deleter.env -- environment variables + env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + # @schema {"name": "manager.index.deleter.observability", "alias": "observability"} + # manager.index.creator.observability -- observability config (overrides defaults.observability) + observability: + otlp: + attribute: + service_name: vald-index-deletion + # @schema {"name": "manager.index.deleter.enabled", "type": "boolean"} + # manager.index.deleter.enabled -- enable index deletion CronJob + enabled: false + # @schema {"name": "manager.index.deleter.schedule", "type": "string"} + # manager.index.deleter.schedule -- CronJob schedule setting for index deletion + schedule: "* * * * *" + # @schema {"name": "manager.index.deleter.suspend", "type": "boolean"} + # manager.index.deleter.suspend -- CronJob suspend setting for index deletion + suspend: false + # @schema {"name": "manager.index.deleter.ttlSecondsAfterFinished", "type": "integer"} + # manager.index.deleter.ttlSecondsAfterFinished -- ttl setting for K8s completed jobs + ttlSecondsAfterFinished: 86400 + # @schema {"name": "manager.index.deleter.startingDeadlineSeconds", "type": "integer"} + # manager.index.deleter.startingDeadlineSeconds -- startingDeadlineSeconds setting for K8s completed jobs + startingDeadlineSeconds: 43200 + # @schema {"name": "manager.index.deleter.version", "alias": "version"} + # manager.index.deleter.version -- version of index manager config + version: v0.0.0 + # @schema {"name": "manager.index.deleter.concurrency", "type": "integer", "minimum": 1} + # manager.index.deleter.concurrency -- concurrency for indexing + concurrency: 1 + # @schema {"name": "manager.index.deleter.target_addrs", "type": "array", "items": {"type": "string"}} + # manager.index.deleter.target_addrs -- indexing target addresses + target_addrs: [] + # @schema {"name": "manager.index.deleter.index_id", "type": "string"} + # manager.index.deleter.index_id -- index id for deletion + index_id: "" + # @schema {"name": "manager.index.deleter.agent_namespace", "type": "string"} + # manager.index.deleter.agent_namespace -- namespace of agent pods to manage + agent_namespace: _MY_POD_NAMESPACE_ + # @schema {"name": "manager.index.deleter.node_name", "type": "string"} + # manager.index.deleter.node_name -- node name + node_name: "" # _MY_NODE_NAME_ + # @schema {"name": "manager.index.deleter.nodeSelector", "alias": "nodeSelector"} + # manager.index.deleter.nodeSelector -- node selector + nodeSelector: {} + # @schema {"name": "manager.index.deleter.tolerations", "alias": "tolerations"} + # manager.index.deleter.tolerations -- tolerations + tolerations: [] + # @schema {"name": "manager.index.deleter.affinity", "alias": "affinity"} + affinity: + nodeAffinity: + # manager.index.deleter.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution -- node affinity preferred scheduling terms + preferredDuringSchedulingIgnoredDuringExecution: [] + requiredDuringSchedulingIgnoredDuringExecution: + # manager.index.deleter.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms -- node affinity required node selectors + nodeSelectorTerms: [] + podAffinity: + # manager.index.deleter.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution -- pod affinity preferred scheduling terms + preferredDuringSchedulingIgnoredDuringExecution: [] + # manager.index.deleter.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution -- pod affinity required scheduling terms + requiredDuringSchedulingIgnoredDuringExecution: [] + podAntiAffinity: + # manager.index.deleter.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution -- pod anti-affinity preferred scheduling terms + preferredDuringSchedulingIgnoredDuringExecution: [] + # manager.index.deleter.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution -- pod anti-affinity required scheduling terms + requiredDuringSchedulingIgnoredDuringExecution: [] + # @schema {"name": "manager.index.deleter.discoverer", "type": "object"} + discoverer: + # @schema {"name": "manager.index.deleter.discoverer.duration", "type": "string"} + # manager.index.deleter.discoverer.duration -- refresh duration to discover + duration: 500ms + # @schema {"name": "manager.index.deleter.discoverer.client", "alias": "grpc.client"} + # manager.index.deleter.discoverer.client -- gRPC client for discoverer (overrides defaults.grpc.client) + client: {} + # @schema {"name": "manager.index.deleter.discoverer.agent_client_options", "alias": "grpc.client"} + # manager.index.deleter.discoverer.agent_client_options -- gRPC client options for agents (overrides defaults.grpc.client) + agent_client_options: + dial_option: + net: + dialer: + keepalive: 15m #indexer fetches uncommitted index length, which includes huge payload so we need to set keepalive longer than usual # @schema {"name": "manager.index.saver", "type": "object"} saver: # @schema {"name": "manager.index.saver.name", "type": "string"} diff --git a/k8s/index/job/deletion/configmap.yaml b/k8s/index/job/deletion/configmap.yaml new file mode 100644 index 0000000000..a6a57e24a2 --- /dev/null +++ b/k8s/index/job/deletion/configmap.yaml @@ -0,0 +1,416 @@ +# +# Copyright (C) 2019-2025 vdaas.org vald team +# +# 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 +# +# https://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. +# +apiVersion: v1 +kind: ConfigMap +metadata: + name: vald-index-deletion-config + labels: + app.kubernetes.io/name: vald + helm.sh/chart: vald-v1.7.16 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: release-name + app.kubernetes.io/version: v1.7.16 + app.kubernetes.io/component: vald-index-deletion +data: + config.yaml: | + --- + version: v0.0.0 + time_zone: UTC + logging: + format: raw + level: debug + logger: glg + server_config: + servers: + - name: grpc + host: 0.0.0.0 + port: 8081 + grpc: + bidirectional_stream_concurrency: 20 + connection_timeout: "" + enable_admin: true + enable_channelz: true + enable_reflection: true + header_table_size: 0 + initial_conn_window_size: 2097152 + initial_window_size: 1048576 + interceptors: + - RecoverInterceptor + keepalive: + max_conn_age: "" + max_conn_age_grace: "" + max_conn_idle: "" + min_time: 10m + permit_without_stream: false + time: 3h + timeout: 60s + max_concurrent_streams: 0 + max_header_list_size: 0 + max_receive_message_size: 0 + max_send_message_size: 0 + num_stream_workers: 0 + read_buffer_size: 0 + shared_write_buffer: false + wait_for_handlers: true + write_buffer_size: 0 + mode: GRPC + network: tcp + probe_wait_time: 3s + restart: true + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: false + tcp_defer_accept: false + tcp_fast_open: false + tcp_no_delay: false + tcp_quick_ack: false + socket_path: "" + health_check_servers: + - name: liveness + host: 0.0.0.0 + port: 3000 + http: + handler_timeout: "" + http2: + enabled: false + handler_limit: 0 + max_concurrent_streams: 0 + max_decoder_header_table_size: 4096 + max_encoder_header_table_size: 4096 + max_read_frame_size: 0 + max_upload_buffer_per_connection: 0 + max_upload_buffer_per_stream: 0 + permit_prohibited_cipher_suites: true + idle_timeout: "" + read_header_timeout: "" + read_timeout: "" + shutdown_duration: 5s + write_timeout: "" + mode: REST + network: tcp + probe_wait_time: 3s + restart: true + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: false + tcp_defer_accept: false + tcp_fast_open: true + tcp_no_delay: true + tcp_quick_ack: true + socket_path: "" + - name: readiness + host: 0.0.0.0 + port: 3001 + http: + handler_timeout: "" + http2: + enabled: false + handler_limit: 0 + max_concurrent_streams: 0 + max_decoder_header_table_size: 4096 + max_encoder_header_table_size: 4096 + max_read_frame_size: 0 + max_upload_buffer_per_connection: 0 + max_upload_buffer_per_stream: 0 + permit_prohibited_cipher_suites: true + idle_timeout: "" + read_header_timeout: "" + read_timeout: "" + shutdown_duration: 0s + write_timeout: "" + mode: REST + network: tcp + probe_wait_time: 3s + restart: true + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: false + tcp_defer_accept: false + tcp_fast_open: true + tcp_no_delay: true + tcp_quick_ack: true + socket_path: "" + metrics_servers: + - name: pprof + host: 0.0.0.0 + port: 6060 + http: + handler_timeout: 5s + http2: + enabled: false + handler_limit: 0 + max_concurrent_streams: 0 + max_decoder_header_table_size: 4096 + max_encoder_header_table_size: 4096 + max_read_frame_size: 0 + max_upload_buffer_per_connection: 0 + max_upload_buffer_per_stream: 0 + permit_prohibited_cipher_suites: true + idle_timeout: 2s + read_header_timeout: 1s + read_timeout: 1s + shutdown_duration: 5s + write_timeout: 1m + mode: REST + network: tcp + probe_wait_time: 3s + restart: true + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: true + tcp_defer_accept: false + tcp_fast_open: false + tcp_no_delay: false + tcp_quick_ack: false + socket_path: "" + startup_strategy: + - liveness + - pprof + - grpc + - readiness + shutdown_strategy: + - readiness + - grpc + - pprof + - liveness + full_shutdown_duration: 600s + tls: + ca: /path/to/ca + cert: /path/to/cert + enabled: false + insecure_skip_verify: false + key: /path/to/key + observability: + enabled: false + otlp: + collector_endpoint: "" + trace_batch_timeout: "1s" + trace_export_timeout: "1m" + trace_max_export_batch_size: 1024 + trace_max_queue_size: 256 + metrics_export_interval: "1s" + metrics_export_timeout: "1m" + attribute: + namespace: "_MY_POD_NAMESPACE_" + pod_name: "_MY_POD_NAME_" + node_name: "_MY_NODE_NAME_" + service_name: "vald-index-deletion" + metrics: + enable_cgo: true + enable_goroutine: true + enable_memory: true + enable_version_info: true + version_info_labels: + - vald_version + - server_name + - git_commit + - build_time + - go_version + - go_os + - go_arch + - algorithm_info + trace: + enabled: false + deleter: + index_id: "" + agent_port: 8081 + agent_name: "vald-agent" + agent_dns: vald-agent.default.svc.cluster.local + agent_namespace: "_MY_POD_NAMESPACE_" + node_name: "" + concurrency: 1 + target_addrs: [] + discoverer: + duration: 500ms + client: + addrs: + - vald-discoverer.default.svc.cluster.local:8081 + health_check_duration: "1s" + connection_pool: + enable_dns_resolver: true + enable_rebalance: true + old_conn_close_duration: 2m + rebalance_duration: 30m + size: 3 + backoff: + backoff_factor: 1.1 + backoff_time_limit: 5s + enable_error_log: true + initial_duration: 5ms + jitter_limit: 100ms + maximum_duration: 5s + retry_count: 100 + circuit_breaker: + closed_error_rate: 0.7 + closed_refresh_timeout: 10s + half_open_error_rate: 0.5 + min_samples: 1000 + open_timeout: 1s + call_option: + content_subtype: "" + max_recv_msg_size: 0 + max_retry_rpc_buffer_size: 0 + max_send_msg_size: 0 + wait_for_ready: true + dial_option: + authority: "" + backoff_base_delay: 1s + backoff_jitter: 0.2 + backoff_max_delay: 120s + backoff_multiplier: 1.6 + disable_retry: false + enable_backoff: false + idle_timeout: 1h + initial_connection_window_size: 2097152 + initial_window_size: 1048576 + insecure: true + interceptors: [] + keepalive: + permit_without_stream: false + time: "" + timeout: 30s + max_call_attempts: 0 + max_header_list_size: 0 + max_msg_size: 0 + min_connection_timeout: 20s + net: + dialer: + dual_stack_enabled: true + keepalive: "" + timeout: "" + dns: + cache_enabled: true + cache_expiration: 1h + refresh_duration: 30m + network: tcp + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: false + tcp_defer_accept: false + tcp_fast_open: false + tcp_no_delay: false + tcp_quick_ack: false + tls: + ca: /path/to/ca + cert: /path/to/cert + enabled: false + insecure_skip_verify: false + key: /path/to/key + read_buffer_size: 0 + shared_write_buffer: false + timeout: "" + user_agent: Vald-gRPC + write_buffer_size: 0 + tls: + ca: /path/to/ca + cert: /path/to/cert + enabled: false + insecure_skip_verify: false + key: /path/to/key + agent_client_options: + addrs: [] + health_check_duration: "1s" + connection_pool: + enable_dns_resolver: true + enable_rebalance: true + old_conn_close_duration: 2m + rebalance_duration: 30m + size: 3 + backoff: + backoff_factor: 1.1 + backoff_time_limit: 5s + enable_error_log: true + initial_duration: 5ms + jitter_limit: 100ms + maximum_duration: 5s + retry_count: 100 + circuit_breaker: + closed_error_rate: 0.7 + closed_refresh_timeout: 10s + half_open_error_rate: 0.5 + min_samples: 1000 + open_timeout: 1s + call_option: + content_subtype: "" + max_recv_msg_size: 0 + max_retry_rpc_buffer_size: 0 + max_send_msg_size: 0 + wait_for_ready: true + dial_option: + write_buffer_size: 0 + read_buffer_size: 0 + initial_window_size: 1.048576e+06 + initial_connection_window_size: 2.097152e+06 + max_msg_size: 0 + backoff_max_delay: "120s" + backoff_base_delay: "1s" + backoff_multiplier: 1.6 + backoff_jitter: 0.2 + min_connection_timeout: "20s" + enable_backoff: false + insecure: true + timeout: "" + interceptors: [] + net: + dns: + cache_enabled: true + cache_expiration: 1h + refresh_duration: 30m + dialer: + timeout: "" + keepalive: "15m" + dual_stack_enabled: true + tls: + ca: /path/to/ca + cert: /path/to/cert + enabled: false + insecure_skip_verify: false + key: /path/to/key + socket_option: + ip_recover_destination_addr: false + ip_transparent: false + reuse_addr: true + reuse_port: true + tcp_cork: false + tcp_defer_accept: false + tcp_fast_open: false + tcp_no_delay: false + tcp_quick_ack: false + keepalive: + permit_without_stream: false + time: "" + timeout: 30s + tls: + ca: /path/to/ca + cert: /path/to/cert + enabled: false + insecure_skip_verify: false + key: /path/to/key diff --git a/k8s/index/job/deletion/cronjob.yaml b/k8s/index/job/deletion/cronjob.yaml new file mode 100644 index 0000000000..3f0647ccb8 --- /dev/null +++ b/k8s/index/job/deletion/cronjob.yaml @@ -0,0 +1,155 @@ +# +# Copyright (C) 2019-2025 vdaas.org vald team +# +# 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 +# +# https://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. +# +apiVersion: batch/v1 +kind: CronJob +metadata: + name: vald-index-deletion + labels: + app: vald-index-deletion + app.kubernetes.io/name: vald + helm.sh/chart: vald-v1.7.16 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: release-name + app.kubernetes.io/component: vald-index-deletion + app.kubernetes.io/version: v1.7.16 +spec: + schedule: "* * * * *" + concurrencyPolicy: Forbid + suspend: false + startingDeadlineSeconds: 43200 + jobTemplate: + spec: + ttlSecondsAfterFinished: 86400 + template: + metadata: + labels: + app: vald-index-deletion + app.kubernetes.io/name: vald + helm.sh/chart: vald-v1.7.16 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/instance: release-name + app.kubernetes.io/component: vald-index-deletion + app.kubernetes.io/version: v1.7.16 + annotations: + pyroscope.io/scrape: "true" + pyroscope.io/application-name: vald-index-deletion + pyroscope.io/profile-cpu-enabled: "true" + pyroscope.io/profile-mem-enabled: "true" + pyroscope.io/port: "6060" + spec: + initContainers: + - name: wait-for-agent + image: busybox:stable + imagePullPolicy: Always + command: + - /bin/sh + - -e + - -c + - | + until [ "$(wget --server-response --spider --quiet http://vald-agent.default.svc.cluster.local:3001/readiness 2>&1 | awk 'NR==1{print $2}')" == "200" ]; do + echo "waiting for agent to be ready..." + sleep 2; + done + - name: wait-for-discoverer + image: busybox:stable + imagePullPolicy: Always + command: + - /bin/sh + - -e + - -c + - | + until [ "$(wget --server-response --spider --quiet http://vald-discoverer.default.svc.cluster.local:3001/readiness 2>&1 | awk 'NR==1{print $2}')" == "200" ]; do + echo "waiting for discoverer to be ready..." + sleep 2; + done + affinity: + nodeAffinity: + preferredDuringSchedulingIgnoredDuringExecution: [] + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: [] + requiredDuringSchedulingIgnoredDuringExecution: [] + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: [] + requiredDuringSchedulingIgnoredDuringExecution: [] + containers: + - name: vald-index-deletion + image: "vdaas/vald-index-deletion:nightly" + imagePullPolicy: Always + volumeMounts: + - name: vald-index-deletion-config + mountPath: /etc/server/ + livenessProbe: + failureThreshold: 2 + httpGet: + path: /liveness + port: liveness + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 3 + successThreshold: 1 + timeoutSeconds: 2 + readinessProbe: + failureThreshold: 2 + httpGet: + path: /readiness + port: readiness + scheme: HTTP + initialDelaySeconds: 10 + periodSeconds: 3 + successThreshold: 1 + timeoutSeconds: 2 + startupProbe: + failureThreshold: 30 + httpGet: + path: /liveness + port: liveness + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 2 + ports: + - name: liveness + protocol: TCP + containerPort: 3000 + - name: readiness + protocol: TCP + containerPort: 3001 + - name: grpc + protocol: TCP + containerPort: 8081 + - name: pprof + protocol: TCP + containerPort: 6060 + env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + restartPolicy: OnFailure + volumes: + - name: vald-index-deletion-config + configMap: + defaultMode: 420 + name: vald-index-deletion-config diff --git a/k8s/operator/helm/crds/valdrelease.yaml b/k8s/operator/helm/crds/valdrelease.yaml index 58b6811818..292aecb4ae 100644 --- a/k8s/operator/helm/crds/valdrelease.yaml +++ b/k8s/operator/helm/crds/valdrelease.yaml @@ -10956,6 +10956,1182 @@ spec: pattern: ^v[0-9]+\.[0-9]+\.[0-9]$ type: string type: object + deleter: + properties: + affinity: + properties: + nodeAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + properties: + nodeSelectorTerms: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + podAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + podAntiAffinity: + properties: + preferredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + requiredDuringSchedulingIgnoredDuringExecution: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + type: object + type: object + agent_namespace: + type: string + concurrency: + minimum: 1 + type: integer + discoverer: + properties: + agent_client_options: + properties: + addrs: + items: + type: string + type: array + backoff: + properties: + backoff_factor: + type: number + backoff_time_limit: + type: string + enable_error_log: + type: boolean + initial_duration: + type: string + jitter_limit: + type: string + maximum_duration: + type: string + retry_count: + type: integer + type: object + call_option: + type: object + x-kubernetes-preserve-unknown-fields: true + circuit_breaker: + properties: + closed_error_rate: + type: number + closed_refresh_timeout: + type: string + half_open_error_rate: + type: number + min_samples: + type: integer + open_timeout: + type: string + type: object + connection_pool: + properties: + enable_dns_resolver: + type: boolean + enable_rebalance: + type: boolean + old_conn_close_duration: + type: string + rebalance_duration: + type: string + size: + type: integer + type: object + content_subtype: + type: string + dial_option: + properties: + authority: + type: string + backoff_base_delay: + type: string + backoff_jitter: + type: number + backoff_max_delay: + type: string + backoff_multiplier: + type: number + disable_retry: + type: boolean + enable_backoff: + type: boolean + idle_timeout: + type: string + initial_connection_window_size: + type: integer + initial_window_size: + type: integer + insecure: + type: boolean + interceptors: + items: + enum: + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_call_attempts: + type: integer + max_header_list_size: + type: integer + max_msg_size: + type: integer + min_connection_timeout: + type: string + net: + properties: + dialer: + properties: + dual_stack_enabled: + type: boolean + keepalive: + type: string + timeout: + type: string + type: object + dns: + properties: + cache_enabled: + type: boolean + cache_expiration: + type: string + refresh_duration: + type: string + type: object + network: + enum: + - tcp + - udp + - unix + type: string + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + timeout: + type: string + user_agent: + type: string + write_buffer_size: + type: integer + type: object + health_check_duration: + type: string + max_recv_msg_size: + type: integer + max_retry_rpc_buffer_size: + type: integer + max_send_msg_size: + type: integer + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + wait_for_ready: + type: boolean + type: object + client: + properties: + addrs: + items: + type: string + type: array + backoff: + properties: + backoff_factor: + type: number + backoff_time_limit: + type: string + enable_error_log: + type: boolean + initial_duration: + type: string + jitter_limit: + type: string + maximum_duration: + type: string + retry_count: + type: integer + type: object + call_option: + type: object + x-kubernetes-preserve-unknown-fields: true + circuit_breaker: + properties: + closed_error_rate: + type: number + closed_refresh_timeout: + type: string + half_open_error_rate: + type: number + min_samples: + type: integer + open_timeout: + type: string + type: object + connection_pool: + properties: + enable_dns_resolver: + type: boolean + enable_rebalance: + type: boolean + old_conn_close_duration: + type: string + rebalance_duration: + type: string + size: + type: integer + type: object + content_subtype: + type: string + dial_option: + properties: + authority: + type: string + backoff_base_delay: + type: string + backoff_jitter: + type: number + backoff_max_delay: + type: string + backoff_multiplier: + type: number + disable_retry: + type: boolean + enable_backoff: + type: boolean + idle_timeout: + type: string + initial_connection_window_size: + type: integer + initial_window_size: + type: integer + insecure: + type: boolean + interceptors: + items: + enum: + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_call_attempts: + type: integer + max_header_list_size: + type: integer + max_msg_size: + type: integer + min_connection_timeout: + type: string + net: + properties: + dialer: + properties: + dual_stack_enabled: + type: boolean + keepalive: + type: string + timeout: + type: string + type: object + dns: + properties: + cache_enabled: + type: boolean + cache_expiration: + type: string + refresh_duration: + type: string + type: object + network: + enum: + - tcp + - udp + - unix + type: string + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + timeout: + type: string + user_agent: + type: string + write_buffer_size: + type: integer + type: object + health_check_duration: + type: string + max_recv_msg_size: + type: integer + max_retry_rpc_buffer_size: + type: integer + max_send_msg_size: + type: integer + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + wait_for_ready: + type: boolean + type: object + duration: + type: string + type: object + enabled: + type: boolean + env: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + image: + properties: + pullPolicy: + enum: + - Always + - Never + - IfNotPresent + type: string + repository: + type: string + tag: + type: string + type: object + index_id: + type: string + initContainers: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + name: + type: string + node_name: + type: string + nodeSelector: + type: object + x-kubernetes-preserve-unknown-fields: true + observability: + properties: + enabled: + type: boolean + metrics: + properties: + enable_cgo: + type: boolean + enable_goroutine: + type: boolean + enable_memory: + type: boolean + enable_version_info: + type: boolean + version_info_labels: + items: + enum: + - vald_version + - server_name + - git_commit + - build_time + - go_version + - go_os + - go_arch + - cgo_enabled + - algorithm_info + - build_cpu_info_flags + type: string + type: array + type: object + otlp: + properties: + attribute: + properties: + namespace: + type: string + node_name: + type: string + pod_name: + type: string + service_name: + type: string + type: object + collector_endpoint: + type: string + metrics_export_interval: + type: string + metrics_export_timeout: + type: string + trace_batch_timeout: + type: string + trace_export_timeout: + type: string + trace_max_export_batch_size: + type: integer + trace_max_queue_size: + type: integer + type: object + trace: + properties: + enabled: + type: boolean + type: object + type: object + schedule: + type: string + server_config: + properties: + full_shutdown_duration: + type: string + healths: + properties: + liveness: + properties: + enabled: + type: boolean + host: + type: string + livenessProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + readiness: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + readinessProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + startup: + properties: + enabled: + type: boolean + port: + maximum: 65535 + minimum: 0 + type: integer + startupProbe: + properties: + failureThreshold: + type: integer + httpGet: + properties: + path: + type: string + port: + type: string + scheme: + type: string + type: object + initialDelaySeconds: + type: integer + periodSeconds: + type: integer + successThreshold: + type: integer + timeoutSeconds: + type: integer + type: object + type: object + type: object + metrics: + properties: + pprof: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + type: object + servers: + properties: + grpc: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + grpc: + properties: + bidirectional_stream_concurrency: + type: integer + connection_timeout: + type: string + enable_admin: + type: boolean + enable_channelz: + type: boolean + enable_reflection: + type: boolean + header_table_size: + type: integer + initial_conn_window_size: + type: integer + initial_window_size: + type: integer + interceptors: + items: + enum: + - RecoverInterceptor + - AccessLogInterceptor + - TraceInterceptor + - MetricInterceptor + type: string + type: array + keepalive: + properties: + max_conn_age: + type: string + max_conn_age_grace: + type: string + max_conn_idle: + type: string + min_time: + type: string + permit_without_stream: + type: boolean + time: + type: string + timeout: + type: string + type: object + max_concurrent_streams: + type: integer + max_header_list_size: + type: integer + max_receive_message_size: + type: integer + max_send_message_size: + type: integer + num_stream_workers: + type: integer + read_buffer_size: + type: integer + shared_write_buffer: + type: boolean + wait_for_handlers: + type: boolean + write_buffer_size: + type: integer + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + rest: + properties: + enabled: + type: boolean + host: + type: string + port: + maximum: 65535 + minimum: 0 + type: integer + server: + properties: + http: + properties: + handler_timeout: + type: string + http2: + properties: + enabled: + type: boolean + handler_limit: + type: integer + max_concurrent_streams: + type: integer + max_decoder_header_table_size: + type: integer + max_encoder_header_table_size: + type: integer + max_read_frame_size: + type: integer + max_upload_buffer_per_connection: + type: integer + max_upload_buffer_per_stream: + type: integer + permit_prohibited_cipher_suites: + type: boolean + type: object + idle_timeout: + type: string + read_header_timeout: + type: string + read_timeout: + type: string + shutdown_duration: + type: string + write_timeout: + type: string + type: object + mode: + type: string + network: + enum: + - tcp + - tcp4 + - tcp6 + - udp + - udp4 + - udp6 + - unix + - unixgram + - unixpacket + type: string + probe_wait_time: + type: string + restart: + type: boolean + socket_option: + properties: + ip_recover_destination_addr: + type: boolean + ip_transparent: + type: boolean + reuse_addr: + type: boolean + reuse_port: + type: boolean + tcp_cork: + type: boolean + tcp_defer_accept: + type: boolean + tcp_fast_open: + type: boolean + tcp_no_delay: + type: boolean + tcp_quick_ack: + type: boolean + type: object + socket_path: + type: string + type: object + servicePort: + maximum: 65535 + minimum: 0 + type: integer + type: object + type: object + tls: + properties: + ca: + type: string + cert: + type: string + enabled: + type: boolean + insecure_skip_verify: + type: boolean + key: + type: string + type: object + type: object + startingDeadlineSeconds: + type: integer + suspend: + type: boolean + target_addrs: + items: + type: string + type: array + tolerations: + items: + type: object + x-kubernetes-preserve-unknown-fields: true + type: array + ttlSecondsAfterFinished: + type: integer + version: + pattern: ^v[0-9]+\.[0-9]+\.[0-9]$ + type: string + type: object enabled: type: boolean env: