github.com/aclisp/heapster@v0.19.2-0.20160613100040-51756f899a96/Godeps/_workspace/src/k8s.io/kubernetes/pkg/api/v1/generated.proto (about)

     1  /*
     2  Copyright 2016 The Kubernetes Authors All rights reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  
    18  // This file was autogenerated by go-to-protobuf. Do not edit it manually!
    19  
    20  syntax = 'proto2';
    21  
    22  package k8s.io.kubernetes.pkg.api.v1;
    23  
    24  import "k8s.io/kubernetes/pkg/api/resource/generated.proto";
    25  import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto";
    26  import "k8s.io/kubernetes/pkg/runtime/generated.proto";
    27  import "k8s.io/kubernetes/pkg/util/intstr/generated.proto";
    28  
    29  // Package-wide variables from generator "generated".
    30  option go_package = "v1";
    31  
    32  // Represents a Persistent Disk resource in AWS.
    33  // 
    34  // An AWS EBS disk must exist before mounting to a container. The disk
    35  // must also be in the same AWS zone as the kubelet. An AWS EBS disk
    36  // can only be mounted as read/write once. AWS EBS volumes support
    37  // ownership management and SELinux relabeling.
    38  message AWSElasticBlockStoreVolumeSource {
    39    // Unique ID of the persistent disk resource in AWS (Amazon EBS volume).
    40    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore
    41    optional string volumeID = 1;
    42  
    43    // Filesystem type of the volume that you want to mount.
    44    // Tip: Ensure that the filesystem type is supported by the host operating system.
    45    // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
    46    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore
    47    // TODO: how do we prevent errors in the filesystem from compromising the machine
    48    optional string fsType = 2;
    49  
    50    // The partition in the volume that you want to mount.
    51    // If omitted, the default is to mount by volume name.
    52    // Examples: For volume /dev/sda1, you specify the partition as "1".
    53    // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
    54    optional int32 partition = 3;
    55  
    56    // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true".
    57    // If omitted, the default is "false".
    58    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore
    59    optional bool readOnly = 4;
    60  }
    61  
    62  // Affinity is a group of affinity scheduling rules.
    63  message Affinity {
    64    // Describes node affinity scheduling rules for the pod.
    65    optional NodeAffinity nodeAffinity = 1;
    66  
    67    // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
    68    optional PodAffinity podAffinity = 2;
    69  
    70    // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
    71    optional PodAntiAffinity podAntiAffinity = 3;
    72  }
    73  
    74  // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
    75  message AzureFileVolumeSource {
    76    // the name of secret that contains Azure Storage Account Name and Key
    77    optional string secretName = 1;
    78  
    79    // Share Name
    80    optional string shareName = 2;
    81  
    82    // Defaults to false (read/write). ReadOnly here will force
    83    // the ReadOnly setting in VolumeMounts.
    84    optional bool readOnly = 3;
    85  }
    86  
    87  // Binding ties one object to another.
    88  // For example, a pod is bound to a node by a scheduler.
    89  message Binding {
    90    // Standard object's metadata.
    91    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
    92    optional ObjectMeta metadata = 1;
    93  
    94    // The target object that you want to bind to the standard object.
    95    optional ObjectReference target = 2;
    96  }
    97  
    98  // Adds and removes POSIX capabilities from running containers.
    99  message Capabilities {
   100    // Added capabilities
   101    repeated string add = 1;
   102  
   103    // Removed capabilities
   104    repeated string drop = 2;
   105  }
   106  
   107  // Represents a Ceph Filesystem mount that lasts the lifetime of a pod
   108  // Cephfs volumes do not support ownership management or SELinux relabeling.
   109  message CephFSVolumeSource {
   110    // Required: Monitors is a collection of Ceph monitors
   111    // More info: http://releases.k8s.io/HEAD/examples/cephfs/README.md#how-to-use-it
   112    repeated string monitors = 1;
   113  
   114    // Optional: Used as the mounted root, rather than the full Ceph tree, default is /
   115    optional string path = 2;
   116  
   117    // Optional: User is the rados user name, default is admin
   118    // More info: http://releases.k8s.io/HEAD/examples/cephfs/README.md#how-to-use-it
   119    optional string user = 3;
   120  
   121    // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
   122    // More info: http://releases.k8s.io/HEAD/examples/cephfs/README.md#how-to-use-it
   123    optional string secretFile = 4;
   124  
   125    // Optional: SecretRef is reference to the authentication secret for User, default is empty.
   126    // More info: http://releases.k8s.io/HEAD/examples/cephfs/README.md#how-to-use-it
   127    optional LocalObjectReference secretRef = 5;
   128  
   129    // Optional: Defaults to false (read/write). ReadOnly here will force
   130    // the ReadOnly setting in VolumeMounts.
   131    // More info: http://releases.k8s.io/HEAD/examples/cephfs/README.md#how-to-use-it
   132    optional bool readOnly = 6;
   133  }
   134  
   135  // Represents a cinder volume resource in Openstack.
   136  // A Cinder volume must exist before mounting to a container.
   137  // The volume must also be in the same region as the kubelet.
   138  // Cinder volumes support ownership management and SELinux relabeling.
   139  message CinderVolumeSource {
   140    // volume id used to identify the volume in cinder
   141    // More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
   142    optional string volumeID = 1;
   143  
   144    // Filesystem type to mount.
   145    // Must be a filesystem type supported by the host operating system.
   146    // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
   147    // More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
   148    optional string fsType = 2;
   149  
   150    // Optional: Defaults to false (read/write). ReadOnly here will force
   151    // the ReadOnly setting in VolumeMounts.
   152    // More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
   153    optional bool readOnly = 3;
   154  }
   155  
   156  // Information about the condition of a component.
   157  message ComponentCondition {
   158    // Type of condition for a component.
   159    // Valid value: "Healthy"
   160    optional string type = 1;
   161  
   162    // Status of the condition for a component.
   163    // Valid values for "Healthy": "True", "False", or "Unknown".
   164    optional string status = 2;
   165  
   166    // Message about the condition for a component.
   167    // For example, information about a health check.
   168    optional string message = 3;
   169  
   170    // Condition error code for a component.
   171    // For example, a health check error code.
   172    optional string error = 4;
   173  }
   174  
   175  // ComponentStatus (and ComponentStatusList) holds the cluster validation info.
   176  message ComponentStatus {
   177    // Standard object's metadata.
   178    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   179    optional ObjectMeta metadata = 1;
   180  
   181    // List of component conditions observed
   182    repeated ComponentCondition conditions = 2;
   183  }
   184  
   185  // Status of all the conditions for the component as a list of ComponentStatus objects.
   186  message ComponentStatusList {
   187    // Standard list metadata.
   188    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
   189    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
   190  
   191    // List of ComponentStatus objects.
   192    repeated ComponentStatus items = 2;
   193  }
   194  
   195  // ConfigMap holds configuration data for pods to consume.
   196  message ConfigMap {
   197    // Standard object's metadata.
   198    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   199    optional ObjectMeta metadata = 1;
   200  
   201    // Data contains the configuration data.
   202    // Each key must be a valid DNS_SUBDOMAIN with an optional leading dot.
   203    map<string, string> data = 2;
   204  }
   205  
   206  // Selects a key from a ConfigMap.
   207  message ConfigMapKeySelector {
   208    // The ConfigMap to select from.
   209    optional LocalObjectReference localObjectReference = 1;
   210  
   211    // The key to select.
   212    optional string key = 2;
   213  }
   214  
   215  // ConfigMapList is a resource containing a list of ConfigMap objects.
   216  message ConfigMapList {
   217    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   218    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
   219  
   220    // Items is the list of ConfigMaps.
   221    repeated ConfigMap items = 2;
   222  }
   223  
   224  // Adapts a ConfigMap into a volume.
   225  // 
   226  // The contents of the target ConfigMap's Data field will be presented in a
   227  // volume as files using the keys in the Data field as the file names, unless
   228  // the items element is populated with specific mappings of keys to paths.
   229  // ConfigMap volumes support ownership management and SELinux relabeling.
   230  message ConfigMapVolumeSource {
   231    optional LocalObjectReference localObjectReference = 1;
   232  
   233    // If unspecified, each key-value pair in the Data field of the referenced
   234    // ConfigMap will be projected into the volume as a file whose name is the
   235    // key and content is the value. If specified, the listed keys will be
   236    // projected into the specified paths, and unlisted keys will not be
   237    // present. If a key is specified which is not present in the ConfigMap,
   238    // the volume setup will error. Paths must be relative and may not contain
   239    // the '..' path or start with '..'.
   240    repeated KeyToPath items = 2;
   241  }
   242  
   243  // A single application container that you want to run within a pod.
   244  message Container {
   245    // Name of the container specified as a DNS_LABEL.
   246    // Each container in a pod must have a unique name (DNS_LABEL).
   247    // Cannot be updated.
   248    optional string name = 1;
   249  
   250    // Docker image name.
   251    // More info: http://releases.k8s.io/HEAD/docs/user-guide/images.md
   252    optional string image = 2;
   253  
   254    // Entrypoint array. Not executed within a shell.
   255    // The docker image's ENTRYPOINT is used if this is not provided.
   256    // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
   257    // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
   258    // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
   259    // regardless of whether the variable exists or not.
   260    // Cannot be updated.
   261    // More info: http://releases.k8s.io/HEAD/docs/user-guide/containers.md#containers-and-commands
   262    repeated string command = 3;
   263  
   264    // Arguments to the entrypoint.
   265    // The docker image's CMD is used if this is not provided.
   266    // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
   267    // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
   268    // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
   269    // regardless of whether the variable exists or not.
   270    // Cannot be updated.
   271    // More info: http://releases.k8s.io/HEAD/docs/user-guide/containers.md#containers-and-commands
   272    repeated string args = 4;
   273  
   274    // Container's working directory.
   275    // If not specified, the container runtime's default will be used, which
   276    // might be configured in the container image.
   277    // Cannot be updated.
   278    optional string workingDir = 5;
   279  
   280    // List of ports to expose from the container. Exposing a port here gives
   281    // the system additional information about the network connections a
   282    // container uses, but is primarily informational. Not specifying a port here
   283    // DOES NOT prevent that port from being exposed. Any port which is
   284    // listening on the default "0.0.0.0" address inside a container will be
   285    // accessible from the network.
   286    // Cannot be updated.
   287    repeated ContainerPort ports = 6;
   288  
   289    // List of environment variables to set in the container.
   290    // Cannot be updated.
   291    repeated EnvVar env = 7;
   292  
   293    // Compute Resources required by this container.
   294    // Cannot be updated.
   295    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#resources
   296    optional ResourceRequirements resources = 8;
   297  
   298    // Pod volumes to mount into the container's filesyste.
   299    // Cannot be updated.
   300    repeated VolumeMount volumeMounts = 9;
   301  
   302    // Periodic probe of container liveness.
   303    // Container will be restarted if the probe fails.
   304    // Cannot be updated.
   305    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes
   306    optional Probe livenessProbe = 10;
   307  
   308    // Periodic probe of container service readiness.
   309    // Container will be removed from service endpoints if the probe fails.
   310    // Cannot be updated.
   311    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes
   312    optional Probe readinessProbe = 11;
   313  
   314    // Actions that the management system should take in response to container lifecycle events.
   315    // Cannot be updated.
   316    optional Lifecycle lifecycle = 12;
   317  
   318    // Optional: Path at which the file to which the container's termination message
   319    // will be written is mounted into the container's filesystem.
   320    // Message written is intended to be brief final status, such as an assertion failure message.
   321    // Defaults to /dev/termination-log.
   322    // Cannot be updated.
   323    optional string terminationMessagePath = 13;
   324  
   325    // Image pull policy.
   326    // One of Always, Never, IfNotPresent.
   327    // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
   328    // Cannot be updated.
   329    // More info: http://releases.k8s.io/HEAD/docs/user-guide/images.md#updating-images
   330    optional string imagePullPolicy = 14;
   331  
   332    // Security options the pod should run with.
   333    // More info: http://releases.k8s.io/HEAD/docs/design/security_context.md
   334    optional SecurityContext securityContext = 15;
   335  
   336    // Whether this container should allocate a buffer for stdin in the container runtime. If this
   337    // is not set, reads from stdin in the container will always result in EOF.
   338    // Default is false.
   339    optional bool stdin = 16;
   340  
   341    // Whether the container runtime should close the stdin channel after it has been opened by
   342    // a single attach. When stdin is true the stdin stream will remain open across multiple attach
   343    // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
   344    // first client attaches to stdin, and then remains open and accepts data until the client disconnects,
   345    // at which time stdin is closed and remains closed until the container is restarted. If this
   346    // flag is false, a container processes that reads from stdin will never receive an EOF.
   347    // Default is false
   348    optional bool stdinOnce = 17;
   349  
   350    // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
   351    // Default is false.
   352    optional bool tty = 18;
   353  }
   354  
   355  // Describe a container image
   356  message ContainerImage {
   357    // Names by which this image is known.
   358    // e.g. ["gcr.io/google_containers/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
   359    repeated string names = 1;
   360  
   361    // The size of the image in bytes.
   362    optional int64 sizeBytes = 2;
   363  }
   364  
   365  // ContainerPort represents a network port in a single container.
   366  message ContainerPort {
   367    // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
   368    // named port in a pod must have a unique name. Name for the port that can be
   369    // referred to by services.
   370    optional string name = 1;
   371  
   372    // Number of port to expose on the host.
   373    // If specified, this must be a valid port number, 0 < x < 65536.
   374    // If HostNetwork is specified, this must match ContainerPort.
   375    // Most containers do not need this.
   376    optional int32 hostPort = 2;
   377  
   378    // Number of port to expose on the pod's IP address.
   379    // This must be a valid port number, 0 < x < 65536.
   380    optional int32 containerPort = 3;
   381  
   382    // Protocol for port. Must be UDP or TCP.
   383    // Defaults to "TCP".
   384    optional string protocol = 4;
   385  
   386    // What host IP to bind the external port to.
   387    optional string hostIP = 5;
   388  }
   389  
   390  // ContainerState holds a possible state of container.
   391  // Only one of its members may be specified.
   392  // If none of them is specified, the default one is ContainerStateWaiting.
   393  message ContainerState {
   394    // Details about a waiting container
   395    optional ContainerStateWaiting waiting = 1;
   396  
   397    // Details about a running container
   398    optional ContainerStateRunning running = 2;
   399  
   400    // Details about a terminated container
   401    optional ContainerStateTerminated terminated = 3;
   402  }
   403  
   404  // ContainerStateRunning is a running state of a container.
   405  message ContainerStateRunning {
   406    // Time at which the container was last (re-)started
   407    optional k8s.io.kubernetes.pkg.api.unversioned.Time startedAt = 1;
   408  }
   409  
   410  // ContainerStateTerminated is a terminated state of a container.
   411  message ContainerStateTerminated {
   412    // Exit status from the last termination of the container
   413    optional int32 exitCode = 1;
   414  
   415    // Signal from the last termination of the container
   416    optional int32 signal = 2;
   417  
   418    // (brief) reason from the last termination of the container
   419    optional string reason = 3;
   420  
   421    // Message regarding the last termination of the container
   422    optional string message = 4;
   423  
   424    // Time at which previous execution of the container started
   425    optional k8s.io.kubernetes.pkg.api.unversioned.Time startedAt = 5;
   426  
   427    // Time at which the container last terminated
   428    optional k8s.io.kubernetes.pkg.api.unversioned.Time finishedAt = 6;
   429  
   430    // Container's ID in the format 'docker://<container_id>'
   431    optional string containerID = 7;
   432  }
   433  
   434  // ContainerStateWaiting is a waiting state of a container.
   435  message ContainerStateWaiting {
   436    // (brief) reason the container is not yet running.
   437    optional string reason = 1;
   438  
   439    // Message regarding why the container is not yet running.
   440    optional string message = 2;
   441  }
   442  
   443  // ContainerStatus contains details for the current status of this container.
   444  message ContainerStatus {
   445    // This must be a DNS_LABEL. Each container in a pod must have a unique name.
   446    // Cannot be updated.
   447    optional string name = 1;
   448  
   449    // Details about the container's current condition.
   450    optional ContainerState state = 2;
   451  
   452    // Details about the container's last termination condition.
   453    optional ContainerState lastState = 3;
   454  
   455    // Specifies whether the container has passed its readiness probe.
   456    optional bool ready = 4;
   457  
   458    // The number of times the container has been restarted, currently based on
   459    // the number of dead containers that have not yet been removed.
   460    // Note that this is calculated from dead containers. But those containers are subject to
   461    // garbage collection. This value will get capped at 5 by GC.
   462    optional int32 restartCount = 5;
   463  
   464    // The image the container is running.
   465    // More info: http://releases.k8s.io/HEAD/docs/user-guide/images.md
   466    // TODO(dchen1107): Which image the container is running with?
   467    optional string image = 6;
   468  
   469    // ImageID of the container's image.
   470    optional string imageID = 7;
   471  
   472    // Container's ID in the format 'docker://<container_id>'.
   473    // More info: http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#container-information
   474    optional string containerID = 8;
   475  }
   476  
   477  // DaemonEndpoint contains information about a single Daemon endpoint.
   478  message DaemonEndpoint {
   479    // Port number of the given endpoint.
   480    optional int32 Port = 1;
   481  }
   482  
   483  // DeleteOptions may be provided when deleting an API object
   484  message DeleteOptions {
   485    // The duration in seconds before the object should be deleted. Value must be non-negative integer.
   486    // The value zero indicates delete immediately. If this value is nil, the default grace period for the
   487    // specified type will be used.
   488    // Defaults to a per object value if not specified. zero means delete immediately.
   489    optional int64 gracePeriodSeconds = 1;
   490  
   491    // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be
   492    // returned.
   493    optional Preconditions preconditions = 2;
   494  
   495    // Should the dependent objects be orphaned. If true/false, the "orphan"
   496    // finalizer will be added to/removed from the object's finalizers list.
   497    optional bool orphanDependents = 3;
   498  }
   499  
   500  // DownwardAPIVolumeFile represents information to create the file containing the pod field
   501  message DownwardAPIVolumeFile {
   502    // 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 '..'
   503    optional string path = 1;
   504  
   505    // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
   506    optional ObjectFieldSelector fieldRef = 2;
   507  }
   508  
   509  // DownwardAPIVolumeSource represents a volume containing downward API info.
   510  // Downward API volumes support ownership management and SELinux relabeling.
   511  message DownwardAPIVolumeSource {
   512    // Items is a list of downward API volume file
   513    repeated DownwardAPIVolumeFile items = 1;
   514  }
   515  
   516  // Represents an empty directory for a pod.
   517  // Empty directory volumes support ownership management and SELinux relabeling.
   518  message EmptyDirVolumeSource {
   519    // What type of storage medium should back this directory.
   520    // The default is "" which means to use the node's default medium.
   521    // Must be an empty string (default) or Memory.
   522    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir
   523    optional string medium = 1;
   524  }
   525  
   526  // EndpointAddress is a tuple that describes single IP address.
   527  message EndpointAddress {
   528    // The IP of this endpoint.
   529    // May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16),
   530    // or link-local multicast ((224.0.0.0/24).
   531    // IPv6 is also accepted but not fully supported on all platforms. Also, certain
   532    // kubernetes components, like kube-proxy, are not IPv6 ready.
   533    // TODO: This should allow hostname or IP, See #4447.
   534    optional string ip = 1;
   535  
   536    // The Hostname of this endpoint
   537    optional string hostname = 3;
   538  
   539    // Reference to object providing the endpoint.
   540    optional ObjectReference targetRef = 2;
   541  }
   542  
   543  // EndpointPort is a tuple that describes a single port.
   544  message EndpointPort {
   545    // The name of this port (corresponds to ServicePort.Name).
   546    // Must be a DNS_LABEL.
   547    // Optional only if one port is defined.
   548    optional string name = 1;
   549  
   550    // The port number of the endpoint.
   551    optional int32 port = 2;
   552  
   553    // The IP protocol for this port.
   554    // Must be UDP or TCP.
   555    // Default is TCP.
   556    optional string protocol = 3;
   557  }
   558  
   559  // EndpointSubset is a group of addresses with a common set of ports. The
   560  // expanded set of endpoints is the Cartesian product of Addresses x Ports.
   561  // For example, given:
   562  //   {
   563  //     Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
   564  //     Ports:     [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
   565  //   }
   566  // The resulting set of endpoints can be viewed as:
   567  //     a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
   568  //     b: [ 10.10.1.1:309, 10.10.2.2:309 ]
   569  message EndpointSubset {
   570    // IP addresses which offer the related ports that are marked as ready. These endpoints
   571    // should be considered safe for load balancers and clients to utilize.
   572    repeated EndpointAddress addresses = 1;
   573  
   574    // IP addresses which offer the related ports but are not currently marked as ready
   575    // because they have not yet finished starting, have recently failed a readiness check,
   576    // or have recently failed a liveness check.
   577    repeated EndpointAddress notReadyAddresses = 2;
   578  
   579    // Port numbers available on the related IP addresses.
   580    repeated EndpointPort ports = 3;
   581  }
   582  
   583  // Endpoints is a collection of endpoints that implement the actual service. Example:
   584  //   Name: "mysvc",
   585  //   Subsets: [
   586  //     {
   587  //       Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
   588  //       Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
   589  //     },
   590  //     {
   591  //       Addresses: [{"ip": "10.10.3.3"}],
   592  //       Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
   593  //     },
   594  //  ]
   595  message Endpoints {
   596    // Standard object's metadata.
   597    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   598    optional ObjectMeta metadata = 1;
   599  
   600    // The set of all endpoints is the union of all subsets. Addresses are placed into
   601    // subsets according to the IPs they share. A single address with multiple ports,
   602    // some of which are ready and some of which are not (because they come from
   603    // different containers) will result in the address being displayed in different
   604    // subsets for the different ports. No address will appear in both Addresses and
   605    // NotReadyAddresses in the same subset.
   606    // Sets of addresses and ports that comprise a service.
   607    repeated EndpointSubset subsets = 2;
   608  }
   609  
   610  // EndpointsList is a list of endpoints.
   611  message EndpointsList {
   612    // Standard list metadata.
   613    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
   614    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
   615  
   616    // List of endpoints.
   617    repeated Endpoints items = 2;
   618  }
   619  
   620  // EnvVar represents an environment variable present in a Container.
   621  message EnvVar {
   622    // Name of the environment variable. Must be a C_IDENTIFIER.
   623    optional string name = 1;
   624  
   625    // Variable references $(VAR_NAME) are expanded
   626    // using the previous defined environment variables in the container and
   627    // any service environment variables. If a variable cannot be resolved,
   628    // the reference in the input string will be unchanged. The $(VAR_NAME)
   629    // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
   630    // references will never be expanded, regardless of whether the variable
   631    // exists or not.
   632    // Defaults to "".
   633    optional string value = 2;
   634  
   635    // Source for the environment variable's value. Cannot be used if value is not empty.
   636    optional EnvVarSource valueFrom = 3;
   637  }
   638  
   639  // EnvVarSource represents a source for the value of an EnvVar.
   640  message EnvVarSource {
   641    // Selects a field of the pod; only name and namespace are supported.
   642    optional ObjectFieldSelector fieldRef = 1;
   643  
   644    // Selects a key of a ConfigMap.
   645    optional ConfigMapKeySelector configMapKeyRef = 2;
   646  
   647    // Selects a key of a secret in the pod's namespace
   648    optional SecretKeySelector secretKeyRef = 3;
   649  }
   650  
   651  // Event is a report of an event somewhere in the cluster.
   652  // TODO: Decide whether to store these separately or with the object they apply to.
   653  message Event {
   654    // Standard object's metadata.
   655    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   656    optional ObjectMeta metadata = 1;
   657  
   658    // The object that this event is about.
   659    optional ObjectReference involvedObject = 2;
   660  
   661    // This should be a short, machine understandable string that gives the reason
   662    // for the transition into the object's current status.
   663    // TODO: provide exact specification for format.
   664    optional string reason = 3;
   665  
   666    // A human-readable description of the status of this operation.
   667    // TODO: decide on maximum length.
   668    optional string message = 4;
   669  
   670    // The component reporting this event. Should be a short machine understandable string.
   671    optional EventSource source = 5;
   672  
   673    // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
   674    optional k8s.io.kubernetes.pkg.api.unversioned.Time firstTimestamp = 6;
   675  
   676    // The time at which the most recent occurrence of this event was recorded.
   677    optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTimestamp = 7;
   678  
   679    // The number of times this event has occurred.
   680    optional int32 count = 8;
   681  
   682    // Type of this event (Normal, Warning), new types could be added in the future
   683    optional string type = 9;
   684  }
   685  
   686  // EventList is a list of events.
   687  message EventList {
   688    // Standard list metadata.
   689    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
   690    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
   691  
   692    // List of events
   693    repeated Event items = 2;
   694  }
   695  
   696  // EventSource contains information for an event.
   697  message EventSource {
   698    // Component from which the event is generated.
   699    optional string component = 1;
   700  
   701    // Host name on which the event is generated.
   702    optional string host = 2;
   703  }
   704  
   705  // ExecAction describes a "run in container" action.
   706  message ExecAction {
   707    // Command is the command line to execute inside the container, the working directory for the
   708    // command  is root ('/') in the container's filesystem. The command is simply exec'd, it is
   709    // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
   710    // a shell, you need to explicitly call out to that shell.
   711    // Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
   712    repeated string command = 1;
   713  }
   714  
   715  // ExportOptions is the query options to the standard REST get call.
   716  message ExportOptions {
   717    // Should this value be exported.  Export strips fields that a user can not specify.
   718    optional bool export = 1;
   719  
   720    // Should the export be exact.  Exact export maintains cluster-specific fields like 'Namespace'
   721    optional bool exact = 2;
   722  }
   723  
   724  // Represents a Fibre Channel volume.
   725  // Fibre Channel volumes can only be mounted as read/write once.
   726  // Fibre Channel volumes support ownership management and SELinux relabeling.
   727  message FCVolumeSource {
   728    // Required: FC target world wide names (WWNs)
   729    repeated string targetWWNs = 1;
   730  
   731    // Required: FC target lun number
   732    optional int32 lun = 2;
   733  
   734    // Filesystem type to mount.
   735    // Must be a filesystem type supported by the host operating system.
   736    // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
   737    // TODO: how do we prevent errors in the filesystem from compromising the machine
   738    optional string fsType = 3;
   739  
   740    // Optional: Defaults to false (read/write). ReadOnly here will force
   741    // the ReadOnly setting in VolumeMounts.
   742    optional bool readOnly = 4;
   743  }
   744  
   745  // FlexVolume represents a generic volume resource that is
   746  // provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.
   747  message FlexVolumeSource {
   748    // Driver is the name of the driver to use for this volume.
   749    optional string driver = 1;
   750  
   751    // Filesystem type to mount.
   752    // Must be a filesystem type supported by the host operating system.
   753    // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
   754    optional string fsType = 2;
   755  
   756    // Optional: SecretRef is reference to the secret object containing
   757    // sensitive information to pass to the plugin scripts. This may be
   758    // empty if no secret object is specified. If the secret object
   759    // contains more than one secret, all secrets are passed to the plugin
   760    // scripts.
   761    optional LocalObjectReference secretRef = 3;
   762  
   763    // Optional: Defaults to false (read/write). ReadOnly here will force
   764    // the ReadOnly setting in VolumeMounts.
   765    optional bool readOnly = 4;
   766  
   767    // Optional: Extra command options if any.
   768    map<string, string> options = 5;
   769  }
   770  
   771  // Represents a Flocker volume mounted by the Flocker agent.
   772  // Flocker volumes do not support ownership management or SELinux relabeling.
   773  message FlockerVolumeSource {
   774    // Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker
   775    optional string datasetName = 1;
   776  }
   777  
   778  // Represents a Persistent Disk resource in Google Compute Engine.
   779  // 
   780  // A GCE PD must exist before mounting to a container. The disk must
   781  // also be in the same GCE project and zone as the kubelet. A GCE PD
   782  // can only be mounted as read/write once or read-only many times. GCE
   783  // PDs support ownership management and SELinux relabeling.
   784  message GCEPersistentDiskVolumeSource {
   785    // Unique name of the PD resource in GCE. Used to identify the disk in GCE.
   786    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
   787    optional string pdName = 1;
   788  
   789    // Filesystem type of the volume that you want to mount.
   790    // Tip: Ensure that the filesystem type is supported by the host operating system.
   791    // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
   792    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
   793    // TODO: how do we prevent errors in the filesystem from compromising the machine
   794    optional string fsType = 2;
   795  
   796    // The partition in the volume that you want to mount.
   797    // If omitted, the default is to mount by volume name.
   798    // Examples: For volume /dev/sda1, you specify the partition as "1".
   799    // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
   800    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
   801    optional int32 partition = 3;
   802  
   803    // ReadOnly here will force the ReadOnly setting in VolumeMounts.
   804    // Defaults to false.
   805    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
   806    optional bool readOnly = 4;
   807  }
   808  
   809  // Represents a volume that is populated with the contents of a git repository.
   810  // Git repo volumes do not support ownership management.
   811  // Git repo volumes support SELinux relabeling.
   812  message GitRepoVolumeSource {
   813    // Repository URL
   814    optional string repository = 1;
   815  
   816    // Commit hash for the specified revision.
   817    optional string revision = 2;
   818  
   819    // Target directory name.
   820    // Must not contain or start with '..'.  If '.' is supplied, the volume directory will be the
   821    // git repository.  Otherwise, if specified, the volume will contain the git repository in
   822    // the subdirectory with the given name.
   823    optional string directory = 3;
   824  }
   825  
   826  // Represents a Glusterfs mount that lasts the lifetime of a pod.
   827  // Glusterfs volumes do not support ownership management or SELinux relabeling.
   828  message GlusterfsVolumeSource {
   829    // EndpointsName is the endpoint name that details Glusterfs topology.
   830    // More info: http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod
   831    optional string endpoints = 1;
   832  
   833    // Path is the Glusterfs volume path.
   834    // More info: http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod
   835    optional string path = 2;
   836  
   837    // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions.
   838    // Defaults to false.
   839    // More info: http://releases.k8s.io/HEAD/examples/glusterfs/README.md#create-a-pod
   840    optional bool readOnly = 3;
   841  }
   842  
   843  // HTTPGetAction describes an action based on HTTP Get requests.
   844  message HTTPGetAction {
   845    // Path to access on the HTTP server.
   846    optional string path = 1;
   847  
   848    // Name or number of the port to access on the container.
   849    // Number must be in the range 1 to 65535.
   850    // Name must be an IANA_SVC_NAME.
   851    optional k8s.io.kubernetes.pkg.util.intstr.IntOrString port = 2;
   852  
   853    // Host name to connect to, defaults to the pod IP. You probably want to set
   854    // "Host" in httpHeaders instead.
   855    optional string host = 3;
   856  
   857    // Scheme to use for connecting to the host.
   858    // Defaults to HTTP.
   859    optional string scheme = 4;
   860  
   861    // Custom headers to set in the request. HTTP allows repeated headers.
   862    repeated HTTPHeader httpHeaders = 5;
   863  }
   864  
   865  // HTTPHeader describes a custom header to be used in HTTP probes
   866  message HTTPHeader {
   867    // The header field name
   868    optional string name = 1;
   869  
   870    // The header field value
   871    optional string value = 2;
   872  }
   873  
   874  // Handler defines a specific action that should be taken
   875  // TODO: pass structured data to these actions, and document that data here.
   876  message Handler {
   877    // One and only one of the following should be specified.
   878    // Exec specifies the action to take.
   879    optional ExecAction exec = 1;
   880  
   881    // HTTPGet specifies the http request to perform.
   882    optional HTTPGetAction httpGet = 2;
   883  
   884    // TCPSocket specifies an action involving a TCP port.
   885    // TCP hooks not yet supported
   886    // TODO: implement a realistic TCP lifecycle hook
   887    optional TCPSocketAction tcpSocket = 3;
   888  }
   889  
   890  // Represents a host path mapped into a pod.
   891  // Host path volumes do not support ownership management or SELinux relabeling.
   892  message HostPathVolumeSource {
   893    // Path of the directory on the host.
   894    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath
   895    optional string path = 1;
   896  }
   897  
   898  // Represents an ISCSI disk.
   899  // ISCSI volumes can only be mounted as read/write once.
   900  // ISCSI volumes support ownership management and SELinux relabeling.
   901  message ISCSIVolumeSource {
   902    // iSCSI target portal. The portal is either an IP or ip_addr:port if the port
   903    // is other than default (typically TCP ports 860 and 3260).
   904    optional string targetPortal = 1;
   905  
   906    // Target iSCSI Qualified Name.
   907    optional string iqn = 2;
   908  
   909    // iSCSI target lun number.
   910    optional int32 lun = 3;
   911  
   912    // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.
   913    optional string iscsiInterface = 4;
   914  
   915    // Filesystem type of the volume that you want to mount.
   916    // Tip: Ensure that the filesystem type is supported by the host operating system.
   917    // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
   918    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#iscsi
   919    // TODO: how do we prevent errors in the filesystem from compromising the machine
   920    optional string fsType = 5;
   921  
   922    // ReadOnly here will force the ReadOnly setting in VolumeMounts.
   923    // Defaults to false.
   924    optional bool readOnly = 6;
   925  }
   926  
   927  // Maps a string key to a path within a volume.
   928  message KeyToPath {
   929    // The key to project.
   930    optional string key = 1;
   931  
   932    // The relative path of the file to map the key to.
   933    // May not be an absolute path.
   934    // May not contain the path element '..'.
   935    // May not start with the string '..'.
   936    optional string path = 2;
   937  }
   938  
   939  // Lifecycle describes actions that the management system should take in response to container lifecycle
   940  // events. For the PostStart and PreStop lifecycle handlers, management of the container blocks
   941  // until the action is complete, unless the container process fails, in which case the handler is aborted.
   942  message Lifecycle {
   943    // PostStart is called immediately after a container is created. If the handler fails,
   944    // the container is terminated and restarted according to its restart policy.
   945    // Other management of the container blocks until the hook completes.
   946    // More info: http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#hook-details
   947    optional Handler postStart = 1;
   948  
   949    // PreStop is called immediately before a container is terminated.
   950    // The container is terminated after the handler completes.
   951    // The reason for termination is passed to the handler.
   952    // Regardless of the outcome of the handler, the container is eventually terminated.
   953    // Other management of the container blocks until the hook completes.
   954    // More info: http://releases.k8s.io/HEAD/docs/user-guide/container-environment.md#hook-details
   955    optional Handler preStop = 2;
   956  }
   957  
   958  // LimitRange sets resource usage limits for each kind of resource in a Namespace.
   959  message LimitRange {
   960    // Standard object's metadata.
   961    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
   962    optional ObjectMeta metadata = 1;
   963  
   964    // Spec defines the limits enforced.
   965    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
   966    optional LimitRangeSpec spec = 2;
   967  }
   968  
   969  // LimitRangeItem defines a min/max usage limit for any resource that matches on kind.
   970  message LimitRangeItem {
   971    // Type of resource that this limit applies to.
   972    optional string type = 1;
   973  
   974    // Max usage constraints on this kind by resource name.
   975    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> max = 2;
   976  
   977    // Min usage constraints on this kind by resource name.
   978    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> min = 3;
   979  
   980    // Default resource requirement limit value by resource name if resource limit is omitted.
   981    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> default = 4;
   982  
   983    // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.
   984    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> defaultRequest = 5;
   985  
   986    // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.
   987    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> maxLimitRequestRatio = 6;
   988  }
   989  
   990  // LimitRangeList is a list of LimitRange items.
   991  message LimitRangeList {
   992    // Standard list metadata.
   993    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
   994    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
   995  
   996    // Items is a list of LimitRange objects.
   997    // More info: http://releases.k8s.io/HEAD/docs/design/admission_control_limit_range.md
   998    repeated LimitRange items = 2;
   999  }
  1000  
  1001  // LimitRangeSpec defines a min/max usage limit for resources that match on kind.
  1002  message LimitRangeSpec {
  1003    // Limits is the list of LimitRangeItem objects that are enforced.
  1004    repeated LimitRangeItem limits = 1;
  1005  }
  1006  
  1007  // List holds a list of objects, which may not be known by the server.
  1008  message List {
  1009    // Standard list metadata.
  1010    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1011    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1012  
  1013    // List of objects
  1014    repeated k8s.io.kubernetes.pkg.runtime.RawExtension items = 2;
  1015  }
  1016  
  1017  // ListOptions is the query options to a standard REST list call.
  1018  message ListOptions {
  1019    // A selector to restrict the list of returned objects by their labels.
  1020    // Defaults to everything.
  1021    optional string labelSelector = 1;
  1022  
  1023    // A selector to restrict the list of returned objects by their fields.
  1024    // Defaults to everything.
  1025    optional string fieldSelector = 2;
  1026  
  1027    // Watch for changes to the described resources and return them as a stream of
  1028    // add, update, and remove notifications. Specify resourceVersion.
  1029    optional bool watch = 3;
  1030  
  1031    // When specified with a watch call, shows changes that occur after that particular version of a resource.
  1032    // Defaults to changes from the beginning of history.
  1033    optional string resourceVersion = 4;
  1034  
  1035    // Timeout for the list/watch call.
  1036    optional int64 timeoutSeconds = 5;
  1037  }
  1038  
  1039  // LoadBalancerIngress represents the status of a load-balancer ingress point:
  1040  // traffic intended for the service should be sent to an ingress point.
  1041  message LoadBalancerIngress {
  1042    // IP is set for load-balancer ingress points that are IP based
  1043    // (typically GCE or OpenStack load-balancers)
  1044    optional string ip = 1;
  1045  
  1046    // Hostname is set for load-balancer ingress points that are DNS based
  1047    // (typically AWS load-balancers)
  1048    optional string hostname = 2;
  1049  }
  1050  
  1051  // LoadBalancerStatus represents the status of a load-balancer.
  1052  message LoadBalancerStatus {
  1053    // Ingress is a list containing ingress points for the load-balancer.
  1054    // Traffic intended for the service should be sent to these ingress points.
  1055    repeated LoadBalancerIngress ingress = 1;
  1056  }
  1057  
  1058  // LocalObjectReference contains enough information to let you locate the
  1059  // referenced object inside the same namespace.
  1060  message LocalObjectReference {
  1061    // Name of the referent.
  1062    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
  1063    // TODO: Add other useful fields. apiVersion, kind, uid?
  1064    optional string name = 1;
  1065  }
  1066  
  1067  // Represents an NFS mount that lasts the lifetime of a pod.
  1068  // NFS volumes do not support ownership management or SELinux relabeling.
  1069  message NFSVolumeSource {
  1070    // Server is the hostname or IP address of the NFS server.
  1071    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs
  1072    optional string server = 1;
  1073  
  1074    // Path that is exported by the NFS server.
  1075    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs
  1076    optional string path = 2;
  1077  
  1078    // ReadOnly here will force
  1079    // the NFS export to be mounted with read-only permissions.
  1080    // Defaults to false.
  1081    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs
  1082    optional bool readOnly = 3;
  1083  }
  1084  
  1085  // Namespace provides a scope for Names.
  1086  // Use of multiple namespaces is optional.
  1087  message Namespace {
  1088    // Standard object's metadata.
  1089    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1090    optional ObjectMeta metadata = 1;
  1091  
  1092    // Spec defines the behavior of the Namespace.
  1093    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1094    optional NamespaceSpec spec = 2;
  1095  
  1096    // Status describes the current status of a Namespace.
  1097    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1098    optional NamespaceStatus status = 3;
  1099  }
  1100  
  1101  // NamespaceList is a list of Namespaces.
  1102  message NamespaceList {
  1103    // Standard list metadata.
  1104    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1105    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1106  
  1107    // Items is the list of Namespace objects in the list.
  1108    // More info: http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md
  1109    repeated Namespace items = 2;
  1110  }
  1111  
  1112  // NamespaceSpec describes the attributes on a Namespace.
  1113  message NamespaceSpec {
  1114    // Finalizers is an opaque list of values that must be empty to permanently remove object from storage.
  1115    // More info: http://releases.k8s.io/HEAD/docs/design/namespaces.md#finalizers
  1116    repeated string finalizers = 1;
  1117  }
  1118  
  1119  // NamespaceStatus is information about the current status of a Namespace.
  1120  message NamespaceStatus {
  1121    // Phase is the current lifecycle phase of the namespace.
  1122    // More info: http://releases.k8s.io/HEAD/docs/design/namespaces.md#phases
  1123    optional string phase = 1;
  1124  }
  1125  
  1126  // Node is a worker node in Kubernetes, formerly known as minion.
  1127  // Each node will have a unique identifier in the cache (i.e. in etcd).
  1128  message Node {
  1129    // Standard object's metadata.
  1130    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1131    optional ObjectMeta metadata = 1;
  1132  
  1133    // Spec defines the behavior of a node.
  1134    // http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1135    optional NodeSpec spec = 2;
  1136  
  1137    // Most recently observed status of the node.
  1138    // Populated by the system.
  1139    // Read-only.
  1140    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1141    optional NodeStatus status = 3;
  1142  }
  1143  
  1144  // NodeAddress contains information for the node's address.
  1145  message NodeAddress {
  1146    // Node address type, one of Hostname, ExternalIP or InternalIP.
  1147    optional string type = 1;
  1148  
  1149    // The node address.
  1150    optional string address = 2;
  1151  }
  1152  
  1153  // Node affinity is a group of node affinity scheduling rules.
  1154  message NodeAffinity {
  1155    // If the affinity requirements specified by this field are not met at
  1156    // scheduling time, the pod will not be scheduled onto the node.
  1157    // If the affinity requirements specified by this field cease to be met
  1158    // at some point during pod execution (e.g. due to an update), the system
  1159    // may or may not try to eventually evict the pod from its node.
  1160    optional NodeSelector requiredDuringSchedulingIgnoredDuringExecution = 1;
  1161  
  1162    // The scheduler will prefer to schedule pods to nodes that satisfy
  1163    // the affinity expressions specified by this field, but it may choose
  1164    // a node that violates one or more of the expressions. The node that is
  1165    // most preferred is the one with the greatest sum of weights, i.e.
  1166    // for each node that meets all of the scheduling requirements (resource
  1167    // request, requiredDuringScheduling affinity expressions, etc.),
  1168    // compute a sum by iterating through the elements of this field and adding
  1169    // "weight" to the sum if the node matches the corresponding matchExpressions; the
  1170    // node(s) with the highest sum are the most preferred.
  1171    repeated PreferredSchedulingTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
  1172  }
  1173  
  1174  // NodeCondition contains condition infromation for a node.
  1175  message NodeCondition {
  1176    // Type of node condition.
  1177    optional string type = 1;
  1178  
  1179    // Status of the condition, one of True, False, Unknown.
  1180    optional string status = 2;
  1181  
  1182    // Last time we got an update on a given condition.
  1183    optional k8s.io.kubernetes.pkg.api.unversioned.Time lastHeartbeatTime = 3;
  1184  
  1185    // Last time the condition transit from one status to another.
  1186    optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 4;
  1187  
  1188    // (brief) reason for the condition's last transition.
  1189    optional string reason = 5;
  1190  
  1191    // Human readable message indicating details about last transition.
  1192    optional string message = 6;
  1193  }
  1194  
  1195  // NodeDaemonEndpoints lists ports opened by daemons running on the Node.
  1196  message NodeDaemonEndpoints {
  1197    // Endpoint on which Kubelet is listening.
  1198    optional DaemonEndpoint kubeletEndpoint = 1;
  1199  }
  1200  
  1201  // NodeList is the whole list of all Nodes which have been registered with master.
  1202  message NodeList {
  1203    // Standard list metadata.
  1204    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1205    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1206  
  1207    // List of nodes
  1208    repeated Node items = 2;
  1209  }
  1210  
  1211  // NodeProxyOptions is the query options to a Node's proxy call.
  1212  message NodeProxyOptions {
  1213    // Path is the URL path to use for the current proxy request to node.
  1214    optional string path = 1;
  1215  }
  1216  
  1217  // A node selector represents the union of the results of one or more label queries
  1218  // over a set of nodes; that is, it represents the OR of the selectors represented
  1219  // by the node selector terms.
  1220  message NodeSelector {
  1221    // Required. A list of node selector terms. The terms are ORed.
  1222    repeated NodeSelectorTerm nodeSelectorTerms = 1;
  1223  }
  1224  
  1225  // A node selector requirement is a selector that contains values, a key, and an operator
  1226  // that relates the key and values.
  1227  message NodeSelectorRequirement {
  1228    // The label key that the selector applies to.
  1229    optional string key = 1;
  1230  
  1231    // Represents a key's relationship to a set of values.
  1232    // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
  1233    optional string operator = 2;
  1234  
  1235    // An array of string values. If the operator is In or NotIn,
  1236    // the values array must be non-empty. If the operator is Exists or DoesNotExist,
  1237    // the values array must be empty. If the operator is Gt or Lt, the values
  1238    // array must have a single element, which will be interpreted as an integer.
  1239    // This array is replaced during a strategic merge patch.
  1240    repeated string values = 3;
  1241  }
  1242  
  1243  // A null or empty node selector term matches no objects.
  1244  message NodeSelectorTerm {
  1245    // Required. A list of node selector requirements. The requirements are ANDed.
  1246    repeated NodeSelectorRequirement matchExpressions = 1;
  1247  }
  1248  
  1249  // NodeSpec describes the attributes that a node is created with.
  1250  message NodeSpec {
  1251    // PodCIDR represents the pod IP range assigned to the node.
  1252    optional string podCIDR = 1;
  1253  
  1254    // External ID of the node assigned by some machine database (e.g. a cloud provider).
  1255    // Deprecated.
  1256    optional string externalID = 2;
  1257  
  1258    // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>
  1259    optional string providerID = 3;
  1260  
  1261    // Unschedulable controls node schedulability of new pods. By default, node is schedulable.
  1262    // More info: http://releases.k8s.io/HEAD/docs/admin/node.md#manual-node-administration"`
  1263    optional bool unschedulable = 4;
  1264  }
  1265  
  1266  // NodeStatus is information about the current status of a node.
  1267  message NodeStatus {
  1268    // Capacity represents the total resources of a node.
  1269    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity for more details.
  1270    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> capacity = 1;
  1271  
  1272    // Allocatable represents the resources of a node that are available for scheduling.
  1273    // Defaults to Capacity.
  1274    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> allocatable = 2;
  1275  
  1276    // NodePhase is the recently observed lifecycle phase of the node.
  1277    // More info: http://releases.k8s.io/HEAD/docs/admin/node.md#node-phase
  1278    optional string phase = 3;
  1279  
  1280    // Conditions is an array of current observed node conditions.
  1281    // More info: http://releases.k8s.io/HEAD/docs/admin/node.md#node-condition
  1282    repeated NodeCondition conditions = 4;
  1283  
  1284    // List of addresses reachable to the node.
  1285    // Queried from cloud provider, if available.
  1286    // More info: http://releases.k8s.io/HEAD/docs/admin/node.md#node-addresses
  1287    repeated NodeAddress addresses = 5;
  1288  
  1289    // Endpoints of daemons running on the Node.
  1290    optional NodeDaemonEndpoints daemonEndpoints = 6;
  1291  
  1292    // Set of ids/uuids to uniquely identify the node.
  1293    // More info: http://releases.k8s.io/HEAD/docs/admin/node.md#node-info
  1294    optional NodeSystemInfo nodeInfo = 7;
  1295  
  1296    // List of container images on this node
  1297    repeated ContainerImage images = 8;
  1298  }
  1299  
  1300  // NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
  1301  message NodeSystemInfo {
  1302    // Machine ID reported by the node.
  1303    optional string machineID = 1;
  1304  
  1305    // System UUID reported by the node.
  1306    optional string systemUUID = 2;
  1307  
  1308    // Boot ID reported by the node.
  1309    optional string bootID = 3;
  1310  
  1311    // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).
  1312    optional string kernelVersion = 4;
  1313  
  1314    // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).
  1315    optional string osImage = 5;
  1316  
  1317    // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).
  1318    optional string containerRuntimeVersion = 6;
  1319  
  1320    // Kubelet Version reported by the node.
  1321    optional string kubeletVersion = 7;
  1322  
  1323    // KubeProxy Version reported by the node.
  1324    optional string kubeProxyVersion = 8;
  1325  }
  1326  
  1327  // ObjectFieldSelector selects an APIVersioned field of an object.
  1328  message ObjectFieldSelector {
  1329    // Version of the schema the FieldPath is written in terms of, defaults to "v1".
  1330    optional string apiVersion = 1;
  1331  
  1332    // Path of the field to select in the specified API version.
  1333    optional string fieldPath = 2;
  1334  }
  1335  
  1336  // ObjectMeta is metadata that all persisted resources must have, which includes all objects
  1337  // users must create.
  1338  message ObjectMeta {
  1339    // Name must be unique within a namespace. Is required when creating resources, although
  1340    // some resources may allow a client to request the generation of an appropriate name
  1341    // automatically. Name is primarily intended for creation idempotence and configuration
  1342    // definition.
  1343    // Cannot be updated.
  1344    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
  1345    optional string name = 1;
  1346  
  1347    // GenerateName is an optional prefix, used by the server, to generate a unique
  1348    // name ONLY IF the Name field has not been provided.
  1349    // If this field is used, the name returned to the client will be different
  1350    // than the name passed. This value will also be combined with a unique suffix.
  1351    // The provided value has the same validation rules as the Name field,
  1352    // and may be truncated by the length of the suffix required to make the value
  1353    // unique on the server.
  1354    // 
  1355    // If this field is specified and the generated name exists, the server will
  1356    // NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
  1357    // ServerTimeout indicating a unique name could not be found in the time allotted, and the client
  1358    // should retry (optionally after the time indicated in the Retry-After header).
  1359    // 
  1360    // Applied only if Name is not specified.
  1361    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#idempotency
  1362    optional string generateName = 2;
  1363  
  1364    // Namespace defines the space within each name must be unique. An empty namespace is
  1365    // equivalent to the "default" namespace, but "default" is the canonical representation.
  1366    // Not all objects are required to be scoped to a namespace - the value of this field for
  1367    // those objects will be empty.
  1368    // 
  1369    // Must be a DNS_LABEL.
  1370    // Cannot be updated.
  1371    // More info: http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md
  1372    optional string namespace = 3;
  1373  
  1374    // SelfLink is a URL representing this object.
  1375    // Populated by the system.
  1376    // Read-only.
  1377    optional string selfLink = 4;
  1378  
  1379    // UID is the unique in time and space value for this object. It is typically generated by
  1380    // the server on successful creation of a resource and is not allowed to change on PUT
  1381    // operations.
  1382    // 
  1383    // Populated by the system.
  1384    // Read-only.
  1385    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids
  1386    optional string uid = 5;
  1387  
  1388    // An opaque value that represents the internal version of this object that can
  1389    // be used by clients to determine when objects have changed. May be used for optimistic
  1390    // concurrency, change detection, and the watch operation on a resource or set of resources.
  1391    // Clients must treat these values as opaque and passed unmodified back to the server.
  1392    // They may only be valid for a particular resource or set of resources.
  1393    // 
  1394    // Populated by the system.
  1395    // Read-only.
  1396    // Value must be treated as opaque by clients and .
  1397    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency
  1398    optional string resourceVersion = 6;
  1399  
  1400    // A sequence number representing a specific generation of the desired state.
  1401    // Populated by the system. Read-only.
  1402    optional int64 generation = 7;
  1403  
  1404    // CreationTimestamp is a timestamp representing the server time when this object was
  1405    // created. It is not guaranteed to be set in happens-before order across separate operations.
  1406    // Clients may not set this value. It is represented in RFC3339 form and is in UTC.
  1407    // 
  1408    // Populated by the system.
  1409    // Read-only.
  1410    // Null for lists.
  1411    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1412    optional k8s.io.kubernetes.pkg.api.unversioned.Time creationTimestamp = 8;
  1413  
  1414    // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This
  1415    // field is set by the server when a graceful deletion is requested by the user, and is not
  1416    // directly settable by a client. The resource will be deleted (no longer visible from
  1417    // resource lists, and not reachable by name) after the time in this field. Once set, this
  1418    // value may not be unset or be set further into the future, although it may be shortened
  1419    // or the resource may be deleted prior to this time. For example, a user may request that
  1420    // a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination
  1421    // signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet
  1422    // will send a hard termination signal to the container.
  1423    // If not set, graceful deletion of the object has not been requested.
  1424    // 
  1425    // Populated by the system when a graceful deletion is requested.
  1426    // Read-only.
  1427    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1428    optional k8s.io.kubernetes.pkg.api.unversioned.Time deletionTimestamp = 9;
  1429  
  1430    // Number of seconds allowed for this object to gracefully terminate before
  1431    // it will be removed from the system. Only set when deletionTimestamp is also set.
  1432    // May only be shortened.
  1433    // Read-only.
  1434    optional int64 deletionGracePeriodSeconds = 10;
  1435  
  1436    // Map of string keys and values that can be used to organize and categorize
  1437    // (scope and select) objects. May match selectors of replication controllers
  1438    // and services.
  1439    // More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md
  1440    // TODO: replace map[string]string with labels.LabelSet type
  1441    map<string, string> labels = 11;
  1442  
  1443    // Annotations is an unstructured key value map stored with a resource that may be
  1444    // set by external tools to store and retrieve arbitrary metadata. They are not
  1445    // queryable and should be preserved when modifying objects.
  1446    // More info: http://releases.k8s.io/HEAD/docs/user-guide/annotations.md
  1447    map<string, string> annotations = 12;
  1448  
  1449    // List of objects depended by this object. If ALL objects in the list have
  1450    // been deleted, this object will be garbage collected.
  1451    repeated OwnerReference ownerReferences = 13;
  1452  
  1453    // Must be empty before the object is deleted from the registry. Each entry
  1454    // is an identifier for the responsible component that will remove the entry
  1455    // from the list. If the deletionTimestamp of the object is non-nil, entries
  1456    // in this list can only be removed.
  1457    repeated string finalizers = 14;
  1458  }
  1459  
  1460  // ObjectReference contains enough information to let you inspect or modify the referred object.
  1461  message ObjectReference {
  1462    // Kind of the referent.
  1463    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1464    optional string kind = 1;
  1465  
  1466    // Namespace of the referent.
  1467    // More info: http://releases.k8s.io/HEAD/docs/user-guide/namespaces.md
  1468    optional string namespace = 2;
  1469  
  1470    // Name of the referent.
  1471    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
  1472    optional string name = 3;
  1473  
  1474    // UID of the referent.
  1475    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids
  1476    optional string uid = 4;
  1477  
  1478    // API version of the referent.
  1479    optional string apiVersion = 5;
  1480  
  1481    // Specific resourceVersion to which this reference is made, if any.
  1482    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency
  1483    optional string resourceVersion = 6;
  1484  
  1485    // If referring to a piece of an object instead of an entire object, this string
  1486    // should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
  1487    // For example, if the object reference is to a container within a pod, this would take on a value like:
  1488    // "spec.containers{name}" (where "name" refers to the name of the container that triggered
  1489    // the event) or if no container name is specified "spec.containers[2]" (container with
  1490    // index 2 in this pod). This syntax is chosen only to have some well-defined way of
  1491    // referencing a part of an object.
  1492    // TODO: this design is not final and this field is subject to change in the future.
  1493    optional string fieldPath = 7;
  1494  }
  1495  
  1496  // OwnerReference contains enough information to let you identify an owning
  1497  // object. Currently, an owning object must be in the same namespace, so there
  1498  // is no namespace field.
  1499  message OwnerReference {
  1500    // API version of the referent.
  1501    optional string apiVersion = 5;
  1502  
  1503    // Kind of the referent.
  1504    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1505    optional string kind = 1;
  1506  
  1507    // Name of the referent.
  1508    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
  1509    optional string name = 3;
  1510  
  1511    // UID of the referent.
  1512    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids
  1513    optional string uid = 4;
  1514  }
  1515  
  1516  // PersistentVolume (PV) is a storage resource provisioned by an administrator.
  1517  // It is analogous to a node.
  1518  // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md
  1519  message PersistentVolume {
  1520    // Standard object's metadata.
  1521    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1522    optional ObjectMeta metadata = 1;
  1523  
  1524    // Spec defines a specification of a persistent volume owned by the cluster.
  1525    // Provisioned by an administrator.
  1526    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistent-volumes
  1527    optional PersistentVolumeSpec spec = 2;
  1528  
  1529    // Status represents the current information/status for the persistent volume.
  1530    // Populated by the system.
  1531    // Read-only.
  1532    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistent-volumes
  1533    optional PersistentVolumeStatus status = 3;
  1534  }
  1535  
  1536  // PersistentVolumeClaim is a user's request for and claim to a persistent volume
  1537  message PersistentVolumeClaim {
  1538    // Standard object's metadata.
  1539    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1540    optional ObjectMeta metadata = 1;
  1541  
  1542    // Spec defines the desired characteristics of a volume requested by a pod author.
  1543    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims
  1544    optional PersistentVolumeClaimSpec spec = 2;
  1545  
  1546    // Status represents the current information/status of a persistent volume claim.
  1547    // Read-only.
  1548    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims
  1549    optional PersistentVolumeClaimStatus status = 3;
  1550  }
  1551  
  1552  // PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
  1553  message PersistentVolumeClaimList {
  1554    // Standard list metadata.
  1555    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1556    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1557  
  1558    // A list of persistent volume claims.
  1559    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims
  1560    repeated PersistentVolumeClaim items = 2;
  1561  }
  1562  
  1563  // PersistentVolumeClaimSpec describes the common attributes of storage devices
  1564  // and allows a Source for provider-specific attributes
  1565  message PersistentVolumeClaimSpec {
  1566    // AccessModes contains the desired access modes the volume should have.
  1567    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1
  1568    repeated string accessModes = 1;
  1569  
  1570    // Resources represents the minimum resources the volume should have.
  1571    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#resources
  1572    optional ResourceRequirements resources = 2;
  1573  
  1574    // VolumeName is the binding reference to the PersistentVolume backing this claim.
  1575    optional string volumeName = 3;
  1576  }
  1577  
  1578  // PersistentVolumeClaimStatus is the current status of a persistent volume claim.
  1579  message PersistentVolumeClaimStatus {
  1580    // Phase represents the current phase of PersistentVolumeClaim.
  1581    optional string phase = 1;
  1582  
  1583    // AccessModes contains the actual access modes the volume backing the PVC has.
  1584    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes-1
  1585    repeated string accessModes = 2;
  1586  
  1587    // Represents the actual resources of the underlying volume.
  1588    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> capacity = 3;
  1589  }
  1590  
  1591  // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
  1592  // This volume finds the bound PV and mounts that volume for the pod. A
  1593  // PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another
  1594  // type of volume that is owned by someone else (the system).
  1595  message PersistentVolumeClaimVolumeSource {
  1596    // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
  1597    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims
  1598    optional string claimName = 1;
  1599  
  1600    // Will force the ReadOnly setting in VolumeMounts.
  1601    // Default false.
  1602    optional bool readOnly = 2;
  1603  }
  1604  
  1605  // PersistentVolumeList is a list of PersistentVolume items.
  1606  message PersistentVolumeList {
  1607    // Standard list metadata.
  1608    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1609    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1610  
  1611    // List of persistent volumes.
  1612    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md
  1613    repeated PersistentVolume items = 2;
  1614  }
  1615  
  1616  // PersistentVolumeSource is similar to VolumeSource but meant for the
  1617  // administrator who creates PVs. Exactly one of its members must be set.
  1618  message PersistentVolumeSource {
  1619    // GCEPersistentDisk represents a GCE Disk resource that is attached to a
  1620    // kubelet's host machine and then exposed to the pod. Provisioned by an admin.
  1621    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
  1622    optional GCEPersistentDiskVolumeSource gcePersistentDisk = 1;
  1623  
  1624    // AWSElasticBlockStore represents an AWS Disk resource that is attached to a
  1625    // kubelet's host machine and then exposed to the pod.
  1626    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore
  1627    optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 2;
  1628  
  1629    // HostPath represents a directory on the host.
  1630    // Provisioned by a developer or tester.
  1631    // This is useful for single-node development and testing only!
  1632    // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster.
  1633    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath
  1634    optional HostPathVolumeSource hostPath = 3;
  1635  
  1636    // Glusterfs represents a Glusterfs volume that is attached to a host and
  1637    // exposed to the pod. Provisioned by an admin.
  1638    // More info: http://releases.k8s.io/HEAD/examples/glusterfs/README.md
  1639    optional GlusterfsVolumeSource glusterfs = 4;
  1640  
  1641    // NFS represents an NFS mount on the host. Provisioned by an admin.
  1642    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs
  1643    optional NFSVolumeSource nfs = 5;
  1644  
  1645    // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
  1646    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md
  1647    optional RBDVolumeSource rbd = 6;
  1648  
  1649    // ISCSI represents an ISCSI Disk resource that is attached to a
  1650    // kubelet's host machine and then exposed to the pod. Provisioned by an admin.
  1651    optional ISCSIVolumeSource iscsi = 7;
  1652  
  1653    // Cinder represents a cinder volume attached and mounted on kubelets host machine
  1654    // More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
  1655    optional CinderVolumeSource cinder = 8;
  1656  
  1657    // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
  1658    optional CephFSVolumeSource cephfs = 9;
  1659  
  1660    // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
  1661    optional FCVolumeSource fc = 10;
  1662  
  1663    // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
  1664    optional FlockerVolumeSource flocker = 11;
  1665  
  1666    // FlexVolume represents a generic volume resource that is
  1667    // provisioned/attached using a exec based plugin. This is an
  1668    // alpha feature and may change in future.
  1669    optional FlexVolumeSource flexVolume = 12;
  1670  
  1671    // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
  1672    optional AzureFileVolumeSource azureFile = 13;
  1673  }
  1674  
  1675  // PersistentVolumeSpec is the specification of a persistent volume.
  1676  message PersistentVolumeSpec {
  1677    // A description of the persistent volume's resources and capacity.
  1678    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#capacity
  1679    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> capacity = 1;
  1680  
  1681    // The actual volume backing the persistent volume.
  1682    optional PersistentVolumeSource persistentVolumeSource = 2;
  1683  
  1684    // AccessModes contains all ways the volume can be mounted.
  1685    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#access-modes
  1686    repeated string accessModes = 3;
  1687  
  1688    // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.
  1689    // Expected to be non-nil when bound.
  1690    // claim.VolumeName is the authoritative bind between PV and PVC.
  1691    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#binding
  1692    optional ObjectReference claimRef = 4;
  1693  
  1694    // What happens to a persistent volume when released from its claim.
  1695    // Valid options are Retain (default) and Recycle.
  1696    // Recyling must be supported by the volume plugin underlying this persistent volume.
  1697    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#recycling-policy
  1698    optional string persistentVolumeReclaimPolicy = 5;
  1699  }
  1700  
  1701  // PersistentVolumeStatus is the current status of a persistent volume.
  1702  message PersistentVolumeStatus {
  1703    // Phase indicates if a volume is available, bound to a claim, or released by a claim.
  1704    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#phase
  1705    optional string phase = 1;
  1706  
  1707    // A human-readable message indicating details about why the volume is in this state.
  1708    optional string message = 2;
  1709  
  1710    // Reason is a brief CamelCase string that describes any failure and is meant
  1711    // for machine parsing and tidy display in the CLI.
  1712    optional string reason = 3;
  1713  }
  1714  
  1715  // Pod is a collection of containers that can run on a host. This resource is created
  1716  // by clients and scheduled onto hosts.
  1717  message Pod {
  1718    // Standard object's metadata.
  1719    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  1720    optional ObjectMeta metadata = 1;
  1721  
  1722    // Specification of the desired behavior of the pod.
  1723    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1724    optional PodSpec spec = 2;
  1725  
  1726    // Most recently observed status of the pod.
  1727    // This data may not be up to date.
  1728    // Populated by the system.
  1729    // Read-only.
  1730    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  1731    optional PodStatus status = 3;
  1732  }
  1733  
  1734  // Pod affinity is a group of inter pod affinity scheduling rules.
  1735  message PodAffinity {
  1736    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
  1737    // If the affinity requirements specified by this field are not met at
  1738    // scheduling time, the pod will not be scheduled onto the node.
  1739    // If the affinity requirements specified by this field cease to be met
  1740    // at some point during pod execution (e.g. due to a pod label update), the
  1741    // system will try to eventually evict the pod from its node.
  1742    // When there are multiple elements, the lists of nodes corresponding to each
  1743    // podAffinityTerm are intersected, i.e. all terms must be satisfied.
  1744    // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"`
  1745    // If the affinity requirements specified by this field are not met at
  1746    // scheduling time, the pod will not be scheduled onto the node.
  1747    // If the affinity requirements specified by this field cease to be met
  1748    // at some point during pod execution (e.g. due to a pod label update), the
  1749    // system may or may not try to eventually evict the pod from its node.
  1750    // When there are multiple elements, the lists of nodes corresponding to each
  1751    // podAffinityTerm are intersected, i.e. all terms must be satisfied.
  1752    repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
  1753  
  1754    // The scheduler will prefer to schedule pods to nodes that satisfy
  1755    // the affinity expressions specified by this field, but it may choose
  1756    // a node that violates one or more of the expressions. The node that is
  1757    // most preferred is the one with the greatest sum of weights, i.e.
  1758    // for each node that meets all of the scheduling requirements (resource
  1759    // request, requiredDuringScheduling affinity expressions, etc.),
  1760    // compute a sum by iterating through the elements of this field and adding
  1761    // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
  1762    // node(s) with the highest sum are the most preferred.
  1763    repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
  1764  }
  1765  
  1766  // Defines a set of pods (namely those matching the labelSelector
  1767  // relative to the given namespace(s)) that this pod should be
  1768  // co-located (affinity) or not co-located (anti-affinity) with,
  1769  // where co-located is defined as running on a node whose value of
  1770  // the label with key <topologyKey> tches that of any node on which
  1771  // a pod of the set of pods is running
  1772  message PodAffinityTerm {
  1773    // A label query over a set of resources, in this case pods.
  1774    optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector labelSelector = 1;
  1775  
  1776    // namespaces specifies which namespaces the labelSelector applies to (matches against);
  1777    // nil list means "this pod's namespace," empty list means "all namespaces"
  1778    // The json tag here is not "omitempty" since we need to distinguish nil and empty.
  1779    // See https://golang.org/pkg/encoding/json/#Marshal for more details.
  1780    repeated string namespaces = 2;
  1781  
  1782    // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
  1783    // the labelSelector in the specified namespaces, where co-located is defined as running on a node
  1784    // whose value of the label with key topologyKey matches that of any node on which any of the
  1785    // selected pods is running.
  1786    // For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies"
  1787    // ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains);
  1788    // for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.
  1789    optional string topologyKey = 3;
  1790  }
  1791  
  1792  // Pod anti affinity is a group of inter pod anti affinity scheduling rules.
  1793  message PodAntiAffinity {
  1794    // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
  1795    // If the anti-affinity requirements specified by this field are not met at
  1796    // scheduling time, the pod will not be scheduled onto the node.
  1797    // If the anti-affinity requirements specified by this field cease to be met
  1798    // at some point during pod execution (e.g. due to a pod label update), the
  1799    // system will try to eventually evict the pod from its node.
  1800    // When there are multiple elements, the lists of nodes corresponding to each
  1801    // podAffinityTerm are intersected, i.e. all terms must be satisfied.
  1802    // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm  `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"`
  1803    // If the anti-affinity requirements specified by this field are not met at
  1804    // scheduling time, the pod will not be scheduled onto the node.
  1805    // If the anti-affinity requirements specified by this field cease to be met
  1806    // at some point during pod execution (e.g. due to a pod label update), the
  1807    // system may or may not try to eventually evict the pod from its node.
  1808    // When there are multiple elements, the lists of nodes corresponding to each
  1809    // podAffinityTerm are intersected, i.e. all terms must be satisfied.
  1810    repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
  1811  
  1812    // The scheduler will prefer to schedule pods to nodes that satisfy
  1813    // the anti-affinity expressions specified by this field, but it may choose
  1814    // a node that violates one or more of the expressions. The node that is
  1815    // most preferred is the one with the greatest sum of weights, i.e.
  1816    // for each node that meets all of the scheduling requirements (resource
  1817    // request, requiredDuringScheduling anti-affinity expressions, etc.),
  1818    // compute a sum by iterating through the elements of this field and adding
  1819    // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
  1820    // node(s) with the highest sum are the most preferred.
  1821    repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
  1822  }
  1823  
  1824  // PodAttachOptions is the query options to a Pod's remote attach call.
  1825  // ---
  1826  // TODO: merge w/ PodExecOptions below for stdin, stdout, etc
  1827  // and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
  1828  message PodAttachOptions {
  1829    // Stdin if true, redirects the standard input stream of the pod for this call.
  1830    // Defaults to false.
  1831    optional bool stdin = 1;
  1832  
  1833    // Stdout if true indicates that stdout is to be redirected for the attach call.
  1834    // Defaults to true.
  1835    optional bool stdout = 2;
  1836  
  1837    // Stderr if true indicates that stderr is to be redirected for the attach call.
  1838    // Defaults to true.
  1839    optional bool stderr = 3;
  1840  
  1841    // TTY if true indicates that a tty will be allocated for the attach call.
  1842    // This is passed through the container runtime so the tty
  1843    // is allocated on the worker node by the container runtime.
  1844    // Defaults to false.
  1845    optional bool tty = 4;
  1846  
  1847    // The container in which to execute the command.
  1848    // Defaults to only container if there is only one container in the pod.
  1849    optional string container = 5;
  1850  }
  1851  
  1852  // PodCondition contains details for the current condition of this pod.
  1853  message PodCondition {
  1854    // Type is the type of the condition.
  1855    // Currently only Ready.
  1856    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions
  1857    optional string type = 1;
  1858  
  1859    // Status is the status of the condition.
  1860    // Can be True, False, Unknown.
  1861    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions
  1862    optional string status = 2;
  1863  
  1864    // Last time we probed the condition.
  1865    optional k8s.io.kubernetes.pkg.api.unversioned.Time lastProbeTime = 3;
  1866  
  1867    // Last time the condition transitioned from one status to another.
  1868    optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 4;
  1869  
  1870    // Unique, one-word, CamelCase reason for the condition's last transition.
  1871    optional string reason = 5;
  1872  
  1873    // Human-readable message indicating details about last transition.
  1874    optional string message = 6;
  1875  }
  1876  
  1877  // PodExecOptions is the query options to a Pod's remote exec call.
  1878  // ---
  1879  // TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging
  1880  // and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
  1881  message PodExecOptions {
  1882    // Redirect the standard input stream of the pod for this call.
  1883    // Defaults to false.
  1884    optional bool stdin = 1;
  1885  
  1886    // Redirect the standard output stream of the pod for this call.
  1887    // Defaults to true.
  1888    optional bool stdout = 2;
  1889  
  1890    // Redirect the standard error stream of the pod for this call.
  1891    // Defaults to true.
  1892    optional bool stderr = 3;
  1893  
  1894    // TTY if true indicates that a tty will be allocated for the exec call.
  1895    // Defaults to false.
  1896    optional bool tty = 4;
  1897  
  1898    // Container in which to execute the command.
  1899    // Defaults to only container if there is only one container in the pod.
  1900    optional string container = 5;
  1901  
  1902    // Command is the remote command to execute. argv array. Not executed within a shell.
  1903    repeated string command = 6;
  1904  }
  1905  
  1906  // PodList is a list of Pods.
  1907  message PodList {
  1908    // Standard list metadata.
  1909    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  1910    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  1911  
  1912    // List of pods.
  1913    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pods.md
  1914    repeated Pod items = 2;
  1915  }
  1916  
  1917  // PodLogOptions is the query options for a Pod's logs REST call.
  1918  message PodLogOptions {
  1919    // The container for which to stream logs. Defaults to only container if there is one container in the pod.
  1920    optional string container = 1;
  1921  
  1922    // Follow the log stream of the pod. Defaults to false.
  1923    optional bool follow = 2;
  1924  
  1925    // Return previous terminated container logs. Defaults to false.
  1926    optional bool previous = 3;
  1927  
  1928    // A relative time in seconds before the current time from which to show logs. If this value
  1929    // precedes the time a pod was started, only logs since the pod start will be returned.
  1930    // If this value is in the future, no logs will be returned.
  1931    // Only one of sinceSeconds or sinceTime may be specified.
  1932    optional int64 sinceSeconds = 4;
  1933  
  1934    // An RFC3339 timestamp from which to show logs. If this value
  1935    // precedes the time a pod was started, only logs since the pod start will be returned.
  1936    // If this value is in the future, no logs will be returned.
  1937    // Only one of sinceSeconds or sinceTime may be specified.
  1938    optional k8s.io.kubernetes.pkg.api.unversioned.Time sinceTime = 5;
  1939  
  1940    // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line
  1941    // of log output. Defaults to false.
  1942    optional bool timestamps = 6;
  1943  
  1944    // If set, the number of lines from the end of the logs to show. If not specified,
  1945    // logs are shown from the creation of the container or sinceSeconds or sinceTime
  1946    optional int64 tailLines = 7;
  1947  
  1948    // If set, the number of bytes to read from the server before terminating the
  1949    // log output. This may not display a complete final line of logging, and may return
  1950    // slightly more or slightly less than the specified limit.
  1951    optional int64 limitBytes = 8;
  1952  }
  1953  
  1954  // PodProxyOptions is the query options to a Pod's proxy call.
  1955  message PodProxyOptions {
  1956    // Path is the URL path to use for the current proxy request to pod.
  1957    optional string path = 1;
  1958  }
  1959  
  1960  // PodSecurityContext holds pod-level security attributes and common container settings.
  1961  // Some fields are also present in container.securityContext.  Field values of
  1962  // container.securityContext take precedence over field values of PodSecurityContext.
  1963  message PodSecurityContext {
  1964    // The SELinux context to be applied to all containers.
  1965    // If unspecified, the container runtime will allocate a random SELinux context for each
  1966    // container.  May also be set in SecurityContext.  If set in
  1967    // both SecurityContext and PodSecurityContext, the value specified in SecurityContext
  1968    // takes precedence for that container.
  1969    optional SELinuxOptions seLinuxOptions = 1;
  1970  
  1971    // The UID to run the entrypoint of the container process.
  1972    // Defaults to user specified in image metadata if unspecified.
  1973    // May also be set in SecurityContext.  If set in both SecurityContext and
  1974    // PodSecurityContext, the value specified in SecurityContext takes precedence
  1975    // for that container.
  1976    optional int64 runAsUser = 2;
  1977  
  1978    // Indicates that the container must run as a non-root user.
  1979    // If true, the Kubelet will validate the image at runtime to ensure that it
  1980    // does not run as UID 0 (root) and fail to start the container if it does.
  1981    // If unset or false, no such validation will be performed.
  1982    // May also be set in SecurityContext.  If set in both SecurityContext and
  1983    // PodSecurityContext, the value specified in SecurityContext takes precedence.
  1984    optional bool runAsNonRoot = 3;
  1985  
  1986    // A list of groups applied to the first process run in each container, in addition
  1987    // to the container's primary GID.  If unspecified, no groups will be added to
  1988    // any container.
  1989    repeated int64 supplementalGroups = 4;
  1990  
  1991    // A special supplemental group that applies to all containers in a pod.
  1992    // Some volume types allow the Kubelet to change the ownership of that volume
  1993    // to be owned by the pod:
  1994    // 
  1995    // 1. The owning GID will be the FSGroup
  1996    // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
  1997    // 3. The permission bits are OR'd with rw-rw----
  1998    // 
  1999    // If unset, the Kubelet will not modify the ownership and permissions of any volume.
  2000    optional int64 fsGroup = 5;
  2001  }
  2002  
  2003  // PodSpec is a description of a pod.
  2004  message PodSpec {
  2005    // List of volumes that can be mounted by containers belonging to the pod.
  2006    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md
  2007    repeated Volume volumes = 1;
  2008  
  2009    // List of containers belonging to the pod.
  2010    // Containers cannot currently be added or removed.
  2011    // There must be at least one container in a Pod.
  2012    // Cannot be updated.
  2013    // More info: http://releases.k8s.io/HEAD/docs/user-guide/containers.md
  2014    repeated Container containers = 2;
  2015  
  2016    // Restart policy for all containers within the pod.
  2017    // One of Always, OnFailure, Never.
  2018    // Default to Always.
  2019    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#restartpolicy
  2020    optional string restartPolicy = 3;
  2021  
  2022    // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
  2023    // Value must be non-negative integer. The value zero indicates delete immediately.
  2024    // If this value is nil, the default grace period will be used instead.
  2025    // The grace period is the duration in seconds after the processes running in the pod are sent
  2026    // a termination signal and the time when the processes are forcibly halted with a kill signal.
  2027    // Set this value longer than the expected cleanup time for your process.
  2028    // Defaults to 30 seconds.
  2029    optional int64 terminationGracePeriodSeconds = 4;
  2030  
  2031    // Optional duration in seconds the pod may be active on the node relative to
  2032    // StartTime before the system will actively try to mark it failed and kill associated containers.
  2033    // Value must be a positive integer.
  2034    optional int64 activeDeadlineSeconds = 5;
  2035  
  2036    // Set DNS policy for containers within the pod.
  2037    // One of 'ClusterFirst' or 'Default'.
  2038    // Defaults to "ClusterFirst".
  2039    optional string dnsPolicy = 6;
  2040  
  2041    // NodeSelector is a selector which must be true for the pod to fit on a node.
  2042    // Selector which must match a node's labels for the pod to be scheduled on that node.
  2043    // More info: http://releases.k8s.io/HEAD/docs/user-guide/node-selection/README.md
  2044    map<string, string> nodeSelector = 7;
  2045  
  2046    // ServiceAccountName is the name of the ServiceAccount to use to run this pod.
  2047    // More info: http://releases.k8s.io/HEAD/docs/design/service_accounts.md
  2048    optional string serviceAccountName = 8;
  2049  
  2050    // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
  2051    // Deprecated: Use serviceAccountName instead.
  2052    optional string serviceAccount = 9;
  2053  
  2054    // NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
  2055    // the scheduler simply schedules this pod onto that node, assuming that it fits resource
  2056    // requirements.
  2057    optional string nodeName = 10;
  2058  
  2059    // Host networking requested for this pod. Use the host's network namespace.
  2060    // If this option is set, the ports that will be used must be specified.
  2061    // Default to false.
  2062    optional bool hostNetwork = 11;
  2063  
  2064    // Use the host's pid namespace.
  2065    // Optional: Default to false.
  2066    optional bool hostPID = 12;
  2067  
  2068    // Use the host's ipc namespace.
  2069    // Optional: Default to false.
  2070    optional bool hostIPC = 13;
  2071  
  2072    // SecurityContext holds pod-level security attributes and common container settings.
  2073    // Optional: Defaults to empty.  See type description for default values of each field.
  2074    optional PodSecurityContext securityContext = 14;
  2075  
  2076    // 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.
  2077    // If specified, these secrets will be passed to individual puller implementations for them to use. For example,
  2078    // in the case of docker, only DockerConfig type secrets are honored.
  2079    // More info: http://releases.k8s.io/HEAD/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod
  2080    repeated LocalObjectReference imagePullSecrets = 15;
  2081  
  2082    // Specifies the hostname of the Pod
  2083    // If not specified, the pod's hostname will be set to a system-defined value.
  2084    optional string hostname = 16;
  2085  
  2086    // If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>".
  2087    // If not specified, the pod will not have a domainname at all.
  2088    optional string subdomain = 17;
  2089  }
  2090  
  2091  // PodStatus represents information about the status of a pod. Status may trail the actual
  2092  // state of a system.
  2093  message PodStatus {
  2094    // Current condition of the pod.
  2095    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-phase
  2096    optional string phase = 1;
  2097  
  2098    // Current service state of pod.
  2099    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#pod-conditions
  2100    repeated PodCondition conditions = 2;
  2101  
  2102    // A human readable message indicating details about why the pod is in this condition.
  2103    optional string message = 3;
  2104  
  2105    // A brief CamelCase message indicating details about why the pod is in this state.
  2106    // e.g. 'OutOfDisk'
  2107    optional string reason = 4;
  2108  
  2109    // IP address of the host to which the pod is assigned. Empty if not yet scheduled.
  2110    optional string hostIP = 5;
  2111  
  2112    // IP address allocated to the pod. Routable at least within the cluster.
  2113    // Empty if not yet allocated.
  2114    optional string podIP = 6;
  2115  
  2116    // RFC 3339 date and time at which the object was acknowledged by the Kubelet.
  2117    // This is before the Kubelet pulled the container image(s) for the pod.
  2118    optional k8s.io.kubernetes.pkg.api.unversioned.Time startTime = 7;
  2119  
  2120    // The list has one entry per container in the manifest. Each entry is currently the output
  2121    // of `docker inspect`.
  2122    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses
  2123    repeated ContainerStatus containerStatuses = 8;
  2124  }
  2125  
  2126  // PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
  2127  message PodStatusResult {
  2128    // Standard object's metadata.
  2129    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2130    optional ObjectMeta metadata = 1;
  2131  
  2132    // Most recently observed status of the pod.
  2133    // This data may not be up to date.
  2134    // Populated by the system.
  2135    // Read-only.
  2136    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2137    optional PodStatus status = 2;
  2138  }
  2139  
  2140  // PodTemplate describes a template for creating copies of a predefined pod.
  2141  message PodTemplate {
  2142    // Standard object's metadata.
  2143    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2144    optional ObjectMeta metadata = 1;
  2145  
  2146    // Template defines the pods that will be created from this pod template.
  2147    // http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2148    optional PodTemplateSpec template = 2;
  2149  }
  2150  
  2151  // PodTemplateList is a list of PodTemplates.
  2152  message PodTemplateList {
  2153    // Standard list metadata.
  2154    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2155    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2156  
  2157    // List of pod templates
  2158    repeated PodTemplate items = 2;
  2159  }
  2160  
  2161  // PodTemplateSpec describes the data a pod should have when created from a template
  2162  message PodTemplateSpec {
  2163    // Standard object's metadata.
  2164    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2165    optional ObjectMeta metadata = 1;
  2166  
  2167    // Specification of the desired behavior of the pod.
  2168    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2169    optional PodSpec spec = 2;
  2170  }
  2171  
  2172  // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
  2173  message Preconditions {
  2174    // Specifies the target UID.
  2175    optional string uid = 1;
  2176  }
  2177  
  2178  // An empty preferred scheduling term matches all objects with implicit weight 0
  2179  // (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
  2180  message PreferredSchedulingTerm {
  2181    // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
  2182    optional int32 weight = 1;
  2183  
  2184    // A node selector term, associated with the corresponding weight.
  2185    optional NodeSelectorTerm preference = 2;
  2186  }
  2187  
  2188  // Probe describes a health check to be performed against a container to determine whether it is
  2189  // alive or ready to receive traffic.
  2190  message Probe {
  2191    // The action taken to determine the health of a container
  2192    optional Handler handler = 1;
  2193  
  2194    // Number of seconds after the container has started before liveness probes are initiated.
  2195    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes
  2196    optional int32 initialDelaySeconds = 2;
  2197  
  2198    // Number of seconds after which the probe times out.
  2199    // Defaults to 1 second. Minimum value is 1.
  2200    // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-probes
  2201    optional int32 timeoutSeconds = 3;
  2202  
  2203    // How often (in seconds) to perform the probe.
  2204    // Default to 10 seconds. Minimum value is 1.
  2205    optional int32 periodSeconds = 4;
  2206  
  2207    // Minimum consecutive successes for the probe to be considered successful after having failed.
  2208    // Defaults to 1. Must be 1 for liveness. Minimum value is 1.
  2209    optional int32 successThreshold = 5;
  2210  
  2211    // Minimum consecutive failures for the probe to be considered failed after having succeeded.
  2212    // Defaults to 3. Minimum value is 1.
  2213    optional int32 failureThreshold = 6;
  2214  }
  2215  
  2216  // Represents a Rados Block Device mount that lasts the lifetime of a pod.
  2217  // RBD volumes support ownership management and SELinux relabeling.
  2218  message RBDVolumeSource {
  2219    // A collection of Ceph monitors.
  2220    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2221    repeated string monitors = 1;
  2222  
  2223    // The rados image name.
  2224    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2225    optional string image = 2;
  2226  
  2227    // Filesystem type of the volume that you want to mount.
  2228    // Tip: Ensure that the filesystem type is supported by the host operating system.
  2229    // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
  2230    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#rbd
  2231    // TODO: how do we prevent errors in the filesystem from compromising the machine
  2232    optional string fsType = 3;
  2233  
  2234    // The rados pool name.
  2235    // Default is rbd.
  2236    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it.
  2237    optional string pool = 4;
  2238  
  2239    // The rados user name.
  2240    // Default is admin.
  2241    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2242    optional string user = 5;
  2243  
  2244    // Keyring is the path to key ring for RBDUser.
  2245    // Default is /etc/ceph/keyring.
  2246    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2247    optional string keyring = 6;
  2248  
  2249    // SecretRef is name of the authentication secret for RBDUser. If provided
  2250    // overrides keyring.
  2251    // Default is empty.
  2252    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2253    optional LocalObjectReference secretRef = 7;
  2254  
  2255    // ReadOnly here will force the ReadOnly setting in VolumeMounts.
  2256    // Defaults to false.
  2257    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md#how-to-use-it
  2258    optional bool readOnly = 8;
  2259  }
  2260  
  2261  // RangeAllocation is not a public type.
  2262  message RangeAllocation {
  2263    // Standard object's metadata.
  2264    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2265    optional ObjectMeta metadata = 1;
  2266  
  2267    // Range is string that identifies the range represented by 'data'.
  2268    optional string range = 2;
  2269  
  2270    // Data is a bit array containing all allocated addresses in the previous segment.
  2271    optional bytes data = 3;
  2272  }
  2273  
  2274  // ReplicationController represents the configuration of a replication controller.
  2275  message ReplicationController {
  2276    // If the Labels of a ReplicationController are empty, they are defaulted to
  2277    // be the same as the Pod(s) that the replication controller manages.
  2278    // Standard object's metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2279    optional ObjectMeta metadata = 1;
  2280  
  2281    // Spec defines the specification of the desired behavior of the replication controller.
  2282    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2283    optional ReplicationControllerSpec spec = 2;
  2284  
  2285    // Status is the most recently observed status of the replication controller.
  2286    // This data may be out of date by some window of time.
  2287    // Populated by the system.
  2288    // Read-only.
  2289    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2290    optional ReplicationControllerStatus status = 3;
  2291  }
  2292  
  2293  // ReplicationControllerList is a collection of replication controllers.
  2294  message ReplicationControllerList {
  2295    // Standard list metadata.
  2296    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2297    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2298  
  2299    // List of replication controllers.
  2300    // More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md
  2301    repeated ReplicationController items = 2;
  2302  }
  2303  
  2304  // ReplicationControllerSpec is the specification of a replication controller.
  2305  message ReplicationControllerSpec {
  2306    // Replicas is the number of desired replicas.
  2307    // This is a pointer to distinguish between explicit zero and unspecified.
  2308    // Defaults to 1.
  2309    // More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller
  2310    optional int32 replicas = 1;
  2311  
  2312    // Selector is a label query over pods that should match the Replicas count.
  2313    // If Selector is empty, it is defaulted to the labels present on the Pod template.
  2314    // Label keys and values that must match in order to be controlled by this replication
  2315    // controller, if empty defaulted to labels on Pod template.
  2316    // More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md#label-selectors
  2317    map<string, string> selector = 2;
  2318  
  2319    // Template is the object that describes the pod that will be created if
  2320    // insufficient replicas are detected. This takes precedence over a TemplateRef.
  2321    // More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#pod-template
  2322    optional PodTemplateSpec template = 3;
  2323  }
  2324  
  2325  // ReplicationControllerStatus represents the current status of a replication
  2326  // controller.
  2327  message ReplicationControllerStatus {
  2328    // Replicas is the most recently oberved number of replicas.
  2329    // More info: http://releases.k8s.io/HEAD/docs/user-guide/replication-controller.md#what-is-a-replication-controller
  2330    optional int32 replicas = 1;
  2331  
  2332    // The number of pods that have labels matching the labels of the pod template of the replication controller.
  2333    optional int32 fullyLabeledReplicas = 2;
  2334  
  2335    // ObservedGeneration reflects the generation of the most recently observed replication controller.
  2336    optional int64 observedGeneration = 3;
  2337  }
  2338  
  2339  // ResourceQuota sets aggregate quota restrictions enforced per namespace
  2340  message ResourceQuota {
  2341    // Standard object's metadata.
  2342    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2343    optional ObjectMeta metadata = 1;
  2344  
  2345    // Spec defines the desired quota.
  2346    // http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2347    optional ResourceQuotaSpec spec = 2;
  2348  
  2349    // Status defines the actual enforced quota and its current usage.
  2350    // http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2351    optional ResourceQuotaStatus status = 3;
  2352  }
  2353  
  2354  // ResourceQuotaList is a list of ResourceQuota items.
  2355  message ResourceQuotaList {
  2356    // Standard list metadata.
  2357    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2358    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2359  
  2360    // Items is a list of ResourceQuota objects.
  2361    // More info: http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota
  2362    repeated ResourceQuota items = 2;
  2363  }
  2364  
  2365  // ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
  2366  message ResourceQuotaSpec {
  2367    // Hard is the set of desired hard limits for each named resource.
  2368    // More info: http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota
  2369    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> hard = 1;
  2370  
  2371    // A collection of filters that must match each object tracked by a quota.
  2372    // If not specified, the quota matches all objects.
  2373    repeated string scopes = 2;
  2374  }
  2375  
  2376  // ResourceQuotaStatus defines the enforced hard limits and observed use.
  2377  message ResourceQuotaStatus {
  2378    // Hard is the set of enforced hard limits for each named resource.
  2379    // More info: http://releases.k8s.io/HEAD/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota
  2380    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> hard = 1;
  2381  
  2382    // Used is the current observed total usage of the resource in the namespace.
  2383    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> used = 2;
  2384  }
  2385  
  2386  // ResourceRequirements describes the compute resource requirements.
  2387  message ResourceRequirements {
  2388    // Limits describes the maximum amount of compute resources allowed.
  2389    // More info: http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications
  2390    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> limits = 1;
  2391  
  2392    // Requests describes the minimum amount of compute resources required.
  2393    // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
  2394    // otherwise to an implementation-defined value.
  2395    // More info: http://releases.k8s.io/HEAD/docs/design/resources.md#resource-specifications
  2396    map<string, k8s.io.kubernetes.pkg.api.resource.Quantity> requests = 2;
  2397  }
  2398  
  2399  // SELinuxOptions are the labels to be applied to the container
  2400  message SELinuxOptions {
  2401    // User is a SELinux user label that applies to the container.
  2402    optional string user = 1;
  2403  
  2404    // Role is a SELinux role label that applies to the container.
  2405    optional string role = 2;
  2406  
  2407    // Type is a SELinux type label that applies to the container.
  2408    optional string type = 3;
  2409  
  2410    // Level is SELinux level label that applies to the container.
  2411    optional string level = 4;
  2412  }
  2413  
  2414  // Secret holds secret data of a certain type. The total bytes of the values in
  2415  // the Data field must be less than MaxSecretSize bytes.
  2416  message Secret {
  2417    // Standard object's metadata.
  2418    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2419    optional ObjectMeta metadata = 1;
  2420  
  2421    // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN
  2422    // or leading dot followed by valid DNS_SUBDOMAIN.
  2423    // The serialized form of the secret data is a base64 encoded string,
  2424    // representing the arbitrary (possibly non-string) data value here.
  2425    // Described in https://tools.ietf.org/html/rfc4648#section-4
  2426    map<string, bytes> data = 2;
  2427  
  2428    // Used to facilitate programmatic handling of secret data.
  2429    optional string type = 3;
  2430  }
  2431  
  2432  // SecretKeySelector selects a key of a Secret.
  2433  message SecretKeySelector {
  2434    // The name of the secret in the pod's namespace to select from.
  2435    optional LocalObjectReference localObjectReference = 1;
  2436  
  2437    // The key of the secret to select from.  Must be a valid secret key.
  2438    optional string key = 2;
  2439  }
  2440  
  2441  // SecretList is a list of Secret.
  2442  message SecretList {
  2443    // Standard list metadata.
  2444    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2445    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2446  
  2447    // Items is a list of secret objects.
  2448    // More info: http://releases.k8s.io/HEAD/docs/user-guide/secrets.md
  2449    repeated Secret items = 2;
  2450  }
  2451  
  2452  // Adapts a Secret into a volume.
  2453  // 
  2454  // The contents of the target Secret's Data field will be presented in a volume
  2455  // as files using the keys in the Data field as the file names.
  2456  // Secret volumes support ownership management and SELinux relabeling.
  2457  message SecretVolumeSource {
  2458    // Name of the secret in the pod's namespace to use.
  2459    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets
  2460    optional string secretName = 1;
  2461  }
  2462  
  2463  // SecurityContext holds security configuration that will be applied to a container.
  2464  // Some fields are present in both SecurityContext and PodSecurityContext.  When both
  2465  // are set, the values in SecurityContext take precedence.
  2466  message SecurityContext {
  2467    // The capabilities to add/drop when running containers.
  2468    // Defaults to the default set of capabilities granted by the container runtime.
  2469    optional Capabilities capabilities = 1;
  2470  
  2471    // Run container in privileged mode.
  2472    // Processes in privileged containers are essentially equivalent to root on the host.
  2473    // Defaults to false.
  2474    optional bool privileged = 2;
  2475  
  2476    // The SELinux context to be applied to the container.
  2477    // If unspecified, the container runtime will allocate a random SELinux context for each
  2478    // container.  May also be set in PodSecurityContext.  If set in both SecurityContext and
  2479    // PodSecurityContext, the value specified in SecurityContext takes precedence.
  2480    optional SELinuxOptions seLinuxOptions = 3;
  2481  
  2482    // The UID to run the entrypoint of the container process.
  2483    // Defaults to user specified in image metadata if unspecified.
  2484    // May also be set in PodSecurityContext.  If set in both SecurityContext and
  2485    // PodSecurityContext, the value specified in SecurityContext takes precedence.
  2486    optional int64 runAsUser = 4;
  2487  
  2488    // Indicates that the container must run as a non-root user.
  2489    // If true, the Kubelet will validate the image at runtime to ensure that it
  2490    // does not run as UID 0 (root) and fail to start the container if it does.
  2491    // If unset or false, no such validation will be performed.
  2492    // May also be set in PodSecurityContext.  If set in both SecurityContext and
  2493    // PodSecurityContext, the value specified in SecurityContext takes precedence.
  2494    optional bool runAsNonRoot = 5;
  2495  
  2496    // Whether this container has a read-only root filesystem.
  2497    // Default is false.
  2498    optional bool readOnlyRootFilesystem = 6;
  2499  }
  2500  
  2501  // SerializedReference is a reference to serialized object.
  2502  message SerializedReference {
  2503    // The reference to an object in the system.
  2504    optional ObjectReference reference = 1;
  2505  }
  2506  
  2507  // Service is a named abstraction of software service (for example, mysql) consisting of local port
  2508  // (for example 3306) that the proxy listens on, and the selector that determines which pods
  2509  // will answer requests sent through the proxy.
  2510  message Service {
  2511    // Standard object's metadata.
  2512    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2513    optional ObjectMeta metadata = 1;
  2514  
  2515    // Spec defines the behavior of a service.
  2516    // http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2517    optional ServiceSpec spec = 2;
  2518  
  2519    // Most recently observed status of the service.
  2520    // Populated by the system.
  2521    // Read-only.
  2522    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
  2523    optional ServiceStatus status = 3;
  2524  }
  2525  
  2526  // ServiceAccount binds together:
  2527  // * a name, understood by users, and perhaps by peripheral systems, for an identity
  2528  // * a principal that can be authenticated and authorized
  2529  // * a set of secrets
  2530  message ServiceAccount {
  2531    // Standard object's metadata.
  2532    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
  2533    optional ObjectMeta metadata = 1;
  2534  
  2535    // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount.
  2536    // More info: http://releases.k8s.io/HEAD/docs/user-guide/secrets.md
  2537    repeated ObjectReference secrets = 2;
  2538  
  2539    // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images
  2540    // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets
  2541    // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet.
  2542    // More info: http://releases.k8s.io/HEAD/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret
  2543    repeated LocalObjectReference imagePullSecrets = 3;
  2544  }
  2545  
  2546  // ServiceAccountList is a list of ServiceAccount objects
  2547  message ServiceAccountList {
  2548    // Standard list metadata.
  2549    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2550    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2551  
  2552    // List of ServiceAccounts.
  2553    // More info: http://releases.k8s.io/HEAD/docs/design/service_accounts.md#service-accounts
  2554    repeated ServiceAccount items = 2;
  2555  }
  2556  
  2557  // ServiceList holds a list of services.
  2558  message ServiceList {
  2559    // Standard list metadata.
  2560    // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
  2561    optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1;
  2562  
  2563    // List of services
  2564    repeated Service items = 2;
  2565  }
  2566  
  2567  // ServicePort contains information on service's port.
  2568  message ServicePort {
  2569    // The name of this port within the service. This must be a DNS_LABEL.
  2570    // All ports within a ServiceSpec must have unique names. This maps to
  2571    // the 'Name' field in EndpointPort objects.
  2572    // Optional if only one ServicePort is defined on this service.
  2573    optional string name = 1;
  2574  
  2575    // The IP protocol for this port. Supports "TCP" and "UDP".
  2576    // Default is TCP.
  2577    optional string protocol = 2;
  2578  
  2579    // The port that will be exposed by this service.
  2580    optional int32 port = 3;
  2581  
  2582    // Number or name of the port to access on the pods targeted by the service.
  2583    // Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
  2584    // If this is a string, it will be looked up as a named port in the
  2585    // target Pod's container ports. If this is not specified, the value
  2586    // of the 'port' field is used (an identity map).
  2587    // This field is ignored for services with clusterIP=None, and should be
  2588    // omitted or set equal to the 'port' field.
  2589    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#defining-a-service
  2590    optional k8s.io.kubernetes.pkg.util.intstr.IntOrString targetPort = 4;
  2591  
  2592    // The port on each node on which this service is exposed when type=NodePort or LoadBalancer.
  2593    // Usually assigned by the system. If specified, it will be allocated to the service
  2594    // if unused or else creation of the service will fail.
  2595    // Default is to auto-allocate a port if the ServiceType of this Service requires one.
  2596    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#type--nodeport
  2597    optional int32 nodePort = 5;
  2598  }
  2599  
  2600  // ServiceProxyOptions is the query options to a Service's proxy call.
  2601  message ServiceProxyOptions {
  2602    // Path is the part of URLs that include service endpoints, suffixes,
  2603    // and parameters to use for the current proxy request to service.
  2604    // For example, the whole request URL is
  2605    // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy.
  2606    // Path is _search?q=user:kimchy.
  2607    optional string path = 1;
  2608  }
  2609  
  2610  // ServiceSpec describes the attributes that a user creates on a service.
  2611  message ServiceSpec {
  2612    // The list of ports that are exposed by this service.
  2613    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies
  2614    repeated ServicePort ports = 1;
  2615  
  2616    // This service will route traffic to pods having labels matching this selector.
  2617    // Label keys and values that must match in order to receive traffic for this service.
  2618    // If empty, all pods are selected, if not specified, endpoints must be manually specified.
  2619    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#overview
  2620    map<string, string> selector = 2;
  2621  
  2622    // ClusterIP is usually assigned by the master and is the IP address of the service.
  2623    // If specified, it will be allocated to the service if it is unused
  2624    // or else creation of the service will fail.
  2625    // Valid values are None, empty string (""), or a valid IP address.
  2626    // 'None' can be specified for a headless service when proxying is not required.
  2627    // Cannot be updated.
  2628    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies
  2629    optional string clusterIP = 3;
  2630  
  2631    // Type of exposed service. Must be ClusterIP, NodePort, or LoadBalancer.
  2632    // Defaults to ClusterIP.
  2633    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#external-services
  2634    optional string type = 4;
  2635  
  2636    // externalIPs is a list of IP addresses for which nodes in the cluster
  2637    // will also accept traffic for this service.  These IPs are not managed by
  2638    // Kubernetes.  The user is responsible for ensuring that traffic arrives
  2639    // at a node with this IP.  A common example is external load-balancers
  2640    // that are not part of the Kubernetes system.  A previous form of this
  2641    // functionality exists as the deprecatedPublicIPs field.  When using this
  2642    // field, callers should also clear the deprecatedPublicIPs field.
  2643    repeated string externalIPs = 5;
  2644  
  2645    // deprecatedPublicIPs is deprecated and replaced by the externalIPs field
  2646    // with almost the exact same semantics.  This field is retained in the v1
  2647    // API for compatibility until at least 8/20/2016.  It will be removed from
  2648    // any new API revisions.  If both deprecatedPublicIPs *and* externalIPs are
  2649    // set, deprecatedPublicIPs is used.
  2650    // +genconversion=false
  2651    repeated string deprecatedPublicIPs = 6;
  2652  
  2653    // Supports "ClientIP" and "None". Used to maintain session affinity.
  2654    // Enable client IP based session affinity.
  2655    // Must be ClientIP or None.
  2656    // Defaults to None.
  2657    // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies
  2658    optional string sessionAffinity = 7;
  2659  
  2660    // Only applies to Service Type: LoadBalancer
  2661    // LoadBalancer will get created with the IP specified in this field.
  2662    // This feature depends on whether the underlying cloud-provider supports specifying
  2663    // the loadBalancerIP when a load balancer is created.
  2664    // This field will be ignored if the cloud-provider does not support the feature.
  2665    optional string loadBalancerIP = 8;
  2666  }
  2667  
  2668  // ServiceStatus represents the current status of a service.
  2669  message ServiceStatus {
  2670    // LoadBalancer contains the current status of the load-balancer,
  2671    // if one is present.
  2672    optional LoadBalancerStatus loadBalancer = 1;
  2673  }
  2674  
  2675  // TCPSocketAction describes an action based on opening a socket
  2676  message TCPSocketAction {
  2677    // Number or name of the port to access on the container.
  2678    // Number must be in the range 1 to 65535.
  2679    // Name must be an IANA_SVC_NAME.
  2680    optional k8s.io.kubernetes.pkg.util.intstr.IntOrString port = 1;
  2681  }
  2682  
  2683  // Volume represents a named volume in a pod that may be accessed by any container in the pod.
  2684  message Volume {
  2685    // Volume's name.
  2686    // Must be a DNS_LABEL and unique within the pod.
  2687    // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
  2688    optional string name = 1;
  2689  
  2690    // VolumeSource represents the location and type of the mounted volume.
  2691    // If not specified, the Volume is implied to be an EmptyDir.
  2692    // This implied behavior is deprecated and will be removed in a future version.
  2693    optional VolumeSource volumeSource = 2;
  2694  }
  2695  
  2696  // VolumeMount describes a mounting of a Volume within a container.
  2697  message VolumeMount {
  2698    // This must match the Name of a Volume.
  2699    optional string name = 1;
  2700  
  2701    // Mounted read-only if true, read-write otherwise (false or unspecified).
  2702    // Defaults to false.
  2703    optional bool readOnly = 2;
  2704  
  2705    // Path within the container at which the volume should be mounted.  Must
  2706    // not contain ':'.
  2707    optional string mountPath = 3;
  2708  
  2709    // Path within the volume from which the container's volume should be mounted.
  2710    // Defaults to "" (volume's root).
  2711    optional string subPath = 4;
  2712  }
  2713  
  2714  // Represents the source of a volume to mount.
  2715  // Only one of its members may be specified.
  2716  message VolumeSource {
  2717    // HostPath represents a pre-existing file or directory on the host
  2718    // machine that is directly exposed to the container. This is generally
  2719    // used for system agents or other privileged things that are allowed
  2720    // to see the host machine. Most containers will NOT need this.
  2721    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#hostpath
  2722    // ---
  2723    // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
  2724    // mount host directories as read/write.
  2725    optional HostPathVolumeSource hostPath = 1;
  2726  
  2727    // EmptyDir represents a temporary directory that shares a pod's lifetime.
  2728    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#emptydir
  2729    optional EmptyDirVolumeSource emptyDir = 2;
  2730  
  2731    // GCEPersistentDisk represents a GCE Disk resource that is attached to a
  2732    // kubelet's host machine and then exposed to the pod.
  2733    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#gcepersistentdisk
  2734    optional GCEPersistentDiskVolumeSource gcePersistentDisk = 3;
  2735  
  2736    // AWSElasticBlockStore represents an AWS Disk resource that is attached to a
  2737    // kubelet's host machine and then exposed to the pod.
  2738    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#awselasticblockstore
  2739    optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 4;
  2740  
  2741    // GitRepo represents a git repository at a particular revision.
  2742    optional GitRepoVolumeSource gitRepo = 5;
  2743  
  2744    // Secret represents a secret that should populate this volume.
  2745    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#secrets
  2746    optional SecretVolumeSource secret = 6;
  2747  
  2748    // NFS represents an NFS mount on the host that shares a pod's lifetime
  2749    // More info: http://releases.k8s.io/HEAD/docs/user-guide/volumes.md#nfs
  2750    optional NFSVolumeSource nfs = 7;
  2751  
  2752    // ISCSI represents an ISCSI Disk resource that is attached to a
  2753    // kubelet's host machine and then exposed to the pod.
  2754    // More info: http://releases.k8s.io/HEAD/examples/iscsi/README.md
  2755    optional ISCSIVolumeSource iscsi = 8;
  2756  
  2757    // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime.
  2758    // More info: http://releases.k8s.io/HEAD/examples/glusterfs/README.md
  2759    optional GlusterfsVolumeSource glusterfs = 9;
  2760  
  2761    // PersistentVolumeClaimVolumeSource represents a reference to a
  2762    // PersistentVolumeClaim in the same namespace.
  2763    // More info: http://releases.k8s.io/HEAD/docs/user-guide/persistent-volumes.md#persistentvolumeclaims
  2764    optional PersistentVolumeClaimVolumeSource persistentVolumeClaim = 10;
  2765  
  2766    // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
  2767    // More info: http://releases.k8s.io/HEAD/examples/rbd/README.md
  2768    optional RBDVolumeSource rbd = 11;
  2769  
  2770    // FlexVolume represents a generic volume resource that is
  2771    // provisioned/attached using a exec based plugin. This is an
  2772    // alpha feature and may change in future.
  2773    optional FlexVolumeSource flexVolume = 12;
  2774  
  2775    // Cinder represents a cinder volume attached and mounted on kubelets host machine
  2776    // More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md
  2777    optional CinderVolumeSource cinder = 13;
  2778  
  2779    // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
  2780    optional CephFSVolumeSource cephfs = 14;
  2781  
  2782    // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
  2783    optional FlockerVolumeSource flocker = 15;
  2784  
  2785    // DownwardAPI represents downward API about the pod that should populate this volume
  2786    optional DownwardAPIVolumeSource downwardAPI = 16;
  2787  
  2788    // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
  2789    optional FCVolumeSource fc = 17;
  2790  
  2791    // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
  2792    optional AzureFileVolumeSource azureFile = 18;
  2793  
  2794    // ConfigMap represents a configMap that should populate this volume
  2795    optional ConfigMapVolumeSource configMap = 19;
  2796  }
  2797  
  2798  // The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
  2799  message WeightedPodAffinityTerm {
  2800    // weight associated with matching the corresponding podAffinityTerm,
  2801    // in the range 1-100.
  2802    optional int32 weight = 1;
  2803  
  2804    // Required. A pod affinity term, associated with the corresponding weight.
  2805    optional PodAffinityTerm podAffinityTerm = 2;
  2806  }
  2807