1 2 3 4

RocketMQ Operator

1. RocketMQ

2012~2013 年期间,阿里巴巴中间件团队自主研发并对外开源了第三代分布式消息引擎 RocketMQ,其高性能、低延迟、抗堆积的特性稳定支撑了阿里巴巴 双11 万亿级数据洪峰业务,其云产品 Aliware MQ 在微服务、流计算、IoT、异步解耦、数据同步等无数工况场景大放异彩。

2016 年,阿里巴巴向 Apache 软件基金会捐赠了 RocketMQ。次年,RocketMQ 顺利从基金会毕业,成为 Apache 顶级开源项目,与 Apache Hadoop,Apache Spark 一起为全球分布式、大数据领域的开发者带来福音。然而,在云原生时代的今天,RocketMQ 作为有状态的分布式服务系统,如何在大规模集群上做到极简运维,则是一个极具挑战和价值的问题。

RocketMQ 支持多种部署方式,以基本的双主双从架构为例,如下图所示。

1.png

RocketMQ 双主双从架构

这里面包括了一共 7 个 RocketMQ 服务实例:3 个 name server 实例,2 个 master broker 实例,以及 2 个 slave broker 实例。

传统的部署方式需要手动或编写脚本在每个节点上进行环境和文件配置。此外,随着用户业务的增加,存在对集群进行无缝扩容等需求。传统方式是运维人员访问不同节点,依赖操作手册和脚本按步骤进行操作来完成,耗费人力,且存在误操作的可能。一些公司可能会使用一些平台和工具如 Ansible 来帮助自动化运维,此外越来越多的公司开始集成和使用基于 Kubernetes 的云原生生态。

使用 Kubernetes 提供的 Deployment 和 StatefulSet 等原生资源可以很好地解决无状态应用的管理问题,但对于数据库和 RocketMQ 这类有状态应用,则存在很多局限性。例如对 RocketMQ 来说扩容不仅仅是拉起新的实例 Pod 就完成了,还需要同步复制 Broker 的状态信息包括 Topic 信息和订阅关系这些元数据,同时要正确配置新 Broker 的 config 参数,包括 brokerName 和 NameServer IP List 等,才能使得新扩容的 Broker 可用,而这些仅仅靠用户编写 StatefulSet,修改 size 或 replicas 然后 apply 是无法做到的。

实际上 Kubernetes 开发人员也发现了这些问题,因此引入了自定义资源和控制器的概念,让开发人员可以直接用 Go 语言调用 Kubernetes API,编写自定义资源和对应的控制器逻辑来解决复杂有状态应用的管理问题,提供特定应用相关的自定义资源的这类代码组件称之为 Operator。由具备 RocketMQ 领域知识的专家编写 Operator,屏蔽了应用领域的专业知识,让用户只需要关心和定义希望达到的集群终态,这也是 Kubernetes 声明式 API 的设计哲学。

2. Kubernetes Operator

Operator 是在 Kubernetes 基础上通过扩展 Kubernetes API,用来创建、配置和管理复杂的有状态应用,如分布式数据库等。Operator 基于 Kubernetes 1.7 版本以来引入的自定义控制器的概念,在自定义资源和控制器之上构建,同时又包含了应用程序特定的领域知识。实现一个 Operator 的关键是 CRD(自定义资源)和 Controller(控制器)的设计。

Operator 站在 Kubernetes 内部视角,为应用的云原生化打开了新世界的大门。自定义资源可以让开发人员扩展添加新功能,更新现有的功能,并且可以自动执行一些管理任务,这些自定义的控制器就像 Kubernetes 原生的组件一样,Operator 可以直接使用 Kubernetes API 进行开发,也就是说他们可以根据这些控制器编写的自定义规则来创建和更改 Pods / Services、对正在运行的应用进行扩缩容。

快速开始

本文使用 RocketMQ Operator 0.2.1 版本,展示如何使用 RocketMQ Operator 在 Kubernetes 上快速创建部署一个 RocketMQ 服务集群。

创建RocketMQ Operator CRD
kubectl create -f rocketmq_v1alpha1_broker_crd.yaml kubectl create -f rocketmq_v1alpha1_nameservice_crd.yaml kubectl create -f rocketmq_v1alpha1_consoles_crd.yaml kubectl create -f rocketmq_v1alpha1_topictransfer_crd.yaml
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: brokers.rocketmq.apache.org
spec:
  group: rocketmq.apache.org
  names:
    kind: Broker
    listKind: BrokerList
    plural: brokers
    singular: broker
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      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/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/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            allowRestart:
              description: AllowRestart defines whether allow pod restart
              type: boolean
            brokerImage:
              description: BaseImage is the broker image to use for the Pods
              type: string
            hostPath:
              description: HostPath is the local path to store data
              type: string
            imagePullPolicy:
              description: ImagePullPolicy defines how the image is pulled
              type: string
            nameServers:
              description: NameServers defines the name service list e.g. 192.168.1.1:9876;192.168.1.2:9876
              type: string
            replicaPerGroup:
              description: ReplicaPerGroup each broker cluster's replica number
              format: int64
              type: integer
            resources:
              description: Resources describes the compute resource requirements
              type: object
            scalePodName:
              description: The name of pod where the metadata from
              type: string
            size:
              description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
                Important: Run "operator-sdk generate k8s" to regenerate code after
                modifying this file Add custom validation using kubebuilder tags:
                https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
              format: int64
              type: integer
            storageMode:
              description: StorageMode can be EmptyDir, HostPath, StorageClass
              type: string
            env:
              description: env defines custom env, e.g. BROKER_MEM
              items:
                type: object
              type: array
            volumes:
              description: volumes defines the broker.conf
              items:
                type: object
              type: array
            volumeClaimTemplates:
              description: VolumeClaimTemplates defines the StorageClass
              items:
                type: object
              type: array
          required:
          - size
          - replicaPerGroup
          - brokerImage
          - imagePullPolicy
          - nameServers
          - allowRestart
          - resources
          - storageMode
          - hostPath
          - env
          - volumes
          - volumeClaimTemplates
          - scalePodName
          type: object
        status:
          properties:
            nodes:
              description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
                of cluster Important: Run "operator-sdk generate k8s" to regenerate
                code after modifying this file Add custom validation using kubebuilder
                tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
              items:
                type: string
              type: array
            size:
              format: int64
              type: integer
          required:
          - nodes
          - size
          type: object
  version: v1alpha1
  versions:
  - name: v1alpha1
    served: true
    storage: true
rocketmq_v1alpha1_broker_crd.yaml
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: nameservices.rocketmq.apache.org
spec:
  group: rocketmq.apache.org
  names:
    kind: NameService
    listKind: NameServiceList
    plural: nameservices
    singular: nameservice
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      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/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/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            dnsPolicy:
              description: dnsPolicy defines how a pod's DNS will be configured
              type: string
            hostNetwork:
              description: HostNetwork can be true or false
              type: boolean
            hostPath:
              description: HostPath is the local path to store data
              type: string
            imagePullPolicy:
              description: ImagePullPolicy defines how the image is pulled.
              type: string
            nameServiceImage:
              description: NameServiceImage is the name service image
              type: string
            resources:
              description: Resources describes the compute resource requirements
              type: object
            size:
              description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
                Important: Run "operator-sdk generate k8s" to regenerate code after
                modifying this file Add custom validation using kubebuilder tags:
                https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
                Size is the number of the name service Pod'
              format: int32
              type: integer
            storageMode:
              description: StorageMode can be EmptyDir, HostPath, NFS
              type: string
            volumeClaimTemplates:
              description: VolumeClaimTemplates defines the StorageClass
              items:
                type: object
              type: array
          required:
          - size
          - nameServiceImage
          - imagePullPolicy
          - hostNetwork
          - dnsPolicy
          - resources
          - storageMode
          - hostPath
          - volumeClaimTemplates
          type: object
        status:
          properties:
            nameServers:
              description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
                of cluster Important: Run "operator-sdk generate k8s" to regenerate
                code after modifying this file Add custom validation using kubebuilder
                tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html
                NameServers is the name service ip list'
              items:
                type: string
              type: array
          required:
          - nameServers
          type: object
  version: v1alpha1
  versions:
  - name: v1alpha1
    served: true
    storage: true
rocketmq_v1alpha1_nameservice_crd.yaml
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: consoles.rocketmq.apache.org
spec:
  group: rocketmq.apache.org
  names:
    kind: Console
    listKind: ConsoleList
    plural: consoles
    singular: console
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      description: Console is the Schema for the consoles 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/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/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          description: ConsoleSpec defines the desired state of Console
          properties:
            consoleDeployment:
              description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
                Important: Run "operator-sdk generate k8s" to regenerate code after
                modifying this file Add custom validation using kubebuilder tags:
                https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html'
              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/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/api-conventions.md#types-kinds'
                  type: string
                metadata:
                  description: Standard object metadata.
                  type: object
                spec:
                  description: Specification of the desired behavior of the Deployment.
                  properties:
                    minReadySeconds:
                      description: Minimum number of seconds for which a newly created
                        pod should be ready without any of its container crashing,
                        for it to be considered available. Defaults to 0 (pod will
                        be considered available as soon as it is ready)
                      format: int32
                      type: integer
                    paused:
                      description: Indicates that the deployment is paused.
                      type: boolean
                    progressDeadlineSeconds:
                      description: The maximum time in seconds for a deployment to
                        make progress before it is considered to be failed. The deployment
                        controller will continue to process failed deployments and
                        a condition with a ProgressDeadlineExceeded reason will be
                        surfaced in the deployment status. Note that progress will
                        not be estimated during the time a deployment is paused. Defaults
                        to 600s.
                      format: int32
                      type: integer
                    replicas:
                      description: Number of desired pods. This is a pointer to distinguish
                        between explicit zero and not specified. Defaults to 1.
                      format: int32
                      type: integer
                    revisionHistoryLimit:
                      description: The number of old ReplicaSets to retain to allow
                        rollback. This is a pointer to distinguish between explicit
                        zero and not specified. Defaults to 10.
                      format: int32
                      type: integer
                    selector:
                      description: Label selector for pods. Existing ReplicaSets whose
                        pods are selected by this will be the ones affected by this
                        deployment. It must match the pod template's labels.
                      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
                    strategy:
                      description: The deployment strategy to use to replace existing
                        pods with new ones.
                      properties:
                        rollingUpdate:
                          description: 'Rolling update config params. Present only
                            if DeploymentStrategyType = RollingUpdate. --- TODO: Update
                            this to follow our convention for oneOf, whatever we decide
                            it to be.'
                          properties:
                            maxSurge:
                              anyOf:
                                - type: string
                                - type: integer
                              description: 'The maximum number of pods that can be
                                scheduled above the desired number of pods. Value
                                can be an absolute number (ex: 5) or a percentage
                                of desired pods (ex: 10%). This can not be 0 if MaxUnavailable
                                is 0. Absolute number is calculated from percentage
                                by rounding up. Defaults to 25%. Example: when this
                                is set to 30%, the new ReplicaSet can be scaled up
                                immediately when the rolling update starts, such that
                                the total number of old and new pods do not exceed
                                130% of desired pods. Once old pods have been killed,
                                new ReplicaSet can be scaled up further, ensuring
                                that total number of pods running at any time during
                                the update is at most 130% of desired pods.'
                            maxUnavailable:
                              anyOf:
                                - type: string
                                - type: integer
                              description: 'The maximum number of pods that can be
                                unavailable during the update. Value can be an absolute
                                number (ex: 5) or a percentage of desired pods (ex:
                                10%). Absolute number is calculated from percentage
                                by rounding down. This can not be 0 if MaxSurge is
                                0. Defaults to 25%. Example: when this is set to 30%,
                                the old ReplicaSet can be scaled down to 70% of desired
                                pods immediately when the rolling update starts. Once
                                new pods are ready, old ReplicaSet can be scaled down
                                further, followed by scaling up the new ReplicaSet,
                                ensuring that the total number of pods available at
                                all times during the update is at least 70% of desired
                                pods.'
                          type: object
                        type:
                          description: Type of deployment. Can be "Recreate" or "RollingUpdate".
                            Default is RollingUpdate.
                          type: string
                      type: object
                    template:
                      description: Template describes the pods that will be created.
                      properties:
                        metadata:
                          description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata'
                          type: object
                        spec:
                          description: 'Specification of the desired behavior of the
                            pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status'
                          properties:
                            activeDeadlineSeconds:
                              description: Optional duration in seconds the pod may
                                be active on the node relative to StartTime before
                                the system will actively try to mark it failed and
                                kill associated containers. Value must be a positive
                                integer.
                              format: int64
                              type: integer
                            affinity:
                              description: If specified, the pod's scheduling constraints
                              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
                                              namespaces:
                                                description: namespaces specifies
                                                  which namespaces the labelSelector
                                                  applies to (matches against); null
                                                  or empty list 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 <topologyKey> 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
                                          namespaces:
                                            description: namespaces specifies which
                                              namespaces the labelSelector applies
                                              to (matches against); null or empty
                                              list 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
                                              namespaces:
                                                description: namespaces specifies
                                                  which namespaces the labelSelector
                                                  applies to (matches against); null
                                                  or empty list 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 <topologyKey> 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
                                          namespaces:
                                            description: namespaces specifies which
                                              namespaces the labelSelector applies
                                              to (matches against); null or empty
                                              list 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
                            automountServiceAccountToken:
                              description: AutomountServiceAccountToken indicates
                                whether a service account token should be automatically
                                mounted.
                              type: boolean
                            containers:
                              description: List of containers belonging to the pod.
                                Containers cannot currently be added or removed. There
                                must be at least one container in a Pod. Cannot be
                                updated.
                              items:
                                description: A single application container that you
                                  want to run within a pod.
                                properties:
                                  args:
                                    description: 'Arguments to the entrypoint. The
                                      docker 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. The $(VAR_NAME) syntax
                                      can be escaped with a double $$, ie: $$(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 docker 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.
                                      The $(VAR_NAME) syntax can be escaped with a
                                      double $$, ie: $$(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 previous 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. The $(VAR_NAME) syntax can
                                            be escaped with a double $$, ie: $$(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 it's 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.'
                                              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:
                                                  description: Specifies the output
                                                    format of the exposed resources,
                                                    defaults to "1"
                                                  type: string
                                                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 it's 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: 'Docker 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: One and only one of the following
                                              should be specified. 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: string
                                                  - type: integer
                                                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.
                                              scheme:
                                                description: Scheme to use for connecting
                                                  to the host. Defaults to HTTP.
                                                type: string
                                            required:
                                              - port
                                            type: object
                                          tcpSocket:
                                            description: 'TCPSocket specifies an action
                                              involving a TCP port. TCP hooks not
                                              yet supported TODO: implement a realistic
                                              TCP lifecycle hook'
                                            properties:
                                              host:
                                                description: 'Optional: Host name
                                                  to connect to, defaults to the pod
                                                  IP.'
                                                type: string
                                              port:
                                                anyOf:
                                                  - type: string
                                                  - type: integer
                                                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.
                                            required:
                                              - port
                                            type: object
                                        type: object
                                      preStop:
                                        description: 'PreStop is called immediately
                                          before a container is terminated. The container
                                          is terminated after the handler completes.
                                          The reason for termination is passed to
                                          the handler. Regardless of the outcome of
                                          the handler, the container is eventually
                                          terminated. 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: One and only one of the following
                                              should be specified. 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: string
                                                  - type: integer
                                                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.
                                              scheme:
                                                description: Scheme to use for connecting
                                                  to the host. Defaults to HTTP.
                                                type: string
                                            required:
                                              - port
                                            type: object
                                          tcpSocket:
                                            description: 'TCPSocket specifies an action
                                              involving a TCP port. TCP hooks not
                                              yet supported TODO: implement a realistic
                                              TCP lifecycle hook'
                                            properties:
                                              host:
                                                description: 'Optional: Host name
                                                  to connect to, defaults to the pod
                                                  IP.'
                                                type: string
                                              port:
                                                anyOf:
                                                  - type: string
                                                  - type: integer
                                                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.
                                            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: One and only one of the following
                                          should be specified. 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
                                      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: string
                                              - type: integer
                                            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.
                                          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. Minimum value is 1.
                                        format: int32
                                        type: integer
                                      tcpSocket:
                                        description: 'TCPSocket specifies an action
                                          involving a TCP port. TCP hooks not yet
                                          supported TODO: implement a realistic TCP
                                          lifecycle hook'
                                        properties:
                                          host:
                                            description: 'Optional: Host name to connect
                                              to, defaults to the pod IP.'
                                            type: string
                                          port:
                                            anyOf:
                                              - type: string
                                              - type: integer
                                            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.
                                        required:
                                          - port
                                        type: object
                                      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:
                                          description: Protocol for port. Must be
                                            UDP, TCP, or SCTP. Defaults to "TCP".
                                          type: string
                                      required:
                                        - containerPort
                                      type: object
                                    type: array
                                  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: One and only one of the following
                                          should be specified. 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
                                      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: string
                                              - type: integer
                                            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.
                                          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. Minimum value is 1.
                                        format: int32
                                        type: integer
                                      tcpSocket:
                                        description: 'TCPSocket specifies an action
                                          involving a TCP port. TCP hooks not yet
                                          supported TODO: implement a realistic TCP
                                          lifecycle hook'
                                        properties:
                                          host:
                                            description: 'Optional: Host name to connect
                                              to, defaults to the pod IP.'
                                            type: string
                                          port:
                                            anyOf:
                                              - type: string
                                              - type: integer
                                            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.
                                        required:
                                          - port
                                        type: object
                                      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-compute-resources-container/'
                                    properties:
                                      limits:
                                        additionalProperties:
                                          type: string
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                      requests:
                                        additionalProperties:
                                          type: string
                                        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-compute-resources-container/'
                                        type: object
                                    type: object
                                  securityContext:
                                    description: 'Security options the pod should
                                      run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/
                                      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'
                                        type: boolean
                                      capabilities:
                                        description: The capabilities to add/drop
                                          when running containers. Defaults to the
                                          default set of capabilities granted by the
                                          container runtime.
                                        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.
                                        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.
                                        type: string
                                      readOnlyRootFilesystem:
                                        description: Whether this container has a
                                          read-only root filesystem. Default is false.
                                        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.
                                        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.
                                        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.
                                        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
                                    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. This is
                                      a beta feature.
                                    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
                                      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
                            dnsConfig:
                              description: Specifies the DNS parameters of a pod.
                                Parameters specified here will be merged to the generated
                                DNS configuration based on DNSPolicy.
                              properties:
                                nameservers:
                                  description: A list of DNS name server IP addresses.
                                    This will be appended to the base nameservers
                                    generated from DNSPolicy. Duplicated nameservers
                                    will be removed.
                                  items:
                                    type: string
                                  type: array
                                options:
                                  description: A list of DNS resolver options. This
                                    will be merged with the base options generated
                                    from DNSPolicy. Duplicated entries will be removed.
                                    Resolution options given in Options will override
                                    those that appear in the base DNSPolicy.
                                  items:
                                    description: PodDNSConfigOption defines DNS resolver
                                      options of a pod.
                                    properties:
                                      name:
                                        description: Required.
                                        type: string
                                      value:
                                        type: string
                                    type: object
                                  type: array
                                searches:
                                  description: A list of DNS search domains for host-name
                                    lookup. This will be appended to the base search
                                    paths generated from DNSPolicy. Duplicated search
                                    paths will be removed.
                                  items:
                                    type: string
                                  type: array
                              type: object
                            dnsPolicy:
                              description: Set DNS policy for the pod. Defaults to
                                "ClusterFirst". Valid values are 'ClusterFirstWithHostNet',
                                'ClusterFirst', 'Default' or 'None'. DNS parameters
                                given in DNSConfig will be merged with the policy
                                selected with DNSPolicy. To have DNS options set along
                                with hostNetwork, you have to specify DNS policy explicitly
                                to 'ClusterFirstWithHostNet'.
                              type: string
                            enableServiceLinks:
                              description: EnableServiceLinks indicates whether information
                                about services should be injected into pod's environment
                                variables, matching the syntax of Docker links.
                              type: boolean
                            hostAliases:
                              description: HostAliases is an optional list of hosts
                                and IPs that will be injected into the pod's hosts
                                file if specified. This is only valid for non-hostNetwork
                                pods.
                              items:
                                description: HostAlias holds the mapping between IP
                                  and hostnames that will be injected as an entry
                                  in the pod's hosts file.
                                properties:
                                  hostnames:
                                    description: Hostnames for the above IP address.
                                    items:
                                      type: string
                                    type: array
                                  ip:
                                    description: IP address of the host file entry.
                                    type: string
                                type: object
                              type: array
                            hostIPC:
                              description: 'Use the host''s ipc namespace. Optional:
                                Default to false.'
                              type: boolean
                            hostNetwork:
                              description: Host networking requested for this pod.
                                Use the host's network namespace. If this option is
                                set, the ports that will be used must be specified.
                                Default to false.
                              type: boolean
                            hostPID:
                              description: 'Use the host''s pid namespace. Optional:
                                Default to false.'
                              type: boolean
                            hostname:
                              description: Specifies the hostname of the Pod If not
                                specified, the pod's hostname will be set to a system-defined
                                value.
                              type: string
                            imagePullSecrets:
                              description: 'ImagePullSecrets is an optional list of
                                references to secrets in the same namespace to use
                                for pulling any of the images used by this PodSpec.
                                If specified, these secrets will be passed to individual
                                puller implementations for them to use. For example,
                                in the case of docker, only DockerConfig type secrets
                                are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod'
                              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
                            initContainers:
                              description: 'List of initialization containers belonging
                                to the pod. Init containers are executed in order
                                prior to containers being started. If any init container
                                fails, the pod is considered to have failed and is
                                handled according to its restartPolicy. The name for
                                an init container or normal container must be unique
                                among all containers. Init containers may not have
                                Lifecycle actions, Readiness probes, or Liveness probes.
                                The resourceRequirements of an init container are
                                taken into account during scheduling by finding the
                                highest request/limit for each resource type, and
                                then using the max of of that value or the sum of
                                the normal containers. Limits are applied to init
                                containers in a similar fashion. Init containers cannot
                                currently be added or removed. Cannot be updated.
                                More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/'
                              items:
                                description: A single application container that you
                                  want to run within a pod.
                                properties:
                                  args:
                                    description: 'Arguments to the entrypoint. The
                                      docker 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. The $(VAR_NAME) syntax
                                      can be escaped with a double $$, ie: $$(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 docker 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.
                                      The $(VAR_NAME) syntax can be escaped with a
                                      double $$, ie: $$(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 previous 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. The $(VAR_NAME) syntax can
                                            be escaped with a double $$, ie: $$(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 it's 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.'
                                              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:
                                                  description: Specifies the output
                                                    format of the exposed resources,
                                                    defaults to "1"
                                                  type: string
                                                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 it's 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: 'Docker 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: One and only one of the following
                                              should be specified. 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: string
                                                  - type: integer
                                                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.
                                              scheme:
                                                description: Scheme to use for connecting
                                                  to the host. Defaults to HTTP.
                                                type: string
                                            required:
                                              - port
                                            type: object
                                          tcpSocket:
                                            description: 'TCPSocket specifies an action
                                              involving a TCP port. TCP hooks not
                                              yet supported TODO: implement a realistic
                                              TCP lifecycle hook'
                                            properties:
                                              host:
                                                description: 'Optional: Host name
                                                  to connect to, defaults to the pod
                                                  IP.'
                                                type: string
                                              port:
                                                anyOf:
                                                  - type: string
                                                  - type: integer
                                                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.
                                            required:
                                              - port
                                            type: object
                                        type: object
                                      preStop:
                                        description: 'PreStop is called immediately
                                          before a container is terminated. The container
                                          is terminated after the handler completes.
                                          The reason for termination is passed to
                                          the handler. Regardless of the outcome of
                                          the handler, the container is eventually
                                          terminated. 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: One and only one of the following
                                              should be specified. 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: string
                                                  - type: integer
                                                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.
                                              scheme:
                                                description: Scheme to use for connecting
                                                  to the host. Defaults to HTTP.
                                                type: string
                                            required:
                                              - port
                                            type: object
                                          tcpSocket:
                                            description: 'TCPSocket specifies an action
                                              involving a TCP port. TCP hooks not
                                              yet supported TODO: implement a realistic
                                              TCP lifecycle hook'
                                            properties:
                                              host:
                                                description: 'Optional: Host name
                                                  to connect to, defaults to the pod
                                                  IP.'
                                                type: string
                                              port:
                                                anyOf:
                                                  - type: string
                                                  - type: integer
                                                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.
                                            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: One and only one of the following
                                          should be specified. 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
                                      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: string
                                              - type: integer
                                            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.
                                          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. Minimum value is 1.
                                        format: int32
                                        type: integer
                                      tcpSocket:
                                        description: 'TCPSocket specifies an action
                                          involving a TCP port. TCP hooks not yet
                                          supported TODO: implement a realistic TCP
                                          lifecycle hook'
                                        properties:
                                          host:
                                            description: 'Optional: Host name to connect
                                              to, defaults to the pod IP.'
                                            type: string
                                          port:
                                            anyOf:
                                              - type: string
                                              - type: integer
                                            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.
                                        required:
                                          - port
                                        type: object
                                      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:
                                          description: Protocol for port. Must be
                                            UDP, TCP, or SCTP. Defaults to "TCP".
                                          type: string
                                      required:
                                        - containerPort
                                      type: object
                                    type: array
                                  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: One and only one of the following
                                          should be specified. 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
                                      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: string
                                              - type: integer
                                            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.
                                          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. Minimum value is 1.
                                        format: int32
                                        type: integer
                                      tcpSocket:
                                        description: 'TCPSocket specifies an action
                                          involving a TCP port. TCP hooks not yet
                                          supported TODO: implement a realistic TCP
                                          lifecycle hook'
                                        properties:
                                          host:
                                            description: 'Optional: Host name to connect
                                              to, defaults to the pod IP.'
                                            type: string
                                          port:
                                            anyOf:
                                              - type: string
                                              - type: integer
                                            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.
                                        required:
                                          - port
                                        type: object
                                      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-compute-resources-container/'
                                    properties:
                                      limits:
                                        additionalProperties:
                                          type: string
                                        description: 'Limits describes the maximum
                                          amount of compute resources allowed. More
                                          info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/'
                                        type: object
                                      requests:
                                        additionalProperties:
                                          type: string
                                        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-compute-resources-container/'
                                        type: object
                                    type: object
                                  securityContext:
                                    description: 'Security options the pod should
                                      run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/
                                      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'
                                        type: boolean
                                      capabilities:
                                        description: The capabilities to add/drop
                                          when running containers. Defaults to the
                                          default set of capabilities granted by the
                                          container runtime.
                                        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.
                                        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.
                                        type: string
                                      readOnlyRootFilesystem:
                                        description: Whether this container has a
                                          read-only root filesystem. Default is false.
                                        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.
                                        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.
                                        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.
                                        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
                                    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. This is
                                      a beta feature.
                                    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
                                      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
                            nodeName:
                              description: NodeName is a request to schedule this
                                pod onto a specific node. If it is non-empty, the
                                scheduler simply schedules this pod onto that node,
                                assuming that it fits resource requirements.
                              type: string
                            nodeSelector:
                              additionalProperties:
                                type: string
                              description: 'NodeSelector is a selector which must
                                be true for the pod to fit on a node. Selector which
                                must match a node''s labels for the pod to be scheduled
                                on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/'
                              type: object
                            priority:
                              description: The priority value. Various system components
                                use this field to find the priority of the pod. When
                                Priority Admission Controller is enabled, it prevents
                                users from setting this field. The admission controller
                                populates this field from PriorityClassName. The higher
                                the value, the higher the priority.
                              format: int32
                              type: integer
                            priorityClassName:
                              description: If specified, indicates the pod's priority.
                                "system-node-critical" and "system-cluster-critical"
                                are two special keywords which indicate the highest
                                priorities with the former being the highest priority.
                                Any other name must be defined by creating a PriorityClass
                                object with that name. If not specified, the pod priority
                                will be default or zero if there is no default.
                              type: string
                            readinessGates:
                              description: 'If specified, all readiness gates will
                                be evaluated for pod readiness. A pod is ready when
                                all its containers are ready AND all conditions specified
                                in the readiness gates have status equal to "True"
                                More info: https://github.com/kubernetes/community/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md'
                              items:
                                description: PodReadinessGate contains the reference
                                  to a pod condition
                                properties:
                                  conditionType:
                                    description: ConditionType refers to a condition
                                      in the pod's condition list with matching type.
                                    type: string
                                required:
                                  - conditionType
                                type: object
                              type: array
                            restartPolicy:
                              description: 'Restart policy for all containers within
                                the pod. One of Always, OnFailure, Never. Default
                                to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy'
                              type: string
                            runtimeClassName:
                              description: 'RuntimeClassName refers to a RuntimeClass
                                object in the node.k8s.io group, which should be used
                                to run this pod.  If no RuntimeClass resource matches
                                the named class, the pod will not be run. If unset
                                or empty, the "legacy" RuntimeClass will be used,
                                which is an implicit class with an empty definition
                                that uses the default runtime handler. More info:
                                https://github.com/kubernetes/community/blob/master/keps/sig-node/0014-runtime-class.md
                                This is an alpha feature and may change in the future.'
                              type: string
                            schedulerName:
                              description: If specified, the pod will be dispatched
                                by specified scheduler. If not specified, the pod
                                will be dispatched by default scheduler.
                              type: string
                            securityContext:
                              description: 'SecurityContext holds pod-level security
                                attributes and common container settings. Optional:
                                Defaults to empty.  See type description for default
                                values of each field.'
                              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."
                                  format: int64
                                  type: integer
                                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.
                                  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.
                                  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.
                                  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
                                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.
                                  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.
                                  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
                              type: object
                            serviceAccount:
                              description: 'DeprecatedServiceAccount is a depreciated
                                alias for ServiceAccountName. Deprecated: Use serviceAccountName
                                instead.'
                              type: string
                            serviceAccountName:
                              description: 'ServiceAccountName is the name of the
                                ServiceAccount to use to run this pod. More info:
                                https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/'
                              type: string
                            shareProcessNamespace:
                              description: 'Share a single process namespace between
                                all of the containers in a pod. When this is set containers
                                will be able to view and signal processes from other
                                containers in the same pod, and the first process
                                in each container will not be assigned PID 1. HostPID
                                and ShareProcessNamespace cannot both be set. Optional:
                                Default to false. This field is beta-level and may
                                be disabled with the PodShareProcessNamespace feature.'
                              type: boolean
                            subdomain:
                              description: If specified, the fully qualified Pod hostname
                                will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster
                                domain>". If not specified, the pod will not have
                                a domainname at all.
                              type: string
                            terminationGracePeriodSeconds:
                              description: Optional duration in seconds the pod needs
                                to terminate gracefully. May be decreased in delete
                                request. Value must be non-negative integer. The value
                                zero indicates delete immediately. If this value is
                                nil, the default grace period will be used instead.
                                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. Defaults
                                to 30 seconds.
                              format: int64
                              type: integer
                            tolerations:
                              description: If specified, the pod's tolerations.
                              items:
                                description: The pod this Toleration is attached to
                                  tolerates any taint that matches the triple <key,value,effect>
                                  using the matching operator <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
                            volumes:
                              description: 'List of volumes that can be mounted by
                                containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/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: '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: '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: 'Specify "true" to force and
                                          set the ReadOnly property in VolumeMounts
                                          to "true". If omitted, the default is "false".
                                          More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore'
                                        type: boolean
                                      volumeID:
                                        description: '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: 'Host Caching mode: None, Read
                                          Only, Read Write.'
                                        type: string
                                      diskName:
                                        description: The Name of the data disk in
                                          the blob storage
                                        type: string
                                      diskURI:
                                        description: The URI the data disk in the
                                          blob storage
                                        type: string
                                      fsType:
                                        description: 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: 'Expected values 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: 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: Defaults to false (read/write).
                                          ReadOnly here will force the ReadOnly setting
                                          in VolumeMounts.
                                        type: boolean
                                      secretName:
                                        description: the name of secret that contains
                                          Azure Storage Account Name and Key
                                        type: string
                                      shareName:
                                        description: 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: 'Required: Monitors is a collection
                                          of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it'
                                        items:
                                          type: string
                                        type: array
                                      path:
                                        description: 'Optional: Used as the mounted
                                          root, rather than the full Ceph tree, default
                                          is /'
                                        type: string
                                      readOnly:
                                        description: 'Optional: Defaults to false
                                          (read/write). ReadOnly here will force the
                                          ReadOnly setting in VolumeMounts. More info:
                                          https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it'
                                        type: boolean
                                      secretFile:
                                        description: 'Optional: SecretFile is the
                                          path to key ring for User, default is /etc/ceph/user.secret
                                          More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it'
                                        type: string
                                      secretRef:
                                        description: 'Optional: SecretRef is reference
                                          to the authentication secret for User, default
                                          is empty. More info: https://releases.k8s.io/HEAD/examples/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: 'Optional: User is the rados
                                          user name, default is admin More info: https://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md'
                                    properties:
                                      fsType:
                                        description: '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://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md'
                                        type: string
                                      readOnly:
                                        description: 'Optional: Defaults to false
                                          (read/write). ReadOnly here will force the
                                          ReadOnly setting in VolumeMounts. More info:
                                          https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md'
                                        type: boolean
                                      secretRef:
                                        description: '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: 'volume id used to identify the
                                          volume in cinder More info: https://releases.k8s.io/HEAD/examples/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: 'Optional: mode bits to use on
                                          created files by default. Must be a value
                                          between 0 and 0777. 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: 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: The key to project.
                                              type: string
                                            mode:
                                              description: 'Optional: mode bits to
                                                use on this file, must be a value
                                                between 0 and 0777. 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: 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: Specify whether the ConfigMap
                                          or it's keys must be defined
                                        type: boolean
                                    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 value
                                          between 0 and 0777. 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 to
                                                use on this file, must be a value
                                                between 0 and 0777. 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:
                                                  description: Specifies the output
                                                    format of the exposed resources,
                                                    defaults to "1"
                                                  type: string
                                                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: '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:
                                        description: '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'
                                        type: string
                                    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: '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: 'Optional: FC target lun number'
                                        format: int32
                                        type: integer
                                      readOnly:
                                        description: 'Optional: Defaults to false
                                          (read/write). ReadOnly here will force the
                                          ReadOnly setting in VolumeMounts.'
                                        type: boolean
                                      targetWWNs:
                                        description: 'Optional: FC target worldwide
                                          names (WWNs)'
                                        items:
                                          type: string
                                        type: array
                                      wwids:
                                        description: '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: 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: 'Optional: Extra command options
                                          if any.'
                                        type: object
                                      readOnly:
                                        description: 'Optional: Defaults to false
                                          (read/write). ReadOnly here will force the
                                          ReadOnly setting in VolumeMounts.'
                                        type: boolean
                                      secretRef:
                                        description: '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: Name of the dataset stored as
                                          metadata -> name on the dataset for Flocker
                                          should be considered as deprecated
                                        type: string
                                      datasetUUID:
                                        description: 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: '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: '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: '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: 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 URL
                                        type: string
                                      revision:
                                        description: 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://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md'
                                    properties:
                                      endpoints:
                                        description: 'EndpointsName is the endpoint
                                          name that details Glusterfs topology. More
                                          info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod'
                                        type: string
                                      path:
                                        description: 'Path is the Glusterfs volume
                                          path. More info: https://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md'
                                    properties:
                                      chapAuthDiscovery:
                                        description: whether support iSCSI Discovery
                                          CHAP authentication
                                        type: boolean
                                      chapAuthSession:
                                        description: whether support iSCSI Session
                                          CHAP authentication
                                        type: boolean
                                      fsType:
                                        description: '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: Custom iSCSI Initiator Name.
                                          If initiatorName is specified with iscsiInterface
                                          simultaneously, new iSCSI interface <target
                                          portal>:<volume name> will be created for
                                          the connection.
                                        type: string
                                      iqn:
                                        description: Target iSCSI Qualified Name.
                                        type: string
                                      iscsiInterface:
                                        description: iSCSI Interface Name that uses
                                          an iSCSI transport. Defaults to 'default'
                                          (tcp).
                                        type: string
                                      lun:
                                        description: iSCSI Target Lun number.
                                        format: int32
                                        type: integer
                                      portals:
                                        description: 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: 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: 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: 'Volume''s name. 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: 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: 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: 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: 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: Items for all in one resources secrets,
                                      configmaps, and downward API
                                    properties:
                                      defaultMode:
                                        description: Mode bits to use on created files
                                          by default. Must be a value between 0 and
                                          0777. 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: list of volume projections
                                        items:
                                          description: Projection that may be projected
                                            along with other supported volume types
                                          properties:
                                            configMap:
                                              description: information about the configMap
                                                data to project
                                              properties:
                                                items:
                                                  description: 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: The key to project.
                                                        type: string
                                                      mode:
                                                        description: 'Optional: mode
                                                          bits to use on this file,
                                                          must be a value between
                                                          0 and 0777. 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: 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: Specify whether the
                                                    ConfigMap or it's keys must be
                                                    defined
                                                  type: boolean
                                              type: object
                                            downwardAPI:
                                              description: 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 to use on this file,
                                                          must be a value between
                                                          0 and 0777. 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:
                                                            description: Specifies
                                                              the output format of
                                                              the exposed resources,
                                                              defaults to "1"
                                                            type: string
                                                          resource:
                                                            description: 'Required:
                                                              resource to select'
                                                            type: string
                                                        required:
                                                          - resource
                                                        type: object
                                                    required:
                                                      - path
                                                    type: object
                                                  type: array
                                              type: object
                                            secret:
                                              description: information about the secret
                                                data to project
                                              properties:
                                                items:
                                                  description: 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: The key to project.
                                                        type: string
                                                      mode:
                                                        description: 'Optional: mode
                                                          bits to use on this file,
                                                          must be a value between
                                                          0 and 0777. 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: 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: Specify whether the
                                                    Secret or its key must be defined
                                                  type: boolean
                                              type: object
                                            serviceAccountToken:
                                              description: 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
                                    required:
                                      - sources
                                    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
                                      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://releases.k8s.io/HEAD/examples/volumes/rbd/README.md'
                                    properties:
                                      fsType:
                                        description: '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: 'The rados image name. More info:
                                          https://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it'
                                        type: string
                                      monitors:
                                        description: 'A collection of Ceph monitors.
                                          More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it'
                                        items:
                                          type: string
                                        type: array
                                      pool:
                                        description: 'The rados pool name. Default
                                          is rbd. More info: https://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/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://releases.k8s.io/HEAD/examples/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: 'The rados user name. Default
                                          is admin. More info: https://releases.k8s.io/HEAD/examples/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: 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: The host address of the ScaleIO
                                          API Gateway.
                                        type: string
                                      protectionDomain:
                                        description: The name of the ScaleIO Protection
                                          Domain for the configured storage.
                                        type: string
                                      readOnly:
                                        description: 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: Flag to enable/disable SSL communication
                                          with Gateway, default false
                                        type: boolean
                                      storageMode:
                                        description: Indicates whether the storage
                                          for a volume should be ThickProvisioned
                                          or ThinProvisioned. Default is ThinProvisioned.
                                        type: string
                                      storagePool:
                                        description: The ScaleIO Storage Pool associated
                                          with the protection domain.
                                        type: string
                                      system:
                                        description: The name of the storage system
                                          as configured in ScaleIO.
                                        type: string
                                      volumeName:
                                        description: 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: 'Optional: mode bits to use on
                                          created files by default. Must be a value
                                          between 0 and 0777. 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: 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: The key to project.
                                              type: string
                                            mode:
                                              description: 'Optional: mode bits to
                                                use on this file, must be a value
                                                between 0 and 0777. 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: 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: Specify whether the Secret or
                                          it's keys must be defined
                                        type: boolean
                                      secretName:
                                        description: '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: 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: 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: 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: Storage Policy Based Management
                                          (SPBM) profile ID associated with the StoragePolicyName.
                                        type: string
                                      storagePolicyName:
                                        description: Storage Policy Based Management
                                          (SPBM) profile name.
                                        type: string
                                      volumePath:
                                        description: Path that identifies vSphere
                                          volume vmdk
                                        type: string
                                    required:
                                      - volumePath
                                    type: object
                                required:
                                  - name
                                type: object
                              type: array
                          required:
                            - containers
                          type: object
                      type: object
                  required:
                    - selector
                    - template
                  type: object
                status:
                  description: Most recently observed status of the Deployment.
                  properties:
                    availableReplicas:
                      description: Total number of available pods (ready for at least
                        minReadySeconds) targeted by this deployment.
                      format: int32
                      type: integer
                    collisionCount:
                      description: Count of hash collisions for the Deployment. The
                        Deployment controller uses this field as a collision avoidance
                        mechanism when it needs to create the name for the newest
                        ReplicaSet.
                      format: int32
                      type: integer
                    conditions:
                      description: Represents the latest available observations of
                        a deployment's current state.
                      items:
                        description: DeploymentCondition describes the state of a
                          deployment at a certain point.
                        properties:
                          lastTransitionTime:
                            description: Last time the condition transitioned from
                              one status to another.
                            format: date-time
                            type: string
                          lastUpdateTime:
                            description: The last time this condition was updated.
                            format: date-time
                            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 deployment condition.
                            type: string
                        required:
                          - status
                          - type
                        type: object
                      type: array
                    observedGeneration:
                      description: The generation observed by the deployment controller.
                      format: int64
                      type: integer
                    readyReplicas:
                      description: Total number of ready pods targeted by this deployment.
                      format: int32
                      type: integer
                    replicas:
                      description: Total number of non-terminated pods targeted by
                        this deployment (their labels match the selector).
                      format: int32
                      type: integer
                    unavailableReplicas:
                      description: Total number of unavailable pods targeted by this
                        deployment. This is the total number of pods that are still
                        required for the deployment to have 100% available capacity.
                        They may either be pods that are running but not yet available
                        or pods that still have not been created.
                      format: int32
                      type: integer
                    updatedReplicas:
                      description: Total number of non-terminated pods targeted by
                        this deployment that have the desired template spec.
                      format: int32
                      type: integer
                  type: object
              type: object
            nameServers:
              description: NameServers defines the name service list e.g. 192.168.1.1:9876;192.168.1.2:9876
              type: string
          required:
            - consoleDeployment
          type: object
        status:
          description: ConsoleStatus defines the observed state of Console
          type: object
      type: object
  version: v1alpha1
  versions:
    - name: v1alpha1
      served: true
      storage: true
rocketmq_v1alpha1_consoles_crd.yaml
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: topictransfers.rocketmq.apache.org
spec:
  group: rocketmq.apache.org
  names:
    kind: TopicTransfer
    listKind: TopicTransferList
    plural: topictransfers
    singular: topictransfer
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      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/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/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            sourceCluster:
              description: The cluster where the transferred topic from
              type: string
            targetCluster:
              description: The cluster where the topic will be transferred to
              type: string
            topic:
              description: Topic name
              type: string
          type: object
        status:
          type: object
  version: v1alpha1
  versions:
  - name: v1alpha1
    served: true
    storage: true
rocketmq_v1alpha1_topictransfer_crd.yaml

 

部署 rocketmq-operator
kubectl create -f service_account.yaml
kubectl create -f role.yaml
kubectl create -f role_binding.yaml
kubectl create -f operator.yaml

 

posted @ 2021-04-21 17:09  请叫我阿鑫  阅读(238)  评论(0编辑  收藏  举报