blob: 916e2601e69afb6bb3ee49630aace457c8d3cffc [file] [log] [blame]
Matteo Scandoloa4285862020-12-01 18:10:10 -08001/*
2Copyright The Kubernetes Authors.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17
18// This file was autogenerated by go-to-protobuf. Do not edit it manually!
19
20syntax = 'proto2';
21
22package k8s.io.api.core.v1;
23
24import "k8s.io/apimachinery/pkg/api/resource/generated.proto";
25import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
26import "k8s.io/apimachinery/pkg/runtime/generated.proto";
27import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
28import "k8s.io/apimachinery/pkg/util/intstr/generated.proto";
29
30// Package-wide variables from generator "generated".
31option go_package = "v1";
32
33// Represents a Persistent Disk resource in AWS.
34//
35// An AWS EBS disk must exist before mounting to a container. The disk
36// must also be in the same AWS zone as the kubelet. An AWS EBS disk
37// can only be mounted as read/write once. AWS EBS volumes support
38// ownership management and SELinux relabeling.
39message AWSElasticBlockStoreVolumeSource {
40 // Unique ID of the persistent disk resource in AWS (Amazon EBS volume).
41 // More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
42 optional string volumeID = 1;
43
44 // Filesystem type of the volume that you want to mount.
45 // Tip: Ensure that the filesystem type is supported by the host operating system.
46 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
47 // More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
48 // TODO: how do we prevent errors in the filesystem from compromising the machine
49 // +optional
50 optional string fsType = 2;
51
52 // The partition in the volume that you want to mount.
53 // If omitted, the default is to mount by volume name.
54 // Examples: For volume /dev/sda1, you specify the partition as "1".
55 // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
56 // +optional
57 optional int32 partition = 3;
58
59 // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true".
60 // If omitted, the default is "false".
61 // More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
62 // +optional
63 optional bool readOnly = 4;
64}
65
66// Affinity is a group of affinity scheduling rules.
67message Affinity {
68 // Describes node affinity scheduling rules for the pod.
69 // +optional
70 optional NodeAffinity nodeAffinity = 1;
71
72 // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
73 // +optional
74 optional PodAffinity podAffinity = 2;
75
76 // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
77 // +optional
78 optional PodAntiAffinity podAntiAffinity = 3;
79}
80
81// AttachedVolume describes a volume attached to a node
82message AttachedVolume {
83 // Name of the attached volume
84 optional string name = 1;
85
86 // DevicePath represents the device path where the volume should be available
87 optional string devicePath = 2;
88}
89
90// AvoidPods describes pods that should avoid this node. This is the value for a
91// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and
92// will eventually become a field of NodeStatus.
93message AvoidPods {
94 // Bounded-sized list of signatures of pods that should avoid this node, sorted
95 // in timestamp order from oldest to newest. Size of the slice is unspecified.
96 // +optional
97 repeated PreferAvoidPodsEntry preferAvoidPods = 1;
98}
99
100// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
101message AzureDiskVolumeSource {
102 // The Name of the data disk in the blob storage
103 optional string diskName = 1;
104
105 // The URI the data disk in the blob storage
106 optional string diskURI = 2;
107
108 // Host Caching mode: None, Read Only, Read Write.
109 // +optional
110 optional string cachingMode = 3;
111
112 // Filesystem type to mount.
113 // Must be a filesystem type supported by the host operating system.
114 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
115 // +optional
116 optional string fsType = 4;
117
118 // Defaults to false (read/write). ReadOnly here will force
119 // the ReadOnly setting in VolumeMounts.
120 // +optional
121 optional bool readOnly = 5;
122
123 // Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
124 optional string kind = 6;
125}
126
127// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
128message AzureFilePersistentVolumeSource {
129 // the name of secret that contains Azure Storage Account Name and Key
130 optional string secretName = 1;
131
132 // Share Name
133 optional string shareName = 2;
134
135 // Defaults to false (read/write). ReadOnly here will force
136 // the ReadOnly setting in VolumeMounts.
137 // +optional
138 optional bool readOnly = 3;
139
140 // the namespace of the secret that contains Azure Storage Account Name and Key
141 // default is the same as the Pod
142 // +optional
143 optional string secretNamespace = 4;
144}
145
146// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
147message AzureFileVolumeSource {
148 // the name of secret that contains Azure Storage Account Name and Key
149 optional string secretName = 1;
150
151 // Share Name
152 optional string shareName = 2;
153
154 // Defaults to false (read/write). ReadOnly here will force
155 // the ReadOnly setting in VolumeMounts.
156 // +optional
157 optional bool readOnly = 3;
158}
159
160// Binding ties one object to another; for example, a pod is bound to a node by a scheduler.
161// Deprecated in 1.7, please use the bindings subresource of pods instead.
162message Binding {
163 // Standard object's metadata.
164 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
165 // +optional
166 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
167
168 // The target object that you want to bind to the standard object.
169 optional ObjectReference target = 2;
170}
171
172// Represents storage that is managed by an external CSI volume driver (Beta feature)
173message CSIPersistentVolumeSource {
174 // Driver is the name of the driver to use for this volume.
175 // Required.
176 optional string driver = 1;
177
178 // VolumeHandle is the unique volume name returned by the CSI volume
179 // plugin’s CreateVolume to refer to the volume on all subsequent calls.
180 // Required.
181 optional string volumeHandle = 2;
182
183 // Optional: The value to pass to ControllerPublishVolumeRequest.
184 // Defaults to false (read/write).
185 // +optional
186 optional bool readOnly = 3;
187
188 // Filesystem type to mount.
189 // Must be a filesystem type supported by the host operating system.
190 // Ex. "ext4", "xfs", "ntfs".
191 // +optional
192 optional string fsType = 4;
193
194 // Attributes of the volume to publish.
195 // +optional
196 map<string, string> volumeAttributes = 5;
197
198 // ControllerPublishSecretRef is a reference to the secret object containing
199 // sensitive information to pass to the CSI driver to complete the CSI
200 // ControllerPublishVolume and ControllerUnpublishVolume calls.
201 // This field is optional, and may be empty if no secret is required. If the
202 // secret object contains more than one secret, all secrets are passed.
203 // +optional
204 optional SecretReference controllerPublishSecretRef = 6;
205
206 // NodeStageSecretRef is a reference to the secret object containing sensitive
207 // information to pass to the CSI driver to complete the CSI NodeStageVolume
208 // and NodeStageVolume and NodeUnstageVolume calls.
209 // This field is optional, and may be empty if no secret is required. If the
210 // secret object contains more than one secret, all secrets are passed.
211 // +optional
212 optional SecretReference nodeStageSecretRef = 7;
213
214 // NodePublishSecretRef is a reference to the secret object containing
215 // sensitive information to pass to the CSI driver to complete the CSI
216 // NodePublishVolume and NodeUnpublishVolume calls.
217 // This field is optional, and may be empty if no secret is required. If the
218 // secret object contains more than one secret, all secrets are passed.
219 // +optional
220 optional SecretReference nodePublishSecretRef = 8;
221
222 // ControllerExpandSecretRef is a reference to the secret object containing
223 // sensitive information to pass to the CSI driver to complete the CSI
224 // ControllerExpandVolume call.
225 // This is an alpha field and requires enabling ExpandCSIVolumes feature gate.
226 // This field is optional, and may be empty if no secret is required. If the
227 // secret object contains more than one secret, all secrets are passed.
228 // +optional
229 optional SecretReference controllerExpandSecretRef = 9;
230}
231
232// Represents a source location of a volume to mount, managed by an external CSI driver
233message CSIVolumeSource {
234 // Driver is the name of the CSI driver that handles this volume.
235 // Consult with your admin for the correct name as registered in the cluster.
236 optional string driver = 1;
237
238 // Specifies a read-only configuration for the volume.
239 // Defaults to false (read/write).
240 // +optional
241 optional bool readOnly = 2;
242
243 // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs".
244 // If not provided, the empty value is passed to the associated CSI driver
245 // which will determine the default filesystem to apply.
246 // +optional
247 optional string fsType = 3;
248
249 // VolumeAttributes stores driver-specific properties that are passed to the CSI
250 // driver. Consult your driver's documentation for supported values.
251 // +optional
252 map<string, string> volumeAttributes = 4;
253
254 // NodePublishSecretRef is a reference to the secret object containing
255 // sensitive information to pass to the CSI driver to complete the CSI
256 // NodePublishVolume and NodeUnpublishVolume calls.
257 // This field is optional, and may be empty if no secret is required. If the
258 // secret object contains more than one secret, all secret references are passed.
259 // +optional
260 optional LocalObjectReference nodePublishSecretRef = 5;
261}
262
263// Adds and removes POSIX capabilities from running containers.
264message Capabilities {
265 // Added capabilities
266 // +optional
267 repeated string add = 1;
268
269 // Removed capabilities
270 // +optional
271 repeated string drop = 2;
272}
273
274// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
275// Cephfs volumes do not support ownership management or SELinux relabeling.
276message CephFSPersistentVolumeSource {
277 // Required: Monitors is a collection of Ceph monitors
278 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
279 repeated string monitors = 1;
280
281 // Optional: Used as the mounted root, rather than the full Ceph tree, default is /
282 // +optional
283 optional string path = 2;
284
285 // Optional: User is the rados user name, default is admin
286 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
287 // +optional
288 optional string user = 3;
289
290 // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
291 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
292 // +optional
293 optional string secretFile = 4;
294
295 // Optional: SecretRef is reference to the authentication secret for User, default is empty.
296 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
297 // +optional
298 optional SecretReference secretRef = 5;
299
300 // Optional: Defaults to false (read/write). ReadOnly here will force
301 // the ReadOnly setting in VolumeMounts.
302 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
303 // +optional
304 optional bool readOnly = 6;
305}
306
307// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
308// Cephfs volumes do not support ownership management or SELinux relabeling.
309message CephFSVolumeSource {
310 // Required: Monitors is a collection of Ceph monitors
311 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
312 repeated string monitors = 1;
313
314 // Optional: Used as the mounted root, rather than the full Ceph tree, default is /
315 // +optional
316 optional string path = 2;
317
318 // Optional: User is the rados user name, default is admin
319 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
320 // +optional
321 optional string user = 3;
322
323 // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
324 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
325 // +optional
326 optional string secretFile = 4;
327
328 // Optional: SecretRef is reference to the authentication secret for User, default is empty.
329 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
330 // +optional
331 optional LocalObjectReference secretRef = 5;
332
333 // Optional: Defaults to false (read/write). ReadOnly here will force
334 // the ReadOnly setting in VolumeMounts.
335 // More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
336 // +optional
337 optional bool readOnly = 6;
338}
339
340// Represents a cinder volume resource in Openstack.
341// A Cinder volume must exist before mounting to a container.
342// The volume must also be in the same region as the kubelet.
343// Cinder volumes support ownership management and SELinux relabeling.
344message CinderPersistentVolumeSource {
345 // volume id used to identify the volume in cinder.
346 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
347 optional string volumeID = 1;
348
349 // Filesystem type to mount.
350 // Must be a filesystem type supported by the host operating system.
351 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
352 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
353 // +optional
354 optional string fsType = 2;
355
356 // Optional: Defaults to false (read/write). ReadOnly here will force
357 // the ReadOnly setting in VolumeMounts.
358 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
359 // +optional
360 optional bool readOnly = 3;
361
362 // Optional: points to a secret object containing parameters used to connect
363 // to OpenStack.
364 // +optional
365 optional SecretReference secretRef = 4;
366}
367
368// Represents a cinder volume resource in Openstack.
369// A Cinder volume must exist before mounting to a container.
370// The volume must also be in the same region as the kubelet.
371// Cinder volumes support ownership management and SELinux relabeling.
372message CinderVolumeSource {
373 // volume id used to identify the volume in cinder.
374 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
375 optional string volumeID = 1;
376
377 // Filesystem type to mount.
378 // Must be a filesystem type supported by the host operating system.
379 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
380 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
381 // +optional
382 optional string fsType = 2;
383
384 // Optional: Defaults to false (read/write). ReadOnly here will force
385 // the ReadOnly setting in VolumeMounts.
386 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
387 // +optional
388 optional bool readOnly = 3;
389
390 // Optional: points to a secret object containing parameters used to connect
391 // to OpenStack.
392 // +optional
393 optional LocalObjectReference secretRef = 4;
394}
395
396// ClientIPConfig represents the configurations of Client IP based session affinity.
397message ClientIPConfig {
398 // timeoutSeconds specifies the seconds of ClientIP type session sticky time.
399 // The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP".
400 // Default value is 10800(for 3 hours).
401 // +optional
402 optional int32 timeoutSeconds = 1;
403}
404
405// Information about the condition of a component.
406message ComponentCondition {
407 // Type of condition for a component.
408 // Valid value: "Healthy"
409 optional string type = 1;
410
411 // Status of the condition for a component.
412 // Valid values for "Healthy": "True", "False", or "Unknown".
413 optional string status = 2;
414
415 // Message about the condition for a component.
416 // For example, information about a health check.
417 // +optional
418 optional string message = 3;
419
420 // Condition error code for a component.
421 // For example, a health check error code.
422 // +optional
423 optional string error = 4;
424}
425
426// ComponentStatus (and ComponentStatusList) holds the cluster validation info.
427// Deprecated: This API is deprecated in v1.19+
428message ComponentStatus {
429 // Standard object's metadata.
430 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
431 // +optional
432 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
433
434 // List of component conditions observed
435 // +optional
436 // +patchMergeKey=type
437 // +patchStrategy=merge
438 repeated ComponentCondition conditions = 2;
439}
440
441// Status of all the conditions for the component as a list of ComponentStatus objects.
442// Deprecated: This API is deprecated in v1.19+
443message ComponentStatusList {
444 // Standard list metadata.
445 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
446 // +optional
447 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
448
449 // List of ComponentStatus objects.
450 repeated ComponentStatus items = 2;
451}
452
453// ConfigMap holds configuration data for pods to consume.
454message ConfigMap {
455 // Standard object's metadata.
456 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
457 // +optional
458 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
459
460 // Immutable, if set to true, ensures that data stored in the ConfigMap cannot
461 // be updated (only object metadata can be modified).
462 // If not set to true, the field can be modified at any time.
463 // Defaulted to nil.
464 // This is a beta field enabled by ImmutableEphemeralVolumes feature gate.
465 // +optional
466 optional bool immutable = 4;
467
468 // Data contains the configuration data.
469 // Each key must consist of alphanumeric characters, '-', '_' or '.'.
470 // Values with non-UTF-8 byte sequences must use the BinaryData field.
471 // The keys stored in Data must not overlap with the keys in
472 // the BinaryData field, this is enforced during validation process.
473 // +optional
474 map<string, string> data = 2;
475
476 // BinaryData contains the binary data.
477 // Each key must consist of alphanumeric characters, '-', '_' or '.'.
478 // BinaryData can contain byte sequences that are not in the UTF-8 range.
479 // The keys stored in BinaryData must not overlap with the ones in
480 // the Data field, this is enforced during validation process.
481 // Using this field will require 1.10+ apiserver and
482 // kubelet.
483 // +optional
484 map<string, bytes> binaryData = 3;
485}
486
487// ConfigMapEnvSource selects a ConfigMap to populate the environment
488// variables with.
489//
490// The contents of the target ConfigMap's Data field will represent the
491// key-value pairs as environment variables.
492message ConfigMapEnvSource {
493 // The ConfigMap to select from.
494 optional LocalObjectReference localObjectReference = 1;
495
496 // Specify whether the ConfigMap must be defined
497 // +optional
498 optional bool optional = 2;
499}
500
501// Selects a key from a ConfigMap.
502message ConfigMapKeySelector {
503 // The ConfigMap to select from.
504 optional LocalObjectReference localObjectReference = 1;
505
506 // The key to select.
507 optional string key = 2;
508
509 // Specify whether the ConfigMap or its key must be defined
510 // +optional
511 optional bool optional = 3;
512}
513
514// ConfigMapList is a resource containing a list of ConfigMap objects.
515message ConfigMapList {
516 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
517 // +optional
518 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
519
520 // Items is the list of ConfigMaps.
521 repeated ConfigMap items = 2;
522}
523
524// ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.
525message ConfigMapNodeConfigSource {
526 // Namespace is the metadata.namespace of the referenced ConfigMap.
527 // This field is required in all cases.
528 optional string namespace = 1;
529
530 // Name is the metadata.name of the referenced ConfigMap.
531 // This field is required in all cases.
532 optional string name = 2;
533
534 // UID is the metadata.UID of the referenced ConfigMap.
535 // This field is forbidden in Node.Spec, and required in Node.Status.
536 // +optional
537 optional string uid = 3;
538
539 // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap.
540 // This field is forbidden in Node.Spec, and required in Node.Status.
541 // +optional
542 optional string resourceVersion = 4;
543
544 // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure
545 // This field is required in all cases.
546 optional string kubeletConfigKey = 5;
547}
548
549// Adapts a ConfigMap into a projected volume.
550//
551// The contents of the target ConfigMap's Data field will be presented in a
552// projected volume as files using the keys in the Data field as the file names,
553// unless the items element is populated with specific mappings of keys to paths.
554// Note that this is identical to a configmap volume source without the default
555// mode.
556message ConfigMapProjection {
557 optional LocalObjectReference localObjectReference = 1;
558
559 // If unspecified, each key-value pair in the Data field of the referenced
560 // ConfigMap will be projected into the volume as a file whose name is the
561 // key and content is the value. If specified, the listed keys will be
562 // projected into the specified paths, and unlisted keys will not be
563 // present. If a key is specified which is not present in the ConfigMap,
564 // the volume setup will error unless it is marked optional. Paths must be
565 // relative and may not contain the '..' path or start with '..'.
566 // +optional
567 repeated KeyToPath items = 2;
568
569 // Specify whether the ConfigMap or its keys must be defined
570 // +optional
571 optional bool optional = 4;
572}
573
574// Adapts a ConfigMap into a volume.
575//
576// The contents of the target ConfigMap's Data field will be presented in a
577// volume as files using the keys in the Data field as the file names, unless
578// the items element is populated with specific mappings of keys to paths.
579// ConfigMap volumes support ownership management and SELinux relabeling.
580message ConfigMapVolumeSource {
581 optional LocalObjectReference localObjectReference = 1;
582
583 // If unspecified, each key-value pair in the Data field of the referenced
584 // ConfigMap will be projected into the volume as a file whose name is the
585 // key and content is the value. If specified, the listed keys will be
586 // projected into the specified paths, and unlisted keys will not be
587 // present. If a key is specified which is not present in the ConfigMap,
588 // the volume setup will error unless it is marked optional. Paths must be
589 // relative and may not contain the '..' path or start with '..'.
590 // +optional
591 repeated KeyToPath items = 2;
592
593 // Optional: mode bits used to set permissions on created files by default.
594 // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
595 // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
596 // Defaults to 0644.
597 // Directories within the path are not affected by this setting.
598 // This might be in conflict with other options that affect the file
599 // mode, like fsGroup, and the result can be other mode bits set.
600 // +optional
601 optional int32 defaultMode = 3;
602
603 // Specify whether the ConfigMap or its keys must be defined
604 // +optional
605 optional bool optional = 4;
606}
607
608// A single application container that you want to run within a pod.
609message Container {
610 // Name of the container specified as a DNS_LABEL.
611 // Each container in a pod must have a unique name (DNS_LABEL).
612 // Cannot be updated.
613 optional string name = 1;
614
615 // Docker image name.
616 // More info: https://kubernetes.io/docs/concepts/containers/images
617 // This field is optional to allow higher level config management to default or override
618 // container images in workload controllers like Deployments and StatefulSets.
619 // +optional
620 optional string image = 2;
621
622 // Entrypoint array. Not executed within a shell.
623 // The docker image's ENTRYPOINT is used if this is not provided.
624 // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
625 // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
626 // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
627 // regardless of whether the variable exists or not.
628 // Cannot be updated.
629 // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
630 // +optional
631 repeated string command = 3;
632
633 // Arguments to the entrypoint.
634 // The docker image's CMD is used if this is not provided.
635 // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
636 // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
637 // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
638 // regardless of whether the variable exists or not.
639 // Cannot be updated.
640 // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
641 // +optional
642 repeated string args = 4;
643
644 // Container's working directory.
645 // If not specified, the container runtime's default will be used, which
646 // might be configured in the container image.
647 // Cannot be updated.
648 // +optional
649 optional string workingDir = 5;
650
651 // List of ports to expose from the container. Exposing a port here gives
652 // the system additional information about the network connections a
653 // container uses, but is primarily informational. Not specifying a port here
654 // DOES NOT prevent that port from being exposed. Any port which is
655 // listening on the default "0.0.0.0" address inside a container will be
656 // accessible from the network.
657 // Cannot be updated.
658 // +optional
659 // +patchMergeKey=containerPort
660 // +patchStrategy=merge
661 // +listType=map
662 // +listMapKey=containerPort
663 // +listMapKey=protocol
664 repeated ContainerPort ports = 6;
665
666 // List of sources to populate environment variables in the container.
667 // The keys defined within a source must be a C_IDENTIFIER. All invalid keys
668 // will be reported as an event when the container is starting. When a key exists in multiple
669 // sources, the value associated with the last source will take precedence.
670 // Values defined by an Env with a duplicate key will take precedence.
671 // Cannot be updated.
672 // +optional
673 repeated EnvFromSource envFrom = 19;
674
675 // List of environment variables to set in the container.
676 // Cannot be updated.
677 // +optional
678 // +patchMergeKey=name
679 // +patchStrategy=merge
680 repeated EnvVar env = 7;
681
682 // Compute Resources required by this container.
683 // Cannot be updated.
684 // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
685 // +optional
686 optional ResourceRequirements resources = 8;
687
688 // Pod volumes to mount into the container's filesystem.
689 // Cannot be updated.
690 // +optional
691 // +patchMergeKey=mountPath
692 // +patchStrategy=merge
693 repeated VolumeMount volumeMounts = 9;
694
695 // volumeDevices is the list of block devices to be used by the container.
696 // +patchMergeKey=devicePath
697 // +patchStrategy=merge
698 // +optional
699 repeated VolumeDevice volumeDevices = 21;
700
701 // Periodic probe of container liveness.
702 // Container will be restarted if the probe fails.
703 // Cannot be updated.
704 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
705 // +optional
706 optional Probe livenessProbe = 10;
707
708 // Periodic probe of container service readiness.
709 // Container will be removed from service endpoints if the probe fails.
710 // Cannot be updated.
711 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
712 // +optional
713 optional Probe readinessProbe = 11;
714
715 // StartupProbe indicates that the Pod has successfully initialized.
716 // If specified, no other probes are executed until this completes successfully.
717 // If this probe fails, the Pod will be restarted, just as if the livenessProbe failed.
718 // This can be used to provide different probe parameters at the beginning of a Pod's lifecycle,
719 // when it might take a long time to load data or warm a cache, than during steady-state operation.
720 // This cannot be updated.
721 // This is a beta feature enabled by the StartupProbe feature flag.
722 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
723 // +optional
724 optional Probe startupProbe = 22;
725
726 // Actions that the management system should take in response to container lifecycle events.
727 // Cannot be updated.
728 // +optional
729 optional Lifecycle lifecycle = 12;
730
731 // Optional: Path at which the file to which the container's termination message
732 // will be written is mounted into the container's filesystem.
733 // Message written is intended to be brief final status, such as an assertion failure message.
734 // Will be truncated by the node if greater than 4096 bytes. The total message length across
735 // all containers will be limited to 12kb.
736 // Defaults to /dev/termination-log.
737 // Cannot be updated.
738 // +optional
739 optional string terminationMessagePath = 13;
740
741 // Indicate how the termination message should be populated. File will use the contents of
742 // terminationMessagePath to populate the container status message on both success and failure.
743 // FallbackToLogsOnError will use the last chunk of container log output if the termination
744 // message file is empty and the container exited with an error.
745 // The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
746 // Defaults to File.
747 // Cannot be updated.
748 // +optional
749 optional string terminationMessagePolicy = 20;
750
751 // Image pull policy.
752 // One of Always, Never, IfNotPresent.
753 // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
754 // Cannot be updated.
755 // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
756 // +optional
757 optional string imagePullPolicy = 14;
758
759 // Security options the pod should run with.
760 // More info: https://kubernetes.io/docs/concepts/policy/security-context/
761 // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
762 // +optional
763 optional SecurityContext securityContext = 15;
764
765 // Whether this container should allocate a buffer for stdin in the container runtime. If this
766 // is not set, reads from stdin in the container will always result in EOF.
767 // Default is false.
768 // +optional
769 optional bool stdin = 16;
770
771 // Whether the container runtime should close the stdin channel after it has been opened by
772 // a single attach. When stdin is true the stdin stream will remain open across multiple attach
773 // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
774 // first client attaches to stdin, and then remains open and accepts data until the client disconnects,
775 // at which time stdin is closed and remains closed until the container is restarted. If this
776 // flag is false, a container processes that reads from stdin will never receive an EOF.
777 // Default is false
778 // +optional
779 optional bool stdinOnce = 17;
780
781 // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
782 // Default is false.
783 // +optional
784 optional bool tty = 18;
785}
786
787// Describe a container image
788message ContainerImage {
789 // Names by which this image is known.
790 // e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
791 repeated string names = 1;
792
793 // The size of the image in bytes.
794 // +optional
795 optional int64 sizeBytes = 2;
796}
797
798// ContainerPort represents a network port in a single container.
799message ContainerPort {
800 // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
801 // named port in a pod must have a unique name. Name for the port that can be
802 // referred to by services.
803 // +optional
804 optional string name = 1;
805
806 // Number of port to expose on the host.
807 // If specified, this must be a valid port number, 0 < x < 65536.
808 // If HostNetwork is specified, this must match ContainerPort.
809 // Most containers do not need this.
810 // +optional
811 optional int32 hostPort = 2;
812
813 // Number of port to expose on the pod's IP address.
814 // This must be a valid port number, 0 < x < 65536.
815 optional int32 containerPort = 3;
816
817 // Protocol for port. Must be UDP, TCP, or SCTP.
818 // Defaults to "TCP".
819 // +optional
820 optional string protocol = 4;
821
822 // What host IP to bind the external port to.
823 // +optional
824 optional string hostIP = 5;
825}
826
827// ContainerState holds a possible state of container.
828// Only one of its members may be specified.
829// If none of them is specified, the default one is ContainerStateWaiting.
830message ContainerState {
831 // Details about a waiting container
832 // +optional
833 optional ContainerStateWaiting waiting = 1;
834
835 // Details about a running container
836 // +optional
837 optional ContainerStateRunning running = 2;
838
839 // Details about a terminated container
840 // +optional
841 optional ContainerStateTerminated terminated = 3;
842}
843
844// ContainerStateRunning is a running state of a container.
845message ContainerStateRunning {
846 // Time at which the container was last (re-)started
847 // +optional
848 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startedAt = 1;
849}
850
851// ContainerStateTerminated is a terminated state of a container.
852message ContainerStateTerminated {
853 // Exit status from the last termination of the container
854 optional int32 exitCode = 1;
855
856 // Signal from the last termination of the container
857 // +optional
858 optional int32 signal = 2;
859
860 // (brief) reason from the last termination of the container
861 // +optional
862 optional string reason = 3;
863
864 // Message regarding the last termination of the container
865 // +optional
866 optional string message = 4;
867
868 // Time at which previous execution of the container started
869 // +optional
870 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startedAt = 5;
871
872 // Time at which the container last terminated
873 // +optional
874 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time finishedAt = 6;
875
876 // Container's ID in the format 'docker://<container_id>'
877 // +optional
878 optional string containerID = 7;
879}
880
881// ContainerStateWaiting is a waiting state of a container.
882message ContainerStateWaiting {
883 // (brief) reason the container is not yet running.
884 // +optional
885 optional string reason = 1;
886
887 // Message regarding why the container is not yet running.
888 // +optional
889 optional string message = 2;
890}
891
892// ContainerStatus contains details for the current status of this container.
893message ContainerStatus {
894 // This must be a DNS_LABEL. Each container in a pod must have a unique name.
895 // Cannot be updated.
896 optional string name = 1;
897
898 // Details about the container's current condition.
899 // +optional
900 optional ContainerState state = 2;
901
902 // Details about the container's last termination condition.
903 // +optional
904 optional ContainerState lastState = 3;
905
906 // Specifies whether the container has passed its readiness probe.
907 optional bool ready = 4;
908
909 // The number of times the container has been restarted, currently based on
910 // the number of dead containers that have not yet been removed.
911 // Note that this is calculated from dead containers. But those containers are subject to
912 // garbage collection. This value will get capped at 5 by GC.
913 optional int32 restartCount = 5;
914
915 // The image the container is running.
916 // More info: https://kubernetes.io/docs/concepts/containers/images
917 // TODO(dchen1107): Which image the container is running with?
918 optional string image = 6;
919
920 // ImageID of the container's image.
921 optional string imageID = 7;
922
923 // Container's ID in the format 'docker://<container_id>'.
924 // +optional
925 optional string containerID = 8;
926
927 // Specifies whether the container has passed its startup probe.
928 // Initialized as false, becomes true after startupProbe is considered successful.
929 // Resets to false when the container is restarted, or if kubelet loses state temporarily.
930 // Is always true when no startupProbe is defined.
931 // +optional
932 optional bool started = 9;
933}
934
935// DaemonEndpoint contains information about a single Daemon endpoint.
936message DaemonEndpoint {
937 // Port number of the given endpoint.
938 optional int32 Port = 1;
939}
940
941// Represents downward API info for projecting into a projected volume.
942// Note that this is identical to a downwardAPI volume source without the default
943// mode.
944message DownwardAPIProjection {
945 // Items is a list of DownwardAPIVolume file
946 // +optional
947 repeated DownwardAPIVolumeFile items = 1;
948}
949
950// DownwardAPIVolumeFile represents information to create the file containing the pod field
951message DownwardAPIVolumeFile {
952 // 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 '..'
953 optional string path = 1;
954
955 // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
956 // +optional
957 optional ObjectFieldSelector fieldRef = 2;
958
959 // Selects a resource of the container: only resources limits and requests
960 // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
961 // +optional
962 optional ResourceFieldSelector resourceFieldRef = 3;
963
964 // Optional: mode bits used to set permissions on this file, must be an octal value
965 // between 0000 and 0777 or a decimal value between 0 and 511.
966 // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
967 // If not specified, the volume defaultMode will be used.
968 // This might be in conflict with other options that affect the file
969 // mode, like fsGroup, and the result can be other mode bits set.
970 // +optional
971 optional int32 mode = 4;
972}
973
974// DownwardAPIVolumeSource represents a volume containing downward API info.
975// Downward API volumes support ownership management and SELinux relabeling.
976message DownwardAPIVolumeSource {
977 // Items is a list of downward API volume file
978 // +optional
979 repeated DownwardAPIVolumeFile items = 1;
980
981 // Optional: mode bits to use on created files by default. Must be a
982 // Optional: mode bits used to set permissions on created files by default.
983 // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
984 // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
985 // Defaults to 0644.
986 // Directories within the path are not affected by this setting.
987 // This might be in conflict with other options that affect the file
988 // mode, like fsGroup, and the result can be other mode bits set.
989 // +optional
990 optional int32 defaultMode = 2;
991}
992
993// Represents an empty directory for a pod.
994// Empty directory volumes support ownership management and SELinux relabeling.
995message EmptyDirVolumeSource {
996 // What type of storage medium should back this directory.
997 // The default is "" which means to use the node's default medium.
998 // Must be an empty string (default) or Memory.
999 // More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
1000 // +optional
1001 optional string medium = 1;
1002
1003 // Total amount of local storage required for this EmptyDir volume.
1004 // The size limit is also applicable for memory medium.
1005 // The maximum usage on memory medium EmptyDir would be the minimum value between
1006 // the SizeLimit specified here and the sum of memory limits of all containers in a pod.
1007 // The default is nil which means that the limit is undefined.
1008 // More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
1009 // +optional
1010 optional k8s.io.apimachinery.pkg.api.resource.Quantity sizeLimit = 2;
1011}
1012
1013// EndpointAddress is a tuple that describes single IP address.
1014message EndpointAddress {
1015 // The IP of this endpoint.
1016 // May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16),
1017 // or link-local multicast ((224.0.0.0/24).
1018 // IPv6 is also accepted but not fully supported on all platforms. Also, certain
1019 // kubernetes components, like kube-proxy, are not IPv6 ready.
1020 // TODO: This should allow hostname or IP, See #4447.
1021 optional string ip = 1;
1022
1023 // The Hostname of this endpoint
1024 // +optional
1025 optional string hostname = 3;
1026
1027 // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.
1028 // +optional
1029 optional string nodeName = 4;
1030
1031 // Reference to object providing the endpoint.
1032 // +optional
1033 optional ObjectReference targetRef = 2;
1034}
1035
1036// EndpointPort is a tuple that describes a single port.
1037message EndpointPort {
1038 // The name of this port. This must match the 'name' field in the
1039 // corresponding ServicePort.
1040 // Must be a DNS_LABEL.
1041 // Optional only if one port is defined.
1042 // +optional
1043 optional string name = 1;
1044
1045 // The port number of the endpoint.
1046 optional int32 port = 2;
1047
1048 // The IP protocol for this port.
1049 // Must be UDP, TCP, or SCTP.
1050 // Default is TCP.
1051 // +optional
1052 optional string protocol = 3;
1053
1054 // The application protocol for this port.
1055 // This field follows standard Kubernetes label syntax.
1056 // Un-prefixed names are reserved for IANA standard service names (as per
1057 // RFC-6335 and http://www.iana.org/assignments/service-names).
1058 // Non-standard protocols should use prefixed names such as
1059 // mycompany.com/my-custom-protocol.
1060 // This is a beta field that is guarded by the ServiceAppProtocol feature
1061 // gate and enabled by default.
1062 // +optional
1063 optional string appProtocol = 4;
1064}
1065
1066// EndpointSubset is a group of addresses with a common set of ports. The
1067// expanded set of endpoints is the Cartesian product of Addresses x Ports.
1068// For example, given:
1069// {
1070// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
1071// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
1072// }
1073// The resulting set of endpoints can be viewed as:
1074// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
1075// b: [ 10.10.1.1:309, 10.10.2.2:309 ]
1076message EndpointSubset {
1077 // IP addresses which offer the related ports that are marked as ready. These endpoints
1078 // should be considered safe for load balancers and clients to utilize.
1079 // +optional
1080 repeated EndpointAddress addresses = 1;
1081
1082 // IP addresses which offer the related ports but are not currently marked as ready
1083 // because they have not yet finished starting, have recently failed a readiness check,
1084 // or have recently failed a liveness check.
1085 // +optional
1086 repeated EndpointAddress notReadyAddresses = 2;
1087
1088 // Port numbers available on the related IP addresses.
1089 // +optional
1090 repeated EndpointPort ports = 3;
1091}
1092
1093// Endpoints is a collection of endpoints that implement the actual service. Example:
1094// Name: "mysvc",
1095// Subsets: [
1096// {
1097// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
1098// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
1099// },
1100// {
1101// Addresses: [{"ip": "10.10.3.3"}],
1102// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
1103// },
1104// ]
1105message Endpoints {
1106 // Standard object's metadata.
1107 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
1108 // +optional
1109 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
1110
1111 // The set of all endpoints is the union of all subsets. Addresses are placed into
1112 // subsets according to the IPs they share. A single address with multiple ports,
1113 // some of which are ready and some of which are not (because they come from
1114 // different containers) will result in the address being displayed in different
1115 // subsets for the different ports. No address will appear in both Addresses and
1116 // NotReadyAddresses in the same subset.
1117 // Sets of addresses and ports that comprise a service.
1118 // +optional
1119 repeated EndpointSubset subsets = 2;
1120}
1121
1122// EndpointsList is a list of endpoints.
1123message EndpointsList {
1124 // Standard list metadata.
1125 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
1126 // +optional
1127 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
1128
1129 // List of endpoints.
1130 repeated Endpoints items = 2;
1131}
1132
1133// EnvFromSource represents the source of a set of ConfigMaps
1134message EnvFromSource {
1135 // An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
1136 // +optional
1137 optional string prefix = 1;
1138
1139 // The ConfigMap to select from
1140 // +optional
1141 optional ConfigMapEnvSource configMapRef = 2;
1142
1143 // The Secret to select from
1144 // +optional
1145 optional SecretEnvSource secretRef = 3;
1146}
1147
1148// EnvVar represents an environment variable present in a Container.
1149message EnvVar {
1150 // Name of the environment variable. Must be a C_IDENTIFIER.
1151 optional string name = 1;
1152
1153 // Variable references $(VAR_NAME) are expanded
1154 // using the previous defined environment variables in the container and
1155 // any service environment variables. If a variable cannot be resolved,
1156 // the reference in the input string will be unchanged. The $(VAR_NAME)
1157 // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
1158 // references will never be expanded, regardless of whether the variable
1159 // exists or not.
1160 // Defaults to "".
1161 // +optional
1162 optional string value = 2;
1163
1164 // Source for the environment variable's value. Cannot be used if value is not empty.
1165 // +optional
1166 optional EnvVarSource valueFrom = 3;
1167}
1168
1169// EnvVarSource represents a source for the value of an EnvVar.
1170message EnvVarSource {
1171 // Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,
1172 // spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
1173 // +optional
1174 optional ObjectFieldSelector fieldRef = 1;
1175
1176 // Selects a resource of the container: only resources limits and requests
1177 // (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
1178 // +optional
1179 optional ResourceFieldSelector resourceFieldRef = 2;
1180
1181 // Selects a key of a ConfigMap.
1182 // +optional
1183 optional ConfigMapKeySelector configMapKeyRef = 3;
1184
1185 // Selects a key of a secret in the pod's namespace
1186 // +optional
1187 optional SecretKeySelector secretKeyRef = 4;
1188}
1189
1190// An EphemeralContainer is a container that may be added temporarily to an existing pod for
1191// user-initiated activities such as debugging. Ephemeral containers have no resource or
1192// scheduling guarantees, and they will not be restarted when they exit or when a pod is
1193// removed or restarted. If an ephemeral container causes a pod to exceed its resource
1194// allocation, the pod may be evicted.
1195// Ephemeral containers may not be added by directly updating the pod spec. They must be added
1196// via the pod's ephemeralcontainers subresource, and they will appear in the pod spec
1197// once added.
1198// This is an alpha feature enabled by the EphemeralContainers feature flag.
1199message EphemeralContainer {
1200 // Ephemeral containers have all of the fields of Container, plus additional fields
1201 // specific to ephemeral containers. Fields in common with Container are in the
1202 // following inlined struct so than an EphemeralContainer may easily be converted
1203 // to a Container.
1204 optional EphemeralContainerCommon ephemeralContainerCommon = 1;
1205
1206 // If set, the name of the container from PodSpec that this ephemeral container targets.
1207 // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.
1208 // If not set then the ephemeral container is run in whatever namespaces are shared
1209 // for the pod. Note that the container runtime must support this feature.
1210 // +optional
1211 optional string targetContainerName = 2;
1212}
1213
1214// EphemeralContainerCommon is a copy of all fields in Container to be inlined in
1215// EphemeralContainer. This separate type allows easy conversion from EphemeralContainer
1216// to Container and allows separate documentation for the fields of EphemeralContainer.
1217// When a new field is added to Container it must be added here as well.
1218message EphemeralContainerCommon {
1219 // Name of the ephemeral container specified as a DNS_LABEL.
1220 // This name must be unique among all containers, init containers and ephemeral containers.
1221 optional string name = 1;
1222
1223 // Docker image name.
1224 // More info: https://kubernetes.io/docs/concepts/containers/images
1225 optional string image = 2;
1226
1227 // Entrypoint array. Not executed within a shell.
1228 // The docker image's ENTRYPOINT is used if this is not provided.
1229 // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
1230 // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
1231 // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
1232 // regardless of whether the variable exists or not.
1233 // Cannot be updated.
1234 // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
1235 // +optional
1236 repeated string command = 3;
1237
1238 // Arguments to the entrypoint.
1239 // The docker image's CMD is used if this is not provided.
1240 // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
1241 // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
1242 // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
1243 // regardless of whether the variable exists or not.
1244 // Cannot be updated.
1245 // More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
1246 // +optional
1247 repeated string args = 4;
1248
1249 // Container's working directory.
1250 // If not specified, the container runtime's default will be used, which
1251 // might be configured in the container image.
1252 // Cannot be updated.
1253 // +optional
1254 optional string workingDir = 5;
1255
1256 // Ports are not allowed for ephemeral containers.
1257 repeated ContainerPort ports = 6;
1258
1259 // List of sources to populate environment variables in the container.
1260 // The keys defined within a source must be a C_IDENTIFIER. All invalid keys
1261 // will be reported as an event when the container is starting. When a key exists in multiple
1262 // sources, the value associated with the last source will take precedence.
1263 // Values defined by an Env with a duplicate key will take precedence.
1264 // Cannot be updated.
1265 // +optional
1266 repeated EnvFromSource envFrom = 19;
1267
1268 // List of environment variables to set in the container.
1269 // Cannot be updated.
1270 // +optional
1271 // +patchMergeKey=name
1272 // +patchStrategy=merge
1273 repeated EnvVar env = 7;
1274
1275 // Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources
1276 // already allocated to the pod.
1277 // +optional
1278 optional ResourceRequirements resources = 8;
1279
1280 // Pod volumes to mount into the container's filesystem.
1281 // Cannot be updated.
1282 // +optional
1283 // +patchMergeKey=mountPath
1284 // +patchStrategy=merge
1285 repeated VolumeMount volumeMounts = 9;
1286
1287 // volumeDevices is the list of block devices to be used by the container.
1288 // +patchMergeKey=devicePath
1289 // +patchStrategy=merge
1290 // +optional
1291 repeated VolumeDevice volumeDevices = 21;
1292
1293 // Probes are not allowed for ephemeral containers.
1294 // +optional
1295 optional Probe livenessProbe = 10;
1296
1297 // Probes are not allowed for ephemeral containers.
1298 // +optional
1299 optional Probe readinessProbe = 11;
1300
1301 // Probes are not allowed for ephemeral containers.
1302 // +optional
1303 optional Probe startupProbe = 22;
1304
1305 // Lifecycle is not allowed for ephemeral containers.
1306 // +optional
1307 optional Lifecycle lifecycle = 12;
1308
1309 // Optional: Path at which the file to which the container's termination message
1310 // will be written is mounted into the container's filesystem.
1311 // Message written is intended to be brief final status, such as an assertion failure message.
1312 // Will be truncated by the node if greater than 4096 bytes. The total message length across
1313 // all containers will be limited to 12kb.
1314 // Defaults to /dev/termination-log.
1315 // Cannot be updated.
1316 // +optional
1317 optional string terminationMessagePath = 13;
1318
1319 // Indicate how the termination message should be populated. File will use the contents of
1320 // terminationMessagePath to populate the container status message on both success and failure.
1321 // FallbackToLogsOnError will use the last chunk of container log output if the termination
1322 // message file is empty and the container exited with an error.
1323 // The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
1324 // Defaults to File.
1325 // Cannot be updated.
1326 // +optional
1327 optional string terminationMessagePolicy = 20;
1328
1329 // Image pull policy.
1330 // One of Always, Never, IfNotPresent.
1331 // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
1332 // Cannot be updated.
1333 // More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
1334 // +optional
1335 optional string imagePullPolicy = 14;
1336
1337 // SecurityContext is not allowed for ephemeral containers.
1338 // +optional
1339 optional SecurityContext securityContext = 15;
1340
1341 // Whether this container should allocate a buffer for stdin in the container runtime. If this
1342 // is not set, reads from stdin in the container will always result in EOF.
1343 // Default is false.
1344 // +optional
1345 optional bool stdin = 16;
1346
1347 // Whether the container runtime should close the stdin channel after it has been opened by
1348 // a single attach. When stdin is true the stdin stream will remain open across multiple attach
1349 // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the
1350 // first client attaches to stdin, and then remains open and accepts data until the client disconnects,
1351 // at which time stdin is closed and remains closed until the container is restarted. If this
1352 // flag is false, a container processes that reads from stdin will never receive an EOF.
1353 // Default is false
1354 // +optional
1355 optional bool stdinOnce = 17;
1356
1357 // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true.
1358 // Default is false.
1359 // +optional
1360 optional bool tty = 18;
1361}
1362
1363// A list of ephemeral containers used with the Pod ephemeralcontainers subresource.
1364message EphemeralContainers {
1365 // +optional
1366 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
1367
1368 // A list of ephemeral containers associated with this pod. New ephemeral containers
1369 // may be appended to this list, but existing ephemeral containers may not be removed
1370 // or modified.
1371 // +patchMergeKey=name
1372 // +patchStrategy=merge
1373 repeated EphemeralContainer ephemeralContainers = 2;
1374}
1375
1376// Represents an ephemeral volume that is handled by a normal storage driver.
1377message EphemeralVolumeSource {
1378 // Will be used to create a stand-alone PVC to provision the volume.
1379 // The pod in which this EphemeralVolumeSource is embedded will be the
1380 // owner of the PVC, i.e. the PVC will be deleted together with the
1381 // pod. The name of the PVC will be `<pod name>-<volume name>` where
1382 // `<volume name>` is the name from the `PodSpec.Volumes` array
1383 // entry. Pod validation will reject the pod if the concatenated name
1384 // is not valid for a PVC (for example, too long).
1385 //
1386 // An existing PVC with that name that is not owned by the pod
1387 // will *not* be used for the pod to avoid using an unrelated
1388 // volume by mistake. Starting the pod is then blocked until
1389 // the unrelated PVC is removed. If such a pre-created PVC is
1390 // meant to be used by the pod, the PVC has to updated with an
1391 // owner reference to the pod once the pod exists. Normally
1392 // this should not be necessary, but it may be useful when
1393 // manually reconstructing a broken cluster.
1394 //
1395 // This field is read-only and no changes will be made by Kubernetes
1396 // to the PVC after it has been created.
1397 //
1398 // Required, must not be nil.
1399 optional PersistentVolumeClaimTemplate volumeClaimTemplate = 1;
1400
1401 // Specifies a read-only configuration for the volume.
1402 // Defaults to false (read/write).
1403 // +optional
1404 optional bool readOnly = 2;
1405}
1406
1407// Event is a report of an event somewhere in the cluster.
1408message Event {
1409 // Standard object's metadata.
1410 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
1411 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
1412
1413 // The object that this event is about.
1414 optional ObjectReference involvedObject = 2;
1415
1416 // This should be a short, machine understandable string that gives the reason
1417 // for the transition into the object's current status.
1418 // TODO: provide exact specification for format.
1419 // +optional
1420 optional string reason = 3;
1421
1422 // A human-readable description of the status of this operation.
1423 // TODO: decide on maximum length.
1424 // +optional
1425 optional string message = 4;
1426
1427 // The component reporting this event. Should be a short machine understandable string.
1428 // +optional
1429 optional EventSource source = 5;
1430
1431 // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
1432 // +optional
1433 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time firstTimestamp = 6;
1434
1435 // The time at which the most recent occurrence of this event was recorded.
1436 // +optional
1437 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTimestamp = 7;
1438
1439 // The number of times this event has occurred.
1440 // +optional
1441 optional int32 count = 8;
1442
1443 // Type of this event (Normal, Warning), new types could be added in the future
1444 // +optional
1445 optional string type = 9;
1446
1447 // Time when this Event was first observed.
1448 // +optional
1449 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime eventTime = 10;
1450
1451 // Data about the Event series this event represents or nil if it's a singleton Event.
1452 // +optional
1453 optional EventSeries series = 11;
1454
1455 // What action was taken/failed regarding to the Regarding object.
1456 // +optional
1457 optional string action = 12;
1458
1459 // Optional secondary object for more complex actions.
1460 // +optional
1461 optional ObjectReference related = 13;
1462
1463 // Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.
1464 // +optional
1465 optional string reportingComponent = 14;
1466
1467 // ID of the controller instance, e.g. `kubelet-xyzf`.
1468 // +optional
1469 optional string reportingInstance = 15;
1470}
1471
1472// EventList is a list of events.
1473message EventList {
1474 // Standard list metadata.
1475 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
1476 // +optional
1477 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
1478
1479 // List of events
1480 repeated Event items = 2;
1481}
1482
1483// EventSeries contain information on series of events, i.e. thing that was/is happening
1484// continuously for some time.
1485message EventSeries {
1486 // Number of occurrences in this series up to the last heartbeat time
1487 optional int32 count = 1;
1488
1489 // Time of the last occurrence observed
1490 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastObservedTime = 2;
1491}
1492
1493// EventSource contains information for an event.
1494message EventSource {
1495 // Component from which the event is generated.
1496 // +optional
1497 optional string component = 1;
1498
1499 // Node name on which the event is generated.
1500 // +optional
1501 optional string host = 2;
1502}
1503
1504// ExecAction describes a "run in container" action.
1505message ExecAction {
1506 // Command is the command line to execute inside the container, the working directory for the
1507 // command is root ('/') in the container's filesystem. The command is simply exec'd, it is
1508 // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
1509 // a shell, you need to explicitly call out to that shell.
1510 // Exit status of 0 is treated as live/healthy and non-zero is unhealthy.
1511 // +optional
1512 repeated string command = 1;
1513}
1514
1515// Represents a Fibre Channel volume.
1516// Fibre Channel volumes can only be mounted as read/write once.
1517// Fibre Channel volumes support ownership management and SELinux relabeling.
1518message FCVolumeSource {
1519 // Optional: FC target worldwide names (WWNs)
1520 // +optional
1521 repeated string targetWWNs = 1;
1522
1523 // Optional: FC target lun number
1524 // +optional
1525 optional int32 lun = 2;
1526
1527 // Filesystem type to mount.
1528 // Must be a filesystem type supported by the host operating system.
1529 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
1530 // TODO: how do we prevent errors in the filesystem from compromising the machine
1531 // +optional
1532 optional string fsType = 3;
1533
1534 // Optional: Defaults to false (read/write). ReadOnly here will force
1535 // the ReadOnly setting in VolumeMounts.
1536 // +optional
1537 optional bool readOnly = 4;
1538
1539 // Optional: FC volume world wide identifiers (wwids)
1540 // Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
1541 // +optional
1542 repeated string wwids = 5;
1543}
1544
1545// FlexPersistentVolumeSource represents a generic persistent volume resource that is
1546// provisioned/attached using an exec based plugin.
1547message FlexPersistentVolumeSource {
1548 // Driver is the name of the driver to use for this volume.
1549 optional string driver = 1;
1550
1551 // Filesystem type to mount.
1552 // Must be a filesystem type supported by the host operating system.
1553 // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
1554 // +optional
1555 optional string fsType = 2;
1556
1557 // Optional: SecretRef is reference to the secret object containing
1558 // sensitive information to pass to the plugin scripts. This may be
1559 // empty if no secret object is specified. If the secret object
1560 // contains more than one secret, all secrets are passed to the plugin
1561 // scripts.
1562 // +optional
1563 optional SecretReference secretRef = 3;
1564
1565 // Optional: Defaults to false (read/write). ReadOnly here will force
1566 // the ReadOnly setting in VolumeMounts.
1567 // +optional
1568 optional bool readOnly = 4;
1569
1570 // Optional: Extra command options if any.
1571 // +optional
1572 map<string, string> options = 5;
1573}
1574
1575// FlexVolume represents a generic volume resource that is
1576// provisioned/attached using an exec based plugin.
1577message FlexVolumeSource {
1578 // Driver is the name of the driver to use for this volume.
1579 optional string driver = 1;
1580
1581 // Filesystem type to mount.
1582 // Must be a filesystem type supported by the host operating system.
1583 // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
1584 // +optional
1585 optional string fsType = 2;
1586
1587 // Optional: SecretRef is reference to the secret object containing
1588 // sensitive information to pass to the plugin scripts. This may be
1589 // empty if no secret object is specified. If the secret object
1590 // contains more than one secret, all secrets are passed to the plugin
1591 // scripts.
1592 // +optional
1593 optional LocalObjectReference secretRef = 3;
1594
1595 // Optional: Defaults to false (read/write). ReadOnly here will force
1596 // the ReadOnly setting in VolumeMounts.
1597 // +optional
1598 optional bool readOnly = 4;
1599
1600 // Optional: Extra command options if any.
1601 // +optional
1602 map<string, string> options = 5;
1603}
1604
1605// Represents a Flocker volume mounted by the Flocker agent.
1606// One and only one of datasetName and datasetUUID should be set.
1607// Flocker volumes do not support ownership management or SELinux relabeling.
1608message FlockerVolumeSource {
1609 // Name of the dataset stored as metadata -> name on the dataset for Flocker
1610 // should be considered as deprecated
1611 // +optional
1612 optional string datasetName = 1;
1613
1614 // UUID of the dataset. This is unique identifier of a Flocker dataset
1615 // +optional
1616 optional string datasetUUID = 2;
1617}
1618
1619// Represents a Persistent Disk resource in Google Compute Engine.
1620//
1621// A GCE PD must exist before mounting to a container. The disk must
1622// also be in the same GCE project and zone as the kubelet. A GCE PD
1623// can only be mounted as read/write once or read-only many times. GCE
1624// PDs support ownership management and SELinux relabeling.
1625message GCEPersistentDiskVolumeSource {
1626 // Unique name of the PD resource in GCE. Used to identify the disk in GCE.
1627 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
1628 optional string pdName = 1;
1629
1630 // Filesystem type of the volume that you want to mount.
1631 // Tip: Ensure that the filesystem type is supported by the host operating system.
1632 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
1633 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
1634 // TODO: how do we prevent errors in the filesystem from compromising the machine
1635 // +optional
1636 optional string fsType = 2;
1637
1638 // The partition in the volume that you want to mount.
1639 // If omitted, the default is to mount by volume name.
1640 // Examples: For volume /dev/sda1, you specify the partition as "1".
1641 // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
1642 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
1643 // +optional
1644 optional int32 partition = 3;
1645
1646 // ReadOnly here will force the ReadOnly setting in VolumeMounts.
1647 // Defaults to false.
1648 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
1649 // +optional
1650 optional bool readOnly = 4;
1651}
1652
1653// Represents a volume that is populated with the contents of a git repository.
1654// Git repo volumes do not support ownership management.
1655// Git repo volumes support SELinux relabeling.
1656//
1657// DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
1658// EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
1659// into the Pod's container.
1660message GitRepoVolumeSource {
1661 // Repository URL
1662 optional string repository = 1;
1663
1664 // Commit hash for the specified revision.
1665 // +optional
1666 optional string revision = 2;
1667
1668 // Target directory name.
1669 // Must not contain or start with '..'. If '.' is supplied, the volume directory will be the
1670 // git repository. Otherwise, if specified, the volume will contain the git repository in
1671 // the subdirectory with the given name.
1672 // +optional
1673 optional string directory = 3;
1674}
1675
1676// Represents a Glusterfs mount that lasts the lifetime of a pod.
1677// Glusterfs volumes do not support ownership management or SELinux relabeling.
1678message GlusterfsPersistentVolumeSource {
1679 // EndpointsName is the endpoint name that details Glusterfs topology.
1680 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1681 optional string endpoints = 1;
1682
1683 // Path is the Glusterfs volume path.
1684 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1685 optional string path = 2;
1686
1687 // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions.
1688 // Defaults to false.
1689 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1690 // +optional
1691 optional bool readOnly = 3;
1692
1693 // EndpointsNamespace is the namespace that contains Glusterfs endpoint.
1694 // If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC.
1695 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1696 // +optional
1697 optional string endpointsNamespace = 4;
1698}
1699
1700// Represents a Glusterfs mount that lasts the lifetime of a pod.
1701// Glusterfs volumes do not support ownership management or SELinux relabeling.
1702message GlusterfsVolumeSource {
1703 // EndpointsName is the endpoint name that details Glusterfs topology.
1704 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1705 optional string endpoints = 1;
1706
1707 // Path is the Glusterfs volume path.
1708 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1709 optional string path = 2;
1710
1711 // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions.
1712 // Defaults to false.
1713 // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
1714 // +optional
1715 optional bool readOnly = 3;
1716}
1717
1718// HTTPGetAction describes an action based on HTTP Get requests.
1719message HTTPGetAction {
1720 // Path to access on the HTTP server.
1721 // +optional
1722 optional string path = 1;
1723
1724 // Name or number of the port to access on the container.
1725 // Number must be in the range 1 to 65535.
1726 // Name must be an IANA_SVC_NAME.
1727 optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 2;
1728
1729 // Host name to connect to, defaults to the pod IP. You probably want to set
1730 // "Host" in httpHeaders instead.
1731 // +optional
1732 optional string host = 3;
1733
1734 // Scheme to use for connecting to the host.
1735 // Defaults to HTTP.
1736 // +optional
1737 optional string scheme = 4;
1738
1739 // Custom headers to set in the request. HTTP allows repeated headers.
1740 // +optional
1741 repeated HTTPHeader httpHeaders = 5;
1742}
1743
1744// HTTPHeader describes a custom header to be used in HTTP probes
1745message HTTPHeader {
1746 // The header field name
1747 optional string name = 1;
1748
1749 // The header field value
1750 optional string value = 2;
1751}
1752
1753// Handler defines a specific action that should be taken
1754// TODO: pass structured data to these actions, and document that data here.
1755message Handler {
1756 // One and only one of the following should be specified.
1757 // Exec specifies the action to take.
1758 // +optional
1759 optional ExecAction exec = 1;
1760
1761 // HTTPGet specifies the http request to perform.
1762 // +optional
1763 optional HTTPGetAction httpGet = 2;
1764
1765 // TCPSocket specifies an action involving a TCP port.
1766 // TCP hooks not yet supported
1767 // TODO: implement a realistic TCP lifecycle hook
1768 // +optional
1769 optional TCPSocketAction tcpSocket = 3;
1770}
1771
1772// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the
1773// pod's hosts file.
1774message HostAlias {
1775 // IP address of the host file entry.
1776 optional string ip = 1;
1777
1778 // Hostnames for the above IP address.
1779 repeated string hostnames = 2;
1780}
1781
1782// Represents a host path mapped into a pod.
1783// Host path volumes do not support ownership management or SELinux relabeling.
1784message HostPathVolumeSource {
1785 // Path of the directory on the host.
1786 // If the path is a symlink, it will follow the link to the real path.
1787 // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
1788 optional string path = 1;
1789
1790 // Type for HostPath Volume
1791 // Defaults to ""
1792 // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
1793 // +optional
1794 optional string type = 2;
1795}
1796
1797// ISCSIPersistentVolumeSource represents an ISCSI disk.
1798// ISCSI volumes can only be mounted as read/write once.
1799// ISCSI volumes support ownership management and SELinux relabeling.
1800message ISCSIPersistentVolumeSource {
1801 // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
1802 // is other than default (typically TCP ports 860 and 3260).
1803 optional string targetPortal = 1;
1804
1805 // Target iSCSI Qualified Name.
1806 optional string iqn = 2;
1807
1808 // iSCSI Target Lun number.
1809 optional int32 lun = 3;
1810
1811 // iSCSI Interface Name that uses an iSCSI transport.
1812 // Defaults to 'default' (tcp).
1813 // +optional
1814 optional string iscsiInterface = 4;
1815
1816 // Filesystem type of the volume that you want to mount.
1817 // Tip: Ensure that the filesystem type is supported by the host operating system.
1818 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
1819 // More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
1820 // TODO: how do we prevent errors in the filesystem from compromising the machine
1821 // +optional
1822 optional string fsType = 5;
1823
1824 // ReadOnly here will force the ReadOnly setting in VolumeMounts.
1825 // Defaults to false.
1826 // +optional
1827 optional bool readOnly = 6;
1828
1829 // iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port
1830 // is other than default (typically TCP ports 860 and 3260).
1831 // +optional
1832 repeated string portals = 7;
1833
1834 // whether support iSCSI Discovery CHAP authentication
1835 // +optional
1836 optional bool chapAuthDiscovery = 8;
1837
1838 // whether support iSCSI Session CHAP authentication
1839 // +optional
1840 optional bool chapAuthSession = 11;
1841
1842 // CHAP Secret for iSCSI target and initiator authentication
1843 // +optional
1844 optional SecretReference secretRef = 10;
1845
1846 // Custom iSCSI Initiator Name.
1847 // If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
1848 // <target portal>:<volume name> will be created for the connection.
1849 // +optional
1850 optional string initiatorName = 12;
1851}
1852
1853// Represents an ISCSI disk.
1854// ISCSI volumes can only be mounted as read/write once.
1855// ISCSI volumes support ownership management and SELinux relabeling.
1856message ISCSIVolumeSource {
1857 // iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
1858 // is other than default (typically TCP ports 860 and 3260).
1859 optional string targetPortal = 1;
1860
1861 // Target iSCSI Qualified Name.
1862 optional string iqn = 2;
1863
1864 // iSCSI Target Lun number.
1865 optional int32 lun = 3;
1866
1867 // iSCSI Interface Name that uses an iSCSI transport.
1868 // Defaults to 'default' (tcp).
1869 // +optional
1870 optional string iscsiInterface = 4;
1871
1872 // Filesystem type of the volume that you want to mount.
1873 // Tip: Ensure that the filesystem type is supported by the host operating system.
1874 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
1875 // More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
1876 // TODO: how do we prevent errors in the filesystem from compromising the machine
1877 // +optional
1878 optional string fsType = 5;
1879
1880 // ReadOnly here will force the ReadOnly setting in VolumeMounts.
1881 // Defaults to false.
1882 // +optional
1883 optional bool readOnly = 6;
1884
1885 // iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port
1886 // is other than default (typically TCP ports 860 and 3260).
1887 // +optional
1888 repeated string portals = 7;
1889
1890 // whether support iSCSI Discovery CHAP authentication
1891 // +optional
1892 optional bool chapAuthDiscovery = 8;
1893
1894 // whether support iSCSI Session CHAP authentication
1895 // +optional
1896 optional bool chapAuthSession = 11;
1897
1898 // CHAP Secret for iSCSI target and initiator authentication
1899 // +optional
1900 optional LocalObjectReference secretRef = 10;
1901
1902 // Custom iSCSI Initiator Name.
1903 // If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
1904 // <target portal>:<volume name> will be created for the connection.
1905 // +optional
1906 optional string initiatorName = 12;
1907}
1908
1909// Maps a string key to a path within a volume.
1910message KeyToPath {
1911 // The key to project.
1912 optional string key = 1;
1913
1914 // The relative path of the file to map the key to.
1915 // May not be an absolute path.
1916 // May not contain the path element '..'.
1917 // May not start with the string '..'.
1918 optional string path = 2;
1919
1920 // Optional: mode bits used to set permissions on this file.
1921 // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
1922 // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
1923 // If not specified, the volume defaultMode will be used.
1924 // This might be in conflict with other options that affect the file
1925 // mode, like fsGroup, and the result can be other mode bits set.
1926 // +optional
1927 optional int32 mode = 3;
1928}
1929
1930// Lifecycle describes actions that the management system should take in response to container lifecycle
1931// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks
1932// until the action is complete, unless the container process fails, in which case the handler is aborted.
1933message Lifecycle {
1934 // PostStart is called immediately after a container is created. If the handler fails,
1935 // the container is terminated and restarted according to its restart policy.
1936 // Other management of the container blocks until the hook completes.
1937 // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
1938 // +optional
1939 optional Handler postStart = 1;
1940
1941 // PreStop is called immediately before a container is terminated due to an
1942 // API request or management event such as liveness/startup probe failure,
1943 // preemption, resource contention, etc. The handler is not called if the
1944 // container crashes or exits. The reason for termination is passed to the
1945 // handler. The Pod's termination grace period countdown begins before the
1946 // PreStop hooked is executed. Regardless of the outcome of the handler, the
1947 // container will eventually terminate within the Pod's termination grace
1948 // period. Other management of the container blocks until the hook completes
1949 // or until the termination grace period is reached.
1950 // More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
1951 // +optional
1952 optional Handler preStop = 2;
1953}
1954
1955// LimitRange sets resource usage limits for each kind of resource in a Namespace.
1956message LimitRange {
1957 // Standard object's metadata.
1958 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
1959 // +optional
1960 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
1961
1962 // Spec defines the limits enforced.
1963 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
1964 // +optional
1965 optional LimitRangeSpec spec = 2;
1966}
1967
1968// LimitRangeItem defines a min/max usage limit for any resource that matches on kind.
1969message LimitRangeItem {
1970 // Type of resource that this limit applies to.
1971 optional string type = 1;
1972
1973 // Max usage constraints on this kind by resource name.
1974 // +optional
1975 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> max = 2;
1976
1977 // Min usage constraints on this kind by resource name.
1978 // +optional
1979 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> min = 3;
1980
1981 // Default resource requirement limit value by resource name if resource limit is omitted.
1982 // +optional
1983 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> default = 4;
1984
1985 // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.
1986 // +optional
1987 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> defaultRequest = 5;
1988
1989 // 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.
1990 // +optional
1991 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> maxLimitRequestRatio = 6;
1992}
1993
1994// LimitRangeList is a list of LimitRange items.
1995message LimitRangeList {
1996 // Standard list metadata.
1997 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
1998 // +optional
1999 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2000
2001 // Items is a list of LimitRange objects.
2002 // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
2003 repeated LimitRange items = 2;
2004}
2005
2006// LimitRangeSpec defines a min/max usage limit for resources that match on kind.
2007message LimitRangeSpec {
2008 // Limits is the list of LimitRangeItem objects that are enforced.
2009 repeated LimitRangeItem limits = 1;
2010}
2011
2012// List holds a list of objects, which may not be known by the server.
2013message List {
2014 // Standard list metadata.
2015 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2016 // +optional
2017 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2018
2019 // List of objects
2020 repeated k8s.io.apimachinery.pkg.runtime.RawExtension items = 2;
2021}
2022
2023// LoadBalancerIngress represents the status of a load-balancer ingress point:
2024// traffic intended for the service should be sent to an ingress point.
2025message LoadBalancerIngress {
2026 // IP is set for load-balancer ingress points that are IP based
2027 // (typically GCE or OpenStack load-balancers)
2028 // +optional
2029 optional string ip = 1;
2030
2031 // Hostname is set for load-balancer ingress points that are DNS based
2032 // (typically AWS load-balancers)
2033 // +optional
2034 optional string hostname = 2;
2035}
2036
2037// LoadBalancerStatus represents the status of a load-balancer.
2038message LoadBalancerStatus {
2039 // Ingress is a list containing ingress points for the load-balancer.
2040 // Traffic intended for the service should be sent to these ingress points.
2041 // +optional
2042 repeated LoadBalancerIngress ingress = 1;
2043}
2044
2045// LocalObjectReference contains enough information to let you locate the
2046// referenced object inside the same namespace.
2047message LocalObjectReference {
2048 // Name of the referent.
2049 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
2050 // TODO: Add other useful fields. apiVersion, kind, uid?
2051 // +optional
2052 optional string name = 1;
2053}
2054
2055// Local represents directly-attached storage with node affinity (Beta feature)
2056message LocalVolumeSource {
2057 // The full path to the volume on the node.
2058 // It can be either a directory or block device (disk, partition, ...).
2059 optional string path = 1;
2060
2061 // Filesystem type to mount.
2062 // It applies only when the Path is a block device.
2063 // Must be a filesystem type supported by the host operating system.
2064 // Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified.
2065 // +optional
2066 optional string fsType = 2;
2067}
2068
2069// Represents an NFS mount that lasts the lifetime of a pod.
2070// NFS volumes do not support ownership management or SELinux relabeling.
2071message NFSVolumeSource {
2072 // Server is the hostname or IP address of the NFS server.
2073 // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
2074 optional string server = 1;
2075
2076 // Path that is exported by the NFS server.
2077 // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
2078 optional string path = 2;
2079
2080 // ReadOnly here will force
2081 // the NFS export to be mounted with read-only permissions.
2082 // Defaults to false.
2083 // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
2084 // +optional
2085 optional bool readOnly = 3;
2086}
2087
2088// Namespace provides a scope for Names.
2089// Use of multiple namespaces is optional.
2090message Namespace {
2091 // Standard object's metadata.
2092 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
2093 // +optional
2094 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2095
2096 // Spec defines the behavior of the Namespace.
2097 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2098 // +optional
2099 optional NamespaceSpec spec = 2;
2100
2101 // Status describes the current status of a Namespace.
2102 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2103 // +optional
2104 optional NamespaceStatus status = 3;
2105}
2106
2107// NamespaceCondition contains details about state of namespace.
2108message NamespaceCondition {
2109 // Type of namespace controller condition.
2110 optional string type = 1;
2111
2112 // Status of the condition, one of True, False, Unknown.
2113 optional string status = 2;
2114
2115 // +optional
2116 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4;
2117
2118 // +optional
2119 optional string reason = 5;
2120
2121 // +optional
2122 optional string message = 6;
2123}
2124
2125// NamespaceList is a list of Namespaces.
2126message NamespaceList {
2127 // Standard list metadata.
2128 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2129 // +optional
2130 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2131
2132 // Items is the list of Namespace objects in the list.
2133 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
2134 repeated Namespace items = 2;
2135}
2136
2137// NamespaceSpec describes the attributes on a Namespace.
2138message NamespaceSpec {
2139 // Finalizers is an opaque list of values that must be empty to permanently remove object from storage.
2140 // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
2141 // +optional
2142 repeated string finalizers = 1;
2143}
2144
2145// NamespaceStatus is information about the current status of a Namespace.
2146message NamespaceStatus {
2147 // Phase is the current lifecycle phase of the namespace.
2148 // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
2149 // +optional
2150 optional string phase = 1;
2151
2152 // Represents the latest available observations of a namespace's current state.
2153 // +optional
2154 // +patchMergeKey=type
2155 // +patchStrategy=merge
2156 repeated NamespaceCondition conditions = 2;
2157}
2158
2159// Node is a worker node in Kubernetes.
2160// Each node will have a unique identifier in the cache (i.e. in etcd).
2161message Node {
2162 // Standard object's metadata.
2163 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
2164 // +optional
2165 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2166
2167 // Spec defines the behavior of a node.
2168 // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2169 // +optional
2170 optional NodeSpec spec = 2;
2171
2172 // Most recently observed status of the node.
2173 // Populated by the system.
2174 // Read-only.
2175 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2176 // +optional
2177 optional NodeStatus status = 3;
2178}
2179
2180// NodeAddress contains information for the node's address.
2181message NodeAddress {
2182 // Node address type, one of Hostname, ExternalIP or InternalIP.
2183 optional string type = 1;
2184
2185 // The node address.
2186 optional string address = 2;
2187}
2188
2189// Node affinity is a group of node affinity scheduling rules.
2190message NodeAffinity {
2191 // If the affinity requirements specified by this field are not met at
2192 // scheduling time, the pod will not be scheduled onto the node.
2193 // If the affinity requirements specified by this field cease to be met
2194 // at some point during pod execution (e.g. due to an update), the system
2195 // may or may not try to eventually evict the pod from its node.
2196 // +optional
2197 optional NodeSelector requiredDuringSchedulingIgnoredDuringExecution = 1;
2198
2199 // The scheduler will prefer to schedule pods to nodes that satisfy
2200 // the affinity expressions specified by this field, but it may choose
2201 // a node that violates one or more of the expressions. The node that is
2202 // most preferred is the one with the greatest sum of weights, i.e.
2203 // for each node that meets all of the scheduling requirements (resource
2204 // request, requiredDuringScheduling affinity expressions, etc.),
2205 // compute a sum by iterating through the elements of this field and adding
2206 // "weight" to the sum if the node matches the corresponding matchExpressions; the
2207 // node(s) with the highest sum are the most preferred.
2208 // +optional
2209 repeated PreferredSchedulingTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
2210}
2211
2212// NodeCondition contains condition information for a node.
2213message NodeCondition {
2214 // Type of node condition.
2215 optional string type = 1;
2216
2217 // Status of the condition, one of True, False, Unknown.
2218 optional string status = 2;
2219
2220 // Last time we got an update on a given condition.
2221 // +optional
2222 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastHeartbeatTime = 3;
2223
2224 // Last time the condition transit from one status to another.
2225 // +optional
2226 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4;
2227
2228 // (brief) reason for the condition's last transition.
2229 // +optional
2230 optional string reason = 5;
2231
2232 // Human readable message indicating details about last transition.
2233 // +optional
2234 optional string message = 6;
2235}
2236
2237// NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.
2238message NodeConfigSource {
2239 // ConfigMap is a reference to a Node's ConfigMap
2240 optional ConfigMapNodeConfigSource configMap = 2;
2241}
2242
2243// NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.
2244message NodeConfigStatus {
2245 // Assigned reports the checkpointed config the node will try to use.
2246 // When Node.Spec.ConfigSource is updated, the node checkpoints the associated
2247 // config payload to local disk, along with a record indicating intended
2248 // config. The node refers to this record to choose its config checkpoint, and
2249 // reports this record in Assigned. Assigned only updates in the status after
2250 // the record has been checkpointed to disk. When the Kubelet is restarted,
2251 // it tries to make the Assigned config the Active config by loading and
2252 // validating the checkpointed payload identified by Assigned.
2253 // +optional
2254 optional NodeConfigSource assigned = 1;
2255
2256 // Active reports the checkpointed config the node is actively using.
2257 // Active will represent either the current version of the Assigned config,
2258 // or the current LastKnownGood config, depending on whether attempting to use the
2259 // Assigned config results in an error.
2260 // +optional
2261 optional NodeConfigSource active = 2;
2262
2263 // LastKnownGood reports the checkpointed config the node will fall back to
2264 // when it encounters an error attempting to use the Assigned config.
2265 // The Assigned config becomes the LastKnownGood config when the node determines
2266 // that the Assigned config is stable and correct.
2267 // This is currently implemented as a 10-minute soak period starting when the local
2268 // record of Assigned config is updated. If the Assigned config is Active at the end
2269 // of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is
2270 // reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil,
2271 // because the local default config is always assumed good.
2272 // You should not make assumptions about the node's method of determining config stability
2273 // and correctness, as this may change or become configurable in the future.
2274 // +optional
2275 optional NodeConfigSource lastKnownGood = 3;
2276
2277 // Error describes any problems reconciling the Spec.ConfigSource to the Active config.
2278 // Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned
2279 // record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting
2280 // to load or validate the Assigned config, etc.
2281 // Errors may occur at different points while syncing config. Earlier errors (e.g. download or
2282 // checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across
2283 // Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in
2284 // a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error
2285 // by fixing the config assigned in Spec.ConfigSource.
2286 // You can find additional information for debugging by searching the error message in the Kubelet log.
2287 // Error is a human-readable description of the error state; machines can check whether or not Error
2288 // is empty, but should not rely on the stability of the Error text across Kubelet versions.
2289 // +optional
2290 optional string error = 4;
2291}
2292
2293// NodeDaemonEndpoints lists ports opened by daemons running on the Node.
2294message NodeDaemonEndpoints {
2295 // Endpoint on which Kubelet is listening.
2296 // +optional
2297 optional DaemonEndpoint kubeletEndpoint = 1;
2298}
2299
2300// NodeList is the whole list of all Nodes which have been registered with master.
2301message NodeList {
2302 // Standard list metadata.
2303 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2304 // +optional
2305 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2306
2307 // List of nodes
2308 repeated Node items = 2;
2309}
2310
2311// NodeProxyOptions is the query options to a Node's proxy call.
2312message NodeProxyOptions {
2313 // Path is the URL path to use for the current proxy request to node.
2314 // +optional
2315 optional string path = 1;
2316}
2317
2318// NodeResources is an object for conveying resource information about a node.
2319// see https://kubernetes.io/docs/concepts/architecture/nodes/#capacity for more details.
2320message NodeResources {
2321 // Capacity represents the available resources of a node
2322 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> capacity = 1;
2323}
2324
2325// A node selector represents the union of the results of one or more label queries
2326// over a set of nodes; that is, it represents the OR of the selectors represented
2327// by the node selector terms.
2328message NodeSelector {
2329 // Required. A list of node selector terms. The terms are ORed.
2330 repeated NodeSelectorTerm nodeSelectorTerms = 1;
2331}
2332
2333// A node selector requirement is a selector that contains values, a key, and an operator
2334// that relates the key and values.
2335message NodeSelectorRequirement {
2336 // The label key that the selector applies to.
2337 optional string key = 1;
2338
2339 // Represents a key's relationship to a set of values.
2340 // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
2341 optional string operator = 2;
2342
2343 // An array of string values. If the operator is In or NotIn,
2344 // the values array must be non-empty. If the operator is Exists or DoesNotExist,
2345 // the values array must be empty. If the operator is Gt or Lt, the values
2346 // array must have a single element, which will be interpreted as an integer.
2347 // This array is replaced during a strategic merge patch.
2348 // +optional
2349 repeated string values = 3;
2350}
2351
2352// A null or empty node selector term matches no objects. The requirements of
2353// them are ANDed.
2354// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
2355message NodeSelectorTerm {
2356 // A list of node selector requirements by node's labels.
2357 // +optional
2358 repeated NodeSelectorRequirement matchExpressions = 1;
2359
2360 // A list of node selector requirements by node's fields.
2361 // +optional
2362 repeated NodeSelectorRequirement matchFields = 2;
2363}
2364
2365// NodeSpec describes the attributes that a node is created with.
2366message NodeSpec {
2367 // PodCIDR represents the pod IP range assigned to the node.
2368 // +optional
2369 optional string podCIDR = 1;
2370
2371 // podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this
2372 // field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for
2373 // each of IPv4 and IPv6.
2374 // +optional
2375 // +patchStrategy=merge
2376 repeated string podCIDRs = 7;
2377
2378 // ID of the node assigned by the cloud provider in the format: <ProviderName>://<ProviderSpecificNodeID>
2379 // +optional
2380 optional string providerID = 3;
2381
2382 // Unschedulable controls node schedulability of new pods. By default, node is schedulable.
2383 // More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration
2384 // +optional
2385 optional bool unschedulable = 4;
2386
2387 // If specified, the node's taints.
2388 // +optional
2389 repeated Taint taints = 5;
2390
2391 // If specified, the source to get node configuration from
2392 // The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field
2393 // +optional
2394 optional NodeConfigSource configSource = 6;
2395
2396 // Deprecated. Not all kubelets will set this field. Remove field after 1.13.
2397 // see: https://issues.k8s.io/61966
2398 // +optional
2399 optional string externalID = 2;
2400}
2401
2402// NodeStatus is information about the current status of a node.
2403message NodeStatus {
2404 // Capacity represents the total resources of a node.
2405 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
2406 // +optional
2407 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> capacity = 1;
2408
2409 // Allocatable represents the resources of a node that are available for scheduling.
2410 // Defaults to Capacity.
2411 // +optional
2412 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> allocatable = 2;
2413
2414 // NodePhase is the recently observed lifecycle phase of the node.
2415 // More info: https://kubernetes.io/docs/concepts/nodes/node/#phase
2416 // The field is never populated, and now is deprecated.
2417 // +optional
2418 optional string phase = 3;
2419
2420 // Conditions is an array of current observed node conditions.
2421 // More info: https://kubernetes.io/docs/concepts/nodes/node/#condition
2422 // +optional
2423 // +patchMergeKey=type
2424 // +patchStrategy=merge
2425 repeated NodeCondition conditions = 4;
2426
2427 // List of addresses reachable to the node.
2428 // Queried from cloud provider, if available.
2429 // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses
2430 // Note: This field is declared as mergeable, but the merge key is not sufficiently
2431 // unique, which can cause data corruption when it is merged. Callers should instead
2432 // use a full-replacement patch. See http://pr.k8s.io/79391 for an example.
2433 // +optional
2434 // +patchMergeKey=type
2435 // +patchStrategy=merge
2436 repeated NodeAddress addresses = 5;
2437
2438 // Endpoints of daemons running on the Node.
2439 // +optional
2440 optional NodeDaemonEndpoints daemonEndpoints = 6;
2441
2442 // Set of ids/uuids to uniquely identify the node.
2443 // More info: https://kubernetes.io/docs/concepts/nodes/node/#info
2444 // +optional
2445 optional NodeSystemInfo nodeInfo = 7;
2446
2447 // List of container images on this node
2448 // +optional
2449 repeated ContainerImage images = 8;
2450
2451 // List of attachable volumes in use (mounted) by the node.
2452 // +optional
2453 repeated string volumesInUse = 9;
2454
2455 // List of volumes that are attached to the node.
2456 // +optional
2457 repeated AttachedVolume volumesAttached = 10;
2458
2459 // Status of the config assigned to the node via the dynamic Kubelet config feature.
2460 // +optional
2461 optional NodeConfigStatus config = 11;
2462}
2463
2464// NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
2465message NodeSystemInfo {
2466 // MachineID reported by the node. For unique machine identification
2467 // in the cluster this field is preferred. Learn more from man(5)
2468 // machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
2469 optional string machineID = 1;
2470
2471 // SystemUUID reported by the node. For unique machine identification
2472 // MachineID is preferred. This field is specific to Red Hat hosts
2473 // https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid
2474 optional string systemUUID = 2;
2475
2476 // Boot ID reported by the node.
2477 optional string bootID = 3;
2478
2479 // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).
2480 optional string kernelVersion = 4;
2481
2482 // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).
2483 optional string osImage = 5;
2484
2485 // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).
2486 optional string containerRuntimeVersion = 6;
2487
2488 // Kubelet Version reported by the node.
2489 optional string kubeletVersion = 7;
2490
2491 // KubeProxy Version reported by the node.
2492 optional string kubeProxyVersion = 8;
2493
2494 // The Operating System reported by the node
2495 optional string operatingSystem = 9;
2496
2497 // The Architecture reported by the node
2498 optional string architecture = 10;
2499}
2500
2501// ObjectFieldSelector selects an APIVersioned field of an object.
2502message ObjectFieldSelector {
2503 // Version of the schema the FieldPath is written in terms of, defaults to "v1".
2504 // +optional
2505 optional string apiVersion = 1;
2506
2507 // Path of the field to select in the specified API version.
2508 optional string fieldPath = 2;
2509}
2510
2511// ObjectReference contains enough information to let you inspect or modify the referred object.
2512// ---
2513// New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs.
2514// 1. Ignored fields. It includes many fields which are not generally honored. For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage.
2515// 2. Invalid usage help. It is impossible to add specific help for individual usage. In most embedded usages, there are particular
2516// restrictions like, "must refer only to types A and B" or "UID not honored" or "name must be restricted".
2517// Those cannot be well described when embedded.
2518// 3. Inconsistent validation. Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen.
2519// 4. The fields are both imprecise and overly precise. Kind is not a precise mapping to a URL. This can produce ambiguity
2520// during interpretation and require a REST mapping. In most cases, the dependency is on the group,resource tuple
2521// and the version of the actual struct is irrelevant.
2522// 5. We cannot easily change it. Because this type is embedded in many locations, updates to this type
2523// will affect numerous schemas. Don't make new APIs embed an underspecified API type they do not control.
2524// Instead of using this type, create a locally provided and used type that is well-focused on your reference.
2525// For example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .
2526// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
2527message ObjectReference {
2528 // Kind of the referent.
2529 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2530 // +optional
2531 optional string kind = 1;
2532
2533 // Namespace of the referent.
2534 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
2535 // +optional
2536 optional string namespace = 2;
2537
2538 // Name of the referent.
2539 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
2540 // +optional
2541 optional string name = 3;
2542
2543 // UID of the referent.
2544 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
2545 // +optional
2546 optional string uid = 4;
2547
2548 // API version of the referent.
2549 // +optional
2550 optional string apiVersion = 5;
2551
2552 // Specific resourceVersion to which this reference is made, if any.
2553 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
2554 // +optional
2555 optional string resourceVersion = 6;
2556
2557 // If referring to a piece of an object instead of an entire object, this string
2558 // should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2].
2559 // For example, if the object reference is to a container within a pod, this would take on a value like:
2560 // "spec.containers{name}" (where "name" refers to the name of the container that triggered
2561 // the event) or if no container name is specified "spec.containers[2]" (container with
2562 // index 2 in this pod). This syntax is chosen only to have some well-defined way of
2563 // referencing a part of an object.
2564 // TODO: this design is not final and this field is subject to change in the future.
2565 // +optional
2566 optional string fieldPath = 7;
2567}
2568
2569// PersistentVolume (PV) is a storage resource provisioned by an administrator.
2570// It is analogous to a node.
2571// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
2572message PersistentVolume {
2573 // Standard object's metadata.
2574 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
2575 // +optional
2576 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2577
2578 // Spec defines a specification of a persistent volume owned by the cluster.
2579 // Provisioned by an administrator.
2580 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
2581 // +optional
2582 optional PersistentVolumeSpec spec = 2;
2583
2584 // Status represents the current information/status for the persistent volume.
2585 // Populated by the system.
2586 // Read-only.
2587 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
2588 // +optional
2589 optional PersistentVolumeStatus status = 3;
2590}
2591
2592// PersistentVolumeClaim is a user's request for and claim to a persistent volume
2593message PersistentVolumeClaim {
2594 // Standard object's metadata.
2595 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
2596 // +optional
2597 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2598
2599 // Spec defines the desired characteristics of a volume requested by a pod author.
2600 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
2601 // +optional
2602 optional PersistentVolumeClaimSpec spec = 2;
2603
2604 // Status represents the current information/status of a persistent volume claim.
2605 // Read-only.
2606 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
2607 // +optional
2608 optional PersistentVolumeClaimStatus status = 3;
2609}
2610
2611// PersistentVolumeClaimCondition contails details about state of pvc
2612message PersistentVolumeClaimCondition {
2613 optional string type = 1;
2614
2615 optional string status = 2;
2616
2617 // Last time we probed the condition.
2618 // +optional
2619 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastProbeTime = 3;
2620
2621 // Last time the condition transitioned from one status to another.
2622 // +optional
2623 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4;
2624
2625 // Unique, this should be a short, machine understandable string that gives the reason
2626 // for condition's last transition. If it reports "ResizeStarted" that means the underlying
2627 // persistent volume is being resized.
2628 // +optional
2629 optional string reason = 5;
2630
2631 // Human-readable message indicating details about last transition.
2632 // +optional
2633 optional string message = 6;
2634}
2635
2636// PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
2637message PersistentVolumeClaimList {
2638 // Standard list metadata.
2639 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2640 // +optional
2641 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2642
2643 // A list of persistent volume claims.
2644 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
2645 repeated PersistentVolumeClaim items = 2;
2646}
2647
2648// PersistentVolumeClaimSpec describes the common attributes of storage devices
2649// and allows a Source for provider-specific attributes
2650message PersistentVolumeClaimSpec {
2651 // AccessModes contains the desired access modes the volume should have.
2652 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
2653 // +optional
2654 repeated string accessModes = 1;
2655
2656 // A label query over volumes to consider for binding.
2657 // +optional
2658 optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4;
2659
2660 // Resources represents the minimum resources the volume should have.
2661 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
2662 // +optional
2663 optional ResourceRequirements resources = 2;
2664
2665 // VolumeName is the binding reference to the PersistentVolume backing this claim.
2666 // +optional
2667 optional string volumeName = 3;
2668
2669 // Name of the StorageClass required by the claim.
2670 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
2671 // +optional
2672 optional string storageClassName = 5;
2673
2674 // volumeMode defines what type of volume is required by the claim.
2675 // Value of Filesystem is implied when not included in claim spec.
2676 // +optional
2677 optional string volumeMode = 6;
2678
2679 // This field can be used to specify either:
2680 // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta)
2681 // * An existing PVC (PersistentVolumeClaim)
2682 // * An existing custom resource/object that implements data population (Alpha)
2683 // In order to use VolumeSnapshot object types, the appropriate feature gate
2684 // must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource)
2685 // If the provisioner or an external controller can support the specified data source,
2686 // it will create a new volume based on the contents of the specified data source.
2687 // If the specified data source is not supported, the volume will
2688 // not be created and the failure will be reported as an event.
2689 // In the future, we plan to support more data source types and the behavior
2690 // of the provisioner may change.
2691 // +optional
2692 optional TypedLocalObjectReference dataSource = 7;
2693}
2694
2695// PersistentVolumeClaimStatus is the current status of a persistent volume claim.
2696message PersistentVolumeClaimStatus {
2697 // Phase represents the current phase of PersistentVolumeClaim.
2698 // +optional
2699 optional string phase = 1;
2700
2701 // AccessModes contains the actual access modes the volume backing the PVC has.
2702 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
2703 // +optional
2704 repeated string accessModes = 2;
2705
2706 // Represents the actual resources of the underlying volume.
2707 // +optional
2708 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> capacity = 3;
2709
2710 // Current Condition of persistent volume claim. If underlying persistent volume is being
2711 // resized then the Condition will be set to 'ResizeStarted'.
2712 // +optional
2713 // +patchMergeKey=type
2714 // +patchStrategy=merge
2715 repeated PersistentVolumeClaimCondition conditions = 4;
2716}
2717
2718// PersistentVolumeClaimTemplate is used to produce
2719// PersistentVolumeClaim objects as part of an EphemeralVolumeSource.
2720message PersistentVolumeClaimTemplate {
2721 // May contain labels and annotations that will be copied into the PVC
2722 // when creating it. No other fields are allowed and will be rejected during
2723 // validation.
2724 //
2725 // +optional
2726 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2727
2728 // The specification for the PersistentVolumeClaim. The entire content is
2729 // copied unchanged into the PVC that gets created from this
2730 // template. The same fields as in a PersistentVolumeClaim
2731 // are also valid here.
2732 optional PersistentVolumeClaimSpec spec = 2;
2733}
2734
2735// PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
2736// This volume finds the bound PV and mounts that volume for the pod. A
2737// PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another
2738// type of volume that is owned by someone else (the system).
2739message PersistentVolumeClaimVolumeSource {
2740 // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
2741 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
2742 optional string claimName = 1;
2743
2744 // Will force the ReadOnly setting in VolumeMounts.
2745 // Default false.
2746 // +optional
2747 optional bool readOnly = 2;
2748}
2749
2750// PersistentVolumeList is a list of PersistentVolume items.
2751message PersistentVolumeList {
2752 // Standard list metadata.
2753 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
2754 // +optional
2755 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
2756
2757 // List of persistent volumes.
2758 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
2759 repeated PersistentVolume items = 2;
2760}
2761
2762// PersistentVolumeSource is similar to VolumeSource but meant for the
2763// administrator who creates PVs. Exactly one of its members must be set.
2764message PersistentVolumeSource {
2765 // GCEPersistentDisk represents a GCE Disk resource that is attached to a
2766 // kubelet's host machine and then exposed to the pod. Provisioned by an admin.
2767 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
2768 // +optional
2769 optional GCEPersistentDiskVolumeSource gcePersistentDisk = 1;
2770
2771 // AWSElasticBlockStore represents an AWS Disk resource that is attached to a
2772 // kubelet's host machine and then exposed to the pod.
2773 // More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
2774 // +optional
2775 optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 2;
2776
2777 // HostPath represents a directory on the host.
2778 // Provisioned by a developer or tester.
2779 // This is useful for single-node development and testing only!
2780 // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster.
2781 // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
2782 // +optional
2783 optional HostPathVolumeSource hostPath = 3;
2784
2785 // Glusterfs represents a Glusterfs volume that is attached to a host and
2786 // exposed to the pod. Provisioned by an admin.
2787 // More info: https://examples.k8s.io/volumes/glusterfs/README.md
2788 // +optional
2789 optional GlusterfsPersistentVolumeSource glusterfs = 4;
2790
2791 // NFS represents an NFS mount on the host. Provisioned by an admin.
2792 // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
2793 // +optional
2794 optional NFSVolumeSource nfs = 5;
2795
2796 // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
2797 // More info: https://examples.k8s.io/volumes/rbd/README.md
2798 // +optional
2799 optional RBDPersistentVolumeSource rbd = 6;
2800
2801 // ISCSI represents an ISCSI Disk resource that is attached to a
2802 // kubelet's host machine and then exposed to the pod. Provisioned by an admin.
2803 // +optional
2804 optional ISCSIPersistentVolumeSource iscsi = 7;
2805
2806 // Cinder represents a cinder volume attached and mounted on kubelets host machine.
2807 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
2808 // +optional
2809 optional CinderPersistentVolumeSource cinder = 8;
2810
2811 // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
2812 // +optional
2813 optional CephFSPersistentVolumeSource cephfs = 9;
2814
2815 // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
2816 // +optional
2817 optional FCVolumeSource fc = 10;
2818
2819 // 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
2820 // +optional
2821 optional FlockerVolumeSource flocker = 11;
2822
2823 // FlexVolume represents a generic volume resource that is
2824 // provisioned/attached using an exec based plugin.
2825 // +optional
2826 optional FlexPersistentVolumeSource flexVolume = 12;
2827
2828 // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
2829 // +optional
2830 optional AzureFilePersistentVolumeSource azureFile = 13;
2831
2832 // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
2833 // +optional
2834 optional VsphereVirtualDiskVolumeSource vsphereVolume = 14;
2835
2836 // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
2837 // +optional
2838 optional QuobyteVolumeSource quobyte = 15;
2839
2840 // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
2841 // +optional
2842 optional AzureDiskVolumeSource azureDisk = 16;
2843
2844 // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
2845 optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 17;
2846
2847 // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
2848 // +optional
2849 optional PortworxVolumeSource portworxVolume = 18;
2850
2851 // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
2852 // +optional
2853 optional ScaleIOPersistentVolumeSource scaleIO = 19;
2854
2855 // Local represents directly-attached storage with node affinity
2856 // +optional
2857 optional LocalVolumeSource local = 20;
2858
2859 // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod
2860 // More info: https://examples.k8s.io/volumes/storageos/README.md
2861 // +optional
2862 optional StorageOSPersistentVolumeSource storageos = 21;
2863
2864 // CSI represents storage that is handled by an external CSI driver (Beta feature).
2865 // +optional
2866 optional CSIPersistentVolumeSource csi = 22;
2867}
2868
2869// PersistentVolumeSpec is the specification of a persistent volume.
2870message PersistentVolumeSpec {
2871 // A description of the persistent volume's resources and capacity.
2872 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
2873 // +optional
2874 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> capacity = 1;
2875
2876 // The actual volume backing the persistent volume.
2877 optional PersistentVolumeSource persistentVolumeSource = 2;
2878
2879 // AccessModes contains all ways the volume can be mounted.
2880 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
2881 // +optional
2882 repeated string accessModes = 3;
2883
2884 // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.
2885 // Expected to be non-nil when bound.
2886 // claim.VolumeName is the authoritative bind between PV and PVC.
2887 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
2888 // +optional
2889 optional ObjectReference claimRef = 4;
2890
2891 // What happens to a persistent volume when released from its claim.
2892 // Valid options are Retain (default for manually created PersistentVolumes), Delete (default
2893 // for dynamically provisioned PersistentVolumes), and Recycle (deprecated).
2894 // Recycle must be supported by the volume plugin underlying this PersistentVolume.
2895 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
2896 // +optional
2897 optional string persistentVolumeReclaimPolicy = 5;
2898
2899 // Name of StorageClass to which this persistent volume belongs. Empty value
2900 // means that this volume does not belong to any StorageClass.
2901 // +optional
2902 optional string storageClassName = 6;
2903
2904 // A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will
2905 // simply fail if one is invalid.
2906 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
2907 // +optional
2908 repeated string mountOptions = 7;
2909
2910 // volumeMode defines if a volume is intended to be used with a formatted filesystem
2911 // or to remain in raw block state. Value of Filesystem is implied when not included in spec.
2912 // +optional
2913 optional string volumeMode = 8;
2914
2915 // NodeAffinity defines constraints that limit what nodes this volume can be accessed from.
2916 // This field influences the scheduling of pods that use this volume.
2917 // +optional
2918 optional VolumeNodeAffinity nodeAffinity = 9;
2919}
2920
2921// PersistentVolumeStatus is the current status of a persistent volume.
2922message PersistentVolumeStatus {
2923 // Phase indicates if a volume is available, bound to a claim, or released by a claim.
2924 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
2925 // +optional
2926 optional string phase = 1;
2927
2928 // A human-readable message indicating details about why the volume is in this state.
2929 // +optional
2930 optional string message = 2;
2931
2932 // Reason is a brief CamelCase string that describes any failure and is meant
2933 // for machine parsing and tidy display in the CLI.
2934 // +optional
2935 optional string reason = 3;
2936}
2937
2938// Represents a Photon Controller persistent disk resource.
2939message PhotonPersistentDiskVolumeSource {
2940 // ID that identifies Photon Controller persistent disk
2941 optional string pdID = 1;
2942
2943 // Filesystem type to mount.
2944 // Must be a filesystem type supported by the host operating system.
2945 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2946 optional string fsType = 2;
2947}
2948
2949// Pod is a collection of containers that can run on a host. This resource is created
2950// by clients and scheduled onto hosts.
2951message Pod {
2952 // Standard object's metadata.
2953 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
2954 // +optional
2955 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
2956
2957 // Specification of the desired behavior of the pod.
2958 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2959 // +optional
2960 optional PodSpec spec = 2;
2961
2962 // Most recently observed status of the pod.
2963 // This data may not be up to date.
2964 // Populated by the system.
2965 // Read-only.
2966 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
2967 // +optional
2968 optional PodStatus status = 3;
2969}
2970
2971// Pod affinity is a group of inter pod affinity scheduling rules.
2972message PodAffinity {
2973 // If the affinity requirements specified by this field are not met at
2974 // scheduling time, the pod will not be scheduled onto the node.
2975 // If the affinity requirements specified by this field cease to be met
2976 // at some point during pod execution (e.g. due to a pod label update), the
2977 // system may or may not try to eventually evict the pod from its node.
2978 // When there are multiple elements, the lists of nodes corresponding to each
2979 // podAffinityTerm are intersected, i.e. all terms must be satisfied.
2980 // +optional
2981 repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
2982
2983 // The scheduler will prefer to schedule pods to nodes that satisfy
2984 // the affinity expressions specified by this field, but it may choose
2985 // a node that violates one or more of the expressions. The node that is
2986 // most preferred is the one with the greatest sum of weights, i.e.
2987 // for each node that meets all of the scheduling requirements (resource
2988 // request, requiredDuringScheduling affinity expressions, etc.),
2989 // compute a sum by iterating through the elements of this field and adding
2990 // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
2991 // node(s) with the highest sum are the most preferred.
2992 // +optional
2993 repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
2994}
2995
2996// Defines a set of pods (namely those matching the labelSelector
2997// relative to the given namespace(s)) that this pod should be
2998// co-located (affinity) or not co-located (anti-affinity) with,
2999// where co-located is defined as running on a node whose value of
3000// the label with key <topologyKey> matches that of any node on which
3001// a pod of the set of pods is running
3002message PodAffinityTerm {
3003 // A label query over a set of resources, in this case pods.
3004 // +optional
3005 optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 1;
3006
3007 // namespaces specifies which namespaces the labelSelector applies to (matches against);
3008 // null or empty list means "this pod's namespace"
3009 // +optional
3010 repeated string namespaces = 2;
3011
3012 // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
3013 // the labelSelector in the specified namespaces, where co-located is defined as running on a node
3014 // whose value of the label with key topologyKey matches that of any node on which any of the
3015 // selected pods is running.
3016 // Empty topologyKey is not allowed.
3017 optional string topologyKey = 3;
3018}
3019
3020// Pod anti affinity is a group of inter pod anti affinity scheduling rules.
3021message PodAntiAffinity {
3022 // If the anti-affinity requirements specified by this field are not met at
3023 // scheduling time, the pod will not be scheduled onto the node.
3024 // If the anti-affinity requirements specified by this field cease to be met
3025 // at some point during pod execution (e.g. due to a pod label update), the
3026 // system may or may not try to eventually evict the pod from its node.
3027 // When there are multiple elements, the lists of nodes corresponding to each
3028 // podAffinityTerm are intersected, i.e. all terms must be satisfied.
3029 // +optional
3030 repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
3031
3032 // The scheduler will prefer to schedule pods to nodes that satisfy
3033 // the anti-affinity expressions specified by this field, but it may choose
3034 // a node that violates one or more of the expressions. The node that is
3035 // most preferred is the one with the greatest sum of weights, i.e.
3036 // for each node that meets all of the scheduling requirements (resource
3037 // request, requiredDuringScheduling anti-affinity expressions, etc.),
3038 // compute a sum by iterating through the elements of this field and adding
3039 // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
3040 // node(s) with the highest sum are the most preferred.
3041 // +optional
3042 repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
3043}
3044
3045// PodAttachOptions is the query options to a Pod's remote attach call.
3046// ---
3047// TODO: merge w/ PodExecOptions below for stdin, stdout, etc
3048// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
3049message PodAttachOptions {
3050 // Stdin if true, redirects the standard input stream of the pod for this call.
3051 // Defaults to false.
3052 // +optional
3053 optional bool stdin = 1;
3054
3055 // Stdout if true indicates that stdout is to be redirected for the attach call.
3056 // Defaults to true.
3057 // +optional
3058 optional bool stdout = 2;
3059
3060 // Stderr if true indicates that stderr is to be redirected for the attach call.
3061 // Defaults to true.
3062 // +optional
3063 optional bool stderr = 3;
3064
3065 // TTY if true indicates that a tty will be allocated for the attach call.
3066 // This is passed through the container runtime so the tty
3067 // is allocated on the worker node by the container runtime.
3068 // Defaults to false.
3069 // +optional
3070 optional bool tty = 4;
3071
3072 // The container in which to execute the command.
3073 // Defaults to only container if there is only one container in the pod.
3074 // +optional
3075 optional string container = 5;
3076}
3077
3078// PodCondition contains details for the current condition of this pod.
3079message PodCondition {
3080 // Type is the type of the condition.
3081 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
3082 optional string type = 1;
3083
3084 // Status is the status of the condition.
3085 // Can be True, False, Unknown.
3086 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
3087 optional string status = 2;
3088
3089 // Last time we probed the condition.
3090 // +optional
3091 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastProbeTime = 3;
3092
3093 // Last time the condition transitioned from one status to another.
3094 // +optional
3095 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4;
3096
3097 // Unique, one-word, CamelCase reason for the condition's last transition.
3098 // +optional
3099 optional string reason = 5;
3100
3101 // Human-readable message indicating details about last transition.
3102 // +optional
3103 optional string message = 6;
3104}
3105
3106// PodDNSConfig defines the DNS parameters of a pod in addition to
3107// those generated from DNSPolicy.
3108message PodDNSConfig {
3109 // A list of DNS name server IP addresses.
3110 // This will be appended to the base nameservers generated from DNSPolicy.
3111 // Duplicated nameservers will be removed.
3112 // +optional
3113 repeated string nameservers = 1;
3114
3115 // A list of DNS search domains for host-name lookup.
3116 // This will be appended to the base search paths generated from DNSPolicy.
3117 // Duplicated search paths will be removed.
3118 // +optional
3119 repeated string searches = 2;
3120
3121 // A list of DNS resolver options.
3122 // This will be merged with the base options generated from DNSPolicy.
3123 // Duplicated entries will be removed. Resolution options given in Options
3124 // will override those that appear in the base DNSPolicy.
3125 // +optional
3126 repeated PodDNSConfigOption options = 3;
3127}
3128
3129// PodDNSConfigOption defines DNS resolver options of a pod.
3130message PodDNSConfigOption {
3131 // Required.
3132 optional string name = 1;
3133
3134 // +optional
3135 optional string value = 2;
3136}
3137
3138// PodExecOptions is the query options to a Pod's remote exec call.
3139// ---
3140// TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging
3141// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
3142message PodExecOptions {
3143 // Redirect the standard input stream of the pod for this call.
3144 // Defaults to false.
3145 // +optional
3146 optional bool stdin = 1;
3147
3148 // Redirect the standard output stream of the pod for this call.
3149 // Defaults to true.
3150 // +optional
3151 optional bool stdout = 2;
3152
3153 // Redirect the standard error stream of the pod for this call.
3154 // Defaults to true.
3155 // +optional
3156 optional bool stderr = 3;
3157
3158 // TTY if true indicates that a tty will be allocated for the exec call.
3159 // Defaults to false.
3160 // +optional
3161 optional bool tty = 4;
3162
3163 // Container in which to execute the command.
3164 // Defaults to only container if there is only one container in the pod.
3165 // +optional
3166 optional string container = 5;
3167
3168 // Command is the remote command to execute. argv array. Not executed within a shell.
3169 repeated string command = 6;
3170}
3171
3172// IP address information for entries in the (plural) PodIPs field.
3173// Each entry includes:
3174// IP: An IP address allocated to the pod. Routable at least within the cluster.
3175message PodIP {
3176 // ip is an IP address (IPv4 or IPv6) assigned to the pod
3177 optional string ip = 1;
3178}
3179
3180// PodList is a list of Pods.
3181message PodList {
3182 // Standard list metadata.
3183 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
3184 // +optional
3185 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
3186
3187 // List of pods.
3188 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md
3189 repeated Pod items = 2;
3190}
3191
3192// PodLogOptions is the query options for a Pod's logs REST call.
3193message PodLogOptions {
3194 // The container for which to stream logs. Defaults to only container if there is one container in the pod.
3195 // +optional
3196 optional string container = 1;
3197
3198 // Follow the log stream of the pod. Defaults to false.
3199 // +optional
3200 optional bool follow = 2;
3201
3202 // Return previous terminated container logs. Defaults to false.
3203 // +optional
3204 optional bool previous = 3;
3205
3206 // A relative time in seconds before the current time from which to show logs. If this value
3207 // precedes the time a pod was started, only logs since the pod start will be returned.
3208 // If this value is in the future, no logs will be returned.
3209 // Only one of sinceSeconds or sinceTime may be specified.
3210 // +optional
3211 optional int64 sinceSeconds = 4;
3212
3213 // An RFC3339 timestamp from which to show logs. If this value
3214 // precedes the time a pod was started, only logs since the pod start will be returned.
3215 // If this value is in the future, no logs will be returned.
3216 // Only one of sinceSeconds or sinceTime may be specified.
3217 // +optional
3218 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 5;
3219
3220 // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line
3221 // of log output. Defaults to false.
3222 // +optional
3223 optional bool timestamps = 6;
3224
3225 // If set, the number of lines from the end of the logs to show. If not specified,
3226 // logs are shown from the creation of the container or sinceSeconds or sinceTime
3227 // +optional
3228 optional int64 tailLines = 7;
3229
3230 // If set, the number of bytes to read from the server before terminating the
3231 // log output. This may not display a complete final line of logging, and may return
3232 // slightly more or slightly less than the specified limit.
3233 // +optional
3234 optional int64 limitBytes = 8;
3235
3236 // insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the
3237 // serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver
3238 // and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real
3239 // kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the
3240 // connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept
3241 // the actual log data coming from the real kubelet).
3242 // +optional
3243 optional bool insecureSkipTLSVerifyBackend = 9;
3244}
3245
3246// PodPortForwardOptions is the query options to a Pod's port forward call
3247// when using WebSockets.
3248// The `port` query parameter must specify the port or
3249// ports (comma separated) to forward over.
3250// Port forwarding over SPDY does not use these options. It requires the port
3251// to be passed in the `port` header as part of request.
3252message PodPortForwardOptions {
3253 // List of ports to forward
3254 // Required when using WebSockets
3255 // +optional
3256 repeated int32 ports = 1;
3257}
3258
3259// PodProxyOptions is the query options to a Pod's proxy call.
3260message PodProxyOptions {
3261 // Path is the URL path to use for the current proxy request to pod.
3262 // +optional
3263 optional string path = 1;
3264}
3265
3266// PodReadinessGate contains the reference to a pod condition
3267message PodReadinessGate {
3268 // ConditionType refers to a condition in the pod's condition list with matching type.
3269 optional string conditionType = 1;
3270}
3271
3272// PodSecurityContext holds pod-level security attributes and common container settings.
3273// Some fields are also present in container.securityContext. Field values of
3274// container.securityContext take precedence over field values of PodSecurityContext.
3275message PodSecurityContext {
3276 // The SELinux context to be applied to all containers.
3277 // If unspecified, the container runtime will allocate a random SELinux context for each
3278 // container. May also be set in SecurityContext. If set in
3279 // both SecurityContext and PodSecurityContext, the value specified in SecurityContext
3280 // takes precedence for that container.
3281 // +optional
3282 optional SELinuxOptions seLinuxOptions = 1;
3283
3284 // The Windows specific settings applied to all containers.
3285 // If unspecified, the options within a container's SecurityContext will be used.
3286 // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
3287 // +optional
3288 optional WindowsSecurityContextOptions windowsOptions = 8;
3289
3290 // The UID to run the entrypoint of the container process.
3291 // Defaults to user specified in image metadata if unspecified.
3292 // May also be set in SecurityContext. If set in both SecurityContext and
3293 // PodSecurityContext, the value specified in SecurityContext takes precedence
3294 // for that container.
3295 // +optional
3296 optional int64 runAsUser = 2;
3297
3298 // The GID to run the entrypoint of the container process.
3299 // Uses runtime default if unset.
3300 // May also be set in SecurityContext. If set in both SecurityContext and
3301 // PodSecurityContext, the value specified in SecurityContext takes precedence
3302 // for that container.
3303 // +optional
3304 optional int64 runAsGroup = 6;
3305
3306 // Indicates that the container must run as a non-root user.
3307 // If true, the Kubelet will validate the image at runtime to ensure that it
3308 // does not run as UID 0 (root) and fail to start the container if it does.
3309 // If unset or false, no such validation will be performed.
3310 // May also be set in SecurityContext. If set in both SecurityContext and
3311 // PodSecurityContext, the value specified in SecurityContext takes precedence.
3312 // +optional
3313 optional bool runAsNonRoot = 3;
3314
3315 // A list of groups applied to the first process run in each container, in addition
3316 // to the container's primary GID. If unspecified, no groups will be added to
3317 // any container.
3318 // +optional
3319 repeated int64 supplementalGroups = 4;
3320
3321 // A special supplemental group that applies to all containers in a pod.
3322 // Some volume types allow the Kubelet to change the ownership of that volume
3323 // to be owned by the pod:
3324 //
3325 // 1. The owning GID will be the FSGroup
3326 // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
3327 // 3. The permission bits are OR'd with rw-rw----
3328 //
3329 // If unset, the Kubelet will not modify the ownership and permissions of any volume.
3330 // +optional
3331 optional int64 fsGroup = 5;
3332
3333 // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
3334 // sysctls (by the container runtime) might fail to launch.
3335 // +optional
3336 repeated Sysctl sysctls = 7;
3337
3338 // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
3339 // before being exposed inside Pod. This field will only apply to
3340 // volume types which support fsGroup based ownership(and permissions).
3341 // It will have no effect on ephemeral volume types such as: secret, configmaps
3342 // and emptydir.
3343 // Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always".
3344 // +optional
3345 optional string fsGroupChangePolicy = 9;
3346
3347 // The seccomp options to use by the containers in this pod.
3348 // +optional
3349 optional SeccompProfile seccompProfile = 10;
3350}
3351
3352// Describes the class of pods that should avoid this node.
3353// Exactly one field should be set.
3354message PodSignature {
3355 // Reference to controller whose pods should avoid this node.
3356 // +optional
3357 optional k8s.io.apimachinery.pkg.apis.meta.v1.OwnerReference podController = 1;
3358}
3359
3360// PodSpec is a description of a pod.
3361message PodSpec {
3362 // List of volumes that can be mounted by containers belonging to the pod.
3363 // More info: https://kubernetes.io/docs/concepts/storage/volumes
3364 // +optional
3365 // +patchMergeKey=name
3366 // +patchStrategy=merge,retainKeys
3367 repeated Volume volumes = 1;
3368
3369 // List of initialization containers belonging to the pod.
3370 // Init containers are executed in order prior to containers being started. If any
3371 // init container fails, the pod is considered to have failed and is handled according
3372 // to its restartPolicy. The name for an init container or normal container must be
3373 // unique among all containers.
3374 // Init containers may not have Lifecycle actions, Readiness probes, Liveness probes, or Startup probes.
3375 // The resourceRequirements of an init container are taken into account during scheduling
3376 // by finding the highest request/limit for each resource type, and then using the max of
3377 // of that value or the sum of the normal containers. Limits are applied to init containers
3378 // in a similar fashion.
3379 // Init containers cannot currently be added or removed.
3380 // Cannot be updated.
3381 // More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
3382 // +patchMergeKey=name
3383 // +patchStrategy=merge
3384 repeated Container initContainers = 20;
3385
3386 // List of containers belonging to the pod.
3387 // Containers cannot currently be added or removed.
3388 // There must be at least one container in a Pod.
3389 // Cannot be updated.
3390 // +patchMergeKey=name
3391 // +patchStrategy=merge
3392 repeated Container containers = 2;
3393
3394 // List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing
3395 // pod to perform user-initiated actions such as debugging. This list cannot be specified when
3396 // creating a pod, and it cannot be modified by updating the pod spec. In order to add an
3397 // ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource.
3398 // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature.
3399 // +optional
3400 // +patchMergeKey=name
3401 // +patchStrategy=merge
3402 repeated EphemeralContainer ephemeralContainers = 34;
3403
3404 // Restart policy for all containers within the pod.
3405 // One of Always, OnFailure, Never.
3406 // Default to Always.
3407 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
3408 // +optional
3409 optional string restartPolicy = 3;
3410
3411 // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
3412 // Value must be non-negative integer. The value zero indicates delete immediately.
3413 // If this value is nil, the default grace period will be used instead.
3414 // The grace period is the duration in seconds after the processes running in the pod are sent
3415 // a termination signal and the time when the processes are forcibly halted with a kill signal.
3416 // Set this value longer than the expected cleanup time for your process.
3417 // Defaults to 30 seconds.
3418 // +optional
3419 optional int64 terminationGracePeriodSeconds = 4;
3420
3421 // Optional duration in seconds the pod may be active on the node relative to
3422 // StartTime before the system will actively try to mark it failed and kill associated containers.
3423 // Value must be a positive integer.
3424 // +optional
3425 optional int64 activeDeadlineSeconds = 5;
3426
3427 // Set DNS policy for the pod.
3428 // Defaults to "ClusterFirst".
3429 // Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'.
3430 // DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy.
3431 // To have DNS options set along with hostNetwork, you have to specify DNS policy
3432 // explicitly to 'ClusterFirstWithHostNet'.
3433 // +optional
3434 optional string dnsPolicy = 6;
3435
3436 // NodeSelector is a selector which must be true for the pod to fit on a node.
3437 // Selector which must match a node's labels for the pod to be scheduled on that node.
3438 // More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
3439 // +optional
3440 map<string, string> nodeSelector = 7;
3441
3442 // ServiceAccountName is the name of the ServiceAccount to use to run this pod.
3443 // More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
3444 // +optional
3445 optional string serviceAccountName = 8;
3446
3447 // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
3448 // Deprecated: Use serviceAccountName instead.
3449 // +k8s:conversion-gen=false
3450 // +optional
3451 optional string serviceAccount = 9;
3452
3453 // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
3454 // +optional
3455 optional bool automountServiceAccountToken = 21;
3456
3457 // NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
3458 // the scheduler simply schedules this pod onto that node, assuming that it fits resource
3459 // requirements.
3460 // +optional
3461 optional string nodeName = 10;
3462
3463 // Host networking requested for this pod. Use the host's network namespace.
3464 // If this option is set, the ports that will be used must be specified.
3465 // Default to false.
3466 // +k8s:conversion-gen=false
3467 // +optional
3468 optional bool hostNetwork = 11;
3469
3470 // Use the host's pid namespace.
3471 // Optional: Default to false.
3472 // +k8s:conversion-gen=false
3473 // +optional
3474 optional bool hostPID = 12;
3475
3476 // Use the host's ipc namespace.
3477 // Optional: Default to false.
3478 // +k8s:conversion-gen=false
3479 // +optional
3480 optional bool hostIPC = 13;
3481
3482 // Share a single process namespace between all of the containers in a pod.
3483 // When this is set containers will be able to view and signal processes from other containers
3484 // in the same pod, and the first process in each container will not be assigned PID 1.
3485 // HostPID and ShareProcessNamespace cannot both be set.
3486 // Optional: Default to false.
3487 // +k8s:conversion-gen=false
3488 // +optional
3489 optional bool shareProcessNamespace = 27;
3490
3491 // SecurityContext holds pod-level security attributes and common container settings.
3492 // Optional: Defaults to empty. See type description for default values of each field.
3493 // +optional
3494 optional PodSecurityContext securityContext = 14;
3495
3496 // 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.
3497 // If specified, these secrets will be passed to individual puller implementations for them to use. For example,
3498 // in the case of docker, only DockerConfig type secrets are honored.
3499 // More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
3500 // +optional
3501 // +patchMergeKey=name
3502 // +patchStrategy=merge
3503 repeated LocalObjectReference imagePullSecrets = 15;
3504
3505 // Specifies the hostname of the Pod
3506 // If not specified, the pod's hostname will be set to a system-defined value.
3507 // +optional
3508 optional string hostname = 16;
3509
3510 // If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>".
3511 // If not specified, the pod will not have a domainname at all.
3512 // +optional
3513 optional string subdomain = 17;
3514
3515 // If specified, the pod's scheduling constraints
3516 // +optional
3517 optional Affinity affinity = 18;
3518
3519 // If specified, the pod will be dispatched by specified scheduler.
3520 // If not specified, the pod will be dispatched by default scheduler.
3521 // +optional
3522 optional string schedulerName = 19;
3523
3524 // If specified, the pod's tolerations.
3525 // +optional
3526 repeated Toleration tolerations = 22;
3527
3528 // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts
3529 // file if specified. This is only valid for non-hostNetwork pods.
3530 // +optional
3531 // +patchMergeKey=ip
3532 // +patchStrategy=merge
3533 repeated HostAlias hostAliases = 23;
3534
3535 // If specified, indicates the pod's priority. "system-node-critical" and
3536 // "system-cluster-critical" are two special keywords which indicate the
3537 // highest priorities with the former being the highest priority. Any other
3538 // name must be defined by creating a PriorityClass object with that name.
3539 // If not specified, the pod priority will be default or zero if there is no
3540 // default.
3541 // +optional
3542 optional string priorityClassName = 24;
3543
3544 // The priority value. Various system components use this field to find the
3545 // priority of the pod. When Priority Admission Controller is enabled, it
3546 // prevents users from setting this field. The admission controller populates
3547 // this field from PriorityClassName.
3548 // The higher the value, the higher the priority.
3549 // +optional
3550 optional int32 priority = 25;
3551
3552 // Specifies the DNS parameters of a pod.
3553 // Parameters specified here will be merged to the generated DNS
3554 // configuration based on DNSPolicy.
3555 // +optional
3556 optional PodDNSConfig dnsConfig = 26;
3557
3558 // If specified, all readiness gates will be evaluated for pod readiness.
3559 // A pod is ready when all its containers are ready AND
3560 // all conditions specified in the readiness gates have status equal to "True"
3561 // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md
3562 // +optional
3563 repeated PodReadinessGate readinessGates = 28;
3564
3565 // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used
3566 // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run.
3567 // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an
3568 // empty definition that uses the default runtime handler.
3569 // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md
3570 // This is a beta feature as of Kubernetes v1.14.
3571 // +optional
3572 optional string runtimeClassName = 29;
3573
3574 // EnableServiceLinks indicates whether information about services should be injected into pod's
3575 // environment variables, matching the syntax of Docker links.
3576 // Optional: Defaults to true.
3577 // +optional
3578 optional bool enableServiceLinks = 30;
3579
3580 // PreemptionPolicy is the Policy for preempting pods with lower priority.
3581 // One of Never, PreemptLowerPriority.
3582 // Defaults to PreemptLowerPriority if unset.
3583 // This field is beta-level, gated by the NonPreemptingPriority feature-gate.
3584 // +optional
3585 optional string preemptionPolicy = 31;
3586
3587 // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass.
3588 // This field will be autopopulated at admission time by the RuntimeClass admission controller. If
3589 // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests.
3590 // The RuntimeClass admission controller will reject Pod create requests which have the overhead already
3591 // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value
3592 // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero.
3593 // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md
3594 // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.
3595 // +optional
3596 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> overhead = 32;
3597
3598 // TopologySpreadConstraints describes how a group of pods ought to spread across topology
3599 // domains. Scheduler will schedule pods in a way which abides by the constraints.
3600 // All topologySpreadConstraints are ANDed.
3601 // +optional
3602 // +patchMergeKey=topologyKey
3603 // +patchStrategy=merge
3604 // +listType=map
3605 // +listMapKey=topologyKey
3606 // +listMapKey=whenUnsatisfiable
3607 repeated TopologySpreadConstraint topologySpreadConstraints = 33;
3608
3609 // If true the pod's hostname will be configured as the pod's FQDN, rather than the leaf name (the default).
3610 // In Linux containers, this means setting the FQDN in the hostname field of the kernel (the nodename field of struct utsname).
3611 // In Windows containers, this means setting the registry value of hostname for the registry key HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters to FQDN.
3612 // If a pod does not have FQDN, this has no effect.
3613 // Default to false.
3614 // +optional
3615 optional bool setHostnameAsFQDN = 35;
3616}
3617
3618// PodStatus represents information about the status of a pod. Status may trail the actual
3619// state of a system, especially if the node that hosts the pod cannot contact the control
3620// plane.
3621message PodStatus {
3622 // The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
3623 // The conditions array, the reason and message fields, and the individual container status
3624 // arrays contain more detail about the pod's status.
3625 // There are five possible phase values:
3626 //
3627 // Pending: The pod has been accepted by the Kubernetes system, but one or more of the
3628 // container images has not been created. This includes time before being scheduled as
3629 // well as time spent downloading images over the network, which could take a while.
3630 // Running: The pod has been bound to a node, and all of the containers have been created.
3631 // At least one container is still running, or is in the process of starting or restarting.
3632 // Succeeded: All containers in the pod have terminated in success, and will not be restarted.
3633 // Failed: All containers in the pod have terminated, and at least one container has
3634 // terminated in failure. The container either exited with non-zero status or was terminated
3635 // by the system.
3636 // Unknown: For some reason the state of the pod could not be obtained, typically due to an
3637 // error in communicating with the host of the pod.
3638 //
3639 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
3640 // +optional
3641 optional string phase = 1;
3642
3643 // Current service state of pod.
3644 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
3645 // +optional
3646 // +patchMergeKey=type
3647 // +patchStrategy=merge
3648 repeated PodCondition conditions = 2;
3649
3650 // A human readable message indicating details about why the pod is in this condition.
3651 // +optional
3652 optional string message = 3;
3653
3654 // A brief CamelCase message indicating details about why the pod is in this state.
3655 // e.g. 'Evicted'
3656 // +optional
3657 optional string reason = 4;
3658
3659 // nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be
3660 // scheduled right away as preemption victims receive their graceful termination periods.
3661 // This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide
3662 // to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to
3663 // give the resources on this node to a higher priority pod that is created after preemption.
3664 // As a result, this field may be different than PodSpec.nodeName when the pod is
3665 // scheduled.
3666 // +optional
3667 optional string nominatedNodeName = 11;
3668
3669 // IP address of the host to which the pod is assigned. Empty if not yet scheduled.
3670 // +optional
3671 optional string hostIP = 5;
3672
3673 // IP address allocated to the pod. Routable at least within the cluster.
3674 // Empty if not yet allocated.
3675 // +optional
3676 optional string podIP = 6;
3677
3678 // podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must
3679 // match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list
3680 // is empty if no IPs have been allocated yet.
3681 // +optional
3682 // +patchStrategy=merge
3683 // +patchMergeKey=ip
3684 repeated PodIP podIPs = 12;
3685
3686 // RFC 3339 date and time at which the object was acknowledged by the Kubelet.
3687 // This is before the Kubelet pulled the container image(s) for the pod.
3688 // +optional
3689 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startTime = 7;
3690
3691 // The list has one entry per init container in the manifest. The most recent successful
3692 // init container will have ready = true, the most recently started container will have
3693 // startTime set.
3694 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
3695 repeated ContainerStatus initContainerStatuses = 10;
3696
3697 // The list has one entry per container in the manifest. Each entry is currently the output
3698 // of `docker inspect`.
3699 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
3700 // +optional
3701 repeated ContainerStatus containerStatuses = 8;
3702
3703 // The Quality of Service (QOS) classification assigned to the pod based on resource requirements
3704 // See PodQOSClass type for available QOS classes
3705 // More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
3706 // +optional
3707 optional string qosClass = 9;
3708
3709 // Status for any ephemeral containers that have run in this pod.
3710 // This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature.
3711 // +optional
3712 repeated ContainerStatus ephemeralContainerStatuses = 13;
3713}
3714
3715// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
3716message PodStatusResult {
3717 // Standard object's metadata.
3718 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
3719 // +optional
3720 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
3721
3722 // Most recently observed status of the pod.
3723 // This data may not be up to date.
3724 // Populated by the system.
3725 // Read-only.
3726 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
3727 // +optional
3728 optional PodStatus status = 2;
3729}
3730
3731// PodTemplate describes a template for creating copies of a predefined pod.
3732message PodTemplate {
3733 // Standard object's metadata.
3734 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
3735 // +optional
3736 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
3737
3738 // Template defines the pods that will be created from this pod template.
3739 // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
3740 // +optional
3741 optional PodTemplateSpec template = 2;
3742}
3743
3744// PodTemplateList is a list of PodTemplates.
3745message PodTemplateList {
3746 // Standard list metadata.
3747 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
3748 // +optional
3749 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
3750
3751 // List of pod templates
3752 repeated PodTemplate items = 2;
3753}
3754
3755// PodTemplateSpec describes the data a pod should have when created from a template
3756message PodTemplateSpec {
3757 // Standard object's metadata.
3758 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
3759 // +optional
3760 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
3761
3762 // Specification of the desired behavior of the pod.
3763 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
3764 // +optional
3765 optional PodSpec spec = 2;
3766}
3767
3768// PortworxVolumeSource represents a Portworx volume resource.
3769message PortworxVolumeSource {
3770 // VolumeID uniquely identifies a Portworx volume
3771 optional string volumeID = 1;
3772
3773 // FSType represents the filesystem type to mount
3774 // Must be a filesystem type supported by the host operating system.
3775 // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
3776 optional string fsType = 2;
3777
3778 // Defaults to false (read/write). ReadOnly here will force
3779 // the ReadOnly setting in VolumeMounts.
3780 // +optional
3781 optional bool readOnly = 3;
3782}
3783
3784// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
3785// +k8s:openapi-gen=false
3786message Preconditions {
3787 // Specifies the target UID.
3788 // +optional
3789 optional string uid = 1;
3790}
3791
3792// Describes a class of pods that should avoid this node.
3793message PreferAvoidPodsEntry {
3794 // The class of pods.
3795 optional PodSignature podSignature = 1;
3796
3797 // Time at which this entry was added to the list.
3798 // +optional
3799 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time evictionTime = 2;
3800
3801 // (brief) reason why this entry was added to the list.
3802 // +optional
3803 optional string reason = 3;
3804
3805 // Human readable message indicating why this entry was added to the list.
3806 // +optional
3807 optional string message = 4;
3808}
3809
3810// An empty preferred scheduling term matches all objects with implicit weight 0
3811// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
3812message PreferredSchedulingTerm {
3813 // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
3814 optional int32 weight = 1;
3815
3816 // A node selector term, associated with the corresponding weight.
3817 optional NodeSelectorTerm preference = 2;
3818}
3819
3820// Probe describes a health check to be performed against a container to determine whether it is
3821// alive or ready to receive traffic.
3822message Probe {
3823 // The action taken to determine the health of a container
3824 optional Handler handler = 1;
3825
3826 // Number of seconds after the container has started before liveness probes are initiated.
3827 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
3828 // +optional
3829 optional int32 initialDelaySeconds = 2;
3830
3831 // Number of seconds after which the probe times out.
3832 // Defaults to 1 second. Minimum value is 1.
3833 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
3834 // +optional
3835 optional int32 timeoutSeconds = 3;
3836
3837 // How often (in seconds) to perform the probe.
3838 // Default to 10 seconds. Minimum value is 1.
3839 // +optional
3840 optional int32 periodSeconds = 4;
3841
3842 // Minimum consecutive successes for the probe to be considered successful after having failed.
3843 // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1.
3844 // +optional
3845 optional int32 successThreshold = 5;
3846
3847 // Minimum consecutive failures for the probe to be considered failed after having succeeded.
3848 // Defaults to 3. Minimum value is 1.
3849 // +optional
3850 optional int32 failureThreshold = 6;
3851}
3852
3853// Represents a projected volume source
3854message ProjectedVolumeSource {
3855 // list of volume projections
3856 repeated VolumeProjection sources = 1;
3857
3858 // Mode bits used to set permissions on created files by default.
3859 // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
3860 // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits.
3861 // Directories within the path are not affected by this setting.
3862 // This might be in conflict with other options that affect the file
3863 // mode, like fsGroup, and the result can be other mode bits set.
3864 // +optional
3865 optional int32 defaultMode = 2;
3866}
3867
3868// Represents a Quobyte mount that lasts the lifetime of a pod.
3869// Quobyte volumes do not support ownership management or SELinux relabeling.
3870message QuobyteVolumeSource {
3871 // Registry represents a single or multiple Quobyte Registry services
3872 // specified as a string as host:port pair (multiple entries are separated with commas)
3873 // which acts as the central registry for volumes
3874 optional string registry = 1;
3875
3876 // Volume is a string that references an already created Quobyte volume by name.
3877 optional string volume = 2;
3878
3879 // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions.
3880 // Defaults to false.
3881 // +optional
3882 optional bool readOnly = 3;
3883
3884 // User to map volume access to
3885 // Defaults to serivceaccount user
3886 // +optional
3887 optional string user = 4;
3888
3889 // Group to map volume access to
3890 // Default is no group
3891 // +optional
3892 optional string group = 5;
3893
3894 // Tenant owning the given Quobyte volume in the Backend
3895 // Used with dynamically provisioned Quobyte volumes, value is set by the plugin
3896 // +optional
3897 optional string tenant = 6;
3898}
3899
3900// Represents a Rados Block Device mount that lasts the lifetime of a pod.
3901// RBD volumes support ownership management and SELinux relabeling.
3902message RBDPersistentVolumeSource {
3903 // A collection of Ceph monitors.
3904 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3905 repeated string monitors = 1;
3906
3907 // The rados image name.
3908 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3909 optional string image = 2;
3910
3911 // Filesystem type of the volume that you want to mount.
3912 // Tip: Ensure that the filesystem type is supported by the host operating system.
3913 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
3914 // More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
3915 // TODO: how do we prevent errors in the filesystem from compromising the machine
3916 // +optional
3917 optional string fsType = 3;
3918
3919 // The rados pool name.
3920 // Default is rbd.
3921 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3922 // +optional
3923 optional string pool = 4;
3924
3925 // The rados user name.
3926 // Default is admin.
3927 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3928 // +optional
3929 optional string user = 5;
3930
3931 // Keyring is the path to key ring for RBDUser.
3932 // Default is /etc/ceph/keyring.
3933 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3934 // +optional
3935 optional string keyring = 6;
3936
3937 // SecretRef is name of the authentication secret for RBDUser. If provided
3938 // overrides keyring.
3939 // Default is nil.
3940 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3941 // +optional
3942 optional SecretReference secretRef = 7;
3943
3944 // ReadOnly here will force the ReadOnly setting in VolumeMounts.
3945 // Defaults to false.
3946 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3947 // +optional
3948 optional bool readOnly = 8;
3949}
3950
3951// Represents a Rados Block Device mount that lasts the lifetime of a pod.
3952// RBD volumes support ownership management and SELinux relabeling.
3953message RBDVolumeSource {
3954 // A collection of Ceph monitors.
3955 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3956 repeated string monitors = 1;
3957
3958 // The rados image name.
3959 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3960 optional string image = 2;
3961
3962 // Filesystem type of the volume that you want to mount.
3963 // Tip: Ensure that the filesystem type is supported by the host operating system.
3964 // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
3965 // More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
3966 // TODO: how do we prevent errors in the filesystem from compromising the machine
3967 // +optional
3968 optional string fsType = 3;
3969
3970 // The rados pool name.
3971 // Default is rbd.
3972 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3973 // +optional
3974 optional string pool = 4;
3975
3976 // The rados user name.
3977 // Default is admin.
3978 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3979 // +optional
3980 optional string user = 5;
3981
3982 // Keyring is the path to key ring for RBDUser.
3983 // Default is /etc/ceph/keyring.
3984 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3985 // +optional
3986 optional string keyring = 6;
3987
3988 // SecretRef is name of the authentication secret for RBDUser. If provided
3989 // overrides keyring.
3990 // Default is nil.
3991 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3992 // +optional
3993 optional LocalObjectReference secretRef = 7;
3994
3995 // ReadOnly here will force the ReadOnly setting in VolumeMounts.
3996 // Defaults to false.
3997 // More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
3998 // +optional
3999 optional bool readOnly = 8;
4000}
4001
4002// RangeAllocation is not a public type.
4003message RangeAllocation {
4004 // Standard object's metadata.
4005 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4006 // +optional
4007 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4008
4009 // Range is string that identifies the range represented by 'data'.
4010 optional string range = 2;
4011
4012 // Data is a bit array containing all allocated addresses in the previous segment.
4013 optional bytes data = 3;
4014}
4015
4016// ReplicationController represents the configuration of a replication controller.
4017message ReplicationController {
4018 // If the Labels of a ReplicationController are empty, they are defaulted to
4019 // be the same as the Pod(s) that the replication controller manages.
4020 // Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4021 // +optional
4022 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4023
4024 // Spec defines the specification of the desired behavior of the replication controller.
4025 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4026 // +optional
4027 optional ReplicationControllerSpec spec = 2;
4028
4029 // Status is the most recently observed status of the replication controller.
4030 // This data may be out of date by some window of time.
4031 // Populated by the system.
4032 // Read-only.
4033 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4034 // +optional
4035 optional ReplicationControllerStatus status = 3;
4036}
4037
4038// ReplicationControllerCondition describes the state of a replication controller at a certain point.
4039message ReplicationControllerCondition {
4040 // Type of replication controller condition.
4041 optional string type = 1;
4042
4043 // Status of the condition, one of True, False, Unknown.
4044 optional string status = 2;
4045
4046 // The last time the condition transitioned from one status to another.
4047 // +optional
4048 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3;
4049
4050 // The reason for the condition's last transition.
4051 // +optional
4052 optional string reason = 4;
4053
4054 // A human readable message indicating details about the transition.
4055 // +optional
4056 optional string message = 5;
4057}
4058
4059// ReplicationControllerList is a collection of replication controllers.
4060message ReplicationControllerList {
4061 // Standard list metadata.
4062 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
4063 // +optional
4064 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
4065
4066 // List of replication controllers.
4067 // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
4068 repeated ReplicationController items = 2;
4069}
4070
4071// ReplicationControllerSpec is the specification of a replication controller.
4072message ReplicationControllerSpec {
4073 // Replicas is the number of desired replicas.
4074 // This is a pointer to distinguish between explicit zero and unspecified.
4075 // Defaults to 1.
4076 // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
4077 // +optional
4078 optional int32 replicas = 1;
4079
4080 // Minimum number of seconds for which a newly created pod should be ready
4081 // without any of its container crashing, for it to be considered available.
4082 // Defaults to 0 (pod will be considered available as soon as it is ready)
4083 // +optional
4084 optional int32 minReadySeconds = 4;
4085
4086 // Selector is a label query over pods that should match the Replicas count.
4087 // If Selector is empty, it is defaulted to the labels present on the Pod template.
4088 // Label keys and values that must match in order to be controlled by this replication
4089 // controller, if empty defaulted to labels on Pod template.
4090 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
4091 // +optional
4092 map<string, string> selector = 2;
4093
4094 // Template is the object that describes the pod that will be created if
4095 // insufficient replicas are detected. This takes precedence over a TemplateRef.
4096 // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
4097 // +optional
4098 optional PodTemplateSpec template = 3;
4099}
4100
4101// ReplicationControllerStatus represents the current status of a replication
4102// controller.
4103message ReplicationControllerStatus {
4104 // Replicas is the most recently oberved number of replicas.
4105 // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
4106 optional int32 replicas = 1;
4107
4108 // The number of pods that have labels matching the labels of the pod template of the replication controller.
4109 // +optional
4110 optional int32 fullyLabeledReplicas = 2;
4111
4112 // The number of ready replicas for this replication controller.
4113 // +optional
4114 optional int32 readyReplicas = 4;
4115
4116 // The number of available replicas (ready for at least minReadySeconds) for this replication controller.
4117 // +optional
4118 optional int32 availableReplicas = 5;
4119
4120 // ObservedGeneration reflects the generation of the most recently observed replication controller.
4121 // +optional
4122 optional int64 observedGeneration = 3;
4123
4124 // Represents the latest available observations of a replication controller's current state.
4125 // +optional
4126 // +patchMergeKey=type
4127 // +patchStrategy=merge
4128 repeated ReplicationControllerCondition conditions = 6;
4129}
4130
4131// ResourceFieldSelector represents container resources (cpu, memory) and their output format
4132message ResourceFieldSelector {
4133 // Container name: required for volumes, optional for env vars
4134 // +optional
4135 optional string containerName = 1;
4136
4137 // Required: resource to select
4138 optional string resource = 2;
4139
4140 // Specifies the output format of the exposed resources, defaults to "1"
4141 // +optional
4142 optional k8s.io.apimachinery.pkg.api.resource.Quantity divisor = 3;
4143}
4144
4145// ResourceQuota sets aggregate quota restrictions enforced per namespace
4146message ResourceQuota {
4147 // Standard object's metadata.
4148 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4149 // +optional
4150 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4151
4152 // Spec defines the desired quota.
4153 // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4154 // +optional
4155 optional ResourceQuotaSpec spec = 2;
4156
4157 // Status defines the actual enforced quota and its current usage.
4158 // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4159 // +optional
4160 optional ResourceQuotaStatus status = 3;
4161}
4162
4163// ResourceQuotaList is a list of ResourceQuota items.
4164message ResourceQuotaList {
4165 // Standard list metadata.
4166 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
4167 // +optional
4168 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
4169
4170 // Items is a list of ResourceQuota objects.
4171 // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
4172 repeated ResourceQuota items = 2;
4173}
4174
4175// ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
4176message ResourceQuotaSpec {
4177 // hard is the set of desired hard limits for each named resource.
4178 // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
4179 // +optional
4180 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> hard = 1;
4181
4182 // A collection of filters that must match each object tracked by a quota.
4183 // If not specified, the quota matches all objects.
4184 // +optional
4185 repeated string scopes = 2;
4186
4187 // scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota
4188 // but expressed using ScopeSelectorOperator in combination with possible values.
4189 // For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.
4190 // +optional
4191 optional ScopeSelector scopeSelector = 3;
4192}
4193
4194// ResourceQuotaStatus defines the enforced hard limits and observed use.
4195message ResourceQuotaStatus {
4196 // Hard is the set of enforced hard limits for each named resource.
4197 // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
4198 // +optional
4199 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> hard = 1;
4200
4201 // Used is the current observed total usage of the resource in the namespace.
4202 // +optional
4203 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> used = 2;
4204}
4205
4206// ResourceRequirements describes the compute resource requirements.
4207message ResourceRequirements {
4208 // Limits describes the maximum amount of compute resources allowed.
4209 // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
4210 // +optional
4211 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> limits = 1;
4212
4213 // Requests describes the minimum amount of compute resources required.
4214 // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
4215 // otherwise to an implementation-defined value.
4216 // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
4217 // +optional
4218 map<string, k8s.io.apimachinery.pkg.api.resource.Quantity> requests = 2;
4219}
4220
4221// SELinuxOptions are the labels to be applied to the container
4222message SELinuxOptions {
4223 // User is a SELinux user label that applies to the container.
4224 // +optional
4225 optional string user = 1;
4226
4227 // Role is a SELinux role label that applies to the container.
4228 // +optional
4229 optional string role = 2;
4230
4231 // Type is a SELinux type label that applies to the container.
4232 // +optional
4233 optional string type = 3;
4234
4235 // Level is SELinux level label that applies to the container.
4236 // +optional
4237 optional string level = 4;
4238}
4239
4240// ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume
4241message ScaleIOPersistentVolumeSource {
4242 // The host address of the ScaleIO API Gateway.
4243 optional string gateway = 1;
4244
4245 // The name of the storage system as configured in ScaleIO.
4246 optional string system = 2;
4247
4248 // SecretRef references to the secret for ScaleIO user and other
4249 // sensitive information. If this is not provided, Login operation will fail.
4250 optional SecretReference secretRef = 3;
4251
4252 // Flag to enable/disable SSL communication with Gateway, default false
4253 // +optional
4254 optional bool sslEnabled = 4;
4255
4256 // The name of the ScaleIO Protection Domain for the configured storage.
4257 // +optional
4258 optional string protectionDomain = 5;
4259
4260 // The ScaleIO Storage Pool associated with the protection domain.
4261 // +optional
4262 optional string storagePool = 6;
4263
4264 // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.
4265 // Default is ThinProvisioned.
4266 // +optional
4267 optional string storageMode = 7;
4268
4269 // The name of a volume already created in the ScaleIO system
4270 // that is associated with this volume source.
4271 optional string volumeName = 8;
4272
4273 // Filesystem type to mount.
4274 // Must be a filesystem type supported by the host operating system.
4275 // Ex. "ext4", "xfs", "ntfs".
4276 // Default is "xfs"
4277 // +optional
4278 optional string fsType = 9;
4279
4280 // Defaults to false (read/write). ReadOnly here will force
4281 // the ReadOnly setting in VolumeMounts.
4282 // +optional
4283 optional bool readOnly = 10;
4284}
4285
4286// ScaleIOVolumeSource represents a persistent ScaleIO volume
4287message ScaleIOVolumeSource {
4288 // The host address of the ScaleIO API Gateway.
4289 optional string gateway = 1;
4290
4291 // The name of the storage system as configured in ScaleIO.
4292 optional string system = 2;
4293
4294 // SecretRef references to the secret for ScaleIO user and other
4295 // sensitive information. If this is not provided, Login operation will fail.
4296 optional LocalObjectReference secretRef = 3;
4297
4298 // Flag to enable/disable SSL communication with Gateway, default false
4299 // +optional
4300 optional bool sslEnabled = 4;
4301
4302 // The name of the ScaleIO Protection Domain for the configured storage.
4303 // +optional
4304 optional string protectionDomain = 5;
4305
4306 // The ScaleIO Storage Pool associated with the protection domain.
4307 // +optional
4308 optional string storagePool = 6;
4309
4310 // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.
4311 // Default is ThinProvisioned.
4312 // +optional
4313 optional string storageMode = 7;
4314
4315 // The name of a volume already created in the ScaleIO system
4316 // that is associated with this volume source.
4317 optional string volumeName = 8;
4318
4319 // Filesystem type to mount.
4320 // Must be a filesystem type supported by the host operating system.
4321 // Ex. "ext4", "xfs", "ntfs".
4322 // Default is "xfs".
4323 // +optional
4324 optional string fsType = 9;
4325
4326 // Defaults to false (read/write). ReadOnly here will force
4327 // the ReadOnly setting in VolumeMounts.
4328 // +optional
4329 optional bool readOnly = 10;
4330}
4331
4332// A scope selector represents the AND of the selectors represented
4333// by the scoped-resource selector requirements.
4334message ScopeSelector {
4335 // A list of scope selector requirements by scope of the resources.
4336 // +optional
4337 repeated ScopedResourceSelectorRequirement matchExpressions = 1;
4338}
4339
4340// A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator
4341// that relates the scope name and values.
4342message ScopedResourceSelectorRequirement {
4343 // The name of the scope that the selector applies to.
4344 optional string scopeName = 1;
4345
4346 // Represents a scope's relationship to a set of values.
4347 // Valid operators are In, NotIn, Exists, DoesNotExist.
4348 optional string operator = 2;
4349
4350 // An array of string values. If the operator is In or NotIn,
4351 // the values array must be non-empty. If the operator is Exists or DoesNotExist,
4352 // the values array must be empty.
4353 // This array is replaced during a strategic merge patch.
4354 // +optional
4355 repeated string values = 3;
4356}
4357
4358// SeccompProfile defines a pod/container's seccomp profile settings.
4359// Only one profile source may be set.
4360// +union
4361message SeccompProfile {
4362 // type indicates which kind of seccomp profile will be applied.
4363 // Valid options are:
4364 //
4365 // Localhost - a profile defined in a file on the node should be used.
4366 // RuntimeDefault - the container runtime default profile should be used.
4367 // Unconfined - no profile should be applied.
4368 // +unionDiscriminator
4369 optional string type = 1;
4370
4371 // localhostProfile indicates a profile defined in a file on the node should be used.
4372 // The profile must be preconfigured on the node to work.
4373 // Must be a descending path, relative to the kubelet's configured seccomp profile location.
4374 // Must only be set if type is "Localhost".
4375 // +optional
4376 optional string localhostProfile = 2;
4377}
4378
4379// Secret holds secret data of a certain type. The total bytes of the values in
4380// the Data field must be less than MaxSecretSize bytes.
4381message Secret {
4382 // Standard object's metadata.
4383 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4384 // +optional
4385 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4386
4387 // Immutable, if set to true, ensures that data stored in the Secret cannot
4388 // be updated (only object metadata can be modified).
4389 // If not set to true, the field can be modified at any time.
4390 // Defaulted to nil.
4391 // This is a beta field enabled by ImmutableEphemeralVolumes feature gate.
4392 // +optional
4393 optional bool immutable = 5;
4394
4395 // Data contains the secret data. Each key must consist of alphanumeric
4396 // characters, '-', '_' or '.'. The serialized form of the secret data is a
4397 // base64 encoded string, representing the arbitrary (possibly non-string)
4398 // data value here. Described in https://tools.ietf.org/html/rfc4648#section-4
4399 // +optional
4400 map<string, bytes> data = 2;
4401
4402 // stringData allows specifying non-binary secret data in string form.
4403 // It is provided as a write-only convenience method.
4404 // All keys and values are merged into the data field on write, overwriting any existing values.
4405 // It is never output when reading from the API.
4406 // +k8s:conversion-gen=false
4407 // +optional
4408 map<string, string> stringData = 4;
4409
4410 // Used to facilitate programmatic handling of secret data.
4411 // +optional
4412 optional string type = 3;
4413}
4414
4415// SecretEnvSource selects a Secret to populate the environment
4416// variables with.
4417//
4418// The contents of the target Secret's Data field will represent the
4419// key-value pairs as environment variables.
4420message SecretEnvSource {
4421 // The Secret to select from.
4422 optional LocalObjectReference localObjectReference = 1;
4423
4424 // Specify whether the Secret must be defined
4425 // +optional
4426 optional bool optional = 2;
4427}
4428
4429// SecretKeySelector selects a key of a Secret.
4430message SecretKeySelector {
4431 // The name of the secret in the pod's namespace to select from.
4432 optional LocalObjectReference localObjectReference = 1;
4433
4434 // The key of the secret to select from. Must be a valid secret key.
4435 optional string key = 2;
4436
4437 // Specify whether the Secret or its key must be defined
4438 // +optional
4439 optional bool optional = 3;
4440}
4441
4442// SecretList is a list of Secret.
4443message SecretList {
4444 // Standard list metadata.
4445 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
4446 // +optional
4447 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
4448
4449 // Items is a list of secret objects.
4450 // More info: https://kubernetes.io/docs/concepts/configuration/secret
4451 repeated Secret items = 2;
4452}
4453
4454// Adapts a secret into a projected volume.
4455//
4456// The contents of the target Secret's Data field will be presented in a
4457// projected volume as files using the keys in the Data field as the file names.
4458// Note that this is identical to a secret volume source without the default
4459// mode.
4460message SecretProjection {
4461 optional LocalObjectReference localObjectReference = 1;
4462
4463 // If unspecified, each key-value pair in the Data field of the referenced
4464 // Secret will be projected into the volume as a file whose name is the
4465 // key and content is the value. If specified, the listed keys will be
4466 // projected into the specified paths, and unlisted keys will not be
4467 // present. If a key is specified which is not present in the Secret,
4468 // the volume setup will error unless it is marked optional. Paths must be
4469 // relative and may not contain the '..' path or start with '..'.
4470 // +optional
4471 repeated KeyToPath items = 2;
4472
4473 // Specify whether the Secret or its key must be defined
4474 // +optional
4475 optional bool optional = 4;
4476}
4477
4478// SecretReference represents a Secret Reference. It has enough information to retrieve secret
4479// in any namespace
4480message SecretReference {
4481 // Name is unique within a namespace to reference a secret resource.
4482 // +optional
4483 optional string name = 1;
4484
4485 // Namespace defines the space within which the secret name must be unique.
4486 // +optional
4487 optional string namespace = 2;
4488}
4489
4490// Adapts a Secret into a volume.
4491//
4492// The contents of the target Secret's Data field will be presented in a volume
4493// as files using the keys in the Data field as the file names.
4494// Secret volumes support ownership management and SELinux relabeling.
4495message SecretVolumeSource {
4496 // Name of the secret in the pod's namespace to use.
4497 // More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
4498 // +optional
4499 optional string secretName = 1;
4500
4501 // If unspecified, each key-value pair in the Data field of the referenced
4502 // Secret will be projected into the volume as a file whose name is the
4503 // key and content is the value. If specified, the listed keys will be
4504 // projected into the specified paths, and unlisted keys will not be
4505 // present. If a key is specified which is not present in the Secret,
4506 // the volume setup will error unless it is marked optional. Paths must be
4507 // relative and may not contain the '..' path or start with '..'.
4508 // +optional
4509 repeated KeyToPath items = 2;
4510
4511 // Optional: mode bits used to set permissions on created files by default.
4512 // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511.
4513 // YAML accepts both octal and decimal values, JSON requires decimal values
4514 // for mode bits. Defaults to 0644.
4515 // Directories within the path are not affected by this setting.
4516 // This might be in conflict with other options that affect the file
4517 // mode, like fsGroup, and the result can be other mode bits set.
4518 // +optional
4519 optional int32 defaultMode = 3;
4520
4521 // Specify whether the Secret or its keys must be defined
4522 // +optional
4523 optional bool optional = 4;
4524}
4525
4526// SecurityContext holds security configuration that will be applied to a container.
4527// Some fields are present in both SecurityContext and PodSecurityContext. When both
4528// are set, the values in SecurityContext take precedence.
4529message SecurityContext {
4530 // The capabilities to add/drop when running containers.
4531 // Defaults to the default set of capabilities granted by the container runtime.
4532 // +optional
4533 optional Capabilities capabilities = 1;
4534
4535 // Run container in privileged mode.
4536 // Processes in privileged containers are essentially equivalent to root on the host.
4537 // Defaults to false.
4538 // +optional
4539 optional bool privileged = 2;
4540
4541 // The SELinux context to be applied to the container.
4542 // If unspecified, the container runtime will allocate a random SELinux context for each
4543 // container. May also be set in PodSecurityContext. If set in both SecurityContext and
4544 // PodSecurityContext, the value specified in SecurityContext takes precedence.
4545 // +optional
4546 optional SELinuxOptions seLinuxOptions = 3;
4547
4548 // The Windows specific settings applied to all containers.
4549 // If unspecified, the options from the PodSecurityContext will be used.
4550 // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
4551 // +optional
4552 optional WindowsSecurityContextOptions windowsOptions = 10;
4553
4554 // The UID to run the entrypoint of the container process.
4555 // Defaults to user specified in image metadata if unspecified.
4556 // May also be set in PodSecurityContext. If set in both SecurityContext and
4557 // PodSecurityContext, the value specified in SecurityContext takes precedence.
4558 // +optional
4559 optional int64 runAsUser = 4;
4560
4561 // The GID to run the entrypoint of the container process.
4562 // Uses runtime default if unset.
4563 // May also be set in PodSecurityContext. If set in both SecurityContext and
4564 // PodSecurityContext, the value specified in SecurityContext takes precedence.
4565 // +optional
4566 optional int64 runAsGroup = 8;
4567
4568 // Indicates that the container must run as a non-root user.
4569 // If true, the Kubelet will validate the image at runtime to ensure that it
4570 // does not run as UID 0 (root) and fail to start the container if it does.
4571 // If unset or false, no such validation will be performed.
4572 // May also be set in PodSecurityContext. If set in both SecurityContext and
4573 // PodSecurityContext, the value specified in SecurityContext takes precedence.
4574 // +optional
4575 optional bool runAsNonRoot = 5;
4576
4577 // Whether this container has a read-only root filesystem.
4578 // Default is false.
4579 // +optional
4580 optional bool readOnlyRootFilesystem = 6;
4581
4582 // AllowPrivilegeEscalation controls whether a process can gain more
4583 // privileges than its parent process. This bool directly controls if
4584 // the no_new_privs flag will be set on the container process.
4585 // AllowPrivilegeEscalation is true always when the container is:
4586 // 1) run as Privileged
4587 // 2) has CAP_SYS_ADMIN
4588 // +optional
4589 optional bool allowPrivilegeEscalation = 7;
4590
4591 // procMount denotes the type of proc mount to use for the containers.
4592 // The default is DefaultProcMount which uses the container runtime defaults for
4593 // readonly paths and masked paths.
4594 // This requires the ProcMountType feature flag to be enabled.
4595 // +optional
4596 optional string procMount = 9;
4597
4598 // The seccomp options to use by this container. If seccomp options are
4599 // provided at both the pod & container level, the container options
4600 // override the pod options.
4601 // +optional
4602 optional SeccompProfile seccompProfile = 11;
4603}
4604
4605// SerializedReference is a reference to serialized object.
4606message SerializedReference {
4607 // The reference to an object in the system.
4608 // +optional
4609 optional ObjectReference reference = 1;
4610}
4611
4612// Service is a named abstraction of software service (for example, mysql) consisting of local port
4613// (for example 3306) that the proxy listens on, and the selector that determines which pods
4614// will answer requests sent through the proxy.
4615message Service {
4616 // Standard object's metadata.
4617 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4618 // +optional
4619 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4620
4621 // Spec defines the behavior of a service.
4622 // https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4623 // +optional
4624 optional ServiceSpec spec = 2;
4625
4626 // Most recently observed status of the service.
4627 // Populated by the system.
4628 // Read-only.
4629 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
4630 // +optional
4631 optional ServiceStatus status = 3;
4632}
4633
4634// ServiceAccount binds together:
4635// * a name, understood by users, and perhaps by peripheral systems, for an identity
4636// * a principal that can be authenticated and authorized
4637// * a set of secrets
4638message ServiceAccount {
4639 // Standard object's metadata.
4640 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
4641 // +optional
4642 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;
4643
4644 // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount.
4645 // More info: https://kubernetes.io/docs/concepts/configuration/secret
4646 // +optional
4647 // +patchMergeKey=name
4648 // +patchStrategy=merge
4649 repeated ObjectReference secrets = 2;
4650
4651 // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images
4652 // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets
4653 // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet.
4654 // More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
4655 // +optional
4656 repeated LocalObjectReference imagePullSecrets = 3;
4657
4658 // AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted.
4659 // Can be overridden at the pod level.
4660 // +optional
4661 optional bool automountServiceAccountToken = 4;
4662}
4663
4664// ServiceAccountList is a list of ServiceAccount objects
4665message ServiceAccountList {
4666 // Standard list metadata.
4667 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
4668 // +optional
4669 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
4670
4671 // List of ServiceAccounts.
4672 // More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
4673 repeated ServiceAccount items = 2;
4674}
4675
4676// ServiceAccountTokenProjection represents a projected service account token
4677// volume. This projection can be used to insert a service account token into
4678// the pods runtime filesystem for use against APIs (Kubernetes API Server or
4679// otherwise).
4680message ServiceAccountTokenProjection {
4681 // Audience is the intended audience of the token. A recipient of a token
4682 // must identify itself with an identifier specified in the audience of the
4683 // token, and otherwise should reject the token. The audience defaults to the
4684 // identifier of the apiserver.
4685 // +optional
4686 optional string audience = 1;
4687
4688 // ExpirationSeconds is the requested duration of validity of the service
4689 // account token. As the token approaches expiration, the kubelet volume
4690 // plugin will proactively rotate the service account token. The kubelet will
4691 // start trying to rotate the token if the token is older than 80 percent of
4692 // its time to live or if the token is older than 24 hours.Defaults to 1 hour
4693 // and must be at least 10 minutes.
4694 // +optional
4695 optional int64 expirationSeconds = 2;
4696
4697 // Path is the path relative to the mount point of the file to project the
4698 // token into.
4699 optional string path = 3;
4700}
4701
4702// ServiceList holds a list of services.
4703message ServiceList {
4704 // Standard list metadata.
4705 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
4706 // +optional
4707 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;
4708
4709 // List of services
4710 repeated Service items = 2;
4711}
4712
4713// ServicePort contains information on service's port.
4714message ServicePort {
4715 // The name of this port within the service. This must be a DNS_LABEL.
4716 // All ports within a ServiceSpec must have unique names. When considering
4717 // the endpoints for a Service, this must match the 'name' field in the
4718 // EndpointPort.
4719 // Optional if only one ServicePort is defined on this service.
4720 // +optional
4721 optional string name = 1;
4722
4723 // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
4724 // Default is TCP.
4725 // +optional
4726 optional string protocol = 2;
4727
4728 // The application protocol for this port.
4729 // This field follows standard Kubernetes label syntax.
4730 // Un-prefixed names are reserved for IANA standard service names (as per
4731 // RFC-6335 and http://www.iana.org/assignments/service-names).
4732 // Non-standard protocols should use prefixed names such as
4733 // mycompany.com/my-custom-protocol.
4734 // This is a beta field that is guarded by the ServiceAppProtocol feature
4735 // gate and enabled by default.
4736 // +optional
4737 optional string appProtocol = 6;
4738
4739 // The port that will be exposed by this service.
4740 optional int32 port = 3;
4741
4742 // Number or name of the port to access on the pods targeted by the service.
4743 // Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.
4744 // If this is a string, it will be looked up as a named port in the
4745 // target Pod's container ports. If this is not specified, the value
4746 // of the 'port' field is used (an identity map).
4747 // This field is ignored for services with clusterIP=None, and should be
4748 // omitted or set equal to the 'port' field.
4749 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
4750 // +optional
4751 optional k8s.io.apimachinery.pkg.util.intstr.IntOrString targetPort = 4;
4752
4753 // The port on each node on which this service is exposed when type=NodePort or LoadBalancer.
4754 // Usually assigned by the system. If specified, it will be allocated to the service
4755 // if unused or else creation of the service will fail.
4756 // Default is to auto-allocate a port if the ServiceType of this Service requires one.
4757 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
4758 // +optional
4759 optional int32 nodePort = 5;
4760}
4761
4762// ServiceProxyOptions is the query options to a Service's proxy call.
4763message ServiceProxyOptions {
4764 // Path is the part of URLs that include service endpoints, suffixes,
4765 // and parameters to use for the current proxy request to service.
4766 // For example, the whole request URL is
4767 // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy.
4768 // Path is _search?q=user:kimchy.
4769 // +optional
4770 optional string path = 1;
4771}
4772
4773// ServiceSpec describes the attributes that a user creates on a service.
4774message ServiceSpec {
4775 // The list of ports that are exposed by this service.
4776 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
4777 // +patchMergeKey=port
4778 // +patchStrategy=merge
4779 // +listType=map
4780 // +listMapKey=port
4781 // +listMapKey=protocol
4782 repeated ServicePort ports = 1;
4783
4784 // Route service traffic to pods with label keys and values matching this
4785 // selector. If empty or not present, the service is assumed to have an
4786 // external process managing its endpoints, which Kubernetes will not
4787 // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer.
4788 // Ignored if type is ExternalName.
4789 // More info: https://kubernetes.io/docs/concepts/services-networking/service/
4790 // +optional
4791 map<string, string> selector = 2;
4792
4793 // clusterIP is the IP address of the service and is usually assigned
4794 // randomly by the master. If an address is specified manually and is not in
4795 // use by others, it will be allocated to the service; otherwise, creation
4796 // of the service will fail. This field can not be changed through updates.
4797 // Valid values are "None", empty string (""), or a valid IP address. "None"
4798 // can be specified for headless services when proxying is not required.
4799 // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if
4800 // type is ExternalName.
4801 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
4802 // +optional
4803 optional string clusterIP = 3;
4804
4805 // type determines how the Service is exposed. Defaults to ClusterIP. Valid
4806 // options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
4807 // "ExternalName" maps to the specified externalName.
4808 // "ClusterIP" allocates a cluster-internal IP address for load-balancing to
4809 // endpoints. Endpoints are determined by the selector or if that is not
4810 // specified, by manual construction of an Endpoints object. If clusterIP is
4811 // "None", no virtual IP is allocated and the endpoints are published as a
4812 // set of endpoints rather than a stable IP.
4813 // "NodePort" builds on ClusterIP and allocates a port on every node which
4814 // routes to the clusterIP.
4815 // "LoadBalancer" builds on NodePort and creates an
4816 // external load-balancer (if supported in the current cloud) which routes
4817 // to the clusterIP.
4818 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
4819 // +optional
4820 optional string type = 4;
4821
4822 // externalIPs is a list of IP addresses for which nodes in the cluster
4823 // will also accept traffic for this service. These IPs are not managed by
4824 // Kubernetes. The user is responsible for ensuring that traffic arrives
4825 // at a node with this IP. A common example is external load-balancers
4826 // that are not part of the Kubernetes system.
4827 // +optional
4828 repeated string externalIPs = 5;
4829
4830 // Supports "ClientIP" and "None". Used to maintain session affinity.
4831 // Enable client IP based session affinity.
4832 // Must be ClientIP or None.
4833 // Defaults to None.
4834 // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
4835 // +optional
4836 optional string sessionAffinity = 7;
4837
4838 // Only applies to Service Type: LoadBalancer
4839 // LoadBalancer will get created with the IP specified in this field.
4840 // This feature depends on whether the underlying cloud-provider supports specifying
4841 // the loadBalancerIP when a load balancer is created.
4842 // This field will be ignored if the cloud-provider does not support the feature.
4843 // +optional
4844 optional string loadBalancerIP = 8;
4845
4846 // If specified and supported by the platform, this will restrict traffic through the cloud-provider
4847 // load-balancer will be restricted to the specified client IPs. This field will be ignored if the
4848 // cloud-provider does not support the feature."
4849 // More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/
4850 // +optional
4851 repeated string loadBalancerSourceRanges = 9;
4852
4853 // externalName is the external reference that kubedns or equivalent will
4854 // return as a CNAME record for this service. No proxying will be involved.
4855 // Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
4856 // and requires Type to be ExternalName.
4857 // +optional
4858 optional string externalName = 10;
4859
4860 // externalTrafficPolicy denotes if this Service desires to route external
4861 // traffic to node-local or cluster-wide endpoints. "Local" preserves the
4862 // client source IP and avoids a second hop for LoadBalancer and Nodeport
4863 // type services, but risks potentially imbalanced traffic spreading.
4864 // "Cluster" obscures the client source IP and may cause a second hop to
4865 // another node, but should have good overall load-spreading.
4866 // +optional
4867 optional string externalTrafficPolicy = 11;
4868
4869 // healthCheckNodePort specifies the healthcheck nodePort for the service.
4870 // If not specified, HealthCheckNodePort is created by the service api
4871 // backend with the allocated nodePort. Will use user-specified nodePort value
4872 // if specified by the client. Only effects when Type is set to LoadBalancer
4873 // and ExternalTrafficPolicy is set to Local.
4874 // +optional
4875 optional int32 healthCheckNodePort = 12;
4876
4877 // publishNotReadyAddresses indicates that any agent which deals with endpoints for this
4878 // Service should disregard any indications of ready/not-ready.
4879 // The primary use case for setting this field is for a StatefulSet's Headless Service to
4880 // propagate SRV DNS records for its Pods for the purpose of peer discovery.
4881 // The Kubernetes controllers that generate Endpoints and EndpointSlice resources for
4882 // Services interpret this to mean that all endpoints are considered "ready" even if the
4883 // Pods themselves are not. Agents which consume only Kubernetes generated endpoints
4884 // through the Endpoints or EndpointSlice resources can safely assume this behavior.
4885 // +optional
4886 optional bool publishNotReadyAddresses = 13;
4887
4888 // sessionAffinityConfig contains the configurations of session affinity.
4889 // +optional
4890 optional SessionAffinityConfig sessionAffinityConfig = 14;
4891
4892 // ipFamily specifies whether this Service has a preference for a particular IP family (e.g.
4893 // IPv4 vs. IPv6) when the IPv6DualStack feature gate is enabled. In a dual-stack cluster,
4894 // you can specify ipFamily when creating a ClusterIP Service to determine whether the
4895 // controller will allocate an IPv4 or IPv6 IP for it, and you can specify ipFamily when
4896 // creating a headless Service to determine whether it will have IPv4 or IPv6 Endpoints. In
4897 // either case, if you do not specify an ipFamily explicitly, it will default to the
4898 // cluster's primary IP family.
4899 // This field is part of an alpha feature, and you should not make any assumptions about its
4900 // semantics other than those described above. In particular, you should not assume that it
4901 // can (or cannot) be changed after creation time; that it can only have the values "IPv4"
4902 // and "IPv6"; or that its current value on a given Service correctly reflects the current
4903 // state of that Service. (For ClusterIP Services, look at clusterIP to see if the Service
4904 // is IPv4 or IPv6. For headless Services, look at the endpoints, which may be dual-stack in
4905 // the future. For ExternalName Services, ipFamily has no meaning, but it may be set to an
4906 // irrelevant value anyway.)
4907 // +optional
4908 optional string ipFamily = 15;
4909
4910 // topologyKeys is a preference-order list of topology keys which
4911 // implementations of services should use to preferentially sort endpoints
4912 // when accessing this Service, it can not be used at the same time as
4913 // externalTrafficPolicy=Local.
4914 // Topology keys must be valid label keys and at most 16 keys may be specified.
4915 // Endpoints are chosen based on the first topology key with available backends.
4916 // If this field is specified and all entries have no backends that match
4917 // the topology of the client, the service has no backends for that client
4918 // and connections should fail.
4919 // The special value "*" may be used to mean "any topology". This catch-all
4920 // value, if used, only makes sense as the last value in the list.
4921 // If this is not specified or empty, no topology constraints will be applied.
4922 // +optional
4923 repeated string topologyKeys = 16;
4924}
4925
4926// ServiceStatus represents the current status of a service.
4927message ServiceStatus {
4928 // LoadBalancer contains the current status of the load-balancer,
4929 // if one is present.
4930 // +optional
4931 optional LoadBalancerStatus loadBalancer = 1;
4932}
4933
4934// SessionAffinityConfig represents the configurations of session affinity.
4935message SessionAffinityConfig {
4936 // clientIP contains the configurations of Client IP based session affinity.
4937 // +optional
4938 optional ClientIPConfig clientIP = 1;
4939}
4940
4941// Represents a StorageOS persistent volume resource.
4942message StorageOSPersistentVolumeSource {
4943 // VolumeName is the human-readable name of the StorageOS volume. Volume
4944 // names are only unique within a namespace.
4945 optional string volumeName = 1;
4946
4947 // VolumeNamespace specifies the scope of the volume within StorageOS. If no
4948 // namespace is specified then the Pod's namespace will be used. This allows the
4949 // Kubernetes name scoping to be mirrored within StorageOS for tighter integration.
4950 // Set VolumeName to any name to override the default behaviour.
4951 // Set to "default" if you are not using namespaces within StorageOS.
4952 // Namespaces that do not pre-exist within StorageOS will be created.
4953 // +optional
4954 optional string volumeNamespace = 2;
4955
4956 // Filesystem type to mount.
4957 // Must be a filesystem type supported by the host operating system.
4958 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
4959 // +optional
4960 optional string fsType = 3;
4961
4962 // Defaults to false (read/write). ReadOnly here will force
4963 // the ReadOnly setting in VolumeMounts.
4964 // +optional
4965 optional bool readOnly = 4;
4966
4967 // SecretRef specifies the secret to use for obtaining the StorageOS API
4968 // credentials. If not specified, default values will be attempted.
4969 // +optional
4970 optional ObjectReference secretRef = 5;
4971}
4972
4973// Represents a StorageOS persistent volume resource.
4974message StorageOSVolumeSource {
4975 // VolumeName is the human-readable name of the StorageOS volume. Volume
4976 // names are only unique within a namespace.
4977 optional string volumeName = 1;
4978
4979 // VolumeNamespace specifies the scope of the volume within StorageOS. If no
4980 // namespace is specified then the Pod's namespace will be used. This allows the
4981 // Kubernetes name scoping to be mirrored within StorageOS for tighter integration.
4982 // Set VolumeName to any name to override the default behaviour.
4983 // Set to "default" if you are not using namespaces within StorageOS.
4984 // Namespaces that do not pre-exist within StorageOS will be created.
4985 // +optional
4986 optional string volumeNamespace = 2;
4987
4988 // Filesystem type to mount.
4989 // Must be a filesystem type supported by the host operating system.
4990 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
4991 // +optional
4992 optional string fsType = 3;
4993
4994 // Defaults to false (read/write). ReadOnly here will force
4995 // the ReadOnly setting in VolumeMounts.
4996 // +optional
4997 optional bool readOnly = 4;
4998
4999 // SecretRef specifies the secret to use for obtaining the StorageOS API
5000 // credentials. If not specified, default values will be attempted.
5001 // +optional
5002 optional LocalObjectReference secretRef = 5;
5003}
5004
5005// Sysctl defines a kernel parameter to be set
5006message Sysctl {
5007 // Name of a property to set
5008 optional string name = 1;
5009
5010 // Value of a property to set
5011 optional string value = 2;
5012}
5013
5014// TCPSocketAction describes an action based on opening a socket
5015message TCPSocketAction {
5016 // Number or name of the port to access on the container.
5017 // Number must be in the range 1 to 65535.
5018 // Name must be an IANA_SVC_NAME.
5019 optional k8s.io.apimachinery.pkg.util.intstr.IntOrString port = 1;
5020
5021 // Optional: Host name to connect to, defaults to the pod IP.
5022 // +optional
5023 optional string host = 2;
5024}
5025
5026// The node this Taint is attached to has the "effect" on
5027// any pod that does not tolerate the Taint.
5028message Taint {
5029 // Required. The taint key to be applied to a node.
5030 optional string key = 1;
5031
5032 // The taint value corresponding to the taint key.
5033 // +optional
5034 optional string value = 2;
5035
5036 // Required. The effect of the taint on pods
5037 // that do not tolerate the taint.
5038 // Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
5039 optional string effect = 3;
5040
5041 // TimeAdded represents the time at which the taint was added.
5042 // It is only written for NoExecute taints.
5043 // +optional
5044 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time timeAdded = 4;
5045}
5046
5047// The pod this Toleration is attached to tolerates any taint that matches
5048// the triple <key,value,effect> using the matching operator <operator>.
5049message Toleration {
5050 // Key is the taint key that the toleration applies to. Empty means match all taint keys.
5051 // If the key is empty, operator must be Exists; this combination means to match all values and all keys.
5052 // +optional
5053 optional string key = 1;
5054
5055 // Operator represents a key's relationship to the value.
5056 // Valid operators are Exists and Equal. Defaults to Equal.
5057 // Exists is equivalent to wildcard for value, so that a pod can
5058 // tolerate all taints of a particular category.
5059 // +optional
5060 optional string operator = 2;
5061
5062 // Value is the taint value the toleration matches to.
5063 // If the operator is Exists, the value should be empty, otherwise just a regular string.
5064 // +optional
5065 optional string value = 3;
5066
5067 // Effect indicates the taint effect to match. Empty means match all taint effects.
5068 // When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
5069 // +optional
5070 optional string effect = 4;
5071
5072 // TolerationSeconds represents the period of time the toleration (which must be
5073 // of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
5074 // it is not set, which means tolerate the taint forever (do not evict). Zero and
5075 // negative values will be treated as 0 (evict immediately) by the system.
5076 // +optional
5077 optional int64 tolerationSeconds = 5;
5078}
5079
5080// A topology selector requirement is a selector that matches given label.
5081// This is an alpha feature and may change in the future.
5082message TopologySelectorLabelRequirement {
5083 // The label key that the selector applies to.
5084 optional string key = 1;
5085
5086 // An array of string values. One value must match the label to be selected.
5087 // Each entry in Values is ORed.
5088 repeated string values = 2;
5089}
5090
5091// A topology selector term represents the result of label queries.
5092// A null or empty topology selector term matches no objects.
5093// The requirements of them are ANDed.
5094// It provides a subset of functionality as NodeSelectorTerm.
5095// This is an alpha feature and may change in the future.
5096message TopologySelectorTerm {
5097 // A list of topology selector requirements by labels.
5098 // +optional
5099 repeated TopologySelectorLabelRequirement matchLabelExpressions = 1;
5100}
5101
5102// TopologySpreadConstraint specifies how to spread matching pods among the given topology.
5103message TopologySpreadConstraint {
5104 // MaxSkew describes the degree to which pods may be unevenly distributed.
5105 // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference
5106 // between the number of matching pods in the target topology and the global minimum.
5107 // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
5108 // labelSelector spread as 1/1/0:
5109 // +-------+-------+-------+
5110 // | zone1 | zone2 | zone3 |
5111 // +-------+-------+-------+
5112 // | P | P | |
5113 // +-------+-------+-------+
5114 // - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1;
5115 // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2)
5116 // violate MaxSkew(1).
5117 // - if MaxSkew is 2, incoming pod can be scheduled onto any zone.
5118 // When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence
5119 // to topologies that satisfy it.
5120 // It's a required field. Default value is 1 and 0 is not allowed.
5121 optional int32 maxSkew = 1;
5122
5123 // TopologyKey is the key of node labels. Nodes that have a label with this key
5124 // and identical values are considered to be in the same topology.
5125 // We consider each <key, value> as a "bucket", and try to put balanced number
5126 // of pods into each bucket.
5127 // It's a required field.
5128 optional string topologyKey = 2;
5129
5130 // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy
5131 // the spread constraint.
5132 // - DoNotSchedule (default) tells the scheduler not to schedule it.
5133 // - ScheduleAnyway tells the scheduler to schedule the pod in any location,
5134 // but giving higher precedence to topologies that would help reduce the
5135 // skew.
5136 // A constraint is considered "Unsatisfiable" for an incoming pod
5137 // if and only if every possible node assigment for that pod would violate
5138 // "MaxSkew" on some topology.
5139 // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same
5140 // labelSelector spread as 3/1/1:
5141 // +-------+-------+-------+
5142 // | zone1 | zone2 | zone3 |
5143 // +-------+-------+-------+
5144 // | P P P | P | P |
5145 // +-------+-------+-------+
5146 // If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled
5147 // to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies
5148 // MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
5149 // won't make it *more* imbalanced.
5150 // It's a required field.
5151 optional string whenUnsatisfiable = 3;
5152
5153 // LabelSelector is used to find matching pods.
5154 // Pods that match this label selector are counted to determine the number of pods
5155 // in their corresponding topology domain.
5156 // +optional
5157 optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 4;
5158}
5159
5160// TypedLocalObjectReference contains enough information to let you locate the
5161// typed referenced object inside the same namespace.
5162message TypedLocalObjectReference {
5163 // APIGroup is the group for the resource being referenced.
5164 // If APIGroup is not specified, the specified Kind must be in the core API group.
5165 // For any other third-party types, APIGroup is required.
5166 // +optional
5167 optional string apiGroup = 1;
5168
5169 // Kind is the type of resource being referenced
5170 optional string kind = 2;
5171
5172 // Name is the name of resource being referenced
5173 optional string name = 3;
5174}
5175
5176// Volume represents a named volume in a pod that may be accessed by any container in the pod.
5177message Volume {
5178 // Volume's name.
5179 // Must be a DNS_LABEL and unique within the pod.
5180 // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
5181 optional string name = 1;
5182
5183 // VolumeSource represents the location and type of the mounted volume.
5184 // If not specified, the Volume is implied to be an EmptyDir.
5185 // This implied behavior is deprecated and will be removed in a future version.
5186 optional VolumeSource volumeSource = 2;
5187}
5188
5189// volumeDevice describes a mapping of a raw block device within a container.
5190message VolumeDevice {
5191 // name must match the name of a persistentVolumeClaim in the pod
5192 optional string name = 1;
5193
5194 // devicePath is the path inside of the container that the device will be mapped to.
5195 optional string devicePath = 2;
5196}
5197
5198// VolumeMount describes a mounting of a Volume within a container.
5199message VolumeMount {
5200 // This must match the Name of a Volume.
5201 optional string name = 1;
5202
5203 // Mounted read-only if true, read-write otherwise (false or unspecified).
5204 // Defaults to false.
5205 // +optional
5206 optional bool readOnly = 2;
5207
5208 // Path within the container at which the volume should be mounted. Must
5209 // not contain ':'.
5210 optional string mountPath = 3;
5211
5212 // Path within the volume from which the container's volume should be mounted.
5213 // Defaults to "" (volume's root).
5214 // +optional
5215 optional string subPath = 4;
5216
5217 // mountPropagation determines how mounts are propagated from the host
5218 // to container and the other way around.
5219 // When not set, MountPropagationNone is used.
5220 // This field is beta in 1.10.
5221 // +optional
5222 optional string mountPropagation = 5;
5223
5224 // Expanded path within the volume from which the container's volume should be mounted.
5225 // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
5226 // Defaults to "" (volume's root).
5227 // SubPathExpr and SubPath are mutually exclusive.
5228 // +optional
5229 optional string subPathExpr = 6;
5230}
5231
5232// VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.
5233message VolumeNodeAffinity {
5234 // Required specifies hard node constraints that must be met.
5235 optional NodeSelector required = 1;
5236}
5237
5238// Projection that may be projected along with other supported volume types
5239message VolumeProjection {
5240 // information about the secret data to project
5241 // +optional
5242 optional SecretProjection secret = 1;
5243
5244 // information about the downwardAPI data to project
5245 // +optional
5246 optional DownwardAPIProjection downwardAPI = 2;
5247
5248 // information about the configMap data to project
5249 // +optional
5250 optional ConfigMapProjection configMap = 3;
5251
5252 // information about the serviceAccountToken data to project
5253 // +optional
5254 optional ServiceAccountTokenProjection serviceAccountToken = 4;
5255}
5256
5257// Represents the source of a volume to mount.
5258// Only one of its members may be specified.
5259message VolumeSource {
5260 // HostPath represents a pre-existing file or directory on the host
5261 // machine that is directly exposed to the container. This is generally
5262 // used for system agents or other privileged things that are allowed
5263 // to see the host machine. Most containers will NOT need this.
5264 // More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
5265 // ---
5266 // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
5267 // mount host directories as read/write.
5268 // +optional
5269 optional HostPathVolumeSource hostPath = 1;
5270
5271 // EmptyDir represents a temporary directory that shares a pod's lifetime.
5272 // More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
5273 // +optional
5274 optional EmptyDirVolumeSource emptyDir = 2;
5275
5276 // GCEPersistentDisk represents a GCE Disk resource that is attached to a
5277 // kubelet's host machine and then exposed to the pod.
5278 // More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
5279 // +optional
5280 optional GCEPersistentDiskVolumeSource gcePersistentDisk = 3;
5281
5282 // AWSElasticBlockStore represents an AWS Disk resource that is attached to a
5283 // kubelet's host machine and then exposed to the pod.
5284 // More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
5285 // +optional
5286 optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 4;
5287
5288 // GitRepo represents a git repository at a particular revision.
5289 // DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
5290 // EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
5291 // into the Pod's container.
5292 // +optional
5293 optional GitRepoVolumeSource gitRepo = 5;
5294
5295 // Secret represents a secret that should populate this volume.
5296 // More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
5297 // +optional
5298 optional SecretVolumeSource secret = 6;
5299
5300 // NFS represents an NFS mount on the host that shares a pod's lifetime
5301 // More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
5302 // +optional
5303 optional NFSVolumeSource nfs = 7;
5304
5305 // ISCSI represents an ISCSI Disk resource that is attached to a
5306 // kubelet's host machine and then exposed to the pod.
5307 // More info: https://examples.k8s.io/volumes/iscsi/README.md
5308 // +optional
5309 optional ISCSIVolumeSource iscsi = 8;
5310
5311 // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime.
5312 // More info: https://examples.k8s.io/volumes/glusterfs/README.md
5313 // +optional
5314 optional GlusterfsVolumeSource glusterfs = 9;
5315
5316 // PersistentVolumeClaimVolumeSource represents a reference to a
5317 // PersistentVolumeClaim in the same namespace.
5318 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
5319 // +optional
5320 optional PersistentVolumeClaimVolumeSource persistentVolumeClaim = 10;
5321
5322 // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
5323 // More info: https://examples.k8s.io/volumes/rbd/README.md
5324 // +optional
5325 optional RBDVolumeSource rbd = 11;
5326
5327 // FlexVolume represents a generic volume resource that is
5328 // provisioned/attached using an exec based plugin.
5329 // +optional
5330 optional FlexVolumeSource flexVolume = 12;
5331
5332 // Cinder represents a cinder volume attached and mounted on kubelets host machine.
5333 // More info: https://examples.k8s.io/mysql-cinder-pd/README.md
5334 // +optional
5335 optional CinderVolumeSource cinder = 13;
5336
5337 // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
5338 // +optional
5339 optional CephFSVolumeSource cephfs = 14;
5340
5341 // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
5342 // +optional
5343 optional FlockerVolumeSource flocker = 15;
5344
5345 // DownwardAPI represents downward API about the pod that should populate this volume
5346 // +optional
5347 optional DownwardAPIVolumeSource downwardAPI = 16;
5348
5349 // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
5350 // +optional
5351 optional FCVolumeSource fc = 17;
5352
5353 // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
5354 // +optional
5355 optional AzureFileVolumeSource azureFile = 18;
5356
5357 // ConfigMap represents a configMap that should populate this volume
5358 // +optional
5359 optional ConfigMapVolumeSource configMap = 19;
5360
5361 // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
5362 // +optional
5363 optional VsphereVirtualDiskVolumeSource vsphereVolume = 20;
5364
5365 // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
5366 // +optional
5367 optional QuobyteVolumeSource quobyte = 21;
5368
5369 // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
5370 // +optional
5371 optional AzureDiskVolumeSource azureDisk = 22;
5372
5373 // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
5374 optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 23;
5375
5376 // Items for all in one resources secrets, configmaps, and downward API
5377 optional ProjectedVolumeSource projected = 26;
5378
5379 // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
5380 // +optional
5381 optional PortworxVolumeSource portworxVolume = 24;
5382
5383 // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
5384 // +optional
5385 optional ScaleIOVolumeSource scaleIO = 25;
5386
5387 // StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
5388 // +optional
5389 optional StorageOSVolumeSource storageos = 27;
5390
5391 // CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).
5392 // +optional
5393 optional CSIVolumeSource csi = 28;
5394
5395 // Ephemeral represents a volume that is handled by a cluster storage driver (Alpha feature).
5396 // The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts,
5397 // and deleted when the pod is removed.
5398 //
5399 // Use this if:
5400 // a) the volume is only needed while the pod runs,
5401 // b) features of normal volumes like restoring from snapshot or capacity
5402 // tracking are needed,
5403 // c) the storage driver is specified through a storage class, and
5404 // d) the storage driver supports dynamic volume provisioning through
5405 // a PersistentVolumeClaim (see EphemeralVolumeSource for more
5406 // information on the connection between this volume type
5407 // and PersistentVolumeClaim).
5408 //
5409 // Use PersistentVolumeClaim or one of the vendor-specific
5410 // APIs for volumes that persist for longer than the lifecycle
5411 // of an individual pod.
5412 //
5413 // Use CSI for light-weight local ephemeral volumes if the CSI driver is meant to
5414 // be used that way - see the documentation of the driver for
5415 // more information.
5416 //
5417 // A pod can use both types of ephemeral volumes and
5418 // persistent volumes at the same time.
5419 //
5420 // +optional
5421 optional EphemeralVolumeSource ephemeral = 29;
5422}
5423
5424// Represents a vSphere volume resource.
5425message VsphereVirtualDiskVolumeSource {
5426 // Path that identifies vSphere volume vmdk
5427 optional string volumePath = 1;
5428
5429 // Filesystem type to mount.
5430 // Must be a filesystem type supported by the host operating system.
5431 // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
5432 // +optional
5433 optional string fsType = 2;
5434
5435 // Storage Policy Based Management (SPBM) profile name.
5436 // +optional
5437 optional string storagePolicyName = 3;
5438
5439 // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
5440 // +optional
5441 optional string storagePolicyID = 4;
5442}
5443
5444// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
5445message WeightedPodAffinityTerm {
5446 // weight associated with matching the corresponding podAffinityTerm,
5447 // in the range 1-100.
5448 optional int32 weight = 1;
5449
5450 // Required. A pod affinity term, associated with the corresponding weight.
5451 optional PodAffinityTerm podAffinityTerm = 2;
5452}
5453
5454// WindowsSecurityContextOptions contain Windows-specific options and credentials.
5455message WindowsSecurityContextOptions {
5456 // GMSACredentialSpecName is the name of the GMSA credential spec to use.
5457 // +optional
5458 optional string gmsaCredentialSpecName = 1;
5459
5460 // GMSACredentialSpec is where the GMSA admission webhook
5461 // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the
5462 // GMSA credential spec named by the GMSACredentialSpecName field.
5463 // +optional
5464 optional string gmsaCredentialSpec = 2;
5465
5466 // The UserName in Windows to run the entrypoint of the container process.
5467 // Defaults to the user specified in image metadata if unspecified.
5468 // May also be set in PodSecurityContext. If set in both SecurityContext and
5469 // PodSecurityContext, the value specified in SecurityContext takes precedence.
5470 // +optional
5471 optional string runAsUserName = 3;
5472}
5473