From 236e44ff42741f7d157bc3c0b8716d595ada19e9 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Wed, 16 Aug 2023 11:42:27 -0400 Subject: [PATCH 1/7] update port --- kartographer/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kartographer/docker-compose.yaml b/kartographer/docker-compose.yaml index 976358cac46..031dc9dc6c1 100644 --- a/kartographer/docker-compose.yaml +++ b/kartographer/docker-compose.yaml @@ -17,7 +17,7 @@ services: image: mongo-express restart: always ports: - - 8081:8081 + - 8088:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: example From 15bcd39144af697b4e69a3e262a5e0e96ee71a48 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Wed, 16 Aug 2023 12:38:09 -0400 Subject: [PATCH 2/7] use configs from the git repo --- sieve.py | 65 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/sieve.py b/sieve.py index bc53593a39a..ddc3b2ebcea 100644 --- a/sieve.py +++ b/sieve.py @@ -121,7 +121,40 @@ def create_configmap(test_plan): return configmap_path -def create_kind_config(num_apiservers, num_workers): +def write_audit_config(conf_file): + conf_file.write(""" + extraMounts: + - hostPath: /etc/kubernetes/sieve-audit-policy.yaml + containerPath: /etc/kubernetes/audit-policy.yaml + - hostPath: /etc/kubernetes/audit-webhook-config.yaml + containerPath: /etc/kubernetes/audit-webhook-config.yaml + - hostPath: /var/log/apiserver + containerPath: /var/log/apiserver + kubeadmConfigPatches: + - | + kind: ClusterConfiguration + apiServer: + extraArgs: + audit-policy-file: /etc/kubernetes/audit-policy.yaml + audit-webhook-config-file: /etc/kubernetes/audit-webhook-config.yaml + extraVolumes: + - name: audit-policy + hostPath: /etc/kubernetes/audit-policy.yaml + mountPath: /etc/kubernetes/audit-policy.yaml + readOnly: true + - name: audit-webhook-config + hostPath: /etc/kubernetes/audit-webhook-config.yaml + mountPath: /etc/kubernetes/audit-webhook-config.yaml + readOnly: true + - name: audit-log + hostPath: /var/log/apiserver + mountPath: /var/log/apiserver + readOnly: false + """ + ) + + +def create_kind_config(num_apiservers, num_workers, audit=False): kind_config_dir = "kind_configs" os.makedirs(kind_config_dir, exist_ok=True) kind_config_filename = os.path.join( @@ -131,27 +164,30 @@ def create_kind_config(num_apiservers, num_workers): str(num_workers), ), ) + audit_config_path = os.getcwd() with open(kind_config_filename, "w") as kind_config_file: kind_config_file.writelines( ["kind: Cluster\n", "apiVersion: kind.x-k8s.io/v1alpha4\n", "nodes:\n"] ) for i in range(num_apiservers): kind_config_file.write("- role: control-plane\n") + # get the necessary audit yaml files from the local machine into the kind containers kind_config_file.write(" extraMounts:\n") # Mount to Control Plane Kind Node - kind_config_file.write(" - hostPath: /etc/kubernetes/sieve-audit-policy.yaml\n") + kind_config_file.write(f" - hostPath: {audit_config_path}/sieve-audit-policy.yaml\n") kind_config_file.write(" containerPath: /etc/kubernetes/audit-policy.yaml\n") - kind_config_file.write(" - hostPath: /etc/kubernetes/audit-webhook-config.yaml\n") + kind_config_file.write(f" - hostPath: {audit_config_path}/audit-webhook-config.yaml\n") kind_config_file.write(" containerPath: /etc/kubernetes/audit-webhook-config.yaml\n") - kind_config_file.write(" - hostPath: /var/log/apiserver\n") - kind_config_file.write(" containerPath: /var/log/apiserver\n") + + # kind_config_file.write(" - hostPath: /var/log/apiserver\n") + # kind_config_file.write(" containerPath: /var/log/apiserver\n") + # # set up audit configuration kind_config_file.write(" kubeadmConfigPatches:\n") kind_config_file.write(" - |\n") kind_config_file.write(" kind: ClusterConfiguration\n") kind_config_file.write(" apiServer:\n") - kind_config_file.write(" extraArgs:\n") - kind_config_file.write(" audit-policy-file: /etc/kubernetes/audit-policy.yaml\n") - kind_config_file.write(" audit-webhook-config-file: /etc/kubernetes/audit-webhook-config.yaml\n") # kind_config_file.write(" audit-log-path: /var/log/apiserver/audit.log\n") + + # mount volumes from the kind containers to the kubernetes pods kind_config_file.write(" extraVolumes:\n") # Mount to API Server pods kind_config_file.write(" - name: audit-policy\n") kind_config_file.write(" hostPath: /etc/kubernetes/audit-policy.yaml\n") @@ -161,10 +197,15 @@ def create_kind_config(num_apiservers, num_workers): kind_config_file.write(" hostPath: /etc/kubernetes/audit-webhook-config.yaml\n") kind_config_file.write(" mountPath: /etc/kubernetes/audit-webhook-config.yaml\n") kind_config_file.write(" readOnly: true\n") - kind_config_file.write(" - name: audit-log\n") - kind_config_file.write(" hostPath: /var/log/apiserver\n") - kind_config_file.write(" mountPath: /var/log/apiserver\n") - kind_config_file.write(" readOnly: false\n") + + # pass the mounted configs in as args to the API Server + kind_config_file.write(" extraArgs:\n") + kind_config_file.write(" audit-policy-file: /etc/kubernetes/audit-policy.yaml\n") + kind_config_file.write(" audit-webhook-config-file: /etc/kubernetes/audit-webhook-config.yaml\n") + # kind_config_file.write(" - name: audit-log\n") + # kind_config_file.write(" hostPath: /var/log/apiserver\n") + # kind_config_file.write(" mountPath: /var/log/apiserver\n") + # kind_config_file.write(" readOnly: false\n") for i in range(num_workers): From 0819aa0145567804ac7cacfa50822ed844aa598e Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Thu, 17 Aug 2023 09:18:33 -0400 Subject: [PATCH 3/7] fix audit logfile configs --- sieve.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/sieve.py b/sieve.py index ddc3b2ebcea..49262e0ec25 100644 --- a/sieve.py +++ b/sieve.py @@ -178,14 +178,13 @@ def create_kind_config(num_apiservers, num_workers, audit=False): kind_config_file.write(f" - hostPath: {audit_config_path}/audit-webhook-config.yaml\n") kind_config_file.write(" containerPath: /etc/kubernetes/audit-webhook-config.yaml\n") - # kind_config_file.write(" - hostPath: /var/log/apiserver\n") - # kind_config_file.write(" containerPath: /var/log/apiserver\n") + kind_config_file.write(" - hostPath: /Users/tgoodwin/projects/sleeve/logs/\n") + kind_config_file.write(" containerPath: /var/log/apiserver/\n") # # set up audit configuration kind_config_file.write(" kubeadmConfigPatches:\n") kind_config_file.write(" - |\n") kind_config_file.write(" kind: ClusterConfiguration\n") kind_config_file.write(" apiServer:\n") - # kind_config_file.write(" audit-log-path: /var/log/apiserver/audit.log\n") # mount volumes from the kind containers to the kubernetes pods kind_config_file.write(" extraVolumes:\n") # Mount to API Server pods @@ -198,14 +197,16 @@ def create_kind_config(num_apiservers, num_workers, audit=False): kind_config_file.write(" mountPath: /etc/kubernetes/audit-webhook-config.yaml\n") kind_config_file.write(" readOnly: true\n") - # pass the mounted configs in as args to the API Server + kind_config_file.write(" - name: audit-log\n") + kind_config_file.write(" hostPath: /var/log/apiserver/\n") + kind_config_file.write(" mountPath: /var/log/apiserver/\n") + kind_config_file.write(" readOnly: false\n") + kind_config_file.write(" extraArgs:\n") kind_config_file.write(" audit-policy-file: /etc/kubernetes/audit-policy.yaml\n") kind_config_file.write(" audit-webhook-config-file: /etc/kubernetes/audit-webhook-config.yaml\n") - # kind_config_file.write(" - name: audit-log\n") - # kind_config_file.write(" hostPath: /var/log/apiserver\n") - # kind_config_file.write(" mountPath: /var/log/apiserver\n") - # kind_config_file.write(" readOnly: false\n") + kind_config_file.write(" audit-log-path: /var/log/apiserver/audit.log\n") + for i in range(num_workers): From a8f11e0bf072e349a09d98efcdf27e726dfd1741 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Thu, 17 Aug 2023 09:19:36 -0400 Subject: [PATCH 4/7] logs -> audit_logs --- .gitignore | 1 + sieve.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 94827d68c92..d1fbce4b286 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ sieve_server/learned_field_path_mask.json fakegopath/ app/ kind_configs/ +audit_logs/ deploy_script/ansible_hosts sieve_test_results/ sieve_learn_results/ diff --git a/sieve.py b/sieve.py index 49262e0ec25..d4c2d33cabf 100644 --- a/sieve.py +++ b/sieve.py @@ -178,7 +178,7 @@ def create_kind_config(num_apiservers, num_workers, audit=False): kind_config_file.write(f" - hostPath: {audit_config_path}/audit-webhook-config.yaml\n") kind_config_file.write(" containerPath: /etc/kubernetes/audit-webhook-config.yaml\n") - kind_config_file.write(" - hostPath: /Users/tgoodwin/projects/sleeve/logs/\n") + kind_config_file.write(" - hostPath: /Users/tgoodwin/projects/sleeve/audit_logs/\n") kind_config_file.write(" containerPath: /var/log/apiserver/\n") # # set up audit configuration kind_config_file.write(" kubeadmConfigPatches:\n") From 67e8288735f0f53bf7e58a166d09cc186fa4d971 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Thu, 17 Aug 2023 09:22:46 -0400 Subject: [PATCH 5/7] update readme --- kartographer/README.org | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kartographer/README.org b/kartographer/README.org index 484988db18c..20812692007 100644 --- a/kartographer/README.org +++ b/kartographer/README.org @@ -1,12 +1,14 @@ * Kartographer - Webhook HTTP Server for Kubernetes Audit Logging *** Instructions -Configure kubernetes to use a webhook for audit logging (you probably need to configure the ip address in =../audit-webhook-config=) - - -Note: Sieve is configured to use the audit webhook config located at =/etc/kubernetes/audit-webhook-config.yaml= and the audit configuration at =/etc/kubernetes/sieve-audit-policy.yaml= on your local machine. Run Docker compose to setup a mongodb server and run the webhook http server. #+BEGIN_SRC sh docker compose up -d #+END_SRC + +Configure kubernetes to use a webhook for audit logging (you probably need to configure the ip address in =../audit-webhook-config=) +TODO: verify if this is the proper IP address to be using... +``` +docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' kartographer-kartographer-1 +``` From 56fcf897332ddeabd63fc32248b302d0d4804499 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Thu, 17 Aug 2023 09:25:55 -0400 Subject: [PATCH 6/7] expose log filename as env var --- sieve.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sieve.py b/sieve.py index d4c2d33cabf..11994ef24a9 100644 --- a/sieve.py +++ b/sieve.py @@ -164,7 +164,10 @@ def create_kind_config(num_apiservers, num_workers, audit=False): str(num_workers), ), ) + audit_config_path = os.getcwd() + log_fname = os.getenv('SLEEVE_EXPERIMENT_NAME', 'audit.log') + with open(kind_config_filename, "w") as kind_config_file: kind_config_file.writelines( ["kind: Cluster\n", "apiVersion: kind.x-k8s.io/v1alpha4\n", "nodes:\n"] @@ -205,7 +208,7 @@ def create_kind_config(num_apiservers, num_workers, audit=False): kind_config_file.write(" extraArgs:\n") kind_config_file.write(" audit-policy-file: /etc/kubernetes/audit-policy.yaml\n") kind_config_file.write(" audit-webhook-config-file: /etc/kubernetes/audit-webhook-config.yaml\n") - kind_config_file.write(" audit-log-path: /var/log/apiserver/audit.log\n") + kind_config_file.write(f" audit-log-path: /var/log/apiserver/{log_fname}\n") From f31a00c0cf67825354bc35c598b8f142d2f7f830 Mon Sep 17 00:00:00 2001 From: Tim Goodwin Date: Thu, 26 Oct 2023 17:29:57 -0700 Subject: [PATCH 7/7] zookeeper-operator on v1.24.10 --- examples/zktg/build/Dockerfile | 43 + examples/zktg/build/build.sh | 4 + examples/zktg/config.json | 29 + ...ookeeper.pravega.io_zookeeperclusters.yaml | 5990 +++++++++++++++++ examples/zktg/deploy/default_ns/operator.yaml | 45 + examples/zktg/deploy/default_ns/rbac.yaml | 58 + examples/zktg/deploy/deploy.sh | 6 + .../oracle/recreate/controller_family.json | 6 + examples/zktg/oracle/recreate/event.json | 98 + examples/zktg/oracle/recreate/mask.json | 781 +++ examples/zktg/oracle/recreate/state.json | 3402 ++++++++++ .../scaledown-scaleup/controller_family.json | 6 + .../zktg/oracle/scaledown-scaleup/event.json | 106 + .../zktg/oracle/scaledown-scaleup/mask.json | 858 +++ .../zktg/oracle/scaledown-scaleup/state.json | 4214 ++++++++++++ examples/zktg/test/test.py | 35 + examples/zktg/test/zkc-1.yaml | 9 + examples/zktg/test/zkc-2.yaml | 9 + go.work.sum | 82 + 19 files changed, 15781 insertions(+) create mode 100644 examples/zktg/build/Dockerfile create mode 100755 examples/zktg/build/build.sh create mode 100644 examples/zktg/config.json create mode 100644 examples/zktg/deploy/crds/zookeeper.pravega.io_zookeeperclusters.yaml create mode 100644 examples/zktg/deploy/default_ns/operator.yaml create mode 100644 examples/zktg/deploy/default_ns/rbac.yaml create mode 100755 examples/zktg/deploy/deploy.sh create mode 100644 examples/zktg/oracle/recreate/controller_family.json create mode 100644 examples/zktg/oracle/recreate/event.json create mode 100644 examples/zktg/oracle/recreate/mask.json create mode 100644 examples/zktg/oracle/recreate/state.json create mode 100644 examples/zktg/oracle/scaledown-scaleup/controller_family.json create mode 100644 examples/zktg/oracle/scaledown-scaleup/event.json create mode 100644 examples/zktg/oracle/scaledown-scaleup/mask.json create mode 100644 examples/zktg/oracle/scaledown-scaleup/state.json create mode 100644 examples/zktg/test/test.py create mode 100644 examples/zktg/test/zkc-1.yaml create mode 100644 examples/zktg/test/zkc-2.yaml diff --git a/examples/zktg/build/Dockerfile b/examples/zktg/build/Dockerfile new file mode 100644 index 00000000000..8840f6b1b61 --- /dev/null +++ b/examples/zktg/build/Dockerfile @@ -0,0 +1,43 @@ +ARG DOCKER_REGISTRY +ARG GO_VERSION=1.20.10 +ARG ALPINE_VERSION=3.11 +# FROM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}golang:${GO_VERSION}-alpine${ALPINE_VERSION} as go-builder +FROM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}golang:${GO_VERSION} as go-builder + +ARG PROJECT_NAME=zookeeper-operator +ARG REPO_PATH=github.com/pravega/$PROJECT_NAME + +# Build version and commit should be passed in when performing docker build +ARG VERSION=0.0.0-localdev +ARG GIT_SHA=0000000 + +WORKDIR /src +COPY . ./ +# COPY pkg ./pkg +# COPY cmd ./cmd +# COPY go.mod ./ +# COPY main.go ./ +COPY sieve-dependency/ sieve-dependency/ + +RUN go mod tidy + +# Download all dependencies. +# RUN go mod download + +RUN GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -o /src/${PROJECT_NAME} \ + -ldflags "-X ${REPO_PATH}/pkg/version.Version=${VERSION} -X ${REPO_PATH}/pkg/version.GitSHA=${GIT_SHA}" \ + /src + +# ============================================================================= + +FROM ${DOCKER_REGISTRY:+$DOCKER_REGISTRY/}alpine:${ALPINE_VERSION} AS final + + +ARG PROJECT_NAME=zookeeper-operator + +COPY --from=go-builder /src/${PROJECT_NAME} /usr/local/bin/${PROJECT_NAME} + +RUN adduser -D ${PROJECT_NAME} +USER ${PROJECT_NAME} + +ENTRYPOINT ["/usr/local/bin/zookeeper-operator"] diff --git a/examples/zktg/build/build.sh b/examples/zktg/build/build.sh new file mode 100755 index 00000000000..8520c12b3f7 --- /dev/null +++ b/examples/zktg/build/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -x + +make build-image diff --git a/examples/zktg/config.json b/examples/zktg/config.json new file mode 100644 index 00000000000..22ae321d358 --- /dev/null +++ b/examples/zktg/config.json @@ -0,0 +1,29 @@ +{ + "name": "zookeeper-operator", + "github_link": "https://github.com/pravega/zookeeper-operator.git", + "commit": "daac1bdeaace91e4c6e7b712afe7415b2c24df44", + "kubernetes_version": "v1.24.10", + "client_go_version": "v0.24.1", + "dockerfile_path": "Dockerfile", + "controller_image_name": "pravega/zookeeper-operator:latest", + "test_command": "python3 examples/zookeeper-operator/test/test.py", + "custom_resource_definitions": [ + "zookeepercluster" + ], + "annotated_reconcile_functions": { + "controllers/zookeepercluster_controller.go": "github.com/pravega/zookeeper-operator/controllers/controller.(*ZookeeperClusterReconciler).Reconcile" + }, + "controller_pod_label": "zookeeper-operator", + "controller_deployment_file_path": "examples/zookeeper-operator/deploy/default_ns/operator.yaml", + "end_state_checker_mask": { + "*": { + "zookeepercluster/default/zookeeper-cluster": [ + [ + "status", + "members", + "ready" + ] + ] + } + } +} \ No newline at end of file diff --git a/examples/zktg/deploy/crds/zookeeper.pravega.io_zookeeperclusters.yaml b/examples/zktg/deploy/crds/zookeeper.pravega.io_zookeeperclusters.yaml new file mode 100644 index 00000000000..44b0d742c78 --- /dev/null +++ b/examples/zktg/deploy/crds/zookeeper.pravega.io_zookeeperclusters.yaml @@ -0,0 +1,5990 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.9.0 + creationTimestamp: null + name: zookeeperclusters.zookeeper.pravega.io +spec: + group: zookeeper.pravega.io + names: + kind: ZookeeperCluster + listKind: ZookeeperClusterList + plural: zookeeperclusters + shortNames: + - zk + singular: zookeepercluster + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The number of ZooKeeper servers in the ensemble + jsonPath: .spec.replicas + name: Replicas + type: integer + - description: The number of ZooKeeper servers in the ensemble that are in a Ready + state + jsonPath: .status.readyReplicas + name: Ready Replicas + type: integer + - description: The current Zookeeper version + jsonPath: .status.currentVersion + name: Version + type: string + - description: The desired Zookeeper version + jsonPath: .spec.image.tag + name: Desired Version + type: string + - description: Client endpoint internal to cluster network + jsonPath: .status.internalClientEndpoint + name: Internal Endpoint + type: string + - description: Client endpoint external to cluster network via LoadBalancer + jsonPath: .status.externalClientEndpoint + name: External Endpoint + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: ZookeeperCluster is the Schema for the zookeeperclusters API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ZookeeperClusterSpec defines the desired state of ZookeeperCluster + properties: + adminServerService: + description: AdminServerService defines the policy to create AdminServer + Service for the zookeeper cluster. + properties: + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations to attach to + AdminServer service the operator creates. + type: object + external: + type: boolean + type: object + clientService: + description: ClientService defines the policy to create client Service + for the zookeeper cluster. + properties: + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations to attach to + client service the operator creates. + type: object + type: object + config: + description: Conf is the zookeeper configuration, which will be used + to generate the static zookeeper configuration. If no configuration + is provided required default values will be provided, and optional + values will be excluded. + properties: + additionalConfig: + additionalProperties: + type: string + description: key-value map of additional zookeeper configuration + parameters + type: object + x-kubernetes-preserve-unknown-fields: true + autoPurgePurgeInterval: + description: "The time interval in hours for which the purge task + has to be triggered \n Disabled by default" + type: integer + autoPurgeSnapRetainCount: + description: "Retain the snapshots according to retain count \n + The default value is 3" + type: integer + commitLogCount: + description: "Zookeeper maintains an in-memory list of last committed + requests for fast synchronization with followers \n The default + value is 500" + type: integer + globalOutstandingLimit: + description: "Clients can submit requests faster than ZooKeeper + can process them, especially if there are a lot of clients. + Zookeeper will throttle Clients so that requests won't exceed + global outstanding limit. \n The default value is 1000" + type: integer + initLimit: + description: "InitLimit is the amount of time, in ticks, to allow + followers to connect and sync to a leader. \n Default value + is 10." + type: integer + maxClientCnxns: + description: "Limits the number of concurrent connections that + a single client, identified by IP address, may make to a single + member of the ZooKeeper ensemble. \n The default value is 60" + type: integer + maxCnxns: + description: "Limits the total number of concurrent connections + that can be made to a zookeeper server \n The defult value is + 0, indicating no limit" + type: integer + maxSessionTimeout: + description: "The maximum session timeout in milliseconds that + the server will allow the client to negotiate. \n The default + value is 40000" + type: integer + minSessionTimeout: + description: "The minimum session timeout in milliseconds that + the server will allow the client to negotiate \n The default + value is 4000" + type: integer + preAllocSize: + description: "To avoid seeks ZooKeeper allocates space in the + transaction log file in blocks of preAllocSize kilobytes \n + The default value is 64M" + type: integer + quorumListenOnAllIPs: + description: "QuorumListenOnAllIPs when set to true the ZooKeeper + server will listen for connections from its peers on all available + IP addresses, and not only the address configured in the server + list of the configuration file. It affects the connections handling + the ZAB protocol and the Fast Leader Election protocol. \n The + default value is false." + type: boolean + snapCount: + description: "ZooKeeper records its transactions using snapshots + and a transaction log The number of transactions recorded in + the transaction log before a snapshot can be taken is determined + by snapCount \n The default value is 100,000" + type: integer + snapSizeLimitInKb: + description: "Snapshot size limit in Kb \n The defult value is + 4GB" + type: integer + syncLimit: + description: "SyncLimit is the amount of time, in ticks, to allow + followers to sync with Zookeeper. \n The default value is 2." + type: integer + tickTime: + description: "TickTime is the length of a single tick, which is + the basic time unit used by Zookeeper, as measured in milliseconds + \n The default value is 2000." + type: integer + type: object + containers: + description: Containers defines to support multi containers + items: + description: A single application container that you want to run + within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The container image''s + CMD is used if this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. If a variable + cannot be resolved, the reference in the input string will + be unchanged. Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)". Escaped references + will never be expanded, regardless of whether the variable + exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within a shell. + The container image''s ENTRYPOINT is used if this is not provided. + Variable references $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, the reference + in the input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) syntax: + i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless of whether + the variable exists or not. Cannot be updated. More info: + https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + env: + description: List of environment variables to set in the container. + Cannot be updated. + items: + description: EnvVar represents an environment variable present + in a Container. + properties: + name: + description: Name of the environment variable. Must be + a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded + using the previously defined environment variables in + the container and any service environment variables. + If a variable cannot be resolved, the reference in the + input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) + syntax: i.e. "$$(VAR_NAME)" will produce the string + literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. + Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap or + its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the + exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. The keys defined within a source must be + a C_IDENTIFIER. All invalid keys will be reported as an event + when the container is starting. When a key exists in multiple + sources, the value associated with the last source will take + precedence. Values defined by an Env with a duplicate key + will take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of a set + of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must be + defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to each + key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + type: object + type: object + type: array + image: + description: 'Container image name. More info: https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level config management + to default or override container images in workload controllers + like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. + Defaults to Always if :latest tag is specified, or IfNotPresent + otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system should take + in response to container lifecycle events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately after a container + is created. If the handler fails, the container is terminated + and restarted according to its restart policy. Other management + of the container blocks until the hook completes. More + info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for + the command is root ('/') in the container's + filesystem. The command is simply exec'd, it is + not run inside a shell, so traditional shell instructions + ('|', etc) won't work. To use a shell, you need + to explicitly call out to that shell. Exit status + of 0 is treated as live/healthy and non-zero is + unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. You probably want to set "Host" in + httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is NOT supported + as a LifecycleHandler and kept for the backward compatibility. + There are no validation of this field and lifecycle + hooks will fail in runtime when tcp handler is specified. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a container + is terminated due to an API request or management event + such as liveness/startup probe failure, preemption, resource + contention, etc. The handler is not called if the container + crashes or exits. The Pod''s termination grace period + countdown begins before the PreStop hook is executed. + Regardless of the outcome of the handler, the container + will eventually terminate within the Pod''s termination + grace period (unless delayed by finalizers). Other management + of the container blocks until the hook completes or until + the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for + the command is root ('/') in the container's + filesystem. The command is simply exec'd, it is + not run inside a shell, so traditional shell instructions + ('|', etc) won't work. To use a shell, you need + to explicitly call out to that shell. Exit status + of 0 is treated as live/healthy and non-zero is + unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. You probably want to set "Host" in + httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is NOT supported + as a LifecycleHandler and kept for the backward compatibility. + There are no validation of this field and lifecycle + hooks will fail in runtime when tcp handler is specified. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. Container + will be restarted if the probe fails. Cannot be updated. More + info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + Each container in a pod must have a unique name (DNS_LABEL). + Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. Exposing + a port here gives the system additional information about + the network connections a container uses, but is primarily + informational. Not specifying a port here DOES NOT prevent + that port from being exposed. Any port which is listening + on the default "0.0.0.0" address inside a container will be + accessible from the network. Cannot be updated. + items: + description: ContainerPort represents a network port in a + single container. + properties: + containerPort: + description: Number of port to expose on the pod's IP + address. This must be a valid port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If + specified, this must be a valid port number, 0 < x < + 65536. If HostNetwork is specified, this must match + ContainerPort. Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. Each named port in a pod + must have a unique name. Name for the port that can + be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, or SCTP. + Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. + Container will be removed from service endpoints if the probe + fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resources: + description: 'Compute Resources required by this container. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security options the + container should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext. More + info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether + a process can gain more privileges than its parent process. + This bool directly controls if the no_new_privs flag will + be set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) run as Privileged + 2) has CAP_SYS_ADMIN Note that this field cannot be set + when spec.os.name is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. + Defaults to the default set of capabilities granted by + the container runtime. Note that this field cannot be + set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. Processes + in privileged containers are essentially equivalent to + root on the host. Defaults to false. Note that this field + cannot be set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of proc mount to + use for the containers. The default is DefaultProcMount + which uses the container runtime defaults for readonly + paths and masked paths. This requires the ProcMountType + feature flag to be enabled. Note that this field cannot + be set when spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. Default is false. Note that this field cannot + be set when spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. Uses runtime default if unset. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a + non-root user. If true, the Kubelet will validate the + image at runtime to ensure that it does not run as UID + 0 (root) and fail to start the container if it does. If + unset or false, no such validation will be performed. + May also be set in PodSecurityContext. If set in both + SecurityContext and PodSecurityContext, the value specified + in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. Defaults to user specified in image metadata + if unspecified. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the container. + If unspecified, the container runtime will allocate a + random SELinux context for each container. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + If seccomp options are provided at both the pod & container + level, the container options override the pod options. + Note that this field cannot be set when spec.os.name is + windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node should be used. The profile + must be preconfigured on the node to work. Must be + a descending path, relative to the kubelet's configured + seccomp profile location. Must only be set if type + is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile + will be applied. Valid options are: \n Localhost - + a profile defined in a file on the node should be + used. RuntimeDefault - the container runtime default + profile should be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to all + containers. If unspecified, the options from the PodSecurityContext + will be used. If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name is + linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential spec named + by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container should + be run as a 'Host Process' container. This field is + alpha-level and will only be honored by components + that enable the WindowsHostProcessContainers feature + flag. Setting this field without the feature flag + will result in errors when validating the Pod. All + of a Pod's containers must have the same effective + HostProcess value (it is not allowed to have a mix + of HostProcess containers and non-HostProcess containers). In + addition, if HostProcess is true then HostNetwork + must also be set to true. + type: boolean + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process. Defaults to the user specified + in image metadata if unspecified. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: 'StartupProbe indicates that the Pod has successfully + initialized. If specified, no other probes are executed until + this completes successfully. If this probe fails, the Pod + will be restarted, just as if the livenessProbe failed. This + can be used to provide different probe parameters at the beginning + of a Pod''s lifecycle, when it might take a long time to load + data or warm a cache, than during steady-state operation. + This cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the container runtime. If this is not set, reads + from stdin in the container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should close the + stdin channel after it has been opened by a single attach. + When stdin is true the stdin stream will remain open across + multiple attach sessions. If stdinOnce is set to true, stdin + is opened on container start, is empty until the first client + attaches to stdin, and then remains open and accepts data + until the client disconnects, at which time stdin is closed + and remains closed until the container is restarted. If this + flag is false, a container processes that reads from stdin + will never receive an EOF. Default is false + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which the + container''s termination message will be written is mounted + into the container''s filesystem. Message written is intended + to be brief final status, such as an assertion failure message. + Will be truncated by the node if greater than 4096 bytes. + The total message length across all containers will be limited + to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be + populated. File will use the contents of terminationMessagePath + to populate the container status message on both success and + failure. FallbackToLogsOnError will use the last chunk of + container log output if the termination message file is empty + and the container exited with an error. The log output is + limited to 2048 bytes or 80 lines, whichever is smaller. Defaults + to File. Cannot be updated. + type: string + tty: + description: Whether this container should allocate a TTY for + itself, also requires 'stdin' to be true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices to be + used by the container. + items: + description: volumeDevice describes a mapping of a raw block + device within a container. + properties: + devicePath: + description: devicePath is the path inside of the container + that the device will be mapped to. + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + Cannot be updated. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the volume + should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are + propagated from the host to container and the other + way around. When not set, MountPropagationNone is used. + This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise + (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's + volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which + the container's volume should be mounted. Behaves similarly + to SubPath but environment variable references $(VAR_NAME) + are expanded using the container's environment. Defaults + to "" (volume's root). SubPathExpr and SubPath are mutually + exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If not specified, + the container runtime's default will be used, which might + be configured in the container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + domainName: + description: External host name appended for dns annotation + type: string + ephemeral: + description: Ephemeral is the configuration which helps create ephemeral + storage At anypoint only one of Persistence or Ephemeral should + be present in the manifest + properties: + emptydirvolumesource: + description: EmptyDirVolumeSource is optional and this will create + the emptydir volume It has two parameters Medium and SizeLimit + which are optional as well Medium specifies What type of storage + medium should back this directory. SizeLimit specifies Total + amount of local storage required for this EmptyDir volume. + properties: + medium: + description: 'medium represents what type of storage medium + should back this directory. The default is "" which means + to use the node''s default medium. Must be an empty string + (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount of local storage + required for this EmptyDir volume. The size limit is also + applicable for memory medium. The maximum usage on memory + medium EmptyDir would be the minimum value between the SizeLimit + specified here and the sum of memory limits of all containers + in a pod. The default is nil which means that the limit + is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + headlessService: + description: HeadlessService defines the policy to create headless + Service for the zookeeper cluster. + properties: + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations to attach to + headless service the operator creates. + type: object + type: object + image: + description: Image is the container image. default is zookeeper:0.2.10 + properties: + pullPolicy: + description: PullPolicy describes a policy for if/when to pull + a container image + enum: + - Always + - Never + - IfNotPresent + type: string + repository: + type: string + tag: + type: string + type: object + initContainers: + description: Init containers to support initialization + items: + description: A single application container that you want to run + within a pod. + properties: + args: + description: 'Arguments to the entrypoint. The container image''s + CMD is used if this is not provided. Variable references $(VAR_NAME) + are expanded using the container''s environment. If a variable + cannot be resolved, the reference in the input string will + be unchanged. Double $$ are reduced to a single $, which allows + for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will + produce the string literal "$(VAR_NAME)". Escaped references + will never be expanded, regardless of whether the variable + exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + command: + description: 'Entrypoint array. Not executed within a shell. + The container image''s ENTRYPOINT is used if this is not provided. + Variable references $(VAR_NAME) are expanded using the container''s + environment. If a variable cannot be resolved, the reference + in the input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) syntax: + i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless of whether + the variable exists or not. Cannot be updated. More info: + https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell' + items: + type: string + type: array + env: + description: List of environment variables to set in the container. + Cannot be updated. + items: + description: EnvVar represents an environment variable present + in a Container. + properties: + name: + description: Name of the environment variable. Must be + a C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded + using the previously defined environment variables in + the container and any service environment variables. + If a variable cannot be resolved, the reference in the + input string will be unchanged. Double $$ are reduced + to a single $, which allows for escaping the $(VAR_NAME) + syntax: i.e. "$$(VAR_NAME)" will produce the string + literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists + or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. + Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap or + its key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, limits.ephemeral-storage, requests.cpu, + requests.memory and requests.ephemeral-storage) + are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the + exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its + key must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + envFrom: + description: List of sources to populate environment variables + in the container. The keys defined within a source must be + a C_IDENTIFIER. All invalid keys will be reported as an event + when the container is starting. When a key exists in multiple + sources, the value associated with the last source will take + precedence. Values defined by an Env with a duplicate key + will take precedence. Cannot be updated. + items: + description: EnvFromSource represents the source of a set + of ConfigMaps + properties: + configMapRef: + description: The ConfigMap to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap must be + defined + type: boolean + type: object + prefix: + description: An optional identifier to prepend to each + key in the ConfigMap. Must be a C_IDENTIFIER. + type: string + secretRef: + description: The Secret to select from + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret must be defined + type: boolean + type: object + type: object + type: array + image: + description: 'Container image name. More info: https://kubernetes.io/docs/concepts/containers/images + This field is optional to allow higher level config management + to default or override container images in workload controllers + like Deployments and StatefulSets.' + type: string + imagePullPolicy: + description: 'Image pull policy. One of Always, Never, IfNotPresent. + Defaults to Always if :latest tag is specified, or IfNotPresent + otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images' + type: string + lifecycle: + description: Actions that the management system should take + in response to container lifecycle events. Cannot be updated. + properties: + postStart: + description: 'PostStart is called immediately after a container + is created. If the handler fails, the container is terminated + and restarted according to its restart policy. Other management + of the container blocks until the hook completes. More + info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for + the command is root ('/') in the container's + filesystem. The command is simply exec'd, it is + not run inside a shell, so traditional shell instructions + ('|', etc) won't work. To use a shell, you need + to explicitly call out to that shell. Exit status + of 0 is treated as live/healthy and non-zero is + unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. You probably want to set "Host" in + httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is NOT supported + as a LifecycleHandler and kept for the backward compatibility. + There are no validation of this field and lifecycle + hooks will fail in runtime when tcp handler is specified. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + preStop: + description: 'PreStop is called immediately before a container + is terminated due to an API request or management event + such as liveness/startup probe failure, preemption, resource + contention, etc. The handler is not called if the container + crashes or exits. The Pod''s termination grace period + countdown begins before the PreStop hook is executed. + Regardless of the outcome of the handler, the container + will eventually terminate within the Pod''s termination + grace period (unless delayed by finalizers). Other management + of the container blocks until the hook completes or until + the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for + the command is root ('/') in the container's + filesystem. The command is simply exec'd, it is + not run inside a shell, so traditional shell instructions + ('|', etc) won't work. To use a shell, you need + to explicitly call out to that shell. Exit status + of 0 is treated as live/healthy and non-zero is + unhealthy. + items: + type: string + type: array + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to + the pod IP. You probably want to set "Host" in + httpHeaders instead. + type: string + httpHeaders: + description: Custom headers to set in the request. + HTTP allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the + host. Defaults to HTTP. + type: string + required: + - port + type: object + tcpSocket: + description: Deprecated. TCPSocket is NOT supported + as a LifecycleHandler and kept for the backward compatibility. + There are no validation of this field and lifecycle + hooks will fail in runtime when tcp handler is specified. + properties: + host: + description: 'Optional: Host name to connect to, + defaults to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access + on the container. Number must be in the range + 1 to 65535. Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + type: object + type: object + livenessProbe: + description: 'Periodic probe of container liveness. Container + will be restarted if the probe fails. Cannot be updated. More + info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + name: + description: Name of the container specified as a DNS_LABEL. + Each container in a pod must have a unique name (DNS_LABEL). + Cannot be updated. + type: string + ports: + description: List of ports to expose from the container. Exposing + a port here gives the system additional information about + the network connections a container uses, but is primarily + informational. Not specifying a port here DOES NOT prevent + that port from being exposed. Any port which is listening + on the default "0.0.0.0" address inside a container will be + accessible from the network. Cannot be updated. + items: + description: ContainerPort represents a network port in a + single container. + properties: + containerPort: + description: Number of port to expose on the pod's IP + address. This must be a valid port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If + specified, this must be a valid port number, 0 < x < + 65536. If HostNetwork is specified, this must match + ContainerPort. Most containers do not need this. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME + and unique within the pod. Each named port in a pod + must have a unique name. Name for the port that can + be referred to by services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, or SCTP. + Defaults to "TCP". + type: string + required: + - containerPort + type: object + type: array + x-kubernetes-list-map-keys: + - containerPort + - protocol + x-kubernetes-list-type: map + readinessProbe: + description: 'Periodic probe of container service readiness. + Container will be removed from service endpoints if the probe + fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + resources: + description: 'Compute Resources required by this container. + Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext defines the security options the + container should be run with. If set, the fields of SecurityContext + override the equivalent fields of PodSecurityContext. More + info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/' + properties: + allowPrivilegeEscalation: + description: 'AllowPrivilegeEscalation controls whether + a process can gain more privileges than its parent process. + This bool directly controls if the no_new_privs flag will + be set on the container process. AllowPrivilegeEscalation + is true always when the container is: 1) run as Privileged + 2) has CAP_SYS_ADMIN Note that this field cannot be set + when spec.os.name is windows.' + type: boolean + capabilities: + description: The capabilities to add/drop when running containers. + Defaults to the default set of capabilities granted by + the container runtime. Note that this field cannot be + set when spec.os.name is windows. + properties: + add: + description: Added capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + drop: + description: Removed capabilities + items: + description: Capability represent POSIX capabilities + type + type: string + type: array + type: object + privileged: + description: Run container in privileged mode. Processes + in privileged containers are essentially equivalent to + root on the host. Defaults to false. Note that this field + cannot be set when spec.os.name is windows. + type: boolean + procMount: + description: procMount denotes the type of proc mount to + use for the containers. The default is DefaultProcMount + which uses the container runtime defaults for readonly + paths and masked paths. This requires the ProcMountType + feature flag to be enabled. Note that this field cannot + be set when spec.os.name is windows. + type: string + readOnlyRootFilesystem: + description: Whether this container has a read-only root + filesystem. Default is false. Note that this field cannot + be set when spec.os.name is windows. + type: boolean + runAsGroup: + description: The GID to run the entrypoint of the container + process. Uses runtime default if unset. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a + non-root user. If true, the Kubelet will validate the + image at runtime to ensure that it does not run as UID + 0 (root) and fail to start the container if it does. If + unset or false, no such validation will be performed. + May also be set in PodSecurityContext. If set in both + SecurityContext and PodSecurityContext, the value specified + in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. Defaults to user specified in image metadata + if unspecified. May also be set in PodSecurityContext. If + set in both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence. Note + that this field cannot be set when spec.os.name is windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to the container. + If unspecified, the container runtime will allocate a + random SELinux context for each container. May also be + set in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by this container. + If seccomp options are provided at both the pod & container + level, the container options override the pod options. + Note that this field cannot be set when spec.os.name is + windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node should be used. The profile + must be preconfigured on the node to work. Must be + a descending path, relative to the kubelet's configured + seccomp profile location. Must only be set if type + is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile + will be applied. Valid options are: \n Localhost - + a profile defined in a file on the node should be + used. RuntimeDefault - the container runtime default + profile should be used. Unconfined - no profile should + be applied." + type: string + required: + - type + type: object + windowsOptions: + description: The Windows specific settings applied to all + containers. If unspecified, the options from the PodSecurityContext + will be used. If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence. + Note that this field cannot be set when spec.os.name is + linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential spec named + by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container should + be run as a 'Host Process' container. This field is + alpha-level and will only be honored by components + that enable the WindowsHostProcessContainers feature + flag. Setting this field without the feature flag + will result in errors when validating the Pod. All + of a Pod's containers must have the same effective + HostProcess value (it is not allowed to have a mix + of HostProcess containers and non-HostProcess containers). In + addition, if HostProcess is true then HostNetwork + must also be set to true. + type: boolean + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process. Defaults to the user specified + in image metadata if unspecified. May also be set + in PodSecurityContext. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + startupProbe: + description: 'StartupProbe indicates that the Pod has successfully + initialized. If specified, no other probes are executed until + this completes successfully. If this probe fails, the Pod + will be restarted, just as if the livenessProbe failed. This + can be used to provide different probe parameters at the beginning + of a Pod''s lifecycle, when it might take a long time to load + data or warm a cache, than during steady-state operation. + This cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + properties: + exec: + description: Exec specifies the action to take. + properties: + command: + description: Command is the command line to execute + inside the container, the working directory for the + command is root ('/') in the container's filesystem. + The command is simply exec'd, it is not run inside + a shell, so traditional shell instructions ('|', etc) + won't work. To use a shell, you need to explicitly + call out to that shell. Exit status of 0 is treated + as live/healthy and non-zero is unhealthy. + items: + type: string + type: array + type: object + failureThreshold: + description: Minimum consecutive failures for the probe + to be considered failed after having succeeded. Defaults + to 3. Minimum value is 1. + format: int32 + type: integer + grpc: + description: GRPC specifies an action involving a GRPC port. + This is a beta field and requires enabling GRPCContainerProbe + feature gate. + properties: + port: + description: Port number of the gRPC service. Number + must be in the range 1 to 65535. + format: int32 + type: integer + service: + description: "Service is the name of the service to + place in the gRPC HealthCheckRequest (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + \n If this is not specified, the default behavior + is defined by gRPC." + type: string + required: + - port + type: object + httpGet: + description: HTTPGet specifies the http request to perform. + properties: + host: + description: Host name to connect to, defaults to the + pod IP. You probably want to set "Host" in httpHeaders + instead. + type: string + httpHeaders: + description: Custom headers to set in the request. HTTP + allows repeated headers. + items: + description: HTTPHeader describes a custom header + to be used in HTTP probes + properties: + name: + description: The header field name + type: string + value: + description: The header field value + type: string + required: + - name + - value + type: object + type: array + path: + description: Path to access on the HTTP server. + type: string + port: + anyOf: + - type: integer + - type: string + description: Name or number of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + scheme: + description: Scheme to use for connecting to the host. + Defaults to HTTP. + type: string + required: + - port + type: object + initialDelaySeconds: + description: 'Number of seconds after the container has + started before liveness probes are initiated. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + periodSeconds: + description: How often (in seconds) to perform the probe. + Default to 10 seconds. Minimum value is 1. + format: int32 + type: integer + successThreshold: + description: Minimum consecutive successes for the probe + to be considered successful after having failed. Defaults + to 1. Must be 1 for liveness and startup. Minimum value + is 1. + format: int32 + type: integer + tcpSocket: + description: TCPSocket specifies an action involving a TCP + port. + properties: + host: + description: 'Optional: Host name to connect to, defaults + to the pod IP.' + type: string + port: + anyOf: + - type: integer + - type: string + description: Number or name of the port to access on + the container. Number must be in the range 1 to 65535. + Name must be an IANA_SVC_NAME. + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + description: Optional duration in seconds the pod needs + to terminate gracefully upon probe failure. The grace + period is the duration in seconds after the processes + running in the pod are sent a termination signal and the + time when the processes are forcibly halted with a kill + signal. Set this value longer than the expected cleanup + time for your process. If this value is nil, the pod's + terminationGracePeriodSeconds will be used. Otherwise, + this value overrides the value provided by the pod spec. + Value must be non-negative integer. The value zero indicates + stop immediately via the kill signal (no opportunity to + shut down). This is a beta field and requires enabling + ProbeTerminationGracePeriod feature gate. Minimum value + is 1. spec.terminationGracePeriodSeconds is used if unset. + format: int64 + type: integer + timeoutSeconds: + description: 'Number of seconds after which the probe times + out. Defaults to 1 second. Minimum value is 1. More info: + https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' + format: int32 + type: integer + type: object + stdin: + description: Whether this container should allocate a buffer + for stdin in the container runtime. If this is not set, reads + from stdin in the container will always result in EOF. Default + is false. + type: boolean + stdinOnce: + description: Whether the container runtime should close the + stdin channel after it has been opened by a single attach. + When stdin is true the stdin stream will remain open across + multiple attach sessions. If stdinOnce is set to true, stdin + is opened on container start, is empty until the first client + attaches to stdin, and then remains open and accepts data + until the client disconnects, at which time stdin is closed + and remains closed until the container is restarted. If this + flag is false, a container processes that reads from stdin + will never receive an EOF. Default is false + type: boolean + terminationMessagePath: + description: 'Optional: Path at which the file to which the + container''s termination message will be written is mounted + into the container''s filesystem. Message written is intended + to be brief final status, such as an assertion failure message. + Will be truncated by the node if greater than 4096 bytes. + The total message length across all containers will be limited + to 12kb. Defaults to /dev/termination-log. Cannot be updated.' + type: string + terminationMessagePolicy: + description: Indicate how the termination message should be + populated. File will use the contents of terminationMessagePath + to populate the container status message on both success and + failure. FallbackToLogsOnError will use the last chunk of + container log output if the termination message file is empty + and the container exited with an error. The log output is + limited to 2048 bytes or 80 lines, whichever is smaller. Defaults + to File. Cannot be updated. + type: string + tty: + description: Whether this container should allocate a TTY for + itself, also requires 'stdin' to be true. Default is false. + type: boolean + volumeDevices: + description: volumeDevices is the list of block devices to be + used by the container. + items: + description: volumeDevice describes a mapping of a raw block + device within a container. + properties: + devicePath: + description: devicePath is the path inside of the container + that the device will be mapped to. + type: string + name: + description: name must match the name of a persistentVolumeClaim + in the pod + type: string + required: + - devicePath + - name + type: object + type: array + volumeMounts: + description: Pod volumes to mount into the container's filesystem. + Cannot be updated. + items: + description: VolumeMount describes a mounting of a Volume + within a container. + properties: + mountPath: + description: Path within the container at which the volume + should be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are + propagated from the host to container and the other + way around. When not set, MountPropagationNone is used. + This field is beta in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise + (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's + volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which + the container's volume should be mounted. Behaves similarly + to SubPath but environment variable references $(VAR_NAME) + are expanded using the container's environment. Defaults + to "" (volume's root). SubPathExpr and SubPath are mutually + exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + workingDir: + description: Container's working directory. If not specified, + the container runtime's default will be used, which might + be configured in the container image. Cannot be updated. + type: string + required: + - name + type: object + type: array + kubernetesClusterDomain: + description: Domain of the kubernetes cluster, defaults to cluster.local + type: string + labels: + additionalProperties: + type: string + description: Labels specifies the labels to attach to all resources + the operator creates for the zookeeper cluster, including StatefulSet, + Pod, PersistentVolumeClaim, Service, ConfigMap, et al. + type: object + maxUnavailableReplicas: + description: MaxUnavailableReplicas defines the MaxUnavailable Replicas + in pdb. Default is 1. + format: int32 + type: integer + persistence: + description: Persistence is the configuration for zookeeper persistent + layer. PersistentVolumeClaimSpec and VolumeReclaimPolicy can be + specified in here. + properties: + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations to attach to + pvc the operator creates. + type: object + reclaimPolicy: + description: VolumeReclaimPolicy is a zookeeper operator configuration. + If it's set to Delete, the corresponding PVCs will be deleted + by the operator when zookeeper cluster is deleted. The default + value is Retain. + enum: + - Delete + - Retain + type: string + spec: + description: PersistentVolumeClaimSpec is the spec to describe + PVC for the container This field is optional. If no PVC is specified + default persistentvolume will get created. + properties: + accessModes: + description: 'accessModes contains the desired access modes + the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can be used to specify either: + * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the provisioner + or an external controller can support the specified data + source, it will create a new volume based on the contents + of the specified data source. If the AnyVolumeDataSource + feature gate is enabled, this field will always have the + same contents as the DataSourceRef field.' + properties: + apiGroup: + description: APIGroup is the group for the resource being + referenced. If APIGroup is not specified, the specified + Kind must be in the core API group. For any other third-party + types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + dataSourceRef: + description: 'dataSourceRef specifies the object from which + to populate the volume with data, if a non-empty volume + is desired. This may be any local object from a non-empty + API group (non core object) or a PersistentVolumeClaim object. + When this field is specified, volume binding will only succeed + if the type of the specified object matches some installed + volume populator or dynamic provisioner. This field will + replace the functionality of the DataSource field and as + such if both fields are non-empty, they must have the same + value. For backwards compatibility, both fields (DataSource + and DataSourceRef) will be set to the same value automatically + if one of them is empty and the other is non-empty. There + are two important differences between DataSource and DataSourceRef: + * While DataSource only allows two specific types of objects, + DataSourceRef allows any non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores disallowed values (dropping + them), DataSourceRef preserves all values, and generates + an error if a disallowed value is specified. (Beta) Using + this field requires the AnyVolumeDataSource feature gate + to be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource being + referenced. If APIGroup is not specified, the specified + Kind must be in the core API group. For any other third-party + types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents the minimum resources the + volume should have. If RecoverVolumeExpansionFailure feature + is enabled users are allowed to specify resource requirements + that are lower than previous value but must still be higher + than capacity recorded in the status field of the claim. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of + compute resources required. If Requests is omitted for + a container, it defaults to Limits if that is explicitly + specified, otherwise to an implementation-defined value. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query over volumes to consider + for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, + Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists or + DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field is + "key", the operator is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + storageClassName: + description: 'storageClassName is the name of the StorageClass + required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required + by the claim. Value of Filesystem is implied when not included + in claim spec. + type: string + volumeName: + description: volumeName is the binding reference to the PersistentVolume + backing this claim. + type: string + type: object + type: object + pod: + description: Pod defines the policy to create pod for the zookeeper + cluster. Updating the Pod does not take effect on any existing pods. + properties: + affinity: + description: The scheduling constraints on pods. + properties: + nodeAffinity: + description: Describes node affinity scheduling rules for + the pod. + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node matches the corresponding matchExpressions; + the node(s) with the highest sum are the most preferred. + items: + description: An empty preferred scheduling term matches + all objects with implicit weight 0 (i.e. it's a no-op). + A null preferred scheduling term matches no objects + (i.e. is also a no-op). + properties: + preference: + description: A node selector term, associated with + the corresponding weight. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + weight: + description: Weight associated with matching the + corresponding nodeSelectorTerm, in the range 1-100. + format: int32 + type: integer + required: + - preference + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to an update), the system + may or may not try to eventually evict the pod from + its node. + properties: + nodeSelectorTerms: + description: Required. A list of node selector terms. + The terms are ORed. + items: + description: A null or empty node selector term + matches no objects. The requirements of them are + ANDed. The TopologySelectorTerm type implements + a subset of the NodeSelectorTerm. + properties: + matchExpressions: + description: A list of node selector requirements + by node's labels. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchFields: + description: A list of node selector requirements + by node's fields. + items: + description: A node selector requirement is + a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: The label key that the selector + applies to. + type: string + operator: + description: Represents a key's relationship + to a set of values. Valid operators + are In, NotIn, Exists, DoesNotExist. + Gt, and Lt. + type: string + values: + description: An array of string values. + If the operator is In or NotIn, the + values array must be non-empty. If the + operator is Exists or DoesNotExist, + the values array must be empty. If the + operator is Gt or Lt, the values array + must have a single element, which will + be interpreted as an integer. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + type: object + type: array + required: + - nodeSelectorTerms + type: object + type: object + podAffinity: + description: Describes pod affinity scheduling rules (e.g. + co-locate this pod in the same node, zone, etc. as some + other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the affinity expressions specified + by this field, but it may choose a node that violates + one or more of the expressions. The node that is most + preferred is the one with the greatest sum of weights, + i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the affinity requirements specified by + this field are not met at scheduling time, the pod will + not be scheduled onto the node. If the affinity requirements + specified by this field cease to be met at some point + during pod execution (e.g. due to a pod label update), + the system may or may not try to eventually evict the + pod from its node. When there are multiple elements, + the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + podAntiAffinity: + description: Describes pod anti-affinity scheduling rules + (e.g. avoid putting this pod in the same node, zone, etc. + as some other pod(s)). + properties: + preferredDuringSchedulingIgnoredDuringExecution: + description: The scheduler will prefer to schedule pods + to nodes that satisfy the anti-affinity expressions + specified by this field, but it may choose a node that + violates one or more of the expressions. The node that + is most preferred is the one with the greatest sum of + weights, i.e. for each node that meets all of the scheduling + requirements (resource request, requiredDuringScheduling + anti-affinity expressions, etc.), compute a sum by iterating + through the elements of this field and adding "weight" + to the sum if the node has pods which matches the corresponding + podAffinityTerm; the node(s) with the highest sum are + the most preferred. + items: + description: The weights of all of the matched WeightedPodAffinityTerm + fields are added per-node to find the most preferred + node(s) + properties: + podAffinityTerm: + description: Required. A pod affinity term, associated + with the corresponding weight. + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by + this field and the ones listed in the namespaces + field. null selector and null or empty namespaces + list means "this pod's namespace". An empty + selector ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list + of label selector requirements. The requirements + are ANDed. + items: + description: A label selector requirement + is a selector that contains values, + a key, and an operator that relates + the key and values. + properties: + key: + description: key is the label key + that the selector applies to. + type: string + operator: + description: operator represents a + key's relationship to a set of values. + Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of + string values. If the operator is + In or NotIn, the values array must + be non-empty. If the operator is + Exists or DoesNotExist, the values + array must be empty. This array + is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator + is "In", and the values array contains + only "value". The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. + The term is applied to the union of the namespaces + listed in this field and the ones selected + by namespaceSelector. null or empty namespaces + list and null namespaceSelector means "this + pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the + pods matching the labelSelector in the specified + namespaces, where co-located is defined as + running on a node whose value of the label + with key topologyKey matches that of any node + on which any of the selected pods is running. + Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + weight: + description: weight associated with matching the + corresponding podAffinityTerm, in the range 1-100. + format: int32 + type: integer + required: + - podAffinityTerm + - weight + type: object + type: array + requiredDuringSchedulingIgnoredDuringExecution: + description: If the anti-affinity requirements specified + by this field are not met at scheduling time, the pod + will not be scheduled onto the node. If the anti-affinity + requirements specified by this field cease to be met + at some point during pod execution (e.g. due to a pod + label update), the system may or may not try to eventually + evict the pod from its node. When there are multiple + elements, the lists of nodes corresponding to each podAffinityTerm + are intersected, i.e. all terms must be satisfied. + items: + description: Defines a set of pods (namely those matching + the labelSelector relative to the given namespace(s)) + that this pod should be co-located (affinity) or not + co-located (anti-affinity) with, where co-located + is defined as running on a node whose value of the + label with key matches that of any node + on which a pod of the set of pods is running + properties: + labelSelector: + description: A label query over a set of resources, + in this case pods. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaceSelector: + description: A label query over the set of namespaces + that the term applies to. The term is applied + to the union of the namespaces selected by this + field and the ones listed in the namespaces field. + null selector and null or empty namespaces list + means "this pod's namespace". An empty selector + ({}) matches all namespaces. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + namespaces: + description: namespaces specifies a static list + of namespace names that the term applies to. The + term is applied to the union of the namespaces + listed in this field and the ones selected by + namespaceSelector. null or empty namespaces list + and null namespaceSelector means "this pod's namespace". + items: + type: string + type: array + topologyKey: + description: This pod should be co-located (affinity) + or not co-located (anti-affinity) with the pods + matching the labelSelector in the specified namespaces, + where co-located is defined as running on a node + whose value of the label with key topologyKey + matches that of any node on which any of the selected + pods is running. Empty topologyKey is not allowed. + type: string + required: + - topologyKey + type: object + type: array + type: object + type: object + annotations: + additionalProperties: + type: string + description: Annotations specifies the annotations to attach to + pods the operator creates. + type: object + env: + description: List of environment variables to set in the container. + This field cannot be updated. + items: + description: EnvVar represents an environment variable present + in a Container. + properties: + name: + description: Name of the environment variable. Must be a + C_IDENTIFIER. + type: string + value: + description: 'Variable references $(VAR_NAME) are expanded + using the previously defined environment variables in + the container and any service environment variables. If + a variable cannot be resolved, the reference in the input + string will be unchanged. Double $$ are reduced to a single + $, which allows for escaping the $(VAR_NAME) syntax: i.e. + "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". + Escaped references will never be expanded, regardless + of whether the variable exists or not. Defaults to "".' + type: string + valueFrom: + description: Source for the environment variable's value. + Cannot be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the ConfigMap or its + key must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: 'Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['''']`, + `metadata.annotations['''']`, spec.nodeName, + spec.serviceAccountName, status.hostIP, status.podIP, + status.podIPs.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: 'Selects a resource of the container: only + resources limits and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, requests.memory + and requests.ephemeral-storage) are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the + exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the pod's + namespace + properties: + key: + description: The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: Specify whether the Secret or its key + must be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + imagePullSecrets: + description: ImagePullSecrets is a list of references to secrets + in the same namespace to use for pulling any images + items: + description: LocalObjectReference contains enough information + to let you locate the referenced object inside the same namespace. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + type: array + labels: + additionalProperties: + type: string + description: Labels specifies the labels to attach to pods the + operator creates for the zookeeper cluster. Overrides any values + specified in Spec.Labels. + type: object + nodeSelector: + additionalProperties: + type: string + description: NodeSelector specifies a map of key-value pairs. + For the pod to be eligible to run on a node, the node must have + each of the indicated key-value pairs as labels. + type: object + resources: + description: Resources is the resource requirements for the container. + This field cannot be updated once the cluster is created. + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of compute + resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + securityContext: + description: 'SecurityContext specifies the security context for + the entire pod More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context' + properties: + fsGroup: + description: "A special supplemental group that applies to + all containers in a pod. Some volume types allow the Kubelet + to change the ownership of that volume to be owned by the + pod: \n 1. The owning GID will be the FSGroup 2. The setgid + bit is set (new files created in the volume will be owned + by FSGroup) 3. The permission bits are OR'd with rw-rw---- + \n If unset, the Kubelet will not modify the ownership and + permissions of any volume. Note that this field cannot be + set when spec.os.name is windows." + format: int64 + type: integer + fsGroupChangePolicy: + description: 'fsGroupChangePolicy defines behavior of changing + ownership and permission of the volume before being exposed + inside Pod. This field will only apply to volume types which + support fsGroup based ownership(and permissions). It will + have no effect on ephemeral volume types such as: secret, + configmaps and emptydir. Valid values are "OnRootMismatch" + and "Always". If not specified, "Always" is used. Note that + this field cannot be set when spec.os.name is windows.' + type: string + runAsGroup: + description: The GID to run the entrypoint of the container + process. Uses runtime default if unset. May also be set + in SecurityContext. If set in both SecurityContext and + PodSecurityContext, the value specified in SecurityContext + takes precedence for that container. Note that this field + cannot be set when spec.os.name is windows. + format: int64 + type: integer + runAsNonRoot: + description: Indicates that the container must run as a non-root + user. If true, the Kubelet will validate the image at runtime + to ensure that it does not run as UID 0 (root) and fail + to start the container if it does. If unset or false, no + such validation will be performed. May also be set in SecurityContext. If + set in both SecurityContext and PodSecurityContext, the + value specified in SecurityContext takes precedence. + type: boolean + runAsUser: + description: The UID to run the entrypoint of the container + process. Defaults to user specified in image metadata if + unspecified. May also be set in SecurityContext. If set + in both SecurityContext and PodSecurityContext, the value + specified in SecurityContext takes precedence for that container. + Note that this field cannot be set when spec.os.name is + windows. + format: int64 + type: integer + seLinuxOptions: + description: The SELinux context to be applied to all containers. + If unspecified, the container runtime will allocate a random + SELinux context for each container. May also be set in + SecurityContext. If set in both SecurityContext and PodSecurityContext, + the value specified in SecurityContext takes precedence + for that container. Note that this field cannot be set when + spec.os.name is windows. + properties: + level: + description: Level is SELinux level label that applies + to the container. + type: string + role: + description: Role is a SELinux role label that applies + to the container. + type: string + type: + description: Type is a SELinux type label that applies + to the container. + type: string + user: + description: User is a SELinux user label that applies + to the container. + type: string + type: object + seccompProfile: + description: The seccomp options to use by the containers + in this pod. Note that this field cannot be set when spec.os.name + is windows. + properties: + localhostProfile: + description: localhostProfile indicates a profile defined + in a file on the node should be used. The profile must + be preconfigured on the node to work. Must be a descending + path, relative to the kubelet's configured seccomp profile + location. Must only be set if type is "Localhost". + type: string + type: + description: "type indicates which kind of seccomp profile + will be applied. Valid options are: \n Localhost - a + profile defined in a file on the node should be used. + RuntimeDefault - the container runtime default profile + should be used. Unconfined - no profile should be applied." + type: string + required: + - type + type: object + supplementalGroups: + description: A list of groups applied to the first process + run in each container, in addition to the container's primary + GID. If unspecified, no groups will be added to any container. + Note that this field cannot be set when spec.os.name is + windows. + items: + format: int64 + type: integer + type: array + sysctls: + description: Sysctls hold a list of namespaced sysctls used + for the pod. Pods with unsupported sysctls (by the container + runtime) might fail to launch. Note that this field cannot + be set when spec.os.name is windows. + items: + description: Sysctl defines a kernel parameter to be set + properties: + name: + description: Name of a property to set + type: string + value: + description: Value of a property to set + type: string + required: + - name + - value + type: object + type: array + windowsOptions: + description: The Windows specific settings applied to all + containers. If unspecified, the options within a container's + SecurityContext will be used. If set in both SecurityContext + and PodSecurityContext, the value specified in SecurityContext + takes precedence. Note that this field cannot be set when + spec.os.name is linux. + properties: + gmsaCredentialSpec: + description: GMSACredentialSpec is where the GMSA admission + webhook (https://github.com/kubernetes-sigs/windows-gmsa) + inlines the contents of the GMSA credential spec named + by the GMSACredentialSpecName field. + type: string + gmsaCredentialSpecName: + description: GMSACredentialSpecName is the name of the + GMSA credential spec to use. + type: string + hostProcess: + description: HostProcess determines if a container should + be run as a 'Host Process' container. This field is + alpha-level and will only be honored by components that + enable the WindowsHostProcessContainers feature flag. + Setting this field without the feature flag will result + in errors when validating the Pod. All of a Pod's containers + must have the same effective HostProcess value (it is + not allowed to have a mix of HostProcess containers + and non-HostProcess containers). In addition, if HostProcess + is true then HostNetwork must also be set to true. + type: boolean + runAsUserName: + description: The UserName in Windows to run the entrypoint + of the container process. Defaults to the user specified + in image metadata if unspecified. May also be set in + PodSecurityContext. If set in both SecurityContext and + PodSecurityContext, the value specified in SecurityContext + takes precedence. + type: string + type: object + type: object + serviceAccountName: + description: Service Account to be used in pods + type: string + terminationGracePeriodSeconds: + description: TerminationGracePeriodSeconds is the amount of time + that kubernetes will give for a pod instance to shutdown normally. + The default value is 30. + format: int64 + minimum: 0 + type: integer + tolerations: + description: Tolerations specifies the pod's tolerations. + items: + description: The pod this Toleration is attached to tolerates + any taint that matches the triple using + the matching operator . + properties: + effect: + description: Effect indicates the taint effect to match. + Empty means match all taint effects. When specified, allowed + values are NoSchedule, PreferNoSchedule and NoExecute. + type: string + key: + description: Key is the taint key that the toleration applies + to. Empty means match all taint keys. If the key is empty, + operator must be Exists; this combination means to match + all values and all keys. + type: string + operator: + description: Operator represents a key's relationship to + the value. Valid operators are Exists and Equal. Defaults + to Equal. Exists is equivalent to wildcard for value, + so that a pod can tolerate all taints of a particular + category. + type: string + tolerationSeconds: + description: TolerationSeconds represents the period of + time the toleration (which must be of effect NoExecute, + otherwise this field is ignored) tolerates the taint. + By default, it is not set, which means tolerate the taint + forever (do not evict). Zero and negative values will + be treated as 0 (evict immediately) by the system. + format: int64 + type: integer + value: + description: Value is the taint value the toleration matches + to. If the operator is Exists, the value should be empty, + otherwise just a regular string. + type: string + type: object + type: array + topologySpreadConstraints: + description: TopologySpreadConstraints to apply to the pods + items: + description: TopologySpreadConstraint specifies how to spread + matching pods among the given topology. + properties: + labelSelector: + description: LabelSelector is used to find matching pods. + Pods that match this label selector are counted to determine + the number of pods in their corresponding topology domain. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} pairs. + A single {key,value} in the matchLabels map is equivalent + to an element of matchExpressions, whose key field + is "key", the operator is "In", and the values array + contains only "value". The requirements are ANDed. + type: object + type: object + maxSkew: + description: 'MaxSkew describes the degree to which pods + may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, + it is the maximum permitted difference between the number + of matching pods in the target topology and the global + minimum. The global minimum is the minimum number of matching + pods in an eligible domain or zero if the number of eligible + domains is less than MinDomains. For example, in a 3-zone + cluster, MaxSkew is set to 1, and pods with the same labelSelector + spread as 2/2/1: In this case, the global minimum is 1. + | zone1 | zone2 | zone3 | | P P | P P | P | - + if MaxSkew is 1, incoming pod can only be scheduled to + zone3 to become 2/2/2; scheduling it onto zone1(zone2) + would make the ActualSkew(3-1) on zone1(zone2) violate + MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled + onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, + it is used to give higher precedence to topologies that + satisfy it. It''s a required field. Default value is 1 + and 0 is not allowed.' + format: int32 + type: integer + minDomains: + description: "MinDomains indicates a minimum number of eligible + domains. When the number of eligible domains with matching + topology keys is less than minDomains, Pod Topology Spread + treats \"global minimum\" as 0, and then the calculation + of Skew is performed. And when the number of eligible + domains with matching topology keys equals or greater + than minDomains, this value has no effect on scheduling. + As a result, when the number of eligible domains is less + than minDomains, scheduler won't schedule more than maxSkew + Pods to those domains. If value is nil, the constraint + behaves as if MinDomains is equal to 1. Valid values are + integers greater than 0. When value is not nil, WhenUnsatisfiable + must be DoNotSchedule. \n For example, in a 3-zone cluster, + MaxSkew is set to 2, MinDomains is set to 5 and pods with + the same labelSelector spread as 2/2/2: | zone1 | zone2 + | zone3 | | P P | P P | P P | The number of domains + is less than 5(MinDomains), so \"global minimum\" is treated + as 0. In this situation, new pod with the same labelSelector + cannot be scheduled, because computed skew will be 3(3 + - 0) if new Pod is scheduled to any of the three zones, + it will violate MaxSkew. \n This is an alpha field and + requires enabling MinDomainsInPodTopologySpread feature + gate." + format: int32 + type: integer + topologyKey: + description: TopologyKey is the key of node labels. Nodes + that have a label with this key and identical values are + considered to be in the same topology. We consider each + as a "bucket", and try to put balanced number + of pods into each bucket. We define a domain as a particular + instance of a topology. Also, we define an eligible domain + as a domain whose nodes match the node selector. e.g. + If TopologyKey is "kubernetes.io/hostname", each Node + is a domain of that topology. And, if TopologyKey is "topology.kubernetes.io/zone", + each zone is a domain of that topology. It's a required + field. + type: string + whenUnsatisfiable: + description: 'WhenUnsatisfiable indicates how to deal with + a pod if it doesn''t satisfy the spread constraint. - + DoNotSchedule (default) tells the scheduler not to schedule + it. - ScheduleAnyway tells the scheduler to schedule the + pod in any location, but giving higher precedence to topologies + that would help reduce the skew. A constraint is considered + "Unsatisfiable" for an incoming pod if and only if every + possible node assignment for that pod would violate "MaxSkew" + on some topology. For example, in a 3-zone cluster, MaxSkew + is set to 1, and pods with the same labelSelector spread + as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | + If WhenUnsatisfiable is set to DoNotSchedule, incoming + pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) + as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). + In other words, the cluster can still be imbalanced, but + scheduler won''t make it *more* imbalanced. It''s a required + field.' + type: string + required: + - maxSkew + - topologyKey + - whenUnsatisfiable + type: object + type: array + type: object + ports: + items: + description: ContainerPort represents a network port in a single + container. + properties: + containerPort: + description: Number of port to expose on the pod's IP address. + This must be a valid port number, 0 < x < 65536. + format: int32 + type: integer + hostIP: + description: What host IP to bind the external port to. + type: string + hostPort: + description: Number of port to expose on the host. If specified, + this must be a valid port number, 0 < x < 65536. If HostNetwork + is specified, this must match ContainerPort. Most containers + do not need this. + format: int32 + type: integer + name: + description: If specified, this must be an IANA_SVC_NAME and + unique within the pod. Each named port in a pod must have + a unique name. Name for the port that can be referred to by + services. + type: string + protocol: + default: TCP + description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults + to "TCP". + type: string + required: + - containerPort + type: object + type: array + probes: + description: Probes specifies the timeout values for the Readiness + and Liveness Probes for the zookeeper pods. + properties: + livenessProbe: + properties: + failureThreshold: + format: int32 + minimum: 0 + type: integer + initialDelaySeconds: + format: int32 + minimum: 0 + type: integer + periodSeconds: + format: int32 + minimum: 0 + type: integer + successThreshold: + format: int32 + minimum: 0 + type: integer + timeoutSeconds: + format: int32 + minimum: 0 + type: integer + type: object + readinessProbe: + properties: + failureThreshold: + format: int32 + minimum: 0 + type: integer + initialDelaySeconds: + format: int32 + minimum: 0 + type: integer + periodSeconds: + format: int32 + minimum: 0 + type: integer + successThreshold: + format: int32 + minimum: 0 + type: integer + timeoutSeconds: + format: int32 + minimum: 0 + type: integer + type: object + type: object + replicas: + description: "Replicas is the expected size of the zookeeper cluster. + The pravega-operator will eventually make the size of the running + cluster equal to the expected size. \n The valid range of size is + from 1 to 7." + format: int32 + minimum: 1 + type: integer + storageType: + description: StorageType is used to tell which type of storage we + will be using It can take either Ephemeral or persistence Default + StorageType is Persistence storage + type: string + triggerRollingRestart: + description: TriggerRollingRestart if set to true will instruct operator + to restart all the pods in the zookeeper cluster, after which this + value will be set to false + type: boolean + volumeMounts: + description: VolumeMounts defines to support customized volumeMounts + items: + description: VolumeMount describes a mounting of a Volume within + a container. + properties: + mountPath: + description: Path within the container at which the volume should + be mounted. Must not contain ':'. + type: string + mountPropagation: + description: mountPropagation determines how mounts are propagated + from the host to container and the other way around. When + not set, MountPropagationNone is used. This field is beta + in 1.10. + type: string + name: + description: This must match the Name of a Volume. + type: string + readOnly: + description: Mounted read-only if true, read-write otherwise + (false or unspecified). Defaults to false. + type: boolean + subPath: + description: Path within the volume from which the container's + volume should be mounted. Defaults to "" (volume's root). + type: string + subPathExpr: + description: Expanded path within the volume from which the + container's volume should be mounted. Behaves similarly to + SubPath but environment variable references $(VAR_NAME) are + expanded using the container's environment. Defaults to "" + (volume's root). SubPathExpr and SubPath are mutually exclusive. + type: string + required: + - mountPath + - name + type: object + type: array + volumes: + description: Volumes defines to support customized volumes + items: + description: Volume represents a named volume in a pod that may + be accessed by any container in the pod. + properties: + awsElasticBlockStore: + description: 'awsElasticBlockStore represents an AWS Disk resource + that is attached to a kubelet''s host machine and then exposed + to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + properties: + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + partition: + description: 'partition is the partition in the volume that + you want to mount. If omitted, the default is to mount + by volume name. Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can leave the property empty).' + format: int32 + type: integer + readOnly: + description: 'readOnly value true will force the readOnly + setting in VolumeMounts. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: boolean + volumeID: + description: 'volumeID is unique ID of the persistent disk + resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore' + type: string + required: + - volumeID + type: object + azureDisk: + description: azureDisk represents an Azure Data Disk mount on + the host and bind mount to the pod. + properties: + cachingMode: + description: 'cachingMode is the Host Caching mode: None, + Read Only, Read Write.' + type: string + diskName: + description: diskName is the Name of the data disk in the + blob storage + type: string + diskURI: + description: diskURI is the URI of data disk in the blob + storage + type: string + fsType: + description: fsType is Filesystem type to mount. Must be + a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + kind: + description: 'kind expected values are Shared: multiple + blob disks per storage account Dedicated: single blob + disk per storage account Managed: azure managed data + disk (only in managed availability set). defaults to shared' + type: string + readOnly: + description: readOnly Defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + required: + - diskName + - diskURI + type: object + azureFile: + description: azureFile represents an Azure File Service mount + on the host and bind mount to the pod. + properties: + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretName: + description: secretName is the name of secret that contains + Azure Storage Account Name and Key + type: string + shareName: + description: shareName is the azure share Name + type: string + required: + - secretName + - shareName + type: object + cephfs: + description: cephFS represents a Ceph FS mount on the host that + shares a pod's lifetime + properties: + monitors: + description: 'monitors is Required: Monitors is a collection + of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + items: + type: string + type: array + path: + description: 'path is Optional: Used as the mounted root, + rather than the full Ceph tree, default is /' + type: string + readOnly: + description: 'readOnly is Optional: Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: boolean + secretFile: + description: 'secretFile is Optional: SecretFile is the + path to key ring for User, default is /etc/ceph/user.secret + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + secretRef: + description: 'secretRef is Optional: SecretRef is reference + to the authentication secret for User, default is empty. + More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + user: + description: 'user is optional: User is the rados user name, + default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it' + type: string + required: + - monitors + type: object + cinder: + description: 'cinder represents a cinder volume attached and + mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Examples: "ext4", "xfs", "ntfs". Implicitly inferred to + be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + readOnly: + description: 'readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: boolean + secretRef: + description: 'secretRef is optional: points to a secret + object containing parameters used to connect to OpenStack.' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + volumeID: + description: 'volumeID used to identify the volume in cinder. + More info: https://examples.k8s.io/mysql-cinder-pd/README.md' + type: string + required: + - volumeID + type: object + configMap: + description: configMap represents a configMap that should populate + this volume + properties: + defaultMode: + description: 'defaultMode is optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items if unspecified, each key-value pair in + the Data field of the referenced ConfigMap will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the ConfigMap, the volume setup will error unless it is + marked optional. Paths must be relative and may not contain + the '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + optional: + description: optional specify whether the ConfigMap or its + keys must be defined + type: boolean + type: object + csi: + description: csi (Container Storage Interface) represents ephemeral + storage that is handled by certain external CSI drivers (Beta + feature). + properties: + driver: + description: driver is the name of the CSI driver that handles + this volume. Consult with your admin for the correct name + as registered in the cluster. + type: string + fsType: + description: fsType to mount. Ex. "ext4", "xfs", "ntfs". + If not provided, the empty value is passed to the associated + CSI driver which will determine the default filesystem + to apply. + type: string + nodePublishSecretRef: + description: nodePublishSecretRef is a reference to the + secret object containing sensitive information to pass + to the CSI driver to complete the CSI NodePublishVolume + and NodeUnpublishVolume calls. This field is optional, + and may be empty if no secret is required. If the secret + object contains more than one secret, all secret references + are passed. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + readOnly: + description: readOnly specifies a read-only configuration + for the volume. Defaults to false (read/write). + type: boolean + volumeAttributes: + additionalProperties: + type: string + description: volumeAttributes stores driver-specific properties + that are passed to the CSI driver. Consult your driver's + documentation for supported values. + type: object + required: + - driver + type: object + downwardAPI: + description: downwardAPI represents downward API about the pod + that should populate this volume + properties: + defaultMode: + description: 'Optional: mode bits to use on created files + by default. Must be a Optional: mode bits used to set + permissions on created files by default. Must be an octal + value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: Items is a list of downward API volume file + items: + description: DownwardAPIVolumeFile represents information + to create the file containing the pod field + properties: + fieldRef: + description: 'Required: Selects a field of the pod: + only annotations, labels, name and namespace are + supported.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in the + specified API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: mode bits used to set permissions + on this file, must be an octal value between 0000 + and 0777 or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON requires + decimal values for mode bits. If not specified, + the volume defaultMode will be used. This might + be in conflict with other options that affect the + file mode, like fsGroup, and the result can be other + mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path is the relative path + name of the file to be created. Must not be absolute + or contain the ''..'' path. Must be utf-8 encoded. + The first item of the relative path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the container: + only resources limits and requests (limits.cpu, + limits.memory, requests.cpu and requests.memory) + are currently supported.' + properties: + containerName: + description: 'Container name: required for volumes, + optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format of the + exposed resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + emptyDir: + description: 'emptyDir represents a temporary directory that + shares a pod''s lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + properties: + medium: + description: 'medium represents what type of storage medium + should back this directory. The default is "" which means + to use the node''s default medium. Must be an empty string + (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir' + type: string + sizeLimit: + anyOf: + - type: integer + - type: string + description: 'sizeLimit is the total amount of local storage + required for this EmptyDir volume. The size limit is also + applicable for memory medium. The maximum usage on memory + medium EmptyDir would be the minimum value between the + SizeLimit specified here and the sum of memory limits + of all containers in a pod. The default is nil which means + that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + ephemeral: + description: "ephemeral represents a volume that is handled + by a cluster storage driver. The volume's lifecycle is tied + to the pod that defines it - it will be created before the + pod starts, and deleted when the pod is removed. \n Use this + if: a) the volume is only needed while the pod runs, b) features + of normal volumes like restoring from snapshot or capacity + tracking are needed, c) the storage driver is specified through + a storage class, and d) the storage driver supports dynamic + volume provisioning through a PersistentVolumeClaim (see EphemeralVolumeSource + for more information on the connection between this volume + type and PersistentVolumeClaim). \n Use PersistentVolumeClaim + or one of the vendor-specific APIs for volumes that persist + for longer than the lifecycle of an individual pod. \n Use + CSI for light-weight local ephemeral volumes if the CSI driver + is meant to be used that way - see the documentation of the + driver for more information. \n A pod can use both types of + ephemeral volumes and persistent volumes at the same time." + properties: + volumeClaimTemplate: + description: "Will be used to create a stand-alone PVC to + provision the volume. The pod in which this EphemeralVolumeSource + is embedded will be the owner of the PVC, i.e. the PVC + will be deleted together with the pod. The name of the + PVC will be `-` where `` is the name from the `PodSpec.Volumes` array entry. + Pod validation will reject the pod if the concatenated + name is not valid for a PVC (for example, too long). \n + An existing PVC with that name that is not owned by the + pod will *not* be used for the pod to avoid using an unrelated + volume by mistake. Starting the pod is then blocked until + the unrelated PVC is removed. If such a pre-created PVC + is meant to be used by the pod, the PVC has to updated + with an owner reference to the pod once the pod exists. + Normally this should not be necessary, but it may be useful + when manually reconstructing a broken cluster. \n This + field is read-only and no changes will be made by Kubernetes + to the PVC after it has been created. \n Required, must + not be nil." + properties: + metadata: + description: May contain labels and annotations that + will be copied into the PVC when creating it. No other + fields are allowed and will be rejected during validation. + type: object + spec: + description: The specification for the PersistentVolumeClaim. + The entire content is copied unchanged into the PVC + that gets created from this template. The same fields + as in a PersistentVolumeClaim are also valid here. + properties: + accessModes: + description: 'accessModes contains the desired access + modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'dataSource field can be used to specify + either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the + provisioner or an external controller can support + the specified data source, it will create a new + volume based on the contents of the specified + data source. If the AnyVolumeDataSource feature + gate is enabled, this field will always have the + same contents as the DataSourceRef field.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API + group. For any other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + required: + - kind + - name + type: object + dataSourceRef: + description: 'dataSourceRef specifies the object + from which to populate the volume with data, if + a non-empty volume is desired. This may be any + local object from a non-empty API group (non core + object) or a PersistentVolumeClaim object. When + this field is specified, volume binding will only + succeed if the type of the specified object matches + some installed volume populator or dynamic provisioner. + This field will replace the functionality of the + DataSource field and as such if both fields are + non-empty, they must have the same value. For + backwards compatibility, both fields (DataSource + and DataSourceRef) will be set to the same value + automatically if one of them is empty and the + other is non-empty. There are two important differences + between DataSource and DataSourceRef: * While + DataSource only allows two specific types of objects, + DataSourceRef allows any non-core object, as well + as PersistentVolumeClaim objects. * While DataSource + ignores disallowed values (dropping them), DataSourceRef + preserves all values, and generates an error if + a disallowed value is specified. (Beta) Using + this field requires the AnyVolumeDataSource feature + gate to be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, + the specified Kind must be in the core API + group. For any other third-party types, APIGroup + is required. + type: string + kind: + description: Kind is the type of resource being + referenced + type: string + name: + description: Name is the name of resource being + referenced + type: string + required: + - kind + - name + type: object + resources: + description: 'resources represents the minimum resources + the volume should have. If RecoverVolumeExpansionFailure + feature is enabled users are allowed to specify + resource requirements that are lower than previous + value but must still be higher than capacity recorded + in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount + of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum + amount of compute resources required. If Requests + is omitted for a container, it defaults to + Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: selector is a label query over volumes + to consider for binding. + properties: + matchExpressions: + description: matchExpressions is a list of label + selector requirements. The requirements are + ANDed. + items: + description: A label selector requirement + is a selector that contains values, a key, + and an operator that relates the key and + values. + properties: + key: + description: key is the label key that + the selector applies to. + type: string + operator: + description: operator represents a key's + relationship to a set of values. Valid + operators are In, NotIn, Exists and + DoesNotExist. + type: string + values: + description: values is an array of string + values. If the operator is In or NotIn, + the values array must be non-empty. + If the operator is Exists or DoesNotExist, + the values array must be empty. This + array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: matchLabels is a map of {key,value} + pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, + whose key field is "key", the operator is + "In", and the values array contains only "value". + The requirements are ANDed. + type: object + type: object + storageClassName: + description: 'storageClassName is the name of the + StorageClass required by the claim. More info: + https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume + is required by the claim. Value of Filesystem + is implied when not included in claim spec. + type: string + volumeName: + description: volumeName is the binding reference + to the PersistentVolume backing this claim. + type: string + type: object + required: + - spec + type: object + type: object + fc: + description: fc represents a Fibre Channel resource that is + attached to a kubelet's host machine and then exposed to the + pod. + properties: + fsType: + description: 'fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. TODO: how do we prevent errors in the + filesystem from compromising the machine' + type: string + lun: + description: 'lun is Optional: FC target lun number' + format: int32 + type: integer + readOnly: + description: 'readOnly is Optional: Defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + targetWWNs: + description: 'targetWWNs is Optional: FC target worldwide + names (WWNs)' + items: + type: string + type: array + wwids: + description: 'wwids Optional: FC volume world wide identifiers + (wwids) Either wwids or combination of targetWWNs and + lun must be set, but not both simultaneously.' + items: + type: string + type: array + type: object + flexVolume: + description: flexVolume represents a generic volume resource + that is provisioned/attached using an exec based plugin. + properties: + driver: + description: driver is the name of the driver to use for + this volume. + type: string + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". The default filesystem depends + on FlexVolume script. + type: string + options: + additionalProperties: + type: string + description: 'options is Optional: this field holds extra + command options if any.' + type: object + readOnly: + description: 'readOnly is Optional: defaults to false (read/write). + ReadOnly here will force the ReadOnly setting in VolumeMounts.' + type: boolean + secretRef: + description: 'secretRef is Optional: secretRef is reference + to the secret object containing sensitive information + to pass to the plugin scripts. This may be empty if no + secret object is specified. If the secret object contains + more than one secret, all secrets are passed to the plugin + scripts.' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + required: + - driver + type: object + flocker: + description: flocker represents a Flocker volume attached to + a kubelet's host machine. This depends on the Flocker control + service being running + properties: + datasetName: + description: datasetName is Name of the dataset stored as + metadata -> name on the dataset for Flocker should be + considered as deprecated + type: string + datasetUUID: + description: datasetUUID is the UUID of the dataset. This + is unique identifier of a Flocker dataset + type: string + type: object + gcePersistentDisk: + description: 'gcePersistentDisk represents a GCE Disk resource + that is attached to a kubelet''s host machine and then exposed + to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + properties: + fsType: + description: 'fsType is filesystem type of the volume that + you want to mount. Tip: Ensure that the filesystem type + is supported by the host operating system. Examples: "ext4", + "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + partition: + description: 'partition is the partition in the volume that + you want to mount. If omitted, the default is to mount + by volume name. Examples: For volume /dev/sda1, you specify + the partition as "1". Similarly, the volume partition + for /dev/sda is "0" (or you can leave the property empty). + More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + format: int32 + type: integer + pdName: + description: 'pdName is unique name of the PD resource in + GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: string + readOnly: + description: 'readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk' + type: boolean + required: + - pdName + type: object + gitRepo: + description: 'gitRepo represents a git repository at a particular + revision. DEPRECATED: GitRepo is deprecated. To provision + a container with a git repo, mount an EmptyDir into an InitContainer + that clones the repo using git, then mount the EmptyDir into + the Pod''s container.' + properties: + directory: + description: directory is the target directory name. Must + not contain or start with '..'. If '.' is supplied, the + volume directory will be the git repository. Otherwise, + if specified, the volume will contain the git repository + in the subdirectory with the given name. + type: string + repository: + description: repository is the URL + type: string + revision: + description: revision is the commit hash for the specified + revision. + type: string + required: + - repository + type: object + glusterfs: + description: 'glusterfs represents a Glusterfs mount on the + host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md' + properties: + endpoints: + description: 'endpoints is the endpoint name that details + Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + path: + description: 'path is the Glusterfs volume path. More info: + https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: string + readOnly: + description: 'readOnly here will force the Glusterfs volume + to be mounted with read-only permissions. Defaults to + false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod' + type: boolean + required: + - endpoints + - path + type: object + hostPath: + description: 'hostPath represents a pre-existing file or directory + on the host machine that is directly exposed to the container. + This is generally used for system agents or other privileged + things that are allowed to see the host machine. Most containers + will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath + --- TODO(jonesdl) We need to restrict who can use host directory + mounts and who can/can not mount host directories as read/write.' + properties: + path: + description: 'path of the directory on the host. If the + path is a symlink, it will follow the link to the real + path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + type: + description: 'type for HostPath Volume Defaults to "" More + info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath' + type: string + required: + - path + type: object + iscsi: + description: 'iscsi represents an ISCSI Disk resource that is + attached to a kubelet''s host machine and then exposed to + the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md' + properties: + chapAuthDiscovery: + description: chapAuthDiscovery defines whether support iSCSI + Discovery CHAP authentication + type: boolean + chapAuthSession: + description: chapAuthSession defines whether support iSCSI + Session CHAP authentication + type: boolean + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + initiatorName: + description: initiatorName is the custom iSCSI Initiator + Name. If initiatorName is specified with iscsiInterface + simultaneously, new iSCSI interface : will be created for the connection. + type: string + iqn: + description: iqn is the target iSCSI Qualified Name. + type: string + iscsiInterface: + description: iscsiInterface is the interface Name that uses + an iSCSI transport. Defaults to 'default' (tcp). + type: string + lun: + description: lun represents iSCSI Target Lun number. + format: int32 + type: integer + portals: + description: portals is the iSCSI Target Portal List. The + portal is either an IP or ip_addr:port if the port is + other than default (typically TCP ports 860 and 3260). + items: + type: string + type: array + readOnly: + description: readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. + type: boolean + secretRef: + description: secretRef is the CHAP Secret for iSCSI target + and initiator authentication + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + targetPortal: + description: targetPortal is iSCSI Target Portal. The Portal + is either an IP or ip_addr:port if the port is other than + default (typically TCP ports 860 and 3260). + type: string + required: + - iqn + - lun + - targetPortal + type: object + name: + description: 'name of the volume. Must be a DNS_LABEL and unique + within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + nfs: + description: 'nfs represents an NFS mount on the host that shares + a pod''s lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + properties: + path: + description: 'path that is exported by the NFS server. More + info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + readOnly: + description: 'readOnly here will force the NFS export to + be mounted with read-only permissions. Defaults to false. + More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: boolean + server: + description: 'server is the hostname or IP address of the + NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs' + type: string + required: + - path + - server + type: object + persistentVolumeClaim: + description: 'persistentVolumeClaimVolumeSource represents a + reference to a PersistentVolumeClaim in the same namespace. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + claimName: + description: 'claimName is the name of a PersistentVolumeClaim + in the same namespace as the pod using this volume. More + info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + type: string + readOnly: + description: readOnly Will force the ReadOnly setting in + VolumeMounts. Default false. + type: boolean + required: + - claimName + type: object + photonPersistentDisk: + description: photonPersistentDisk represents a PhotonController + persistent disk attached and mounted on kubelets host machine + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + pdID: + description: pdID is the ID that identifies Photon Controller + persistent disk + type: string + required: + - pdID + type: object + portworxVolume: + description: portworxVolume represents a portworx volume attached + and mounted on kubelets host machine + properties: + fsType: + description: fSType represents the filesystem type to mount + Must be a filesystem type supported by the host operating + system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + volumeID: + description: volumeID uniquely identifies a Portworx volume + type: string + required: + - volumeID + type: object + projected: + description: projected items for all in one resources secrets, + configmaps, and downward API + properties: + defaultMode: + description: defaultMode are the mode bits used to set permissions + on created files by default. Must be an octal value between + 0000 and 0777 or a decimal value between 0 and 511. YAML + accepts both octal and decimal values, JSON requires decimal + values for mode bits. Directories within the path are + not affected by this setting. This might be in conflict + with other options that affect the file mode, like fsGroup, + and the result can be other mode bits set. + format: int32 + type: integer + sources: + description: sources is the list of volume projections + items: + description: Projection that may be projected along with + other supported volume types + properties: + configMap: + description: configMap information about the configMap + data to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced ConfigMap + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the ConfigMap, the volume + setup will error unless it is marked optional. + Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional specify whether the ConfigMap + or its keys must be defined + type: boolean + type: object + downwardAPI: + description: downwardAPI information about the downwardAPI + data to project + properties: + items: + description: Items is a list of DownwardAPIVolume + file + items: + description: DownwardAPIVolumeFile represents + information to create the file containing + the pod field + properties: + fieldRef: + description: 'Required: Selects a field + of the pod: only annotations, labels, + name and namespace are supported.' + properties: + apiVersion: + description: Version of the schema the + FieldPath is written in terms of, + defaults to "v1". + type: string + fieldPath: + description: Path of the field to select + in the specified API version. + type: string + required: + - fieldPath + type: object + mode: + description: 'Optional: mode bits used to + set permissions on this file, must be + an octal value between 0000 and 0777 or + a decimal value between 0 and 511. YAML + accepts both octal and decimal values, + JSON requires decimal values for mode + bits. If not specified, the volume defaultMode + will be used. This might be in conflict + with other options that affect the file + mode, like fsGroup, and the result can + be other mode bits set.' + format: int32 + type: integer + path: + description: 'Required: Path is the relative + path name of the file to be created. Must + not be absolute or contain the ''..'' + path. Must be utf-8 encoded. The first + item of the relative path must not start + with ''..''' + type: string + resourceFieldRef: + description: 'Selects a resource of the + container: only resources limits and requests + (limits.cpu, limits.memory, requests.cpu + and requests.memory) are currently supported.' + properties: + containerName: + description: 'Container name: required + for volumes, optional for env vars' + type: string + divisor: + anyOf: + - type: integer + - type: string + description: Specifies the output format + of the exposed resources, defaults + to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: 'Required: resource to + select' + type: string + required: + - resource + type: object + required: + - path + type: object + type: array + type: object + secret: + description: secret information about the secret data + to project + properties: + items: + description: items if unspecified, each key-value + pair in the Data field of the referenced Secret + will be projected into the volume as a file + whose name is the key and content is the value. + If specified, the listed keys will be projected + into the specified paths, and unlisted keys + will not be present. If a key is specified which + is not present in the Secret, the volume setup + will error unless it is marked optional. Paths + must be relative and may not contain the '..' + path or start with '..'. + items: + description: Maps a string key to a path within + a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits + used to set permissions on this file. + Must be an octal value between 0000 and + 0777 or a decimal value between 0 and + 511. YAML accepts both octal and decimal + values, JSON requires decimal values for + mode bits. If not specified, the volume + defaultMode will be used. This might be + in conflict with other options that affect + the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of + the file to map the key to. May not be + an absolute path. May not contain the + path element '..'. May not start with + the string '..'. + type: string + required: + - key + - path + type: object + type: array + name: + description: 'Name of the referent. More info: + https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, + uid?' + type: string + optional: + description: optional field specify whether the + Secret or its key must be defined + type: boolean + type: object + serviceAccountToken: + description: serviceAccountToken is information about + the serviceAccountToken data to project + properties: + audience: + description: audience is the intended audience + of the token. A recipient of a token must identify + itself with an identifier specified in the audience + of the token, and otherwise should reject the + token. The audience defaults to the identifier + of the apiserver. + type: string + expirationSeconds: + description: expirationSeconds is the requested + duration of validity of the service account + token. As the token approaches expiration, the + kubelet volume plugin will proactively rotate + the service account token. The kubelet will + start trying to rotate the token if the token + is older than 80 percent of its time to live + or if the token is older than 24 hours.Defaults + to 1 hour and must be at least 10 minutes. + format: int64 + type: integer + path: + description: path is the path relative to the + mount point of the file to project the token + into. + type: string + required: + - path + type: object + type: object + type: array + type: object + quobyte: + description: quobyte represents a Quobyte mount on the host + that shares a pod's lifetime + properties: + group: + description: group to map volume access to Default is no + group + type: string + readOnly: + description: readOnly here will force the Quobyte volume + to be mounted with read-only permissions. Defaults to + false. + type: boolean + registry: + description: registry represents a single or multiple Quobyte + Registry services specified as a string as host:port pair + (multiple entries are separated with commas) which acts + as the central registry for volumes + type: string + tenant: + description: tenant owning the given Quobyte volume in the + Backend Used with dynamically provisioned Quobyte volumes, + value is set by the plugin + type: string + user: + description: user to map volume access to Defaults to serivceaccount + user + type: string + volume: + description: volume is a string that references an already + created Quobyte volume by name. + type: string + required: + - registry + - volume + type: object + rbd: + description: 'rbd represents a Rados Block Device mount on the + host that shares a pod''s lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md' + properties: + fsType: + description: 'fsType is the filesystem type of the volume + that you want to mount. Tip: Ensure that the filesystem + type is supported by the host operating system. Examples: + "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd + TODO: how do we prevent errors in the filesystem from + compromising the machine' + type: string + image: + description: 'image is the rados image name. More info: + https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + keyring: + description: 'keyring is the path to key ring for RBDUser. + Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + monitors: + description: 'monitors is a collection of Ceph monitors. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + items: + type: string + type: array + pool: + description: 'pool is the rados pool name. Default is rbd. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + readOnly: + description: 'readOnly here will force the ReadOnly setting + in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: boolean + secretRef: + description: 'secretRef is name of the authentication secret + for RBDUser. If provided overrides keyring. Default is + nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + user: + description: 'user is the rados user name. Default is admin. + More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it' + type: string + required: + - image + - monitors + type: object + scaleIO: + description: scaleIO represents a ScaleIO persistent volume + attached and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Default is "xfs". + type: string + gateway: + description: gateway is the host address of the ScaleIO + API Gateway. + type: string + protectionDomain: + description: protectionDomain is the name of the ScaleIO + Protection Domain for the configured storage. + type: string + readOnly: + description: readOnly Defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: secretRef references to the secret for ScaleIO + user and other sensitive information. If this is not provided, + Login operation will fail. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + sslEnabled: + description: sslEnabled Flag enable/disable SSL communication + with Gateway, default false + type: boolean + storageMode: + description: storageMode indicates whether the storage for + a volume should be ThickProvisioned or ThinProvisioned. + Default is ThinProvisioned. + type: string + storagePool: + description: storagePool is the ScaleIO Storage Pool associated + with the protection domain. + type: string + system: + description: system is the name of the storage system as + configured in ScaleIO. + type: string + volumeName: + description: volumeName is the name of a volume already + created in the ScaleIO system that is associated with + this volume source. + type: string + required: + - gateway + - secretRef + - system + type: object + secret: + description: 'secret represents a secret that should populate + this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + properties: + defaultMode: + description: 'defaultMode is Optional: mode bits used to + set permissions on created files by default. Must be an + octal value between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. Defaults to + 0644. Directories within the path are not affected by + this setting. This might be in conflict with other options + that affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + items: + description: items If unspecified, each key-value pair in + the Data field of the referenced Secret will be projected + into the volume as a file whose name is the key and content + is the value. If specified, the listed keys will be projected + into the specified paths, and unlisted keys will not be + present. If a key is specified which is not present in + the Secret, the volume setup will error unless it is marked + optional. Paths must be relative and may not contain the + '..' path or start with '..'. + items: + description: Maps a string key to a path within a volume. + properties: + key: + description: key is the key to project. + type: string + mode: + description: 'mode is Optional: mode bits used to + set permissions on this file. Must be an octal value + between 0000 and 0777 or a decimal value between + 0 and 511. YAML accepts both octal and decimal values, + JSON requires decimal values for mode bits. If not + specified, the volume defaultMode will be used. + This might be in conflict with other options that + affect the file mode, like fsGroup, and the result + can be other mode bits set.' + format: int32 + type: integer + path: + description: path is the relative path of the file + to map the key to. May not be an absolute path. + May not contain the path element '..'. May not start + with the string '..'. + type: string + required: + - key + - path + type: object + type: array + optional: + description: optional field specify whether the Secret or + its keys must be defined + type: boolean + secretName: + description: 'secretName is the name of the secret in the + pod''s namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret' + type: string + type: object + storageos: + description: storageOS represents a StorageOS volume attached + and mounted on Kubernetes nodes. + properties: + fsType: + description: fsType is the filesystem type to mount. Must + be a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + readOnly: + description: readOnly defaults to false (read/write). ReadOnly + here will force the ReadOnly setting in VolumeMounts. + type: boolean + secretRef: + description: secretRef specifies the secret to use for obtaining + the StorageOS API credentials. If not specified, default + values will be attempted. + properties: + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?' + type: string + type: object + volumeName: + description: volumeName is the human-readable name of the + StorageOS volume. Volume names are only unique within + a namespace. + type: string + volumeNamespace: + description: volumeNamespace specifies the scope of the + volume within StorageOS. If no namespace is specified + then the Pod's namespace will be used. This allows the + Kubernetes name scoping to be mirrored within StorageOS + for tighter integration. Set VolumeName to any name to + override the default behaviour. Set to "default" if you + are not using namespaces within StorageOS. Namespaces + that do not pre-exist within StorageOS will be created. + type: string + type: object + vsphereVolume: + description: vsphereVolume represents a vSphere volume attached + and mounted on kubelets host machine + properties: + fsType: + description: fsType is filesystem type to mount. Must be + a filesystem type supported by the host operating system. + Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" + if unspecified. + type: string + storagePolicyID: + description: storagePolicyID is the storage Policy Based + Management (SPBM) profile ID associated with the StoragePolicyName. + type: string + storagePolicyName: + description: storagePolicyName is the storage Policy Based + Management (SPBM) profile name. + type: string + volumePath: + description: volumePath is the path that identifies vSphere + volume vmdk + type: string + required: + - volumePath + type: object + required: + - name + type: object + type: array + type: object + status: + description: ZookeeperClusterStatus defines the observed state of ZookeeperCluster + properties: + conditions: + description: Conditions list all the applied conditions + items: + description: ClusterCondition shows the current condition of a Zookeeper + cluster. Comply with k8s API conventions + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + type: string + lastUpdateTime: + description: The last time this condition was updated. + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of Zookeeper cluster condition. + type: string + type: object + type: array + currentVersion: + description: CurrentVersion is the current cluster version + type: string + externalClientEndpoint: + description: ExternalClientEndpoint is the internal client IP and + port + type: string + internalClientEndpoint: + description: InternalClientEndpoint is the internal client IP and + port + type: string + members: + description: Members is the zookeeper members in the cluster + properties: + ready: + items: + type: string + nullable: true + type: array + unready: + items: + type: string + nullable: true + type: array + type: object + metaRootCreated: + type: boolean + readyReplicas: + description: ReadyReplicas is the number of number of ready replicas + in the cluster + format: int32 + type: integer + replicas: + description: Replicas is the number of number of desired replicas + in the cluster + format: int32 + type: integer + targetVersion: + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/examples/zktg/deploy/default_ns/operator.yaml b/examples/zktg/deploy/default_ns/operator.yaml new file mode 100644 index 00000000000..5b1bfa0d107 --- /dev/null +++ b/examples/zktg/deploy/default_ns/operator.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zookeeper-operator +spec: + replicas: 1 + selector: + matchLabels: + name: zookeeper-operator + sievetag: zookeeper-operator + template: + metadata: + labels: + name: zookeeper-operator + sievetag: zookeeper-operator + spec: + serviceAccountName: zookeeper-operator + containers: + - name: zookeeper-operator + # Replace this with the built image name + image: ${SIEVE-DR}/zookeeper-operator:${SIEVE-DT} + ports: + - containerPort: 60000 + name: metrics + command: + - zookeeper-operator + imagePullPolicy: IfNotPresent + env: + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: "zookeeper-operator" + - name: KUBERNETES_SERVICE_HOST + value: "kind-control-plane" + - name: KUBERNETES_SERVICE_PORT + value: "6443" + envFrom: + - configMapRef: + name: sieve-testing-global-config diff --git a/examples/zktg/deploy/default_ns/rbac.yaml b/examples/zktg/deploy/default_ns/rbac.yaml new file mode 100644 index 00000000000..6db143bcc48 --- /dev/null +++ b/examples/zktg/deploy/default_ns/rbac.yaml @@ -0,0 +1,58 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: zookeeper-operator + +--- + +kind: Role +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: zookeeper-operator +rules: +- apiGroups: + - zookeeper.pravega.io + resources: + - "*" + verbs: + - "*" +- apiGroups: + - "" + resources: + - pods + - services + - endpoints + - persistentvolumeclaims + - events + - configmaps + - secrets + verbs: + - "*" +- apiGroups: + - apps + resources: + - deployments + - daemonsets + - replicasets + - statefulsets + verbs: + - "*" +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - "*" +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: zookeeper-operator +subjects: +- kind: ServiceAccount + name: zookeeper-operator + namespace: default +roleRef: + kind: Role + name: zookeeper-operator + apiGroup: rbac.authorization.k8s.io diff --git a/examples/zktg/deploy/deploy.sh b/examples/zktg/deploy/deploy.sh new file mode 100755 index 00000000000..8bf070facfe --- /dev/null +++ b/examples/zktg/deploy/deploy.sh @@ -0,0 +1,6 @@ +#!/bin/bash +set -x + +kubectl create -f crds +kubectl create -f default_ns/rbac.yaml +kubectl create -f default_ns/operator.yaml diff --git a/examples/zktg/oracle/recreate/controller_family.json b/examples/zktg/oracle/recreate/controller_family.json new file mode 100644 index 00000000000..e297c86d89d --- /dev/null +++ b/examples/zktg/oracle/recreate/controller_family.json @@ -0,0 +1,6 @@ +[ + "configmap/default/zookeeper-operator-lock", + "deployment/default/zookeeper-operator", + "pod/default/zookeeper-operator-5fc77867c7-k2fhl", + "replicaset/default/zookeeper-operator-5fc77867c7" +] \ No newline at end of file diff --git a/examples/zktg/oracle/recreate/event.json b/examples/zktg/oracle/recreate/event.json new file mode 100644 index 00000000000..22913dae6b9 --- /dev/null +++ b/examples/zktg/oracle/recreate/event.json @@ -0,0 +1,98 @@ +{ + "configmap/default/sieve-testing-global-config": { + "ADDED": 1, + "DELETED": 0 + }, + "configmap/default/zookeeper-cluster-configmap": { + "ADDED": 2, + "DELETED": 1 + }, + "configmap/default/zookeeper-operator-lock": { + "ADDED": 1, + "DELETED": 0 + }, + "controllerrevision/default/zookeeper-cluster-7cf668f98b": { + "ADDED": 2, + "DELETED": 1 + }, + "deployment/default/zookeeper-operator": { + "ADDED": 1, + "DELETED": 0 + }, + "endpoints/default/zookeeper-cluster-admin-server": { + "ADDED": 2, + "DELETED": 1 + }, + "endpoints/default/zookeeper-cluster-client": { + "ADDED": 2, + "DELETED": 1 + }, + "endpoints/default/zookeeper-cluster-headless": { + "ADDED": 2, + "DELETED": 1 + }, + "endpointslice/default/zookeeper-cluster-admin-server-*": { + "ADDED": 2, + "DELETED": 1 + }, + "endpointslice/default/zookeeper-cluster-client-*": { + "ADDED": 2, + "DELETED": 1 + }, + "endpointslice/default/zookeeper-cluster-headless-*": { + "ADDED": 2, + "DELETED": 1 + }, + "persistentvolumeclaim/default/data-zookeeper-cluster-0": { + "ADDED": 2, + "DELETED": 1 + }, + "pod/default/zookeeper-cluster-0": { + "ADDED": 2, + "DELETED": 1 + }, + "pod/default/zookeeper-operator-5fc77867c7-*": { + "ADDED": 1, + "DELETED": 0 + }, + "poddisruptionbudget/default/zookeeper-cluster": { + "ADDED": 2, + "DELETED": 1 + }, + "replicaset/default/zookeeper-operator-5fc77867c7": { + "ADDED": 1, + "DELETED": 0 + }, + "role/default/zookeeper-operator": { + "ADDED": 2, + "DELETED": 0 + }, + "rolebinding/default/zookeeper-operator": { + "ADDED": 2, + "DELETED": 0 + }, + "service/default/zookeeper-cluster-admin-server": { + "ADDED": 2, + "DELETED": 1 + }, + "service/default/zookeeper-cluster-client": { + "ADDED": 2, + "DELETED": 1 + }, + "service/default/zookeeper-cluster-headless": { + "ADDED": 2, + "DELETED": 1 + }, + "serviceaccount/default/zookeeper-operator": { + "ADDED": 1, + "DELETED": 0 + }, + "statefulset/default/zookeeper-cluster": { + "ADDED": 2, + "DELETED": 1 + }, + "zookeepercluster/default/zookeeper-cluster": { + "ADDED": 2, + "DELETED": 1 + } +} \ No newline at end of file diff --git a/examples/zktg/oracle/recreate/mask.json b/examples/zktg/oracle/recreate/mask.json new file mode 100644 index 00000000000..e0d60acd36e --- /dev/null +++ b/examples/zktg/oracle/recreate/mask.json @@ -0,0 +1,781 @@ +{ + "configmap/default/sieve-testing-global-config": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "configmap/default/zookeeper-cluster-configmap": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "configmap/default/zookeeper-operator-lock": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"7571169a-0a15-4f9f-9442-5f0ea2ee4a25\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "name" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "controllerrevision/default/zookeeper-cluster-7cf668f98b": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"f95c6d0f-5aab-4627-b40a-74ce932fd5fa\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "deployment/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "conditions", + "*", + "lastUpdateTime" + ] + ], + "endpoints/default/zookeeper-cluster-admin-server": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "iP" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "endpoints/default/zookeeper-cluster-client": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "iP" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "endpoints/default/zookeeper-cluster-headless": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "iP" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "persistentvolumeclaim/default/data-zookeeper-cluster-0": [ + [ + "metadata", + "annotations", + "volume.kubernetes.io/selected-node" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "volumeName" + ] + ], + "pod/default/zookeeper-cluster-0": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"f95c6d0f-5aab-4627-b40a-74ce932fd5fa\"}" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:status", + "f:podIPs", + "k:{\"ip\":\"10.244.1.6\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "containers", + "*", + "volumeMounts", + "*", + "name" + ], + [ + "spec", + "nodeName" + ], + [ + "spec", + "volumes", + "*", + "name" + ], + [ + "spec", + "volumes", + "*", + "secret", + "secretName" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "containerStatuses", + "*", + "containerID" + ], + [ + "status", + "containerStatuses", + "*", + "state", + "running", + "startedAt" + ], + [ + "status", + "hostIP" + ], + [ + "status", + "podIPs", + "*", + "iP" + ], + [ + "status", + "startTime" + ] + ], + "poddisruptionbudget/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "replicaset/default/zookeeper-operator-5fc77867c7": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"019d1a0d-b59a-4190-b98c-d5ca9784ce04\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "role/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "rolebinding/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "service/default/zookeeper-cluster-admin-server": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "clusterIP" + ], + [ + "spec", + "ports", + "*", + "nodePort" + ] + ], + "service/default/zookeeper-cluster-client": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "clusterIP" + ] + ], + "service/default/zookeeper-cluster-headless": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "serviceaccount/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "secrets", + "*", + "name" + ] + ], + "statefulset/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "zookeepercluster/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "conditions", + "*", + "lastUpdateTime" + ], + [ + "status", + "internalClientEndpoint" + ] + ] +} \ No newline at end of file diff --git a/examples/zktg/oracle/recreate/state.json b/examples/zktg/oracle/recreate/state.json new file mode 100644 index 00000000000..128b7e98bc4 --- /dev/null +++ b/examples/zktg/oracle/recreate/state.json @@ -0,0 +1,3402 @@ +{ + "configmap/default/sieve-testing-global-config": { + "BinaryData": null, + "Data": { + "SIEVE-CRD-LIST": "zookeepercluster", + "SIEVE-MODE": "learn", + "SIEVE-NAMESPACE": "default", + "SIEVE-RATE-LIMITER-ENABLED": "false", + "SIEVE-RATE-LIMITER-INTERVAL": "3", + "SIEVE-STAGE": "learn" + }, + "Immutable": null, + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"SIEVE-CRD-LIST\":\"zookeepercluster\",\"SIEVE-MODE\":\"learn\",\"SIEVE-NAMESPACE\":\"default\",\"SIEVE-RATE-LIMITER-ENABLED\":\"false\",\"SIEVE-RATE-LIMITER-INTERVAL\":\"3\",\"SIEVE-STAGE\":\"learn\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"name\":\"sieve-testing-global-config\",\"namespace\":\"default\"}}\n" + }, + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": { + ".": {}, + "f:SIEVE-CRD-LIST": {}, + "f:SIEVE-MODE": {}, + "f:SIEVE-NAMESPACE": {}, + "f:SIEVE-RATE-LIMITER-ENABLED": {}, + "f:SIEVE-RATE-LIMITER-INTERVAL": {}, + "f:SIEVE-STAGE": {} + }, + "f:metadata": { + "f:annotations": { + ".": {}, + "f:kubectl.kubernetes.io/last-applied-configuration": {} + } + } + }, + "manager": "kubectl-client-side-apply", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "sieve-testing-global-config", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "configmap/default/zookeeper-cluster-configmap": { + "BinaryData": null, + "Data": { + "env.sh": "#!/usr/bin/env bash\n\nDOMAIN=zookeeper-cluster-headless.default.svc.cluster.local\nQUORUM_PORT=2888\nLEADER_PORT=3888\nCLIENT_HOST=zookeeper-cluster-client\nCLIENT_PORT=2181\nADMIN_SERVER_HOST=zookeeper-cluster-admin-server\nADMIN_SERVER_PORT=8080\nCLUSTER_NAME=zookeeper-cluster\nCLUSTER_SIZE=1\n", + "log4j-quiet.properties": "log4j.rootLogger=ERROR, CONSOLE\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=ERROR\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n\n", + "log4j.properties": "zookeeper.root.logger=CONSOLE\nzookeeper.console.threshold=INFO\nlog4j.rootLogger=${zookeeper.root.logger}\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n\n", + "zoo.cfg": "4lw.commands.whitelist=cons, envi, conf, crst, srvr, stat, mntr, ruok\ndataDir=/data\nstandaloneEnabled=false\nreconfigEnabled=true\nskipACL=yes\nmetricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider\nmetricsProvider.httpPort=7000\nmetricsProvider.exportJvmInfo=true\ninitLimit=10\nsyncLimit=2\ntickTime=2000\nglobalOutstandingLimit=1000\npreAllocSize=65536\nsnapCount=10000\ncommitLogCount=500\nsnapSizeLimitInKb=4194304\nmaxCnxns=0\nmaxClientCnxns=60\nminSessionTimeout=4000\nmaxSessionTimeout=40000\nautopurge.snapRetainCount=3\nautopurge.purgeInterval=1\nquorumListenOnAllIPs=false\nadmin.serverPort=8080\ndynamicConfigFile=/data/zoo.cfg.dynamic\n" + }, + "Immutable": null, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": { + ".": {}, + "f:env.sh": {}, + "f:log4j-quiet.properties": {}, + "f:log4j.properties": {}, + "f:zoo.cfg": {} + }, + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-configmap", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "configmap/default/zookeeper-operator-lock": { + "BinaryData": null, + "Data": {}, + "Immutable": null, + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"7571169a-0a15-4f9f-9442-5f0ea2ee4a25\"}": "SIEVE-IGNORE" + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator-lock", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "Pod", + "name": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "controllerrevision/default/zookeeper-cluster-7cf668f98b": { + "Data": { + "spec": { + "template": { + "$patch": "replace", + "metadata": { + "creationTimestamp": null, + "generateName": "zookeeper-cluster", + "labels": { + "app": "zookeeper-cluster", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + } + }, + "spec": { + "affinity": { + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "podAffinityTerm": { + "labelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + }, + "weight": 20 + } + ] + } + }, + "containers": [ + { + "command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "env": [ + { + "name": "ENVOY_SIDECAR_STATUS", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.annotations['sidecar.istio.io/status']" + } + } + } + ], + "image": "pravega/zookeeper:0.2.8", + "imagePullPolicy": "Always", + "lifecycle": { + "preStop": { + "exec": { + "command": [ + "zookeeperTeardown.sh" + ] + } + } + }, + "livenessProbe": { + "exec": { + "command": [ + "zookeeperLive.sh" + ] + }, + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + }, + "name": "zookeeper", + "ports": [ + { + "containerPort": 2181, + "name": "client", + "protocol": "TCP" + }, + { + "containerPort": 2888, + "name": "quorum", + "protocol": "TCP" + }, + { + "containerPort": 3888, + "name": "leader-election", + "protocol": "TCP" + }, + { + "containerPort": 7000, + "name": "metrics", + "protocol": "TCP" + }, + { + "containerPort": 8080, + "name": "admin-server", + "protocol": "TCP" + } + ], + "readinessProbe": { + "exec": { + "command": [ + "zookeeperReady.sh" + ] + }, + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + }, + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/conf", + "name": "conf" + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "serviceAccount": "default", + "serviceAccountName": "default", + "terminationGracePeriodSeconds": 30, + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "name": "zookeeper-cluster-configmap" + }, + "name": "conf" + } + ] + } + } + } + }, + "Revision": 1, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "controller.kubernetes.io/hash": "7cf668f98b", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": {}, + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:controller.kubernetes.io/hash": {}, + "f:kind": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"f95c6d0f-5aab-4627-b40a-74ce932fd5fa\"}": "SIEVE-IGNORE" + } + }, + "f:revision": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-7cf668f98b", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "StatefulSet", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "deployment/default/zookeeper-operator": { + "Spec": { + "MinReadySeconds": 0, + "Paused": false, + "ProgressDeadlineSeconds": 600, + "Replicas": 1, + "RevisionHistoryLimit": 10, + "RollbackTo": null, + "Selector": { + "matchLabels": { + "name": "zookeeper-operator", + "sievetag": "zookeeper-operator" + } + }, + "Strategy": { + "RollingUpdate": { + "MaxSurge": "25%", + "MaxUnavailable": "25%" + }, + "Type": "RollingUpdate" + }, + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": null, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "zookeeper-operator" + ], + "Env": [ + { + "Name": "WATCH_NAMESPACE", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.namespace" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "POD_NAME", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.name" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "OPERATOR_NAME", + "Value": "zookeeper-operator", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_HOST", + "Value": "kind-control-plane", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_PORT", + "Value": "6443", + "ValueFrom": null + } + ], + "EnvFrom": [ + { + "ConfigMapRef": { + "Name": "sieve-testing-global-config", + "Optional": null + }, + "Prefix": "", + "SecretRef": null + } + ], + "Image": "ghcr.io/sieve-project/action/zookeeper-operator:learn", + "ImagePullPolicy": "IfNotPresent", + "Lifecycle": null, + "LivenessProbe": null, + "Name": "zookeeper-operator", + "Ports": [ + { + "ContainerPort": 60000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + } + ], + "ReadinessProbe": null, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": null, + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "zookeeper-operator", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": null + }, + "creationTimestamp": null, + "labels": { + "name": "zookeeper-operator", + "sievetag": "zookeeper-operator" + } + } + }, + "Status": { + "AvailableReplicas": 1, + "CollisionCount": null, + "Conditions": [ + { + "LastTransitionTime": "SIEVE-IGNORE", + "LastUpdateTime": "SIEVE-IGNORE", + "Message": "Deployment has minimum availability.", + "Reason": "MinimumReplicasAvailable", + "Status": "True", + "Type": "Available" + }, + { + "LastTransitionTime": "SIEVE-IGNORE", + "LastUpdateTime": "SIEVE-IGNORE", + "Message": "ReplicaSet \"zookeeper-operator-5fc77867c7\" has successfully progressed.", + "Reason": "NewReplicaSetAvailable", + "Status": "True", + "Type": "Progressing" + } + ], + "ObservedGeneration": 1, + "ReadyReplicas": 1, + "Replicas": 1, + "UnavailableReplicas": 0, + "UpdatedReplicas": 1 + }, + "annotations": { + "deployment.kubernetes.io/revision": "1" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:spec": { + "f:progressDeadlineSeconds": {}, + "f:replicas": {}, + "f:revisionHistoryLimit": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:name": {}, + "f:sievetag": {} + } + }, + "f:strategy": { + "f:rollingUpdate": { + ".": {}, + "f:maxSurge": {}, + "f:maxUnavailable": {} + }, + "f:type": {} + }, + "f:template": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:name": {}, + "f:sievetag": {} + } + }, + "f:spec": { + "f:containers": { + "k:{\"name\":\"zookeeper-operator\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"KUBERNETES_SERVICE_HOST\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"KUBERNETES_SERVICE_PORT\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"OPERATOR_NAME\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"POD_NAME\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + }, + "k:{\"name\":\"WATCH_NAMESPACE\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:envFrom": {}, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":60000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {} + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + } + } + } + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:deployment.kubernetes.io/revision": {} + } + }, + "f:status": { + "f:availableReplicas": {}, + "f:conditions": { + ".": {}, + "k:{\"type\":\"Available\"}": { + ".": {}, + "f:lastTransitionTime": {}, + "f:lastUpdateTime": {}, + "f:message": {}, + "f:reason": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Progressing\"}": { + ".": {}, + "f:lastTransitionTime": {}, + "f:lastUpdateTime": {}, + "f:message": {}, + "f:reason": {}, + "f:status": {}, + "f:type": {} + } + }, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {}, + "f:updatedReplicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-admin-server": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "", + "IP": "SIEVE-IGNORE", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "Port": 8080, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-admin-server", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-client": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "", + "IP": "SIEVE-IGNORE", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "Port": 2181, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-client", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-headless": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "zookeeper-cluster-0", + "IP": "SIEVE-IGNORE", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-leader-election", + "Port": 3888, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-client", + "Port": 2181, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-metrics", + "Port": 7000, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "Port": 8080, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-quorum", + "Port": 2888, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "true", + "release": "zookeeper-cluster", + "service.kubernetes.io/headless": "" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {}, + "f:service.kubernetes.io/headless": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-headless", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpointslice/default/zookeeper-cluster-admin-server-cpmh6": "SIEVE-IGNORE", + "endpointslice/default/zookeeper-cluster-client-blbxr": "SIEVE-IGNORE", + "endpointslice/default/zookeeper-cluster-headless-dkkjs": "SIEVE-IGNORE", + "persistentvolumeclaim/default/data-zookeeper-cluster-0": { + "Spec": { + "AccessModes": [ + "ReadWriteOnce" + ], + "DataSource": null, + "Resources": { + "Limits": null, + "Requests": { + "storage": "20Gi" + } + }, + "Selector": null, + "StorageClassName": "standard", + "VolumeMode": "Filesystem", + "VolumeName": "SIEVE-IGNORE" + }, + "Status": { + "AccessModes": [ + "ReadWriteOnce" + ], + "Capacity": { + "storage": "20Gi" + }, + "Conditions": null, + "Phase": "Bound" + }, + "annotations": { + "pv.kubernetes.io/bind-completed": "yes", + "pv.kubernetes.io/bound-by-controller": "yes", + "volume.beta.kubernetes.io/storage-provisioner": "rancher.io/local-path", + "volume.kubernetes.io/selected-node": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "finalizers": [ + "kubernetes.io/pvc-protection" + ], + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:volume.kubernetes.io/selected-node": {} + } + } + }, + "manager": "kube-scheduler", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + "f:pv.kubernetes.io/bind-completed": {}, + "f:pv.kubernetes.io/bound-by-controller": {}, + "f:volume.beta.kubernetes.io/storage-provisioner": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + } + }, + "f:spec": { + "f:accessModes": {}, + "f:resources": { + "f:requests": { + ".": {}, + "f:storage": {} + } + }, + "f:volumeMode": {}, + "f:volumeName": {} + }, + "f:status": { + "f:accessModes": {}, + "f:capacity": { + ".": {}, + "f:storage": {} + }, + "f:phase": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "data-zookeeper-cluster-0", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "pod/default/zookeeper-cluster-0": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": { + "NodeAffinity": null, + "PodAffinity": null, + "PodAntiAffinity": { + "PreferredDuringSchedulingIgnoredDuringExecution": [ + { + "PodAffinityTerm": { + "LabelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "Namespaces": null, + "TopologyKey": "kubernetes.io/hostname" + }, + "Weight": 20 + } + ], + "RequiredDuringSchedulingIgnoredDuringExecution": null + } + }, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "Env": [ + { + "Name": "ENVOY_SIDECAR_STATUS", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.annotations['sidecar.istio.io/status']" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + } + ], + "EnvFrom": null, + "Image": "pravega/zookeeper:0.2.8", + "ImagePullPolicy": "Always", + "Lifecycle": { + "PostStart": null, + "PreStop": { + "Exec": { + "Command": [ + "zookeeperTeardown.sh" + ] + }, + "HTTPGet": null, + "TCPSocket": null + } + }, + "LivenessProbe": { + "Exec": { + "Command": [ + "zookeeperLive.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Name": "zookeeper", + "Ports": [ + { + "ContainerPort": 2181, + "HostIP": "", + "HostPort": 0, + "Name": "client", + "Protocol": "TCP" + }, + { + "ContainerPort": 2888, + "HostIP": "", + "HostPort": 0, + "Name": "quorum", + "Protocol": "TCP" + }, + { + "ContainerPort": 3888, + "HostIP": "", + "HostPort": 0, + "Name": "leader-election", + "Protocol": "TCP" + }, + { + "ContainerPort": 7000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + }, + { + "ContainerPort": 8080, + "HostIP": "", + "HostPort": 0, + "Name": "admin-server", + "Protocol": "TCP" + } + ], + "ReadinessProbe": { + "Exec": { + "Command": [ + "zookeeperReady.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": [ + { + "MountPath": "/data", + "MountPropagation": null, + "Name": "data", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/conf", + "MountPropagation": null, + "Name": "conf", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "MountPropagation": null, + "Name": "SIEVE-IGNORE", + "ReadOnly": true, + "SubPath": "", + "SubPathExpr": "" + } + ], + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": true, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "zookeeper-cluster-0", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "SIEVE-IGNORE", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": 0, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "default", + "Subdomain": "zookeeper-cluster-headless", + "TerminationGracePeriodSeconds": 30, + "Tolerations": [ + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/not-ready", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + }, + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/unreachable", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + } + ], + "TopologySpreadConstraints": null, + "Volumes": [ + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "data", + "PersistentVolumeClaim": { + "ClaimName": "data-zookeeper-cluster-0", + "ReadOnly": false + }, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": { + "DefaultMode": 420, + "Items": null, + "Name": "zookeeper-cluster-configmap", + "Optional": null + }, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "conf", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "SIEVE-IGNORE", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": { + "DefaultMode": 420, + "Items": null, + "Optional": null, + "SecretName": "SIEVE-IGNORE" + }, + "StorageOS": null, + "VsphereVolume": null + } + ] + }, + "Status": { + "Conditions": [ + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Initialized" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Ready" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "ContainersReady" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "PodScheduled" + } + ], + "ContainerStatuses": [ + { + "ContainerID": "SIEVE-IGNORE", + "Image": "docker.io/pravega/zookeeper:0.2.8", + "ImageID": "docker.io/pravega/zookeeper@sha256:7c082d18d48b38a20cf4c19e0031d3a2603a2595a9af5a4413aac7af0225b3d5", + "LastTerminationState": { + "Running": null, + "Terminated": null, + "Waiting": null + }, + "Name": "zookeeper", + "Ready": true, + "RestartCount": 0, + "Started": true, + "State": { + "Running": { + "StartedAt": "SIEVE-IGNORE" + }, + "Terminated": null, + "Waiting": null + } + } + ], + "EphemeralContainerStatuses": null, + "HostIP": "SIEVE-IGNORE", + "InitContainerStatuses": null, + "Message": "", + "NominatedNodeName": "", + "Phase": "Running", + "PodIPs": [ + { + "IP": "SIEVE-IGNORE" + } + ], + "QOSClass": "BestEffort", + "Reason": "", + "StartTime": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generateName": "zookeeper-cluster-", + "labels": { + "app": "zookeeper-cluster", + "controller-revision-hash": "zookeeper-cluster-7cf668f98b", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster", + "statefulset.kubernetes.io/pod-name": "zookeeper-cluster-0" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:generateName": {}, + "f:labels": { + ".": {}, + "f:app": {}, + "f:controller-revision-hash": {}, + "f:kind": {}, + "f:release": {}, + "f:statefulset.kubernetes.io/pod-name": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"f95c6d0f-5aab-4627-b40a-74ce932fd5fa\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:containers": { + "k:{\"name\":\"zookeeper\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"ENVOY_SIDECAR_STATUS\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:lifecycle": { + ".": {}, + "f:preStop": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + } + } + }, + "f:livenessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:readinessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {}, + "f:volumeMounts": { + ".": {}, + "k:{\"mountPath\":\"/conf\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + }, + "k:{\"mountPath\":\"/data\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + } + } + } + }, + "f:dnsPolicy": {}, + "f:enableServiceLinks": {}, + "f:hostname": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:subdomain": {}, + "f:terminationGracePeriodSeconds": {}, + "f:volumes": { + ".": {}, + "k:{\"name\":\"conf\"}": { + ".": {}, + "f:configMap": { + ".": {}, + "f:defaultMode": {}, + "f:name": {} + }, + "f:name": {} + }, + "k:{\"name\":\"data\"}": { + ".": {}, + "f:name": {}, + "f:persistentVolumeClaim": { + ".": {}, + "f:claimName": {} + } + } + } + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:conditions": { + "k:{\"type\":\"ContainersReady\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Initialized\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Ready\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + } + }, + "f:containerStatuses": {}, + "f:hostIP": {}, + "f:phase": {}, + "f:podIP": {}, + "f:podIPs": { + ".": {}, + "k:{\"ip\":\"10.244.1.6\"}": "SIEVE-IGNORE" + }, + "f:startTime": {} + } + }, + "manager": "kubelet", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-0", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "StatefulSet", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "pod/default/zookeeper-operator-5fc77867c7-mzhd7": "SIEVE-IGNORE", + "poddisruptionbudget/default/zookeeper-cluster": { + "Spec": { + "MaxUnavailable": 1, + "MinAvailable": null, + "Selector": { + "matchLabels": { + "app": "zookeeper-cluster" + } + } + }, + "Status": { + "CurrentHealthy": 1, + "DesiredHealthy": 0, + "DisruptedPods": null, + "DisruptionsAllowed": 1, + "ExpectedPods": 1, + "ObservedGeneration": 1 + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "policy/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:maxUnavailable": {}, + "f:selector": { + ".": {}, + "f:matchLabels": { + ".": {}, + "f:app": {} + } + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "policy/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:currentHealthy": {}, + "f:disruptionsAllowed": {}, + "f:expectedPods": {}, + "f:observedGeneration": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "replicaset/default/zookeeper-operator-5fc77867c7": { + "Spec": { + "MinReadySeconds": 0, + "Replicas": 1, + "Selector": { + "matchLabels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + } + }, + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": null, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "zookeeper-operator" + ], + "Env": [ + { + "Name": "WATCH_NAMESPACE", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.namespace" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "POD_NAME", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.name" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "OPERATOR_NAME", + "Value": "zookeeper-operator", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_HOST", + "Value": "kind-control-plane", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_PORT", + "Value": "6443", + "ValueFrom": null + } + ], + "EnvFrom": [ + { + "ConfigMapRef": { + "Name": "sieve-testing-global-config", + "Optional": null + }, + "Prefix": "", + "SecretRef": null + } + ], + "Image": "ghcr.io/sieve-project/action/zookeeper-operator:learn", + "ImagePullPolicy": "IfNotPresent", + "Lifecycle": null, + "LivenessProbe": null, + "Name": "zookeeper-operator", + "Ports": [ + { + "ContainerPort": 60000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + } + ], + "ReadinessProbe": null, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": null, + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "zookeeper-operator", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": null + }, + "creationTimestamp": null, + "labels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + } + } + }, + "Status": { + "AvailableReplicas": 1, + "Conditions": null, + "FullyLabeledReplicas": 1, + "ObservedGeneration": 1, + "ReadyReplicas": 1, + "Replicas": 1 + }, + "annotations": { + "deployment.kubernetes.io/desired-replicas": "1", + "deployment.kubernetes.io/max-replicas": "2", + "deployment.kubernetes.io/revision": "1" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "labels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:deployment.kubernetes.io/desired-replicas": {}, + "f:deployment.kubernetes.io/max-replicas": {}, + "f:deployment.kubernetes.io/revision": {} + }, + "f:labels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"019d1a0d-b59a-4190-b98c-d5ca9784ce04\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:replicas": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + } + }, + "f:template": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + } + }, + "f:spec": { + "f:containers": { + "k:{\"name\":\"zookeeper-operator\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"KUBERNETES_SERVICE_HOST\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"KUBERNETES_SERVICE_PORT\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"OPERATOR_NAME\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"POD_NAME\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + }, + "k:{\"name\":\"WATCH_NAMESPACE\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:envFrom": {}, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":60000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {} + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + } + } + }, + "f:status": { + "f:availableReplicas": {}, + "f:fullyLabeledReplicas": {}, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator-5fc77867c7", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "Deployment", + "name": "zookeeper-operator", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "role/default/zookeeper-operator": { + "Rules": [ + { + "APIGroups": [ + "zookeeper.pravega.io" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "*" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "pods", + "services", + "endpoints", + "persistentvolumeclaims", + "events", + "configmaps", + "secrets" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "apps" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "deployments", + "daemonsets", + "replicasets", + "statefulsets" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "policy" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "poddisruptionbudgets" + ], + "Verbs": [ + "*" + ] + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:rules": {} + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "rolebinding/default/zookeeper-operator": { + "RoleRef": { + "APIGroup": "rbac.authorization.k8s.io", + "Kind": "Role", + "Name": "zookeeper-operator" + }, + "Subjects": [ + { + "APIGroup": "", + "Kind": "ServiceAccount", + "Name": "zookeeper-operator", + "Namespace": "default" + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:roleRef": { + "f:apiGroup": {}, + "f:kind": {}, + "f:name": {} + }, + "f:subjects": {} + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "secret/default/zookeeper-operator-token-cqn5s": "SIEVE-IGNORE", + "service/default/zookeeper-cluster-admin-server": { + "Spec": { + "ClusterIP": "SIEVE-IGNORE", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "Cluster", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "NodePort": "SIEVE-IGNORE", + "Port": 8080, + "Protocol": "TCP", + "TargetPort": 8080 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "LoadBalancer" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:externalTrafficPolicy": {}, + "f:ports": { + ".": {}, + "k:{\"port\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-admin-server", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "service/default/zookeeper-cluster-client": { + "Spec": { + "ClusterIP": "SIEVE-IGNORE", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "NodePort": 0, + "Port": 2181, + "Protocol": "TCP", + "TargetPort": 2181 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "ClusterIP" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:ports": { + ".": {}, + "k:{\"port\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-client", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "service/default/zookeeper-cluster-headless": { + "Spec": { + "ClusterIP": "None", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "NodePort": 0, + "Port": 2181, + "Protocol": "TCP", + "TargetPort": 2181 + }, + { + "AppProtocol": null, + "Name": "tcp-quorum", + "NodePort": 0, + "Port": 2888, + "Protocol": "TCP", + "TargetPort": 2888 + }, + { + "AppProtocol": null, + "Name": "tcp-leader-election", + "NodePort": 0, + "Port": 3888, + "Protocol": "TCP", + "TargetPort": 3888 + }, + { + "AppProtocol": null, + "Name": "tcp-metrics", + "NodePort": 0, + "Port": 7000, + "Protocol": "TCP", + "TargetPort": 7000 + }, + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "NodePort": 0, + "Port": 8080, + "Protocol": "TCP", + "TargetPort": 8080 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "ClusterIP" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "true", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:clusterIP": {}, + "f:ports": { + ".": {}, + "k:{\"port\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-headless", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "serviceaccount/default/zookeeper-operator": { + "AutomountServiceAccountToken": null, + "ImagePullSecrets": null, + "Secrets": [ + { + "APIVersion": "", + "FieldPath": "", + "Kind": "", + "Name": "SIEVE-IGNORE", + "Namespace": "", + "ResourceVersion": "", + "UID": "" + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "statefulset/default/zookeeper-cluster": { + "Spec": { + "PodManagementPolicy": "OrderedReady", + "Replicas": 1, + "RevisionHistoryLimit": 10, + "Selector": { + "matchLabels": { + "app": "zookeeper-cluster" + } + }, + "ServiceName": "zookeeper-cluster-headless", + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": { + "NodeAffinity": null, + "PodAffinity": null, + "PodAntiAffinity": { + "PreferredDuringSchedulingIgnoredDuringExecution": [ + { + "PodAffinityTerm": { + "LabelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "Namespaces": null, + "TopologyKey": "kubernetes.io/hostname" + }, + "Weight": 20 + } + ], + "RequiredDuringSchedulingIgnoredDuringExecution": null + } + }, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "Env": [ + { + "Name": "ENVOY_SIDECAR_STATUS", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.annotations['sidecar.istio.io/status']" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + } + ], + "EnvFrom": null, + "Image": "pravega/zookeeper:0.2.8", + "ImagePullPolicy": "Always", + "Lifecycle": { + "PostStart": null, + "PreStop": { + "Exec": { + "Command": [ + "zookeeperTeardown.sh" + ] + }, + "HTTPGet": null, + "TCPSocket": null + } + }, + "LivenessProbe": { + "Exec": { + "Command": [ + "zookeeperLive.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Name": "zookeeper", + "Ports": [ + { + "ContainerPort": 2181, + "HostIP": "", + "HostPort": 0, + "Name": "client", + "Protocol": "TCP" + }, + { + "ContainerPort": 2888, + "HostIP": "", + "HostPort": 0, + "Name": "quorum", + "Protocol": "TCP" + }, + { + "ContainerPort": 3888, + "HostIP": "", + "HostPort": 0, + "Name": "leader-election", + "Protocol": "TCP" + }, + { + "ContainerPort": 7000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + }, + { + "ContainerPort": 8080, + "HostIP": "", + "HostPort": 0, + "Name": "admin-server", + "Protocol": "TCP" + } + ], + "ReadinessProbe": { + "Exec": { + "Command": [ + "zookeeperReady.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": [ + { + "MountPath": "/data", + "MountPropagation": null, + "Name": "data", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/conf", + "MountPropagation": null, + "Name": "conf", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + } + ], + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "default", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": [ + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": { + "DefaultMode": 420, + "Items": null, + "Name": "zookeeper-cluster-configmap", + "Optional": null + }, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "conf", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + } + ] + }, + "creationTimestamp": null, + "generateName": "zookeeper-cluster", + "labels": { + "app": "zookeeper-cluster", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + } + }, + "UpdateStrategy": { + "RollingUpdate": null, + "Type": "RollingUpdate" + }, + "VolumeClaimTemplates": [ + { + "Spec": { + "AccessModes": [ + "ReadWriteOnce" + ], + "DataSource": null, + "Resources": { + "Limits": null, + "Requests": { + "storage": "20Gi" + } + }, + "Selector": null, + "StorageClassName": null, + "VolumeMode": "Filesystem", + "VolumeName": "" + }, + "Status": { + "AccessModes": null, + "Capacity": null, + "Conditions": null, + "Phase": "Pending" + }, + "creationTimestamp": null, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "name": "data" + } + ] + }, + "Status": { + "CollisionCount": 0, + "Conditions": null, + "CurrentReplicas": 1, + "CurrentRevision": "zookeeper-cluster-7cf668f98b", + "ObservedGeneration": 1, + "ReadyReplicas": 1, + "Replicas": 1, + "UpdateRevision": "zookeeper-cluster-7cf668f98b", + "UpdatedReplicas": 1 + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"d0f901ed-f33e-4d8a-8e0b-4017fab8b7f7\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:podManagementPolicy": {}, + "f:replicas": {}, + "f:revisionHistoryLimit": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:app": {} + } + }, + "f:serviceName": {}, + "f:template": { + "f:metadata": { + "f:generateName": {}, + "f:labels": { + ".": {}, + "f:app": {}, + "f:kind": {}, + "f:release": {} + } + }, + "f:spec": { + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:containers": { + "k:{\"name\":\"zookeeper\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"ENVOY_SIDECAR_STATUS\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:lifecycle": { + ".": {}, + "f:preStop": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + } + } + }, + "f:livenessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:readinessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {}, + "f:volumeMounts": { + ".": {}, + "k:{\"mountPath\":\"/conf\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + }, + "k:{\"mountPath\":\"/data\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + } + } + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {}, + "f:volumes": { + ".": {}, + "k:{\"name\":\"conf\"}": { + ".": {}, + "f:configMap": { + ".": {}, + "f:defaultMode": {}, + "f:name": {} + }, + "f:name": {} + } + } + } + }, + "f:updateStrategy": { + "f:type": {} + }, + "f:volumeClaimTemplates": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:collisionCount": {}, + "f:currentReplicas": {}, + "f:currentRevision": {}, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {}, + "f:updateRevision": {}, + "f:updatedReplicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "zookeepercluster/default/zookeeper-cluster": { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "kind": "ZookeeperCluster", + "metadata": { + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"zookeeper.pravega.io/v1beta1\",\"kind\":\"ZookeeperCluster\",\"metadata\":{\"annotations\":{},\"name\":\"zookeeper-cluster\",\"namespace\":\"default\"},\"spec\":{\"persistence\":{\"reclaimPolicy\":\"Delete\"},\"replicas\":1}}\n" + }, + "creationTimestamp": "SIEVE-IGNORE", + "finalizers": [ + "cleanUpZookeeperPVC" + ], + "generation": 2, + "managedFields": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:kubectl.kubernetes.io/last-applied-configuration": {} + } + }, + "f:spec": { + ".": {}, + "f:persistence": { + ".": {}, + "f:reclaimPolicy": {} + }, + "f:replicas": {} + } + }, + "manager": "kubectl-client-side-apply", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:finalizers": {} + }, + "f:spec": { + "f:config": { + ".": {}, + "f:autoPurgePurgeInterval": {}, + "f:autoPurgeSnapRetainCount": {}, + "f:commitLogCount": {}, + "f:globalOutstandingLimit": {}, + "f:initLimit": {}, + "f:maxClientCnxns": {}, + "f:maxSessionTimeout": {}, + "f:minSessionTimeout": {}, + "f:preAllocSize": {}, + "f:snapCount": {}, + "f:snapSizeLimitInKb": {}, + "f:syncLimit": {}, + "f:tickTime": {} + }, + "f:image": { + ".": {}, + "f:pullPolicy": {}, + "f:repository": {}, + "f:tag": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:persistence": { + "f:spec": { + ".": {}, + "f:accessModes": {}, + "f:resources": { + ".": {}, + "f:requests": { + ".": {}, + "f:storage": {} + } + } + } + }, + "f:pod": { + ".": {}, + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:resources": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + }, + "f:ports": {}, + "f:probes": { + ".": {}, + "f:livenessProbe": { + ".": {}, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:readinessProbe": { + ".": {}, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + } + }, + "f:storageType": {} + }, + "f:status": { + ".": {}, + "f:conditions": {}, + "f:currentVersion": {}, + "f:externalClientEndpoint": {}, + "f:internalClientEndpoint": {}, + "f:members": { + ".": {}, + "f:ready": {} + }, + "f:metaRootCreated": {}, + "f:readyReplicas": {}, + "f:replicas": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "spec": { + "config": { + "autoPurgePurgeInterval": 1, + "autoPurgeSnapRetainCount": 3, + "commitLogCount": 500, + "globalOutstandingLimit": 1000, + "initLimit": 10, + "maxClientCnxns": 60, + "maxSessionTimeout": 40000, + "minSessionTimeout": 4000, + "preAllocSize": 65536, + "snapCount": 10000, + "snapSizeLimitInKb": 4194304, + "syncLimit": 2, + "tickTime": 2000 + }, + "image": { + "pullPolicy": "Always", + "repository": "pravega/zookeeper", + "tag": "0.2.8" + }, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "persistence": { + "reclaimPolicy": "Delete", + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "20Gi" + } + } + } + }, + "pod": { + "affinity": { + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "podAffinityTerm": { + "labelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + }, + "weight": 20 + } + ] + } + }, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "resources": {}, + "serviceAccountName": "default", + "terminationGracePeriodSeconds": 30 + }, + "ports": [ + { + "containerPort": 2181, + "name": "client" + }, + { + "containerPort": 2888, + "name": "quorum" + }, + { + "containerPort": 3888, + "name": "leader-election" + }, + { + "containerPort": 7000, + "name": "metrics" + }, + { + "containerPort": 8080, + "name": "admin-server" + } + ], + "probes": { + "livenessProbe": { + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 0, + "timeoutSeconds": 10 + }, + "readinessProbe": { + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + } + }, + "replicas": 1, + "storageType": "persistence" + }, + "status": { + "conditions": [ + { + "lastTransitionTime": "SIEVE-IGNORE", + "lastUpdateTime": "SIEVE-IGNORE", + "status": "True", + "type": "PodsReady" + }, + { + "status": "False", + "type": "Upgrading" + }, + { + "status": "False", + "type": "Error" + } + ], + "currentVersion": "0.2.8", + "externalClientEndpoint": "N/A", + "internalClientEndpoint": "SIEVE-IGNORE", + "members": { + "ready": [ + "zookeeper-cluster-0" + ] + }, + "metaRootCreated": true, + "readyReplicas": 1, + "replicas": 1 + } + } +} \ No newline at end of file diff --git a/examples/zktg/oracle/scaledown-scaleup/controller_family.json b/examples/zktg/oracle/scaledown-scaleup/controller_family.json new file mode 100644 index 00000000000..f3717f81691 --- /dev/null +++ b/examples/zktg/oracle/scaledown-scaleup/controller_family.json @@ -0,0 +1,6 @@ +[ + "configmap/default/zookeeper-operator-lock", + "deployment/default/zookeeper-operator", + "pod/default/zookeeper-operator-5fc77867c7-twctv", + "replicaset/default/zookeeper-operator-5fc77867c7" +] \ No newline at end of file diff --git a/examples/zktg/oracle/scaledown-scaleup/event.json b/examples/zktg/oracle/scaledown-scaleup/event.json new file mode 100644 index 00000000000..f9e9dcac056 --- /dev/null +++ b/examples/zktg/oracle/scaledown-scaleup/event.json @@ -0,0 +1,106 @@ +{ + "configmap/default/sieve-testing-global-config": { + "ADDED": 1, + "DELETED": 0 + }, + "configmap/default/zookeeper-cluster-configmap": { + "ADDED": 1, + "DELETED": 0 + }, + "configmap/default/zookeeper-operator-lock": { + "ADDED": 1, + "DELETED": 0 + }, + "controllerrevision/default/zookeeper-cluster-7cf668f98b": { + "ADDED": 1, + "DELETED": 0 + }, + "deployment/default/zookeeper-operator": { + "ADDED": 1, + "DELETED": 0 + }, + "endpoints/default/zookeeper-cluster-admin-server": { + "ADDED": 1, + "DELETED": 0 + }, + "endpoints/default/zookeeper-cluster-client": { + "ADDED": 1, + "DELETED": 0 + }, + "endpoints/default/zookeeper-cluster-headless": { + "ADDED": 1, + "DELETED": 0 + }, + "endpointslice/default/zookeeper-cluster-admin-server-*": { + "ADDED": 1, + "DELETED": 0 + }, + "endpointslice/default/zookeeper-cluster-client-*": { + "ADDED": 1, + "DELETED": 0 + }, + "endpointslice/default/zookeeper-cluster-headless-*": { + "ADDED": 1, + "DELETED": 0 + }, + "persistentvolumeclaim/default/data-zookeeper-cluster-0": { + "ADDED": 1, + "DELETED": 0 + }, + "persistentvolumeclaim/default/data-zookeeper-cluster-1": { + "ADDED": 2, + "DELETED": 1 + }, + "pod/default/zookeeper-cluster-0": { + "ADDED": 1, + "DELETED": 0 + }, + "pod/default/zookeeper-cluster-1": { + "ADDED": 2, + "DELETED": 1 + }, + "pod/default/zookeeper-operator-5fc77867c7-*": { + "ADDED": 1, + "DELETED": 0 + }, + "poddisruptionbudget/default/zookeeper-cluster": { + "ADDED": 1, + "DELETED": 0 + }, + "replicaset/default/zookeeper-operator-5fc77867c7": { + "ADDED": 1, + "DELETED": 0 + }, + "role/default/zookeeper-operator": { + "ADDED": 2, + "DELETED": 0 + }, + "rolebinding/default/zookeeper-operator": { + "ADDED": 2, + "DELETED": 0 + }, + "service/default/zookeeper-cluster-admin-server": { + "ADDED": 1, + "DELETED": 0 + }, + "service/default/zookeeper-cluster-client": { + "ADDED": 1, + "DELETED": 0 + }, + "service/default/zookeeper-cluster-headless": { + "ADDED": 1, + "DELETED": 0 + }, + "serviceaccount/default/zookeeper-operator": { + "ADDED": 1, + "DELETED": 0 + }, + "statefulset/default/zookeeper-cluster": { + "ADDED": 1, + "DELETED": 0 + }, + "zookeepercluster/default/zookeeper-cluster": { + "ADDED": 1, + "DELETED": 0 + } +} \ No newline at end of file diff --git a/examples/zktg/oracle/scaledown-scaleup/mask.json b/examples/zktg/oracle/scaledown-scaleup/mask.json new file mode 100644 index 00000000000..fe3122dd078 --- /dev/null +++ b/examples/zktg/oracle/scaledown-scaleup/mask.json @@ -0,0 +1,858 @@ +{ + "configmap/default/sieve-testing-global-config": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "configmap/default/zookeeper-cluster-configmap": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "configmap/default/zookeeper-operator-lock": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"102f2244-705b-44b8-a924-34481b0735ac\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "name" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "controllerrevision/default/zookeeper-cluster-7cf668f98b": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "deployment/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "conditions", + "*", + "lastUpdateTime" + ] + ], + "endpoints/default/zookeeper-cluster-admin-server": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "endpoints/default/zookeeper-cluster-client": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "endpoints/default/zookeeper-cluster-headless": [ + [ + "metadata", + "annotations", + "endpoints.kubernetes.io/last-change-trigger-time" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "subsets", + "*", + "addresses", + "*", + "nodeName" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "resourceVersion" + ], + [ + "subsets", + "*", + "addresses", + "*", + "targetRef", + "uID" + ] + ], + "persistentvolumeclaim/default/data-zookeeper-cluster-0": [ + [ + "metadata", + "annotations", + "volume.kubernetes.io/selected-node" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "volumeName" + ] + ], + "persistentvolumeclaim/default/data-zookeeper-cluster-1": [ + [ + "metadata", + "annotations", + "volume.kubernetes.io/selected-node" + ], + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "volumeName" + ] + ], + "pod/default/zookeeper-cluster-0": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "containers", + "*", + "volumeMounts", + "*", + "name" + ], + [ + "spec", + "nodeName" + ], + [ + "spec", + "volumes", + "*", + "name" + ], + [ + "spec", + "volumes", + "*", + "secret", + "secretName" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "containerStatuses", + "*", + "containerID" + ], + [ + "status", + "containerStatuses", + "*", + "state", + "running", + "startedAt" + ], + [ + "status", + "startTime" + ] + ], + "pod/default/zookeeper-cluster-1": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "containers", + "*", + "volumeMounts", + "*", + "name" + ], + [ + "spec", + "nodeName" + ], + [ + "spec", + "volumes", + "*", + "name" + ], + [ + "spec", + "volumes", + "*", + "secret", + "secretName" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "containerStatuses", + "*", + "containerID" + ], + [ + "status", + "containerStatuses", + "*", + "state", + "running", + "startedAt" + ], + [ + "status", + "hostIP" + ], + [ + "status", + "startTime" + ] + ], + "poddisruptionbudget/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "replicaset/default/zookeeper-operator-5fc77867c7": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"4cf11f1a-32d2-4b79-a91e-9b04cd423805\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "role/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "rolebinding/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "service/default/zookeeper-cluster-admin-server": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "clusterIP" + ], + [ + "spec", + "ports", + "*", + "nodePort" + ] + ], + "service/default/zookeeper-cluster-client": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "spec", + "clusterIP" + ] + ], + "service/default/zookeeper-cluster-headless": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "serviceaccount/default/zookeeper-operator": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "secrets", + "*", + "name" + ] + ], + "statefulset/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "fieldsV1", + "f:metadata", + "f:ownerReferences", + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "ownerReferences", + "*", + "uid" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ] + ], + "zookeepercluster/default/zookeeper-cluster": [ + [ + "metadata", + "creationTimestamp" + ], + [ + "metadata", + "managedFields", + "*", + "time" + ], + [ + "metadata", + "resourceVersion" + ], + [ + "metadata", + "uid" + ], + [ + "status", + "conditions", + "*", + "lastTransitionTime" + ], + [ + "status", + "conditions", + "*", + "lastUpdateTime" + ], + [ + "status", + "internalClientEndpoint" + ] + ] +} \ No newline at end of file diff --git a/examples/zktg/oracle/scaledown-scaleup/state.json b/examples/zktg/oracle/scaledown-scaleup/state.json new file mode 100644 index 00000000000..5297c6754da --- /dev/null +++ b/examples/zktg/oracle/scaledown-scaleup/state.json @@ -0,0 +1,4214 @@ +{ + "configmap/default/sieve-testing-global-config": { + "BinaryData": null, + "Data": { + "SIEVE-CRD-LIST": "zookeepercluster", + "SIEVE-MODE": "learn", + "SIEVE-NAMESPACE": "default", + "SIEVE-RATE-LIMITER-ENABLED": "false", + "SIEVE-RATE-LIMITER-INTERVAL": "3", + "SIEVE-STAGE": "learn" + }, + "Immutable": null, + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"data\":{\"SIEVE-CRD-LIST\":\"zookeepercluster\",\"SIEVE-MODE\":\"learn\",\"SIEVE-NAMESPACE\":\"default\",\"SIEVE-RATE-LIMITER-ENABLED\":\"false\",\"SIEVE-RATE-LIMITER-INTERVAL\":\"3\",\"SIEVE-STAGE\":\"learn\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"name\":\"sieve-testing-global-config\",\"namespace\":\"default\"}}\n" + }, + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": { + ".": {}, + "f:SIEVE-CRD-LIST": {}, + "f:SIEVE-MODE": {}, + "f:SIEVE-NAMESPACE": {}, + "f:SIEVE-RATE-LIMITER-ENABLED": {}, + "f:SIEVE-RATE-LIMITER-INTERVAL": {}, + "f:SIEVE-STAGE": {} + }, + "f:metadata": { + "f:annotations": { + ".": {}, + "f:kubectl.kubernetes.io/last-applied-configuration": {} + } + } + }, + "manager": "kubectl-client-side-apply", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "sieve-testing-global-config", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "configmap/default/zookeeper-cluster-configmap": { + "BinaryData": null, + "Data": { + "env.sh": "#!/usr/bin/env bash\n\nDOMAIN=zookeeper-cluster-headless.default.svc.cluster.local\nQUORUM_PORT=2888\nLEADER_PORT=3888\nCLIENT_HOST=zookeeper-cluster-client\nCLIENT_PORT=2181\nADMIN_SERVER_HOST=zookeeper-cluster-admin-server\nADMIN_SERVER_PORT=8080\nCLUSTER_NAME=zookeeper-cluster\nCLUSTER_SIZE=2\n", + "log4j-quiet.properties": "log4j.rootLogger=ERROR, CONSOLE\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=ERROR\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n\n", + "log4j.properties": "zookeeper.root.logger=CONSOLE\nzookeeper.console.threshold=INFO\nlog4j.rootLogger=${zookeeper.root.logger}\nlog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender\nlog4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}\nlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout\nlog4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n\n", + "zoo.cfg": "4lw.commands.whitelist=cons, envi, conf, crst, srvr, stat, mntr, ruok\ndataDir=/data\nstandaloneEnabled=false\nreconfigEnabled=true\nskipACL=yes\nmetricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider\nmetricsProvider.httpPort=7000\nmetricsProvider.exportJvmInfo=true\ninitLimit=10\nsyncLimit=2\ntickTime=2000\nglobalOutstandingLimit=1000\npreAllocSize=65536\nsnapCount=10000\ncommitLogCount=500\nsnapSizeLimitInKb=4194304\nmaxCnxns=0\nmaxClientCnxns=60\nminSessionTimeout=4000\nmaxSessionTimeout=40000\nautopurge.snapRetainCount=3\nautopurge.purgeInterval=1\nquorumListenOnAllIPs=false\nadmin.serverPort=8080\ndynamicConfigFile=/data/zoo.cfg.dynamic\n" + }, + "Immutable": null, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": { + ".": {}, + "f:env.sh": {}, + "f:log4j-quiet.properties": {}, + "f:log4j.properties": {}, + "f:zoo.cfg": {} + }, + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-configmap", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "configmap/default/zookeeper-operator-lock": { + "BinaryData": null, + "Data": {}, + "Immutable": null, + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"102f2244-705b-44b8-a924-34481b0735ac\"}": "SIEVE-IGNORE" + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator-lock", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "Pod", + "name": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "controllerrevision/default/zookeeper-cluster-7cf668f98b": { + "Data": { + "spec": { + "template": { + "$patch": "replace", + "metadata": { + "creationTimestamp": null, + "generateName": "zookeeper-cluster", + "labels": { + "app": "zookeeper-cluster", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + } + }, + "spec": { + "affinity": { + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "podAffinityTerm": { + "labelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + }, + "weight": 20 + } + ] + } + }, + "containers": [ + { + "command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "env": [ + { + "name": "ENVOY_SIDECAR_STATUS", + "valueFrom": { + "fieldRef": { + "apiVersion": "v1", + "fieldPath": "metadata.annotations['sidecar.istio.io/status']" + } + } + } + ], + "image": "pravega/zookeeper:0.2.8", + "imagePullPolicy": "Always", + "lifecycle": { + "preStop": { + "exec": { + "command": [ + "zookeeperTeardown.sh" + ] + } + } + }, + "livenessProbe": { + "exec": { + "command": [ + "zookeeperLive.sh" + ] + }, + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + }, + "name": "zookeeper", + "ports": [ + { + "containerPort": 2181, + "name": "client", + "protocol": "TCP" + }, + { + "containerPort": 2888, + "name": "quorum", + "protocol": "TCP" + }, + { + "containerPort": 3888, + "name": "leader-election", + "protocol": "TCP" + }, + { + "containerPort": 7000, + "name": "metrics", + "protocol": "TCP" + }, + { + "containerPort": 8080, + "name": "admin-server", + "protocol": "TCP" + } + ], + "readinessProbe": { + "exec": { + "command": [ + "zookeeperReady.sh" + ] + }, + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + }, + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/data", + "name": "data" + }, + { + "mountPath": "/conf", + "name": "conf" + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "restartPolicy": "Always", + "schedulerName": "default-scheduler", + "securityContext": {}, + "serviceAccount": "default", + "serviceAccountName": "default", + "terminationGracePeriodSeconds": 30, + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "name": "zookeeper-cluster-configmap" + }, + "name": "conf" + } + ] + } + } + } + }, + "Revision": 1, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "controller.kubernetes.io/hash": "7cf668f98b", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:data": {}, + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:controller.kubernetes.io/hash": {}, + "f:kind": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}": "SIEVE-IGNORE" + } + }, + "f:revision": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-7cf668f98b", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "StatefulSet", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "deployment/default/zookeeper-operator": { + "Spec": { + "MinReadySeconds": 0, + "Paused": false, + "ProgressDeadlineSeconds": 600, + "Replicas": 1, + "RevisionHistoryLimit": 10, + "RollbackTo": null, + "Selector": { + "matchLabels": { + "name": "zookeeper-operator", + "sievetag": "zookeeper-operator" + } + }, + "Strategy": { + "RollingUpdate": { + "MaxSurge": "25%", + "MaxUnavailable": "25%" + }, + "Type": "RollingUpdate" + }, + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": null, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "zookeeper-operator" + ], + "Env": [ + { + "Name": "WATCH_NAMESPACE", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.namespace" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "POD_NAME", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.name" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "OPERATOR_NAME", + "Value": "zookeeper-operator", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_HOST", + "Value": "kind-control-plane", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_PORT", + "Value": "6443", + "ValueFrom": null + } + ], + "EnvFrom": [ + { + "ConfigMapRef": { + "Name": "sieve-testing-global-config", + "Optional": null + }, + "Prefix": "", + "SecretRef": null + } + ], + "Image": "ghcr.io/sieve-project/action/zookeeper-operator:learn", + "ImagePullPolicy": "IfNotPresent", + "Lifecycle": null, + "LivenessProbe": null, + "Name": "zookeeper-operator", + "Ports": [ + { + "ContainerPort": 60000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + } + ], + "ReadinessProbe": null, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": null, + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "zookeeper-operator", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": null + }, + "creationTimestamp": null, + "labels": { + "name": "zookeeper-operator", + "sievetag": "zookeeper-operator" + } + } + }, + "Status": { + "AvailableReplicas": 1, + "CollisionCount": null, + "Conditions": [ + { + "LastTransitionTime": "SIEVE-IGNORE", + "LastUpdateTime": "SIEVE-IGNORE", + "Message": "Deployment has minimum availability.", + "Reason": "MinimumReplicasAvailable", + "Status": "True", + "Type": "Available" + }, + { + "LastTransitionTime": "SIEVE-IGNORE", + "LastUpdateTime": "SIEVE-IGNORE", + "Message": "ReplicaSet \"zookeeper-operator-5fc77867c7\" has successfully progressed.", + "Reason": "NewReplicaSetAvailable", + "Status": "True", + "Type": "Progressing" + } + ], + "ObservedGeneration": 1, + "ReadyReplicas": 1, + "Replicas": 1, + "UnavailableReplicas": 0, + "UpdatedReplicas": 1 + }, + "annotations": { + "deployment.kubernetes.io/revision": "1" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:spec": { + "f:progressDeadlineSeconds": {}, + "f:replicas": {}, + "f:revisionHistoryLimit": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:name": {}, + "f:sievetag": {} + } + }, + "f:strategy": { + "f:rollingUpdate": { + ".": {}, + "f:maxSurge": {}, + "f:maxUnavailable": {} + }, + "f:type": {} + }, + "f:template": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:name": {}, + "f:sievetag": {} + } + }, + "f:spec": { + "f:containers": { + "k:{\"name\":\"zookeeper-operator\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"KUBERNETES_SERVICE_HOST\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"KUBERNETES_SERVICE_PORT\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"OPERATOR_NAME\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"POD_NAME\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + }, + "k:{\"name\":\"WATCH_NAMESPACE\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:envFrom": {}, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":60000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {} + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + } + } + } + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:deployment.kubernetes.io/revision": {} + } + }, + "f:status": { + "f:availableReplicas": {}, + "f:conditions": { + ".": {}, + "k:{\"type\":\"Available\"}": { + ".": {}, + "f:lastTransitionTime": {}, + "f:lastUpdateTime": {}, + "f:message": {}, + "f:reason": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Progressing\"}": { + ".": {}, + "f:lastTransitionTime": {}, + "f:lastUpdateTime": {}, + "f:message": {}, + "f:reason": {}, + "f:status": {}, + "f:type": {} + } + }, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {}, + "f:updatedReplicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-admin-server": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "", + "IP": "10.244.1.6", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-1", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + }, + { + "Hostname": "", + "IP": "10.244.2.4", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "Port": 8080, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-admin-server", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-client": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "", + "IP": "10.244.1.6", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-1", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + }, + { + "Hostname": "", + "IP": "10.244.2.4", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "Port": 2181, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-client", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpoints/default/zookeeper-cluster-headless": { + "Subsets": [ + { + "Addresses": [ + { + "Hostname": "zookeeper-cluster-1", + "IP": "10.244.1.6", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-1", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + }, + { + "Hostname": "zookeeper-cluster-0", + "IP": "10.244.2.4", + "NodeName": "SIEVE-IGNORE", + "TargetRef": { + "APIVersion": "", + "FieldPath": "", + "Kind": "Pod", + "Name": "zookeeper-cluster-0", + "Namespace": "default", + "ResourceVersion": "SIEVE-IGNORE", + "UID": "SIEVE-IGNORE" + } + } + ], + "NotReadyAddresses": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-leader-election", + "Port": 3888, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-client", + "Port": 2181, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-metrics", + "Port": 7000, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "Port": 8080, + "Protocol": "TCP" + }, + { + "AppProtocol": null, + "Name": "tcp-quorum", + "Port": 2888, + "Protocol": "TCP" + } + ] + } + ], + "annotations": { + "endpoints.kubernetes.io/last-change-trigger-time": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "true", + "release": "zookeeper-cluster", + "service.kubernetes.io/headless": "" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:endpoints.kubernetes.io/last-change-trigger-time": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {}, + "f:service.kubernetes.io/headless": {} + } + }, + "f:subsets": {} + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-headless", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "endpointslice/default/zookeeper-cluster-admin-server-6t88x": "SIEVE-IGNORE", + "endpointslice/default/zookeeper-cluster-client-7chlr": "SIEVE-IGNORE", + "endpointslice/default/zookeeper-cluster-headless-jt628": "SIEVE-IGNORE", + "persistentvolumeclaim/default/data-zookeeper-cluster-0": { + "Spec": { + "AccessModes": [ + "ReadWriteOnce" + ], + "DataSource": null, + "Resources": { + "Limits": null, + "Requests": { + "storage": "20Gi" + } + }, + "Selector": null, + "StorageClassName": "standard", + "VolumeMode": "Filesystem", + "VolumeName": "SIEVE-IGNORE" + }, + "Status": { + "AccessModes": [ + "ReadWriteOnce" + ], + "Capacity": { + "storage": "20Gi" + }, + "Conditions": null, + "Phase": "Bound" + }, + "annotations": { + "pv.kubernetes.io/bind-completed": "yes", + "pv.kubernetes.io/bound-by-controller": "yes", + "volume.beta.kubernetes.io/storage-provisioner": "rancher.io/local-path", + "volume.kubernetes.io/selected-node": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "finalizers": [ + "kubernetes.io/pvc-protection" + ], + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:volume.kubernetes.io/selected-node": {} + } + } + }, + "manager": "kube-scheduler", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + "f:pv.kubernetes.io/bind-completed": {}, + "f:pv.kubernetes.io/bound-by-controller": {}, + "f:volume.beta.kubernetes.io/storage-provisioner": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + } + }, + "f:spec": { + "f:accessModes": {}, + "f:resources": { + "f:requests": { + ".": {}, + "f:storage": {} + } + }, + "f:volumeMode": {}, + "f:volumeName": {} + }, + "f:status": { + "f:accessModes": {}, + "f:capacity": { + ".": {}, + "f:storage": {} + }, + "f:phase": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "data-zookeeper-cluster-0", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "persistentvolumeclaim/default/data-zookeeper-cluster-1": { + "Spec": { + "AccessModes": [ + "ReadWriteOnce" + ], + "DataSource": null, + "Resources": { + "Limits": null, + "Requests": { + "storage": "20Gi" + } + }, + "Selector": null, + "StorageClassName": "standard", + "VolumeMode": "Filesystem", + "VolumeName": "SIEVE-IGNORE" + }, + "Status": { + "AccessModes": [ + "ReadWriteOnce" + ], + "Capacity": { + "storage": "20Gi" + }, + "Conditions": null, + "Phase": "Bound" + }, + "annotations": { + "pv.kubernetes.io/bind-completed": "yes", + "pv.kubernetes.io/bound-by-controller": "yes", + "volume.beta.kubernetes.io/storage-provisioner": "rancher.io/local-path", + "volume.kubernetes.io/selected-node": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "finalizers": [ + "kubernetes.io/pvc-protection" + ], + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:volume.kubernetes.io/selected-node": {} + } + } + }, + "manager": "kube-scheduler", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + "f:pv.kubernetes.io/bind-completed": {}, + "f:pv.kubernetes.io/bound-by-controller": {}, + "f:volume.beta.kubernetes.io/storage-provisioner": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + } + }, + "f:spec": { + "f:accessModes": {}, + "f:resources": { + "f:requests": { + ".": {}, + "f:storage": {} + } + }, + "f:volumeMode": {}, + "f:volumeName": {} + }, + "f:status": { + "f:accessModes": {}, + "f:capacity": { + ".": {}, + "f:storage": {} + }, + "f:phase": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "data-zookeeper-cluster-1", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "pod/default/zookeeper-cluster-0": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": { + "NodeAffinity": null, + "PodAffinity": null, + "PodAntiAffinity": { + "PreferredDuringSchedulingIgnoredDuringExecution": [ + { + "PodAffinityTerm": { + "LabelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "Namespaces": null, + "TopologyKey": "kubernetes.io/hostname" + }, + "Weight": 20 + } + ], + "RequiredDuringSchedulingIgnoredDuringExecution": null + } + }, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "Env": [ + { + "Name": "ENVOY_SIDECAR_STATUS", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.annotations['sidecar.istio.io/status']" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + } + ], + "EnvFrom": null, + "Image": "pravega/zookeeper:0.2.8", + "ImagePullPolicy": "Always", + "Lifecycle": { + "PostStart": null, + "PreStop": { + "Exec": { + "Command": [ + "zookeeperTeardown.sh" + ] + }, + "HTTPGet": null, + "TCPSocket": null + } + }, + "LivenessProbe": { + "Exec": { + "Command": [ + "zookeeperLive.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Name": "zookeeper", + "Ports": [ + { + "ContainerPort": 2181, + "HostIP": "", + "HostPort": 0, + "Name": "client", + "Protocol": "TCP" + }, + { + "ContainerPort": 2888, + "HostIP": "", + "HostPort": 0, + "Name": "quorum", + "Protocol": "TCP" + }, + { + "ContainerPort": 3888, + "HostIP": "", + "HostPort": 0, + "Name": "leader-election", + "Protocol": "TCP" + }, + { + "ContainerPort": 7000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + }, + { + "ContainerPort": 8080, + "HostIP": "", + "HostPort": 0, + "Name": "admin-server", + "Protocol": "TCP" + } + ], + "ReadinessProbe": { + "Exec": { + "Command": [ + "zookeeperReady.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": [ + { + "MountPath": "/data", + "MountPropagation": null, + "Name": "data", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/conf", + "MountPropagation": null, + "Name": "conf", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "MountPropagation": null, + "Name": "SIEVE-IGNORE", + "ReadOnly": true, + "SubPath": "", + "SubPathExpr": "" + } + ], + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": true, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "zookeeper-cluster-0", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "SIEVE-IGNORE", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": 0, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "default", + "Subdomain": "zookeeper-cluster-headless", + "TerminationGracePeriodSeconds": 30, + "Tolerations": [ + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/not-ready", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + }, + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/unreachable", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + } + ], + "TopologySpreadConstraints": null, + "Volumes": [ + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "data", + "PersistentVolumeClaim": { + "ClaimName": "data-zookeeper-cluster-0", + "ReadOnly": false + }, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": { + "DefaultMode": 420, + "Items": null, + "Name": "zookeeper-cluster-configmap", + "Optional": null + }, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "conf", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "SIEVE-IGNORE", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": { + "DefaultMode": 420, + "Items": null, + "Optional": null, + "SecretName": "SIEVE-IGNORE" + }, + "StorageOS": null, + "VsphereVolume": null + } + ] + }, + "Status": { + "Conditions": [ + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Initialized" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Ready" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "ContainersReady" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "PodScheduled" + } + ], + "ContainerStatuses": [ + { + "ContainerID": "SIEVE-IGNORE", + "Image": "docker.io/pravega/zookeeper:0.2.8", + "ImageID": "docker.io/pravega/zookeeper@sha256:7c082d18d48b38a20cf4c19e0031d3a2603a2595a9af5a4413aac7af0225b3d5", + "LastTerminationState": { + "Running": null, + "Terminated": null, + "Waiting": null + }, + "Name": "zookeeper", + "Ready": true, + "RestartCount": 0, + "Started": true, + "State": { + "Running": { + "StartedAt": "SIEVE-IGNORE" + }, + "Terminated": null, + "Waiting": null + } + } + ], + "EphemeralContainerStatuses": null, + "HostIP": "192.168.0.2", + "InitContainerStatuses": null, + "Message": "", + "NominatedNodeName": "", + "Phase": "Running", + "PodIPs": [ + { + "IP": "10.244.2.4" + } + ], + "QOSClass": "BestEffort", + "Reason": "", + "StartTime": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generateName": "zookeeper-cluster-", + "labels": { + "app": "zookeeper-cluster", + "controller-revision-hash": "zookeeper-cluster-7cf668f98b", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster", + "statefulset.kubernetes.io/pod-name": "zookeeper-cluster-0" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:generateName": {}, + "f:labels": { + ".": {}, + "f:app": {}, + "f:controller-revision-hash": {}, + "f:kind": {}, + "f:release": {}, + "f:statefulset.kubernetes.io/pod-name": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:containers": { + "k:{\"name\":\"zookeeper\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"ENVOY_SIDECAR_STATUS\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:lifecycle": { + ".": {}, + "f:preStop": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + } + } + }, + "f:livenessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:readinessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {}, + "f:volumeMounts": { + ".": {}, + "k:{\"mountPath\":\"/conf\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + }, + "k:{\"mountPath\":\"/data\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + } + } + } + }, + "f:dnsPolicy": {}, + "f:enableServiceLinks": {}, + "f:hostname": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:subdomain": {}, + "f:terminationGracePeriodSeconds": {}, + "f:volumes": { + ".": {}, + "k:{\"name\":\"conf\"}": { + ".": {}, + "f:configMap": { + ".": {}, + "f:defaultMode": {}, + "f:name": {} + }, + "f:name": {} + }, + "k:{\"name\":\"data\"}": { + ".": {}, + "f:name": {}, + "f:persistentVolumeClaim": { + ".": {}, + "f:claimName": {} + } + } + } + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:conditions": { + "k:{\"type\":\"ContainersReady\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Initialized\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Ready\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + } + }, + "f:containerStatuses": {}, + "f:hostIP": {}, + "f:phase": {}, + "f:podIP": {}, + "f:podIPs": { + ".": {}, + "k:{\"ip\":\"10.244.2.4\"}": { + ".": {}, + "f:ip": {} + } + }, + "f:startTime": {} + } + }, + "manager": "kubelet", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-0", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "StatefulSet", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "pod/default/zookeeper-cluster-1": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": { + "NodeAffinity": null, + "PodAffinity": null, + "PodAntiAffinity": { + "PreferredDuringSchedulingIgnoredDuringExecution": [ + { + "PodAffinityTerm": { + "LabelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "Namespaces": null, + "TopologyKey": "kubernetes.io/hostname" + }, + "Weight": 20 + } + ], + "RequiredDuringSchedulingIgnoredDuringExecution": null + } + }, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "Env": [ + { + "Name": "ENVOY_SIDECAR_STATUS", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.annotations['sidecar.istio.io/status']" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + } + ], + "EnvFrom": null, + "Image": "pravega/zookeeper:0.2.8", + "ImagePullPolicy": "Always", + "Lifecycle": { + "PostStart": null, + "PreStop": { + "Exec": { + "Command": [ + "zookeeperTeardown.sh" + ] + }, + "HTTPGet": null, + "TCPSocket": null + } + }, + "LivenessProbe": { + "Exec": { + "Command": [ + "zookeeperLive.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Name": "zookeeper", + "Ports": [ + { + "ContainerPort": 2181, + "HostIP": "", + "HostPort": 0, + "Name": "client", + "Protocol": "TCP" + }, + { + "ContainerPort": 2888, + "HostIP": "", + "HostPort": 0, + "Name": "quorum", + "Protocol": "TCP" + }, + { + "ContainerPort": 3888, + "HostIP": "", + "HostPort": 0, + "Name": "leader-election", + "Protocol": "TCP" + }, + { + "ContainerPort": 7000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + }, + { + "ContainerPort": 8080, + "HostIP": "", + "HostPort": 0, + "Name": "admin-server", + "Protocol": "TCP" + } + ], + "ReadinessProbe": { + "Exec": { + "Command": [ + "zookeeperReady.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": [ + { + "MountPath": "/data", + "MountPropagation": null, + "Name": "data", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/conf", + "MountPropagation": null, + "Name": "conf", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/var/run/secrets/kubernetes.io/serviceaccount", + "MountPropagation": null, + "Name": "SIEVE-IGNORE", + "ReadOnly": true, + "SubPath": "", + "SubPathExpr": "" + } + ], + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": true, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "zookeeper-cluster-1", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "SIEVE-IGNORE", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": 0, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "default", + "Subdomain": "zookeeper-cluster-headless", + "TerminationGracePeriodSeconds": 30, + "Tolerations": [ + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/not-ready", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + }, + { + "Effect": "NoExecute", + "Key": "node.kubernetes.io/unreachable", + "Operator": "Exists", + "TolerationSeconds": 300, + "Value": "" + } + ], + "TopologySpreadConstraints": null, + "Volumes": [ + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "data", + "PersistentVolumeClaim": { + "ClaimName": "data-zookeeper-cluster-1", + "ReadOnly": false + }, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": { + "DefaultMode": 420, + "Items": null, + "Name": "zookeeper-cluster-configmap", + "Optional": null + }, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "conf", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + }, + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": null, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "SIEVE-IGNORE", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": { + "DefaultMode": 420, + "Items": null, + "Optional": null, + "SecretName": "SIEVE-IGNORE" + }, + "StorageOS": null, + "VsphereVolume": null + } + ] + }, + "Status": { + "Conditions": [ + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Initialized" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "Ready" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "ContainersReady" + }, + { + "LastProbeTime": null, + "LastTransitionTime": "SIEVE-IGNORE", + "Message": "", + "Reason": "", + "Status": "True", + "Type": "PodScheduled" + } + ], + "ContainerStatuses": [ + { + "ContainerID": "SIEVE-IGNORE", + "Image": "docker.io/pravega/zookeeper:0.2.8", + "ImageID": "docker.io/pravega/zookeeper@sha256:7c082d18d48b38a20cf4c19e0031d3a2603a2595a9af5a4413aac7af0225b3d5", + "LastTerminationState": { + "Running": null, + "Terminated": null, + "Waiting": null + }, + "Name": "zookeeper", + "Ready": true, + "RestartCount": 0, + "Started": true, + "State": { + "Running": { + "StartedAt": "SIEVE-IGNORE" + }, + "Terminated": null, + "Waiting": null + } + } + ], + "EphemeralContainerStatuses": null, + "HostIP": "SIEVE-IGNORE", + "InitContainerStatuses": null, + "Message": "", + "NominatedNodeName": "", + "Phase": "Running", + "PodIPs": [ + { + "IP": "10.244.1.6" + } + ], + "QOSClass": "BestEffort", + "Reason": "", + "StartTime": "SIEVE-IGNORE" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generateName": "zookeeper-cluster-", + "labels": { + "app": "zookeeper-cluster", + "controller-revision-hash": "zookeeper-cluster-7cf668f98b", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster", + "statefulset.kubernetes.io/pod-name": "zookeeper-cluster-1" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:generateName": {}, + "f:labels": { + ".": {}, + "f:app": {}, + "f:controller-revision-hash": {}, + "f:kind": {}, + "f:release": {}, + "f:statefulset.kubernetes.io/pod-name": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"017a79e2-658d-446a-9fcf-872e6192a6de\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:containers": { + "k:{\"name\":\"zookeeper\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"ENVOY_SIDECAR_STATUS\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:lifecycle": { + ".": {}, + "f:preStop": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + } + } + }, + "f:livenessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:readinessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {}, + "f:volumeMounts": { + ".": {}, + "k:{\"mountPath\":\"/conf\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + }, + "k:{\"mountPath\":\"/data\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + } + } + } + }, + "f:dnsPolicy": {}, + "f:enableServiceLinks": {}, + "f:hostname": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:subdomain": {}, + "f:terminationGracePeriodSeconds": {}, + "f:volumes": { + ".": {}, + "k:{\"name\":\"conf\"}": { + ".": {}, + "f:configMap": { + ".": {}, + "f:defaultMode": {}, + "f:name": {} + }, + "f:name": {} + }, + "k:{\"name\":\"data\"}": { + ".": {}, + "f:name": {}, + "f:persistentVolumeClaim": { + ".": {}, + "f:claimName": {} + } + } + } + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:conditions": { + "k:{\"type\":\"ContainersReady\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Initialized\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + }, + "k:{\"type\":\"Ready\"}": { + ".": {}, + "f:lastProbeTime": {}, + "f:lastTransitionTime": {}, + "f:status": {}, + "f:type": {} + } + }, + "f:containerStatuses": {}, + "f:hostIP": {}, + "f:phase": {}, + "f:podIP": {}, + "f:podIPs": { + ".": {}, + "k:{\"ip\":\"10.244.1.6\"}": { + ".": {}, + "f:ip": {} + } + }, + "f:startTime": {} + } + }, + "manager": "kubelet", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-1", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "StatefulSet", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "pod/default/zookeeper-operator-5fc77867c7-6g868": "SIEVE-IGNORE", + "poddisruptionbudget/default/zookeeper-cluster": { + "Spec": { + "MaxUnavailable": 1, + "MinAvailable": null, + "Selector": { + "matchLabels": { + "app": "zookeeper-cluster" + } + } + }, + "Status": { + "CurrentHealthy": 2, + "DesiredHealthy": 1, + "DisruptedPods": null, + "DisruptionsAllowed": 1, + "ExpectedPods": 2, + "ObservedGeneration": 1 + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "policy/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:maxUnavailable": {}, + "f:selector": { + ".": {}, + "f:matchLabels": { + ".": {}, + "f:app": {} + } + } + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "policy/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:currentHealthy": {}, + "f:desiredHealthy": {}, + "f:disruptionsAllowed": {}, + "f:expectedPods": {}, + "f:observedGeneration": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "replicaset/default/zookeeper-operator-5fc77867c7": { + "Spec": { + "MinReadySeconds": 0, + "Replicas": 1, + "Selector": { + "matchLabels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + } + }, + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": null, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "zookeeper-operator" + ], + "Env": [ + { + "Name": "WATCH_NAMESPACE", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.namespace" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "POD_NAME", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.name" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + }, + { + "Name": "OPERATOR_NAME", + "Value": "zookeeper-operator", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_HOST", + "Value": "kind-control-plane", + "ValueFrom": null + }, + { + "Name": "KUBERNETES_SERVICE_PORT", + "Value": "6443", + "ValueFrom": null + } + ], + "EnvFrom": [ + { + "ConfigMapRef": { + "Name": "sieve-testing-global-config", + "Optional": null + }, + "Prefix": "", + "SecretRef": null + } + ], + "Image": "ghcr.io/sieve-project/action/zookeeper-operator:learn", + "ImagePullPolicy": "IfNotPresent", + "Lifecycle": null, + "LivenessProbe": null, + "Name": "zookeeper-operator", + "Ports": [ + { + "ContainerPort": 60000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + } + ], + "ReadinessProbe": null, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": null, + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "zookeeper-operator", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": null + }, + "creationTimestamp": null, + "labels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + } + } + }, + "Status": { + "AvailableReplicas": 1, + "Conditions": null, + "FullyLabeledReplicas": 1, + "ObservedGeneration": 1, + "ReadyReplicas": 1, + "Replicas": 1 + }, + "annotations": { + "deployment.kubernetes.io/desired-replicas": "1", + "deployment.kubernetes.io/max-replicas": "2", + "deployment.kubernetes.io/revision": "1" + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 1, + "labels": { + "name": "zookeeper-operator", + "pod-template-hash": "5fc77867c7", + "sievetag": "zookeeper-operator" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:deployment.kubernetes.io/desired-replicas": {}, + "f:deployment.kubernetes.io/max-replicas": {}, + "f:deployment.kubernetes.io/revision": {} + }, + "f:labels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"4cf11f1a-32d2-4b79-a91e-9b04cd423805\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:replicas": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + } + }, + "f:template": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:name": {}, + "f:pod-template-hash": {}, + "f:sievetag": {} + } + }, + "f:spec": { + "f:containers": { + "k:{\"name\":\"zookeeper-operator\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"KUBERNETES_SERVICE_HOST\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"KUBERNETES_SERVICE_PORT\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"OPERATOR_NAME\"}": { + ".": {}, + "f:name": {}, + "f:value": {} + }, + "k:{\"name\":\"POD_NAME\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + }, + "k:{\"name\":\"WATCH_NAMESPACE\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:envFrom": {}, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":60000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {} + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + } + } + }, + "f:status": { + "f:availableReplicas": {}, + "f:fullyLabeledReplicas": {}, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator-5fc77867c7", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "apps/v1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "Deployment", + "name": "zookeeper-operator", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "role/default/zookeeper-operator": { + "Rules": [ + { + "APIGroups": [ + "zookeeper.pravega.io" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "*" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "pods", + "services", + "endpoints", + "persistentvolumeclaims", + "events", + "configmaps", + "secrets" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "apps" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "deployments", + "daemonsets", + "replicasets", + "statefulsets" + ], + "Verbs": [ + "*" + ] + }, + { + "APIGroups": [ + "policy" + ], + "NonResourceURLs": null, + "ResourceNames": null, + "Resources": [ + "poddisruptionbudgets" + ], + "Verbs": [ + "*" + ] + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:rules": {} + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "rolebinding/default/zookeeper-operator": { + "RoleRef": { + "APIGroup": "rbac.authorization.k8s.io", + "Kind": "Role", + "Name": "zookeeper-operator" + }, + "Subjects": [ + { + "APIGroup": "", + "Kind": "ServiceAccount", + "Name": "zookeeper-operator", + "Namespace": "default" + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "managedFields": [ + { + "apiVersion": "rbac.authorization.k8s.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:roleRef": { + "f:apiGroup": {}, + "f:kind": {}, + "f:name": {} + }, + "f:subjects": {} + }, + "manager": "kubectl-create", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "secret/default/zookeeper-operator-token-947dg": "SIEVE-IGNORE", + "service/default/zookeeper-cluster-admin-server": { + "Spec": { + "ClusterIP": "SIEVE-IGNORE", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "Cluster", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "NodePort": "SIEVE-IGNORE", + "Port": 8080, + "Protocol": "TCP", + "TargetPort": 8080 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "LoadBalancer" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:externalTrafficPolicy": {}, + "f:ports": { + ".": {}, + "k:{\"port\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-admin-server", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "service/default/zookeeper-cluster-client": { + "Spec": { + "ClusterIP": "SIEVE-IGNORE", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "NodePort": 0, + "Port": 2181, + "Protocol": "TCP", + "TargetPort": 2181 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "ClusterIP" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "false", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:ports": { + ".": {}, + "k:{\"port\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-client", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "service/default/zookeeper-cluster-headless": { + "Spec": { + "ClusterIP": "None", + "ExternalIPs": null, + "ExternalName": "", + "ExternalTrafficPolicy": "", + "HealthCheckNodePort": 0, + "IPFamily": null, + "LoadBalancerIP": "", + "LoadBalancerSourceRanges": null, + "Ports": [ + { + "AppProtocol": null, + "Name": "tcp-client", + "NodePort": 0, + "Port": 2181, + "Protocol": "TCP", + "TargetPort": 2181 + }, + { + "AppProtocol": null, + "Name": "tcp-quorum", + "NodePort": 0, + "Port": 2888, + "Protocol": "TCP", + "TargetPort": 2888 + }, + { + "AppProtocol": null, + "Name": "tcp-leader-election", + "NodePort": 0, + "Port": 3888, + "Protocol": "TCP", + "TargetPort": 3888 + }, + { + "AppProtocol": null, + "Name": "tcp-metrics", + "NodePort": 0, + "Port": 7000, + "Protocol": "TCP", + "TargetPort": 7000 + }, + { + "AppProtocol": null, + "Name": "tcp-admin-server", + "NodePort": 0, + "Port": 8080, + "Protocol": "TCP", + "TargetPort": 8080 + } + ], + "PublishNotReadyAddresses": false, + "Selector": { + "app": "zookeeper-cluster" + }, + "SessionAffinity": "None", + "SessionAffinityConfig": null, + "TopologyKeys": null, + "Type": "ClusterIP" + }, + "Status": { + "LoadBalancer": { + "Ingress": null + } + }, + "creationTimestamp": "SIEVE-IGNORE", + "labels": { + "app": "zookeeper-cluster", + "headless": "true", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:headless": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:clusterIP": {}, + "f:ports": { + ".": {}, + "k:{\"port\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + }, + "k:{\"port\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:name": {}, + "f:port": {}, + "f:protocol": {}, + "f:targetPort": {} + } + }, + "f:selector": { + ".": {}, + "f:app": {} + }, + "f:sessionAffinity": {}, + "f:type": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster-headless", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "serviceaccount/default/zookeeper-operator": { + "AutomountServiceAccountToken": null, + "ImagePullSecrets": null, + "Secrets": [ + { + "APIVersion": "", + "FieldPath": "", + "Kind": "", + "Name": "SIEVE-IGNORE", + "Namespace": "", + "ResourceVersion": "", + "UID": "" + } + ], + "creationTimestamp": "SIEVE-IGNORE", + "name": "zookeeper-operator", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "statefulset/default/zookeeper-cluster": { + "Spec": { + "PodManagementPolicy": "OrderedReady", + "Replicas": 2, + "RevisionHistoryLimit": 10, + "Selector": { + "matchLabels": { + "app": "zookeeper-cluster" + } + }, + "ServiceName": "zookeeper-cluster-headless", + "Template": { + "Spec": { + "ActiveDeadlineSeconds": null, + "Affinity": { + "NodeAffinity": null, + "PodAffinity": null, + "PodAntiAffinity": { + "PreferredDuringSchedulingIgnoredDuringExecution": [ + { + "PodAffinityTerm": { + "LabelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "Namespaces": null, + "TopologyKey": "kubernetes.io/hostname" + }, + "Weight": 20 + } + ], + "RequiredDuringSchedulingIgnoredDuringExecution": null + } + }, + "AutomountServiceAccountToken": null, + "Containers": [ + { + "Args": null, + "Command": [ + "/usr/local/bin/zookeeperStart.sh" + ], + "Env": [ + { + "Name": "ENVOY_SIDECAR_STATUS", + "Value": "", + "ValueFrom": { + "ConfigMapKeyRef": null, + "FieldRef": { + "APIVersion": "v1", + "FieldPath": "metadata.annotations['sidecar.istio.io/status']" + }, + "ResourceFieldRef": null, + "SecretKeyRef": null + } + } + ], + "EnvFrom": null, + "Image": "pravega/zookeeper:0.2.8", + "ImagePullPolicy": "Always", + "Lifecycle": { + "PostStart": null, + "PreStop": { + "Exec": { + "Command": [ + "zookeeperTeardown.sh" + ] + }, + "HTTPGet": null, + "TCPSocket": null + } + }, + "LivenessProbe": { + "Exec": { + "Command": [ + "zookeeperLive.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Name": "zookeeper", + "Ports": [ + { + "ContainerPort": 2181, + "HostIP": "", + "HostPort": 0, + "Name": "client", + "Protocol": "TCP" + }, + { + "ContainerPort": 2888, + "HostIP": "", + "HostPort": 0, + "Name": "quorum", + "Protocol": "TCP" + }, + { + "ContainerPort": 3888, + "HostIP": "", + "HostPort": 0, + "Name": "leader-election", + "Protocol": "TCP" + }, + { + "ContainerPort": 7000, + "HostIP": "", + "HostPort": 0, + "Name": "metrics", + "Protocol": "TCP" + }, + { + "ContainerPort": 8080, + "HostIP": "", + "HostPort": 0, + "Name": "admin-server", + "Protocol": "TCP" + } + ], + "ReadinessProbe": { + "Exec": { + "Command": [ + "zookeeperReady.sh" + ] + }, + "FailureThreshold": 3, + "HTTPGet": null, + "InitialDelaySeconds": 10, + "PeriodSeconds": 10, + "SuccessThreshold": 1, + "TCPSocket": null, + "TimeoutSeconds": 10 + }, + "Resources": { + "Limits": null, + "Requests": null + }, + "SecurityContext": null, + "StartupProbe": null, + "Stdin": false, + "StdinOnce": false, + "TTY": false, + "TerminationMessagePath": "/dev/termination-log", + "TerminationMessagePolicy": "File", + "VolumeDevices": null, + "VolumeMounts": [ + { + "MountPath": "/data", + "MountPropagation": null, + "Name": "data", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + }, + { + "MountPath": "/conf", + "MountPropagation": null, + "Name": "conf", + "ReadOnly": false, + "SubPath": "", + "SubPathExpr": "" + } + ], + "WorkingDir": "" + } + ], + "DNSConfig": null, + "DNSPolicy": "ClusterFirst", + "EnableServiceLinks": null, + "EphemeralContainers": null, + "HostAliases": null, + "Hostname": "", + "ImagePullSecrets": null, + "InitContainers": null, + "NodeName": "", + "NodeSelector": null, + "Overhead": null, + "PreemptionPolicy": null, + "Priority": null, + "PriorityClassName": "", + "ReadinessGates": null, + "RestartPolicy": "Always", + "RuntimeClassName": null, + "SchedulerName": "default-scheduler", + "SecurityContext": { + "FSGroup": null, + "FSGroupChangePolicy": null, + "HostIPC": false, + "HostNetwork": false, + "HostPID": false, + "RunAsGroup": null, + "RunAsNonRoot": null, + "RunAsUser": null, + "SELinuxOptions": null, + "ShareProcessNamespace": null, + "SupplementalGroups": null, + "Sysctls": null, + "WindowsOptions": null + }, + "ServiceAccountName": "default", + "Subdomain": "", + "TerminationGracePeriodSeconds": 30, + "Tolerations": null, + "TopologySpreadConstraints": null, + "Volumes": [ + { + "AWSElasticBlockStore": null, + "AzureDisk": null, + "AzureFile": null, + "CSI": null, + "CephFS": null, + "Cinder": null, + "ConfigMap": { + "DefaultMode": 420, + "Items": null, + "Name": "zookeeper-cluster-configmap", + "Optional": null + }, + "DownwardAPI": null, + "EmptyDir": null, + "FC": null, + "FlexVolume": null, + "Flocker": null, + "GCEPersistentDisk": null, + "GitRepo": null, + "Glusterfs": null, + "HostPath": null, + "ISCSI": null, + "NFS": null, + "Name": "conf", + "PersistentVolumeClaim": null, + "PhotonPersistentDisk": null, + "PortworxVolume": null, + "Projected": null, + "Quobyte": null, + "RBD": null, + "ScaleIO": null, + "Secret": null, + "StorageOS": null, + "VsphereVolume": null + } + ] + }, + "creationTimestamp": null, + "generateName": "zookeeper-cluster", + "labels": { + "app": "zookeeper-cluster", + "kind": "ZookeeperMember", + "release": "zookeeper-cluster" + } + }, + "UpdateStrategy": { + "RollingUpdate": null, + "Type": "RollingUpdate" + }, + "VolumeClaimTemplates": [ + { + "Spec": { + "AccessModes": [ + "ReadWriteOnce" + ], + "DataSource": null, + "Resources": { + "Limits": null, + "Requests": { + "storage": "20Gi" + } + }, + "Selector": null, + "StorageClassName": null, + "VolumeMode": "Filesystem", + "VolumeName": "" + }, + "Status": { + "AccessModes": null, + "Capacity": null, + "Conditions": null, + "Phase": "Pending" + }, + "creationTimestamp": null, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "name": "data" + } + ] + }, + "Status": { + "CollisionCount": 0, + "Conditions": null, + "CurrentReplicas": 2, + "CurrentRevision": "zookeeper-cluster-7cf668f98b", + "ObservedGeneration": 3, + "ReadyReplicas": 2, + "Replicas": 2, + "UpdateRevision": "zookeeper-cluster-7cf668f98b", + "UpdatedReplicas": 2 + }, + "creationTimestamp": "SIEVE-IGNORE", + "generation": 3, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "managedFields": [ + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:ownerReferences": { + ".": {}, + "k:{\"uid\":\"57d2509f-73f3-4797-9acd-7bd7afea196b\"}": "SIEVE-IGNORE" + } + }, + "f:spec": { + "f:podManagementPolicy": {}, + "f:replicas": {}, + "f:revisionHistoryLimit": {}, + "f:selector": { + "f:matchLabels": { + ".": {}, + "f:app": {} + } + }, + "f:serviceName": {}, + "f:template": { + "f:metadata": { + "f:generateName": {}, + "f:labels": { + ".": {}, + "f:app": {}, + "f:kind": {}, + "f:release": {} + } + }, + "f:spec": { + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:containers": { + "k:{\"name\":\"zookeeper\"}": { + ".": {}, + "f:command": {}, + "f:env": { + ".": {}, + "k:{\"name\":\"ENVOY_SIDECAR_STATUS\"}": { + ".": {}, + "f:name": {}, + "f:valueFrom": { + ".": {}, + "f:fieldRef": { + ".": {}, + "f:apiVersion": {}, + "f:fieldPath": {} + } + } + } + }, + "f:image": {}, + "f:imagePullPolicy": {}, + "f:lifecycle": { + ".": {}, + "f:preStop": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + } + } + }, + "f:livenessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:name": {}, + "f:ports": { + ".": {}, + "k:{\"containerPort\":2181,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":2888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":3888,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":7000,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + }, + "k:{\"containerPort\":8080,\"protocol\":\"TCP\"}": { + ".": {}, + "f:containerPort": {}, + "f:name": {}, + "f:protocol": {} + } + }, + "f:readinessProbe": { + ".": {}, + "f:exec": { + ".": {}, + "f:command": {} + }, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:resources": {}, + "f:terminationMessagePath": {}, + "f:terminationMessagePolicy": {}, + "f:volumeMounts": { + ".": {}, + "k:{\"mountPath\":\"/conf\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + }, + "k:{\"mountPath\":\"/data\"}": { + ".": {}, + "f:mountPath": {}, + "f:name": {} + } + } + } + }, + "f:dnsPolicy": {}, + "f:restartPolicy": {}, + "f:schedulerName": {}, + "f:securityContext": {}, + "f:serviceAccount": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {}, + "f:volumes": { + ".": {}, + "k:{\"name\":\"conf\"}": { + ".": {}, + "f:configMap": { + ".": {}, + "f:defaultMode": {}, + "f:name": {} + }, + "f:name": {} + } + } + } + }, + "f:updateStrategy": { + "f:type": {} + }, + "f:volumeClaimTemplates": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "apps/v1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:status": { + "f:collisionCount": {}, + "f:currentReplicas": {}, + "f:currentRevision": {}, + "f:observedGeneration": {}, + "f:readyReplicas": {}, + "f:replicas": {}, + "f:updateRevision": {}, + "f:updatedReplicas": {} + } + }, + "manager": "kube-controller-manager", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "ownerReferences": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "blockOwnerDeletion": true, + "controller": true, + "kind": "ZookeeperCluster", + "name": "zookeeper-cluster", + "uid": "SIEVE-IGNORE" + } + ], + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "zookeepercluster/default/zookeeper-cluster": { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "kind": "ZookeeperCluster", + "metadata": { + "annotations": { + "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"zookeeper.pravega.io/v1beta1\",\"kind\":\"ZookeeperCluster\",\"metadata\":{\"annotations\":{},\"name\":\"zookeeper-cluster\",\"namespace\":\"default\"},\"spec\":{\"persistence\":{\"reclaimPolicy\":\"Delete\"},\"replicas\":2}}\n" + }, + "creationTimestamp": "SIEVE-IGNORE", + "finalizers": [ + "cleanUpZookeeperPVC" + ], + "generation": 4, + "managedFields": [ + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:annotations": { + ".": {}, + "f:kubectl.kubernetes.io/last-applied-configuration": {} + } + }, + "f:spec": { + ".": {}, + "f:persistence": { + ".": {}, + "f:reclaimPolicy": {} + } + } + }, + "manager": "kubectl-client-side-apply", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:spec": { + "f:replicas": {} + } + }, + "manager": "kubectl-patch", + "operation": "Update", + "time": "SIEVE-IGNORE" + }, + { + "apiVersion": "zookeeper.pravega.io/v1beta1", + "fieldsType": "FieldsV1", + "fieldsV1": { + "f:metadata": { + "f:finalizers": {} + }, + "f:spec": { + "f:config": { + ".": {}, + "f:autoPurgePurgeInterval": {}, + "f:autoPurgeSnapRetainCount": {}, + "f:commitLogCount": {}, + "f:globalOutstandingLimit": {}, + "f:initLimit": {}, + "f:maxClientCnxns": {}, + "f:maxSessionTimeout": {}, + "f:minSessionTimeout": {}, + "f:preAllocSize": {}, + "f:snapCount": {}, + "f:snapSizeLimitInKb": {}, + "f:syncLimit": {}, + "f:tickTime": {} + }, + "f:image": { + ".": {}, + "f:pullPolicy": {}, + "f:repository": {}, + "f:tag": {} + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:persistence": { + "f:spec": { + ".": {}, + "f:accessModes": {}, + "f:resources": { + ".": {}, + "f:requests": { + ".": {}, + "f:storage": {} + } + } + } + }, + "f:pod": { + ".": {}, + "f:affinity": { + ".": {}, + "f:podAntiAffinity": { + ".": {}, + "f:preferredDuringSchedulingIgnoredDuringExecution": {} + } + }, + "f:labels": { + ".": {}, + "f:app": {}, + "f:release": {} + }, + "f:resources": {}, + "f:serviceAccountName": {}, + "f:terminationGracePeriodSeconds": {} + }, + "f:ports": {}, + "f:probes": { + ".": {}, + "f:livenessProbe": { + ".": {}, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + }, + "f:readinessProbe": { + ".": {}, + "f:failureThreshold": {}, + "f:initialDelaySeconds": {}, + "f:periodSeconds": {}, + "f:successThreshold": {}, + "f:timeoutSeconds": {} + } + }, + "f:storageType": {} + }, + "f:status": { + ".": {}, + "f:conditions": {}, + "f:currentVersion": {}, + "f:externalClientEndpoint": {}, + "f:internalClientEndpoint": {}, + "f:members": { + ".": {}, + "f:ready": {} + }, + "f:metaRootCreated": {}, + "f:readyReplicas": {}, + "f:replicas": {} + } + }, + "manager": "zookeeper-operator", + "operation": "Update", + "time": "SIEVE-IGNORE" + } + ], + "name": "zookeeper-cluster", + "namespace": "default", + "resourceVersion": "SIEVE-IGNORE", + "uid": "SIEVE-IGNORE" + }, + "spec": { + "config": { + "autoPurgePurgeInterval": 1, + "autoPurgeSnapRetainCount": 3, + "commitLogCount": 500, + "globalOutstandingLimit": 1000, + "initLimit": 10, + "maxClientCnxns": 60, + "maxSessionTimeout": 40000, + "minSessionTimeout": 4000, + "preAllocSize": 65536, + "snapCount": 10000, + "snapSizeLimitInKb": 4194304, + "syncLimit": 2, + "tickTime": 2000 + }, + "image": { + "pullPolicy": "Always", + "repository": "pravega/zookeeper", + "tag": "0.2.8" + }, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "persistence": { + "reclaimPolicy": "Delete", + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "20Gi" + } + } + } + }, + "pod": { + "affinity": { + "podAntiAffinity": { + "preferredDuringSchedulingIgnoredDuringExecution": [ + { + "podAffinityTerm": { + "labelSelector": { + "matchExpressions": [ + { + "key": "app", + "operator": "In", + "values": [ + "zookeeper-cluster" + ] + } + ] + }, + "topologyKey": "kubernetes.io/hostname" + }, + "weight": 20 + } + ] + } + }, + "labels": { + "app": "zookeeper-cluster", + "release": "zookeeper-cluster" + }, + "resources": {}, + "serviceAccountName": "default", + "terminationGracePeriodSeconds": 30 + }, + "ports": [ + { + "containerPort": 2181, + "name": "client" + }, + { + "containerPort": 2888, + "name": "quorum" + }, + { + "containerPort": 3888, + "name": "leader-election" + }, + { + "containerPort": 7000, + "name": "metrics" + }, + { + "containerPort": 8080, + "name": "admin-server" + } + ], + "probes": { + "livenessProbe": { + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 0, + "timeoutSeconds": 10 + }, + "readinessProbe": { + "failureThreshold": 3, + "initialDelaySeconds": 10, + "periodSeconds": 10, + "successThreshold": 1, + "timeoutSeconds": 10 + } + }, + "replicas": 2, + "storageType": "persistence" + }, + "status": { + "conditions": [ + { + "lastTransitionTime": "SIEVE-IGNORE", + "lastUpdateTime": "SIEVE-IGNORE", + "status": "True", + "type": "PodsReady" + }, + { + "status": "False", + "type": "Upgrading" + }, + { + "status": "False", + "type": "Error" + } + ], + "currentVersion": "0.2.8", + "externalClientEndpoint": "N/A", + "internalClientEndpoint": "SIEVE-IGNORE", + "members": { + "ready": [ + "zookeeper-cluster-0", + "zookeeper-cluster-1" + ] + }, + "metaRootCreated": true, + "readyReplicas": 2, + "replicas": 2 + } + } +} \ No newline at end of file diff --git a/examples/zktg/test/test.py b/examples/zktg/test/test.py new file mode 100644 index 00000000000..2a448c1d416 --- /dev/null +++ b/examples/zktg/test/test.py @@ -0,0 +1,35 @@ +import sys +import os + +current = os.path.dirname(os.path.realpath(__file__)) +sieve_root = os.path.dirname(os.path.dirname(os.path.dirname(current))) +sys.path.append(sieve_root) + +from sieve_test_driver.test_framework import new_built_in_workload +from sieve_common.common import RUNNING, TERMINATED + +test_cases = { + "recreate": new_built_in_workload() + .cmd("kubectl apply -f examples/zookeeper-operator/test/zkc-1.yaml") + .wait_for_pod_status("zookeeper-cluster-0", RUNNING) + .cmd("kubectl delete ZookeeperCluster zookeeper-cluster") + .wait_for_pod_status("zookeeper-cluster-0", TERMINATED) + .wait_for_pvc_status("data-zookeeper-cluster-0", TERMINATED) + .cmd("kubectl apply -f examples/zookeeper-operator/test/zkc-1.yaml") + .wait_for_pod_status("zookeeper-cluster-0", RUNNING), + "scaledown-scaleup": new_built_in_workload() + .cmd("kubectl apply -f examples/zookeeper-operator/test/zkc-2.yaml") + .wait_for_pod_status("zookeeper-cluster-1", RUNNING) + .wait(30) + .cmd( + 'kubectl patch ZookeeperCluster zookeeper-cluster --type merge -p=\'{"spec":{"replicas":1}}\'' + ) + .wait_for_pod_status("zookeeper-cluster-1", TERMINATED) + .wait_for_pvc_status("data-zookeeper-cluster-1", TERMINATED) + .cmd( + 'kubectl patch ZookeeperCluster zookeeper-cluster --type merge -p=\'{"spec":{"replicas":2}}\'' + ) + .wait_for_pod_status("zookeeper-cluster-1", RUNNING), +} + +test_cases[sys.argv[1]].run(sys.argv[2]) diff --git a/examples/zktg/test/zkc-1.yaml b/examples/zktg/test/zkc-1.yaml new file mode 100644 index 00000000000..96951b5a5ec --- /dev/null +++ b/examples/zktg/test/zkc-1.yaml @@ -0,0 +1,9 @@ +apiVersion: zookeeper.pravega.io/v1beta1 +kind: ZookeeperCluster +metadata: + name: zookeeper-cluster +spec: + replicas: 1 + persistence: + reclaimPolicy: Delete + diff --git a/examples/zktg/test/zkc-2.yaml b/examples/zktg/test/zkc-2.yaml new file mode 100644 index 00000000000..f83b707e733 --- /dev/null +++ b/examples/zktg/test/zkc-2.yaml @@ -0,0 +1,9 @@ +apiVersion: zookeeper.pravega.io/v1beta1 +kind: ZookeeperCluster +metadata: + name: zookeeper-cluster +spec: + replicas: 2 + persistence: + reclaimPolicy: Delete + diff --git a/go.work.sum b/go.work.sum index f35a3af5d4f..456a25541ea 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,18 +1,100 @@ +cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= +cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= +github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs= +github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU= +github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM= +github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0= +github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY= +github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= +github.com/PuerkitoBio/purell v1.0.0 h1:0GoNN3taZV6QI81IXgCbxMyEaJDXMSIjArYBCYzVVvs= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2 h1:JCHLVE3B+kJde7bIEo5N4J+ZbLhp0J1Fs+ulyRws4gE= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= +github.com/dave/astrid v0.0.0-20170323122508-8c2895878b14 h1:YI1gOOdmMk3xodBao7fehcvoZsEeOyy/cfhlpCSPgM4= +github.com/dave/brenda v1.1.0 h1:Sl1LlwXnbw7xMhq3y2x11McFu43AjDcwkllxxgZ3EZw= +github.com/dave/courtney v0.3.0 h1:8aR1os2ImdIQf3Zj4oro+lD/L4Srb5VwGefqZ/jzz7U= +github.com/dave/gopackages v0.0.0-20170318123100-46e7023ec56e h1:l99YKCdrK4Lvb/zTupt0GMPfNbncAGf8Cv/t1sYLOg0= +github.com/dave/kerr v0.0.0-20170318121727-bc25dd6abe8e h1:xURkGi4RydhyaYR6PzcyHTueQudxY4LgxN1oYEPJHa0= +github.com/dave/patsy v0.0.0-20210517141501-957256f50cba h1:1o36L4EKbZzazMk8iGC4kXpVnZ6TPxR2mZ9qVKjNNAs= +github.com/dave/rebecca v0.9.1 h1:jxVfdOxRirbXL28vXMvUvJ1in3djwkVKXCq339qhBL0= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= +github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680 h1:ZktWZesgun21uEDrwW7iEV1zPCGQldM2atlJZ3TdvVM= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1 h1:wSt/4CYxs70xbATrGXhokKF1i0tZjENLOo1ioIO13zk= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9 h1:tF+augKRWlWx0J0B7ZyyKSiTyV6E1zZe+7b3qQlcEf8= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501 h1:C1JKChikHGpXwT5UQDFaryIpDtyyGL/CR6C2kB7F1oc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87 h1:zP3nY8Tk2E6RTkqGYrarZXuzh+ffyLDljLxCy1iJw80= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a h1:TpvdAwDAt1K4ANVOfcihouRdvP+MgAfDWwBuct4l6ZY= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d h1:7PxY7LVfSZm7PEeBTyK1rj1gABdCO2mbri6GKO1cMDs= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= +github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk= golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k= +google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8= +google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6 h1:Oh3Mzx5pJ+yIumsAD0MOECPVeXsVot0UkiaCGVyfGQY= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=