2014-06-06 23:40:48 +00:00
/ *
2016-06-03 00:25:58 +00:00
Copyright 2014 The Kubernetes Authors .
2014-06-06 23:40:48 +00:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package api
2014-07-01 02:46:10 +00:00
import (
2015-08-05 22:03:47 +00:00
"k8s.io/kubernetes/pkg/api/resource"
2015-09-09 21:59:11 +00:00
"k8s.io/kubernetes/pkg/api/unversioned"
2015-12-10 09:39:03 +00:00
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/labels"
2015-08-05 22:03:47 +00:00
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/types"
2015-11-10 06:28:45 +00:00
"k8s.io/kubernetes/pkg/util/intstr"
2014-07-01 02:46:10 +00:00
)
2014-06-30 22:20:19 +00:00
// Common string formats
// ---------------------
// Many fields in this API have formatting requirements. The commonly used
// formats are defined here.
//
2014-10-22 15:08:38 +00:00
// C_IDENTIFIER: This is a string that conforms to the definition of an "identifier"
2014-06-30 22:20:19 +00:00
// in the C language. This is captured by the following regex:
// [A-Za-z_][A-Za-z0-9_]*
// This defines the format, but not the length restriction, which should be
// specified at the definition of any field of this type.
//
2014-07-08 20:44:30 +00:00
// DNS_LABEL: This is a string, no more than 63 characters long, that conforms
// to the definition of a "label" in RFCs 1035 and 1123. This is captured
// by the following regex:
2014-06-30 22:20:19 +00:00
// [a-z0-9]([-a-z0-9]*[a-z0-9])?
//
2014-07-26 00:59:41 +00:00
// DNS_SUBDOMAIN: This is a string, no more than 253 characters long, that conforms
2014-07-08 20:44:30 +00:00
// to the definition of a "subdomain" in RFCs 1035 and 1123. This is captured
// by the following regex:
2014-06-30 22:20:19 +00:00
// [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*
// or more simply:
// DNS_LABEL(\.DNS_LABEL)*
2015-06-12 16:33:11 +00:00
//
// IANA_SVC_NAME: This is a string, no more than 15 characters long, that
// conforms to the definition of IANA service name in RFC 6335.
// It must contains at least one letter [a-z] and it must contains only [a-z0-9-].
// Hypens ('-') cannot be leading or trailing character of the string
// and cannot be adjacent to other hyphens.
2014-06-30 22:20:19 +00:00
2014-10-22 15:08:38 +00:00
// ObjectMeta is metadata that all persisted resources must have, which includes all objects
2015-01-27 23:56:38 +00:00
// users must create.
2014-10-22 15:08:38 +00:00
type ObjectMeta struct {
// Name is unique within a namespace. Name is required when creating resources, although
// some resources may allow a client to request the generation of an appropriate name
// automatically. Name is primarily intended for creation idempotence and configuration
// definition.
2014-12-01 05:31:52 +00:00
Name string ` json:"name,omitempty" `
2014-10-22 15:08:38 +00:00
2015-01-27 23:56:38 +00:00
// GenerateName indicates that the name should be made unique by the server prior to persisting
// it. A non-empty value for the field indicates the name will be made unique (and the name
// returned to the client will be different than the name passed). The value of this field will
// be combined with a unique suffix on the server if the Name field has not been provided.
// The provided value must be valid within the rules for Name, and may be truncated by the length
// of the suffix required to make the value unique on the server.
//
// If this field is specified, and Name is not present, the server will NOT return a 409 if the
// generated name exists - instead, it will either return 201 Created or 500 with Reason
2015-02-12 17:24:34 +00:00
// ServerTimeout indicating a unique name could not be found in the time allotted, and the client
2015-01-27 23:56:38 +00:00
// should retry (optionally after the time indicated in the Retry-After header).
GenerateName string ` json:"generateName,omitempty" `
2014-10-22 15:08:38 +00:00
// Namespace defines the space within which name must be unique. An empty namespace is
// equivalent to the "default" namespace, but "default" is the canonical representation.
// Not all objects are required to be scoped to a namespace - the value of this field for
// those objects will be empty.
2014-12-01 05:31:52 +00:00
Namespace string ` json:"namespace,omitempty" `
2014-10-22 15:08:38 +00:00
// SelfLink is a URL representing this object.
2014-12-01 05:31:52 +00:00
SelfLink string ` json:"selfLink,omitempty" `
2014-10-22 15:08:38 +00:00
// UID is the unique in time and space value for this object. It is typically generated by
// the server on successful creation of a resource and is not allowed to change on PUT
// operations.
2015-01-14 23:22:21 +00:00
UID types . UID ` json:"uid,omitempty" `
2014-10-22 15:08:38 +00:00
// An opaque value that represents the version of this resource. May be used for optimistic
// concurrency, change detection, and the watch operation on a resource or set of resources.
// Clients must treat these values as opaque and values may only be valid for a particular
// resource or set of resources. Only servers will generate resource versions.
2014-12-01 05:31:52 +00:00
ResourceVersion string ` json:"resourceVersion,omitempty" `
2014-10-22 15:08:38 +00:00
2015-06-18 19:00:19 +00:00
// A sequence number representing a specific generation of the desired state.
2016-02-23 18:03:43 +00:00
// Populated by the system. Read-only.
2015-06-18 19:00:19 +00:00
Generation int64 ` json:"generation,omitempty" `
2014-10-22 15:08:38 +00:00
// CreationTimestamp is a timestamp representing the server time when this object was
// created. It is not guaranteed to be set in happens-before order across separate operations.
// Clients may not set this value. It is represented in RFC3339 form and is in UTC.
2015-09-17 22:21:55 +00:00
CreationTimestamp unversioned . Time ` json:"creationTimestamp,omitempty" `
2014-10-22 15:08:38 +00:00
2015-03-05 03:34:31 +00:00
// DeletionTimestamp is the time after which this resource will be deleted. This
// field is set by the server when a graceful deletion is requested by the user, and is not
// directly settable by a client. The resource will be deleted (no longer visible from
// resource lists, and not reachable by name) after the time in this field. Once set, this
// value may not be unset or be set further into the future, although it may be shortened
// or the resource may be deleted prior to this time. For example, a user may request that
// a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination
// signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet
// will send a hard termination signal to the container.
2015-09-17 22:21:55 +00:00
DeletionTimestamp * unversioned . Time ` json:"deletionTimestamp,omitempty" `
2015-03-05 03:34:31 +00:00
2015-08-19 23:59:43 +00:00
// DeletionGracePeriodSeconds records the graceful deletion value set when graceful deletion
// was requested. Represents the most recent grace period, and may only be shortened once set.
DeletionGracePeriodSeconds * int64 ` json:"deletionGracePeriodSeconds,omitempty" `
2014-10-22 15:08:38 +00:00
// Labels are key value pairs that may be used to scope and select individual resources.
2014-11-20 06:27:11 +00:00
// Label keys are of the form:
// label-key ::= prefixed-name | name
// prefixed-name ::= prefix '/' name
// prefix ::= DNS_SUBDOMAIN
// name ::= DNS_LABEL
// The prefix is optional. If the prefix is not specified, the key is assumed to be private
// to the user. Other system components that wish to use labels must specify a prefix. The
// "kubernetes.io/" prefix is reserved for use by kubernetes components.
2014-10-22 15:08:38 +00:00
// TODO: replace map[string]string with labels.LabelSet type
2014-12-01 05:31:52 +00:00
Labels map [ string ] string ` json:"labels,omitempty" `
2014-10-22 15:08:38 +00:00
// Annotations are unstructured key value data stored with a resource that may be set by
// external tooling. They are not queryable and should be preserved when modifying
2014-11-20 06:27:11 +00:00
// objects. Annotation keys have the same formatting restrictions as Label keys. See the
// comments on Labels for details.
2014-12-01 05:31:52 +00:00
Annotations map [ string ] string ` json:"annotations,omitempty" `
2016-04-06 17:16:15 +00:00
// List of objects depended by this object. If ALL objects in the list have
2016-05-11 11:42:17 +00:00
// been deleted, this object will be garbage collected. If this object is managed by a controller,
// then an entry in this list will point to this controller, with the controller field set to true.
// There cannot be more than one managing controller.
2016-04-06 17:16:15 +00:00
OwnerReferences [ ] OwnerReference ` json:"ownerReferences,omitempty" `
// Must be empty before the object is deleted from the registry. Each entry
// is an identifier for the responsible component that will remove the entry
// from the list. If the deletionTimestamp of the object is non-nil, entries
// in this list can only be removed.
Finalizers [ ] string ` json:"finalizers,omitempty" `
2014-10-22 15:08:38 +00:00
}
const (
// NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
NamespaceDefault string = "default"
// NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
NamespaceAll string = ""
2014-12-12 05:39:56 +00:00
// NamespaceNone is the argument for a context when there is no namespace.
NamespaceNone string = ""
2015-06-25 04:55:40 +00:00
// NamespaceSystem is the system namespace where we place system components.
NamespaceSystem string = "kube-system"
2014-11-05 19:08:26 +00:00
// TerminationMessagePathDefault means the default path to capture the application termination message running in a container
TerminationMessagePathDefault string = "/dev/termination-log"
2014-10-22 15:08:38 +00:00
)
2014-06-16 05:34:16 +00:00
// Volume represents a named volume in a pod that may be accessed by any containers in the pod.
2014-06-06 23:40:48 +00:00
type Volume struct {
2014-07-08 20:44:30 +00:00
// Required: This must be a DNS_LABEL. Each volume in a pod must have
// a unique name.
2014-12-01 05:31:52 +00:00
Name string ` json:"name" `
2015-03-03 22:48:55 +00:00
// The VolumeSource represents the location and type of a volume to mount.
2014-07-16 19:32:59 +00:00
// This is optional for now. If not specified, the Volume is implied to be an EmptyDir.
// This implied behavior is deprecated and will be removed in a future version.
2015-03-04 23:53:32 +00:00
VolumeSource ` json:",inline,omitempty" `
2014-07-16 19:32:59 +00:00
}
2015-01-21 01:40:43 +00:00
// VolumeSource represents the source location of a volume to mount.
2014-11-13 12:01:25 +00:00
// Only one of its members may be specified.
2014-07-16 19:32:59 +00:00
type VolumeSource struct {
2015-01-20 23:56:44 +00:00
// HostPath represents file or directory on the host machine that is
// directly exposed to the container. This is generally used for system
// agents or other privileged things that are allowed to see the host
// machine. Most containers will NOT need this.
2015-07-10 18:19:53 +00:00
// ---
2014-10-22 15:08:38 +00:00
// TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
// mount host directories as read/write.
2015-05-25 17:10:14 +00:00
HostPath * HostPathVolumeSource ` json:"hostPath,omitempty" `
2014-10-01 20:35:21 +00:00
// EmptyDir represents a temporary directory that shares a pod's lifetime.
2015-05-25 17:10:14 +00:00
EmptyDir * EmptyDirVolumeSource ` json:"emptyDir,omitempty" `
2014-08-05 17:58:43 +00:00
// GCEPersistentDisk represents a GCE Disk resource that is attached to a
// kubelet's host machine and then exposed to the pod.
2015-05-25 17:10:14 +00:00
GCEPersistentDisk * GCEPersistentDiskVolumeSource ` json:"gcePersistentDisk,omitempty" `
2015-04-09 01:33:23 +00:00
// AWSElasticBlockStore represents an AWS EBS disk that is attached to a
2015-03-06 14:26:39 +00:00
// kubelet's host machine and then exposed to the pod.
2015-05-25 17:10:14 +00:00
AWSElasticBlockStore * AWSElasticBlockStoreVolumeSource ` json:"awsElasticBlockStore,omitempty" `
2014-10-21 23:23:05 +00:00
// GitRepo represents a git repository at a particular revision.
2015-05-25 17:10:14 +00:00
GitRepo * GitRepoVolumeSource ` json:"gitRepo,omitempty" `
2015-02-18 01:24:50 +00:00
// Secret represents a secret that should populate this volume.
2015-05-25 17:10:14 +00:00
Secret * SecretVolumeSource ` json:"secret,omitempty" `
2015-02-10 19:00:11 +00:00
// NFS represents an NFS mount on the host that shares a pod's lifetime
2015-05-27 17:21:48 +00:00
NFS * NFSVolumeSource ` json:"nfs,omitempty" `
2015-03-13 21:31:13 +00:00
// ISCSIVolumeSource represents an ISCSI Disk resource that is attached to a
// kubelet's host machine and then exposed to the pod.
2015-05-25 17:10:14 +00:00
ISCSI * ISCSIVolumeSource ` json:"iscsi,omitempty" `
2015-03-26 18:53:21 +00:00
// Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime
2015-05-25 17:10:14 +00:00
Glusterfs * GlusterfsVolumeSource ` json:"glusterfs,omitempty" `
2015-04-14 20:15:42 +00:00
// PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace
2015-06-10 20:57:33 +00:00
PersistentVolumeClaim * PersistentVolumeClaimVolumeSource ` json:"persistentVolumeClaim,omitempty" `
2015-04-07 17:22:23 +00:00
// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime
2015-05-25 17:10:14 +00:00
RBD * RBDVolumeSource ` json:"rbd,omitempty" `
2015-09-30 18:31:53 +00:00
// FlexVolume represents a generic volume resource that is
// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.
FlexVolume * FlexVolumeSource ` json:"flexVolume,omitempty" `
2015-04-10 16:54:01 +00:00
// Cinder represents a cinder volume attached and mounted on kubelets host machine
Cinder * CinderVolumeSource ` json:"cinder,omitempty" `
2015-09-02 17:11:25 +00:00
2015-04-09 18:05:24 +00:00
// CephFS represents a Cephfs mount on the host that shares a pod's lifetime
CephFS * CephFSVolumeSource ` json:"cephfs,omitempty" `
2015-09-02 17:11:25 +00:00
2015-09-25 19:22:23 +00:00
// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
Flocker * FlockerVolumeSource ` json:"flocker,omitempty" `
2015-02-20 05:36:23 +00:00
// DownwardAPI represents metadata about the pod that should populate this volume
DownwardAPI * DownwardAPIVolumeSource ` json:"downwardAPI,omitempty" `
2015-08-11 15:19:29 +00:00
// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
FC * FCVolumeSource ` json:"fc,omitempty" `
2015-11-13 16:47:04 +00:00
// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
AzureFile * AzureFileVolumeSource ` json:"azureFile,omitempty" `
2016-01-25 19:41:16 +00:00
// ConfigMap represents a configMap that should populate this volume
ConfigMap * ConfigMapVolumeSource ` json:"configMap,omitempty" `
2016-04-14 00:36:05 +00:00
// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
VsphereVolume * VsphereVirtualDiskVolumeSource ` json:"vsphereVolume,omitempty" `
2014-07-15 01:39:30 +00:00
}
2015-03-23 18:18:11 +00:00
// Similar to VolumeSource but meant for the administrator who creates PVs.
// Exactly one of its members must be set.
type PersistentVolumeSource struct {
// GCEPersistentDisk represents a GCE Disk resource that is attached to a
// kubelet's host machine and then exposed to the pod.
2015-05-27 17:21:48 +00:00
GCEPersistentDisk * GCEPersistentDiskVolumeSource ` json:"gcePersistentDisk,omitempty" `
2015-04-09 01:33:23 +00:00
// AWSElasticBlockStore represents an AWS EBS disk that is attached to a
2015-03-06 14:26:39 +00:00
// kubelet's host machine and then exposed to the pod.
2015-05-27 17:21:48 +00:00
AWSElasticBlockStore * AWSElasticBlockStoreVolumeSource ` json:"awsElasticBlockStore,omitempty" `
2015-03-23 18:18:11 +00:00
// HostPath represents a directory on the host.
2015-09-07 16:11:37 +00:00
// Provisioned by a developer or tester.
// This is useful for single-node development and testing only!
// On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster.
2015-05-27 17:21:48 +00:00
HostPath * HostPathVolumeSource ` json:"hostPath,omitempty" `
2015-03-26 18:53:21 +00:00
// Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod
2015-05-27 17:21:48 +00:00
Glusterfs * GlusterfsVolumeSource ` json:"glusterfs,omitempty" `
2015-04-30 16:16:51 +00:00
// NFS represents an NFS mount on the host that shares a pod's lifetime
2015-05-27 17:21:48 +00:00
NFS * NFSVolumeSource ` json:"nfs,omitempty" `
2015-04-07 17:22:23 +00:00
// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime
2015-05-27 17:21:48 +00:00
RBD * RBDVolumeSource ` json:"rbd,omitempty" `
2015-05-12 20:40:31 +00:00
// ISCSIVolumeSource represents an ISCSI resource that is attached to a
// kubelet's host machine and then exposed to the pod.
2015-05-27 17:21:48 +00:00
ISCSI * ISCSIVolumeSource ` json:"iscsi,omitempty" `
2015-09-30 18:31:53 +00:00
// FlexVolume represents a generic volume resource that is
// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.
FlexVolume * FlexVolumeSource ` json:"flexVolume,omitempty" `
2015-04-10 16:54:01 +00:00
// Cinder represents a cinder volume attached and mounted on kubelets host machine
Cinder * CinderVolumeSource ` json:"cinder,omitempty" `
2015-04-09 18:05:24 +00:00
// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
CephFS * CephFSVolumeSource ` json:"cephfs,omitempty" `
2015-08-11 15:19:29 +00:00
// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
FC * FCVolumeSource ` json:"fc,omitempty" `
2015-09-25 19:22:23 +00:00
// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
Flocker * FlockerVolumeSource ` json:"flocker,omitempty" `
2015-11-13 16:47:04 +00:00
// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
AzureFile * AzureFileVolumeSource ` json:"azureFile,omitempty" `
2016-04-14 00:36:05 +00:00
// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
VsphereVolume * VsphereVirtualDiskVolumeSource ` json:"vsphereVolume,omitempty" `
2015-03-23 18:18:11 +00:00
}
2015-04-14 20:15:42 +00:00
type PersistentVolumeClaimVolumeSource struct {
// ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume
2015-06-30 19:23:37 +00:00
ClaimName string ` json:"claimName" `
2015-04-14 20:15:42 +00:00
// Optional: Defaults to false (read/write). ReadOnly here
// will force the ReadOnly setting in VolumeMounts
ReadOnly bool ` json:"readOnly,omitempty" `
}
2016-01-12 22:05:27 +00:00
// +genclient=true,nonNamespaced=true
2015-12-11 04:11:22 +00:00
2015-03-23 18:18:11 +00:00
type PersistentVolume struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-03-23 18:18:11 +00:00
//Spec defines a persistent volume owned by the cluster
Spec PersistentVolumeSpec ` json:"spec,omitempty" `
// Status represents the current information about persistent volume.
Status PersistentVolumeStatus ` json:"status,omitempty" `
}
type PersistentVolumeSpec struct {
// Resources represents the actual resources of the volume
2015-05-10 04:09:13 +00:00
Capacity ResourceList ` json:"capacity" `
2015-03-23 18:18:11 +00:00
// Source represents the location and type of a volume to mount.
PersistentVolumeSource ` json:",inline" `
2015-03-26 19:50:36 +00:00
// AccessModes contains all ways the volume can be mounted
2015-05-18 20:22:30 +00:00
AccessModes [ ] PersistentVolumeAccessMode ` json:"accessModes,omitempty" `
2015-05-13 00:44:29 +00:00
// ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.
// ClaimRef is expected to be non-nil when bound.
// claim.VolumeName is the authoritative bind between PV and PVC.
2016-06-10 08:08:01 +00:00
// When set to non-nil value, PVC.Spec.Selector of the referenced PVC is
// ignored, i.e. labels of this PV do not need to match PVC selector.
2015-03-23 18:18:11 +00:00
ClaimRef * ObjectReference ` json:"claimRef,omitempty" `
2015-05-29 20:12:10 +00:00
// Optional: what happens to a persistent volume when released from its claim.
2015-06-30 19:23:37 +00:00
PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy ` json:"persistentVolumeReclaimPolicy,omitempty" `
2015-03-23 18:18:11 +00:00
}
2015-05-29 20:12:10 +00:00
// PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes
type PersistentVolumeReclaimPolicy string
const (
// PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim.
// The volume plugin must support Recycling.
PersistentVolumeReclaimRecycle PersistentVolumeReclaimPolicy = "Recycle"
// PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim.
// The volume plugin must support Deletion.
2015-09-07 16:11:37 +00:00
PersistentVolumeReclaimDelete PersistentVolumeReclaimPolicy = "Delete"
2016-03-28 23:13:36 +00:00
// PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.
2015-05-29 20:12:10 +00:00
// The default policy is Retain.
PersistentVolumeReclaimRetain PersistentVolumeReclaimPolicy = "Retain"
)
2015-03-23 18:18:11 +00:00
type PersistentVolumeStatus struct {
// Phase indicates if a volume is available, bound to a claim, or released by a claim
Phase PersistentVolumePhase ` json:"phase,omitempty" `
2015-05-29 20:12:10 +00:00
// A human-readable message indicating details about why the volume is in this state.
Message string ` json:"message,omitempty" `
// Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI
Reason string ` json:"reason,omitempty" `
2015-03-23 18:18:11 +00:00
}
type PersistentVolumeList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
Items [ ] PersistentVolume ` json:"items" `
2015-03-23 18:18:11 +00:00
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-03-23 18:18:11 +00:00
// PersistentVolumeClaim is a user's request for and claim to a persistent volume
type PersistentVolumeClaim struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-03-23 18:18:11 +00:00
// Spec defines the volume requested by a pod author
Spec PersistentVolumeClaimSpec ` json:"spec,omitempty" `
// Status represents the current information about a claim
Status PersistentVolumeClaimStatus ` json:"status,omitempty" `
}
type PersistentVolumeClaimList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
Items [ ] PersistentVolumeClaim ` json:"items" `
2015-03-23 18:18:11 +00:00
}
// PersistentVolumeClaimSpec describes the common attributes of storage devices
// and allows a Source for provider-specific attributes
type PersistentVolumeClaimSpec struct {
// Contains the types of access modes required
2015-05-18 20:22:30 +00:00
AccessModes [ ] PersistentVolumeAccessMode ` json:"accessModes,omitempty" `
2016-06-10 08:08:01 +00:00
// A label query over volumes to consider for binding. This selector is
// ignored when VolumeName is set
2016-05-07 03:18:54 +00:00
Selector * unversioned . LabelSelector ` json:"selector,omitempty" `
2015-03-23 18:18:11 +00:00
// Resources represents the minimum resources required
Resources ResourceRequirements ` json:"resources,omitempty" `
2016-06-10 08:08:01 +00:00
// VolumeName is the binding reference to the PersistentVolume backing this
// claim. When set to non-empty value Selector is not evaluated
2015-05-13 00:44:29 +00:00
VolumeName string ` json:"volumeName,omitempty" `
2015-03-23 18:18:11 +00:00
}
type PersistentVolumeClaimStatus struct {
// Phase represents the current phase of PersistentVolumeClaim
Phase PersistentVolumeClaimPhase ` json:"phase,omitempty" `
// AccessModes contains all ways the volume backing the PVC can be mounted
2015-05-18 20:22:30 +00:00
AccessModes [ ] PersistentVolumeAccessMode ` json:"accessModes,omitempty" `
2015-03-23 18:18:11 +00:00
// Represents the actual resources of the underlying volume
Capacity ResourceList ` json:"capacity,omitempty" `
}
2015-05-18 20:22:30 +00:00
type PersistentVolumeAccessMode string
2015-03-12 19:37:02 +00:00
const (
// can be mounted read/write mode to exactly 1 host
2015-05-18 20:22:30 +00:00
ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce"
2015-03-12 19:37:02 +00:00
// can be mounted in read-only mode to many hosts
2015-05-18 20:22:30 +00:00
ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany"
2015-03-12 19:37:02 +00:00
// can be mounted in read/write mode to many hosts
2015-05-18 20:22:30 +00:00
ReadWriteMany PersistentVolumeAccessMode = "ReadWriteMany"
2015-03-12 19:37:02 +00:00
)
2015-03-23 18:18:11 +00:00
type PersistentVolumePhase string
const (
2015-04-21 15:05:15 +00:00
// used for PersistentVolumes that are not available
VolumePending PersistentVolumePhase = "Pending"
2015-03-23 18:18:11 +00:00
// used for PersistentVolumes that are not yet bound
2015-05-29 20:12:10 +00:00
// Available volumes are held by the binder and matched to PersistentVolumeClaims
2015-03-23 18:18:11 +00:00
VolumeAvailable PersistentVolumePhase = "Available"
// used for PersistentVolumes that are bound
VolumeBound PersistentVolumePhase = "Bound"
// used for PersistentVolumes where the bound PersistentVolumeClaim was deleted
// released volumes must be recycled before becoming available again
2015-05-29 20:12:10 +00:00
// this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource
2015-03-23 18:18:11 +00:00
VolumeReleased PersistentVolumePhase = "Released"
2015-05-29 20:12:10 +00:00
// used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim
VolumeFailed PersistentVolumePhase = "Failed"
2015-03-23 18:18:11 +00:00
)
type PersistentVolumeClaimPhase string
const (
// used for PersistentVolumeClaims that are not yet bound
ClaimPending PersistentVolumeClaimPhase = "Pending"
// used for PersistentVolumeClaims that are bound
ClaimBound PersistentVolumeClaimPhase = "Bound"
2016-05-17 12:55:10 +00:00
// used for PersistentVolumeClaims that lost their underlying
// PersistentVolume. The claim was bound to a PersistentVolume and this
// volume does not exist any longer and all data on it was lost.
ClaimLost PersistentVolumeClaimPhase = "Lost"
2015-03-23 18:18:11 +00:00
)
2015-12-14 18:59:07 +00:00
// Represents a host path mapped into a pod.
// Host path volumes do not support ownership management or SELinux relabeling.
2015-02-20 06:27:27 +00:00
type HostPathVolumeSource struct {
2014-12-01 05:31:52 +00:00
Path string ` json:"path" `
2014-06-06 23:40:48 +00:00
}
2015-12-14 18:59:07 +00:00
// Represents an empty directory for a pod.
// Empty directory volumes support ownership management and SELinux relabeling.
2015-03-07 20:35:00 +00:00
type EmptyDirVolumeSource struct {
// TODO: Longer term we want to represent the selection of underlying
// media more like a scheduling problem - user says what traits they
2016-06-22 09:40:52 +00:00
// need, we give them a backing store that satisfies that. For now
2015-03-07 20:35:00 +00:00
// this will cover the most common needs.
// Optional: what type of storage medium should back this directory.
// The default is "" which means to use the node's default medium.
2015-12-14 18:59:07 +00:00
Medium StorageMedium ` json:"medium,omitempty" `
2015-03-07 20:35:00 +00:00
}
2015-05-18 20:26:09 +00:00
// StorageMedium defines ways that storage can be allocated to a volume.
type StorageMedium string
2015-03-07 20:35:00 +00:00
const (
2015-05-18 20:26:09 +00:00
StorageMediumDefault StorageMedium = "" // use whatever the default is for the node
StorageMediumMemory StorageMedium = "Memory" // use memory (tmpfs)
2015-03-07 20:35:00 +00:00
)
2014-07-16 19:32:59 +00:00
2016-02-12 19:33:32 +00:00
// Protocol defines network protocols supported for things like container ports.
2014-09-28 03:31:37 +00:00
type Protocol string
const (
// ProtocolTCP is the TCP protocol.
ProtocolTCP Protocol = "TCP"
// ProtocolUDP is the UDP protocol.
ProtocolUDP Protocol = "UDP"
)
2015-12-14 18:59:07 +00:00
// Represents a Persistent Disk resource in Google Compute Engine.
2014-11-13 12:01:25 +00:00
//
2016-02-24 16:01:53 +00:00
// A GCE PD must exist before mounting to a container. The disk must
// also be in the same GCE project and zone as the kubelet. A GCE PD
// can only be mounted as read/write once or read-only many times. GCE
// PDs support ownership management and SELinux relabeling.
2015-02-20 06:27:27 +00:00
type GCEPersistentDiskVolumeSource struct {
2014-08-05 17:58:43 +00:00
// Unique name of the PD resource. Used to identify the disk in GCE
2014-12-01 05:31:52 +00:00
PDName string ` json:"pdName" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2014-08-05 17:58:43 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2014-08-05 17:58:43 +00:00
// TODO: how do we prevent errors in the filesystem from compromising the machine
2014-12-01 05:31:52 +00:00
FSType string ` json:"fsType,omitempty" `
2014-08-05 17:58:43 +00:00
// Optional: Partition on the disk to mount.
// If omitted, kubelet will attempt to mount the device name.
// Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty.
2016-04-27 04:35:02 +00:00
Partition int32 ` json:"partition,omitempty" `
2014-08-05 17:58:43 +00:00
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
2014-12-01 05:31:52 +00:00
ReadOnly bool ` json:"readOnly,omitempty" `
2015-03-13 21:31:13 +00:00
}
2015-12-14 18:59:07 +00:00
// Represents an ISCSI disk.
// ISCSI volumes can only be mounted as read/write once.
// ISCSI volumes support ownership management and SELinux relabeling.
2015-03-13 21:31:13 +00:00
type ISCSIVolumeSource struct {
// Required: iSCSI target portal
// the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260)
TargetPortal string ` json:"targetPortal,omitempty" `
// Required: target iSCSI Qualified Name
IQN string ` json:"iqn,omitempty" `
// Required: iSCSI target lun number
2016-04-27 04:35:02 +00:00
Lun int32 ` json:"lun,omitempty" `
2015-11-05 19:06:20 +00:00
// Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.
ISCSIInterface string ` json:"iscsiInterface,omitempty" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2015-04-07 20:33:54 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2015-04-07 20:33:54 +00:00
// TODO: how do we prevent errors in the filesystem from compromising the machine
FSType string ` json:"fsType,omitempty" `
2015-03-06 14:26:39 +00:00
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a Fibre Channel volume.
// Fibre Channel volumes can only be mounted as read/write once.
// Fibre Channel volumes support ownership management and SELinux relabeling.
2015-08-11 15:19:29 +00:00
type FCVolumeSource struct {
// Required: FC target world wide names (WWNs)
TargetWWNs [ ] string ` json:"targetWWNs" `
// Required: FC target lun number
2016-04-27 04:35:02 +00:00
Lun * int32 ` json:"lun" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2015-08-11 15:19:29 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2015-08-11 15:19:29 +00:00
// TODO: how do we prevent errors in the filesystem from compromising the machine
2016-02-09 08:13:06 +00:00
FSType string ` json:"fsType,omitempty" `
2015-08-11 15:19:29 +00:00
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-09-30 18:31:53 +00:00
// FlexVolume represents a generic volume resource that is
// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.
type FlexVolumeSource struct {
// Driver is the name of the driver to use for this volume.
Driver string ` json:"driver" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2015-09-30 18:31:53 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
2015-09-30 18:31:53 +00:00
FSType string ` json:"fsType,omitempty" `
2016-04-15 09:11:37 +00:00
// Optional: SecretRef is reference to the secret object containing
// sensitive information to pass to the plugin scripts. This may be
// empty if no secret object is specified. If the secret object
// contains more than one secret, all secrets are passed to the plugin
// scripts.
2015-09-30 18:31:53 +00:00
SecretRef * LocalObjectReference ` json:"secretRef,omitempty" `
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
// Optional: Extra driver options if any.
Options map [ string ] string ` json:"options,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a Persistent Disk resource in AWS.
2015-03-06 14:26:39 +00:00
//
2016-02-24 16:01:53 +00:00
// An AWS EBS disk must exist before mounting to a container. The disk
// must also be in the same AWS zone as the kubelet. A AWS EBS disk
// can only be mounted as read/write once. AWS EBS volumes support
// ownership management and SELinux relabeling.
2015-04-07 21:16:36 +00:00
type AWSElasticBlockStoreVolumeSource struct {
2015-04-07 20:23:12 +00:00
// Unique id of the persistent disk resource. Used to identify the disk in AWS
2015-04-09 13:34:16 +00:00
VolumeID string ` json:"volumeID" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2015-03-13 21:31:13 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2015-03-13 21:31:13 +00:00
// TODO: how do we prevent errors in the filesystem from compromising the machine
FSType string ` json:"fsType,omitempty" `
2015-03-06 14:26:39 +00:00
// Optional: Partition on the disk to mount.
// If omitted, kubelet will attempt to mount the device name.
// Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty.
2016-04-27 04:35:02 +00:00
Partition int32 ` json:"partition,omitempty" `
2015-03-13 21:31:13 +00:00
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
2014-08-05 17:58:43 +00:00
}
2015-12-14 18:59:07 +00:00
// Represents a volume that is populated with the contents of a git repository.
// Git repo volumes do not support ownership management.
// Git repo volumes support SELinux relabeling.
2015-02-20 06:27:27 +00:00
type GitRepoVolumeSource struct {
2014-10-21 18:47:07 +00:00
// Repository URL
2014-12-01 05:31:52 +00:00
Repository string ` json:"repository" `
2014-10-21 23:23:05 +00:00
// Commit hash, this is optional
2015-10-10 10:10:45 +00:00
Revision string ` json:"revision,omitempty" `
// Clone target, this is optional
// Must not contain or start with '..'. If '.' is supplied, the volume directory will be the
// git repository. Otherwise, if specified, the volume will contain the git repository in
// the subdirectory with the given name.
Directory string ` json:"directory,omitempty" `
2014-10-21 23:23:05 +00:00
// TODO: Consider credentials here.
2014-10-21 18:47:07 +00:00
}
2015-12-14 18:59:07 +00:00
// Adapts a Secret into a volume.
2015-02-18 01:26:41 +00:00
//
// The contents of the target Secret's Data field will be presented in a volume
// as files using the keys in the Data field as the file names.
2015-12-14 18:59:07 +00:00
// Secret volumes support ownership management and SELinux relabeling.
2015-02-20 06:27:27 +00:00
type SecretVolumeSource struct {
2016-01-18 17:20:51 +00:00
// Name of the secret in the pod's namespace to use.
SecretName string ` json:"secretName,omitempty" `
2016-05-06 19:17:27 +00:00
// If unspecified, each key-value pair in the Data field of the referenced
// Secret will be projected into the volume as a file whose name is the
// key and content is the value. If specified, the listed keys will be
// projected into the specified paths, and unlisted keys will not be
// present. If a key is specified which is not present in the Secret,
// the volume setup will error. Paths must be relative and may not contain
// the '..' path or start with '..'.
Items [ ] KeyToPath ` json:"items,omitempty" `
2015-02-18 01:24:50 +00:00
}
2015-12-14 18:59:07 +00:00
// Represents an NFS mount that lasts the lifetime of a pod.
// NFS volumes do not support ownership management or SELinux relabeling.
2015-02-10 19:00:11 +00:00
type NFSVolumeSource struct {
// Server is the hostname or IP address of the NFS server
Server string ` json:"server" `
// Path is the exported NFS share
Path string ` json:"path" `
// Optional: Defaults to false (read/write). ReadOnly here will force
// the NFS export to be mounted with read-only permissions
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-03-26 18:53:21 +00:00
2015-12-14 18:59:07 +00:00
// Represents a Glusterfs mount that lasts the lifetime of a pod.
// Glusterfs volumes do not support ownership management or SELinux relabeling.
2015-03-26 18:53:21 +00:00
type GlusterfsVolumeSource struct {
// Required: EndpointsName is the endpoint name that details Glusterfs topology
EndpointsName string ` json:"endpoints" `
// Required: Path is the Glusterfs volume path
Path string ` json:"path" `
// Optional: Defaults to false (read/write). ReadOnly here will force
// the Glusterfs to be mounted with read-only permissions
2015-02-10 19:00:11 +00:00
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a Rados Block Device mount that lasts the lifetime of a pod.
// RBD volumes support ownership management and SELinux relabeling.
2015-04-07 17:22:23 +00:00
type RBDVolumeSource struct {
// Required: CephMonitors is a collection of Ceph monitors
CephMonitors [ ] string ` json:"monitors" `
// Required: RBDImage is the rados image name
RBDImage string ` json:"image" `
2016-02-09 08:13:06 +00:00
// Filesystem type to mount.
2015-04-07 17:22:23 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2015-04-07 17:22:23 +00:00
// TODO: how do we prevent errors in the filesystem from compromising the machine
FSType string ` json:"fsType,omitempty" `
// Optional: RadosPool is the rados pool name,default is rbd
2016-05-11 17:11:03 +00:00
RBDPool string ` json:"pool,omitempty" `
2015-04-07 17:22:23 +00:00
// Optional: RBDUser is the rados user name, default is admin
2016-05-11 17:11:03 +00:00
RadosUser string ` json:"user,omitempty" `
2015-04-07 17:22:23 +00:00
// Optional: Keyring is the path to key ring for RBDUser, default is /etc/ceph/keyring
2016-05-11 17:11:03 +00:00
Keyring string ` json:"keyring,omitempty" `
// Optional: SecretRef is name of the authentication secret for RBDUser, default is nil.
SecretRef * LocalObjectReference ` json:"secretRef,omitempty" `
2015-04-07 17:22:23 +00:00
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2016-02-24 16:01:53 +00:00
// Represents a cinder volume resource in Openstack. A Cinder volume
// must exist before mounting to a container. The volume must also be
// in the same region as the kubelet. Cinder volumes support ownership
// management and SELinux relabeling.
2015-04-10 16:54:01 +00:00
type CinderVolumeSource struct {
// Unique id of the volume used to identify the cinder volume
VolumeID string ` json:"volumeID" `
2016-01-19 08:36:38 +00:00
// Filesystem type to mount.
2015-04-10 16:54:01 +00:00
// Must be a filesystem type supported by the host operating system.
2016-02-09 08:13:06 +00:00
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
2015-04-10 16:54:01 +00:00
FSType string ` json:"fsType,omitempty" `
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
// Cephfs volumes do not support ownership management or SELinux relabeling.
2015-04-09 18:05:24 +00:00
type CephFSVolumeSource struct {
// Required: Monitors is a collection of Ceph monitors
Monitors [ ] string ` json:"monitors" `
2016-02-01 21:01:19 +00:00
// Optional: Used as the mounted root, rather than the full Ceph tree, default is /
Path string ` json:"path,omitempty" `
2015-04-09 18:05:24 +00:00
// Optional: User is the rados user name, default is admin
User string ` json:"user,omitempty" `
// Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
SecretFile string ` json:"secretFile,omitempty" `
// Optional: SecretRef is reference to the authentication secret for User, default is empty.
SecretRef * LocalObjectReference ` json:"secretRef,omitempty" `
// Optional: Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a Flocker volume mounted by the Flocker agent.
// Flocker volumes do not support ownership management or SELinux relabeling.
2015-09-25 19:22:23 +00:00
type FlockerVolumeSource struct {
// Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker
DatasetName string ` json:"datasetName" `
}
2015-12-14 18:59:07 +00:00
// Represents a volume containing downward API info.
// Downward API volumes support ownership management and SELinux relabeling.
2015-02-20 05:36:23 +00:00
type DownwardAPIVolumeSource struct {
// Items is a list of DownwardAPIVolume file
Items [ ] DownwardAPIVolumeFile ` json:"items,omitempty" `
}
2015-12-14 18:59:07 +00:00
// Represents a single file containing information from the downward API
2015-02-20 05:36:23 +00:00
type DownwardAPIVolumeFile struct {
// 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 '..'
Path string ` json:"path" `
// Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
2016-05-23 22:08:22 +00:00
FieldRef * ObjectFieldSelector ` json:"fieldRef,omitempty" `
// Selects a resource of the container: only resources limits and requests
// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
ResourceFieldRef * ResourceFieldSelector ` json:"resourceFieldRef,omitempty" `
2015-02-20 05:36:23 +00:00
}
2015-11-13 16:47:04 +00:00
// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
type AzureFileVolumeSource struct {
// the name of secret that contains Azure Storage Account Name and Key
SecretName string ` json:"secretName" `
// Share Name
ShareName string ` json:"shareName" `
// Defaults to false (read/write). ReadOnly here will force
// the ReadOnly setting in VolumeMounts.
ReadOnly bool ` json:"readOnly,omitempty" `
}
2016-04-14 00:36:05 +00:00
// Represents a vSphere volume resource.
type VsphereVirtualDiskVolumeSource struct {
// Path that identifies vSphere volume vmdk
VolumePath string ` json:"volumePath" `
// Filesystem type to mount.
// Must be a filesystem type supported by the host operating system.
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
FSType string ` json:"fsType,omitempty" `
}
2016-01-25 19:41:16 +00:00
// Adapts a ConfigMap into a volume.
//
// The contents of the target ConfigMap's Data field will be presented in a
// volume as files using the keys in the Data field as the file names, unless
// the items element is populated with specific mappings of keys to paths.
// ConfigMap volumes support ownership management and SELinux relabeling.
type ConfigMapVolumeSource struct {
LocalObjectReference ` json:",inline" `
// If unspecified, each key-value pair in the Data field of the referenced
// ConfigMap will be projected into the volume as a file whose name is the
// key and content is the value. If specified, the listed keys will be
// projected into the specified paths, and unlisted keys will not be
// present. If a key is specified which is not present in the ConfigMap,
// the volume setup will error. Paths must be relative and may not contain
// the '..' path or start with '..'.
Items [ ] KeyToPath ` json:"items,omitempty" `
}
// Maps a string key to a path within a volume.
type KeyToPath struct {
// The key to project.
Key string ` json:"key" `
// The relative path of the file to map the key to.
// May not be an absolute path.
// May not contain the path element '..'.
// May not start with the string '..'.
Path string ` json:"path" `
}
2015-02-23 22:25:56 +00:00
// ContainerPort represents a network port in a single container
type ContainerPort struct {
2015-06-28 21:50:57 +00:00
// Optional: If specified, this must be an IANA_SVC_NAME Each named port
2014-07-08 20:44:30 +00:00
// in a pod must have a unique name.
2014-12-01 05:31:52 +00:00
Name string ` json:"name,omitempty" `
2014-08-19 22:18:49 +00:00
// Optional: If specified, this must be a valid port number, 0 < x < 65536.
2015-03-23 23:34:35 +00:00
// If HostNetwork is specified, this must match ContainerPort.
2016-04-27 04:35:02 +00:00
HostPort int32 ` json:"hostPort,omitempty" `
2014-06-30 22:20:19 +00:00
// Required: This must be a valid port number, 0 < x < 65536.
2016-04-27 04:35:02 +00:00
ContainerPort int32 ` json:"containerPort" `
2015-02-18 19:09:49 +00:00
// Required: Supports "TCP" and "UDP".
2014-12-01 05:31:52 +00:00
Protocol Protocol ` json:"protocol,omitempty" `
2014-07-09 05:44:15 +00:00
// Optional: What host IP to bind the external port to.
2014-12-01 05:31:52 +00:00
HostIP string ` json:"hostIP,omitempty" `
2014-06-06 23:40:48 +00:00
}
2014-09-02 10:00:28 +00:00
// VolumeMount describes a mounting of a Volume within a container.
2014-06-06 23:40:48 +00:00
type VolumeMount struct {
2014-06-30 22:20:19 +00:00
// Required: This must match the Name of a Volume [above].
2014-12-01 05:31:52 +00:00
Name string ` json:"name" `
2014-06-30 22:20:19 +00:00
// Optional: Defaults to false (read-write).
2014-12-01 05:31:52 +00:00
ReadOnly bool ` json:"readOnly,omitempty" `
2016-02-29 21:22:45 +00:00
// Required. Must not contain ':'.
2014-12-10 01:40:00 +00:00
MountPath string ` json:"mountPath" `
2016-03-05 01:40:15 +00:00
// Path within the volume from which the container's volume should be mounted.
// Defaults to "" (volume's root).
SubPath string ` json:"subPath,omitempty" `
2014-06-06 23:40:48 +00:00
}
2014-09-02 10:00:28 +00:00
// EnvVar represents an environment variable present in a Container.
2014-06-06 23:40:48 +00:00
type EnvVar struct {
2014-06-30 22:20:19 +00:00
// Required: This must be a C_IDENTIFIER.
2014-12-01 05:31:52 +00:00
Name string ` json:"name" `
2015-04-27 21:34:40 +00:00
// Optional: no more than one of the following may be specified.
2015-05-22 22:21:03 +00:00
// Optional: Defaults to ""; variable references $(VAR_NAME) are expanded
// using the previous defined environment variables in the container and
// any service environment variables. If a variable cannot be resolved,
// the reference in the input string will be unchanged. The $(VAR_NAME)
// syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped
// references will never be expanded, regardless of whether the variable
// exists or not.
2014-12-01 05:31:52 +00:00
Value string ` json:"value,omitempty" `
2015-04-27 21:34:40 +00:00
// Optional: Specifies a source the value of this var should come from.
2015-04-23 20:57:30 +00:00
ValueFrom * EnvVarSource ` json:"valueFrom,omitempty" `
}
// EnvVarSource represents a source for the value of an EnvVar.
2015-12-17 20:51:51 +00:00
// Only one of its fields may be set.
2015-04-23 20:57:30 +00:00
type EnvVarSource struct {
2015-12-17 20:51:51 +00:00
// Selects a field of the pod; only name and namespace are supported.
FieldRef * ObjectFieldSelector ` json:"fieldRef,omitempty" `
2016-05-23 22:08:22 +00:00
// Selects a resource of the container: only resources limits and requests
// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
ResourceFieldRef * ResourceFieldSelector ` json:"resourceFieldRef,omitempty" `
2015-12-17 20:51:51 +00:00
// Selects a key of a ConfigMap.
ConfigMapKeyRef * ConfigMapKeySelector ` json:"configMapKeyRef,omitempty" `
2016-01-18 17:20:51 +00:00
// Selects a key of a secret in the pod's namespace.
SecretKeyRef * SecretKeySelector ` json:"secretKeyRef,omitempty" `
2015-04-23 20:57:30 +00:00
}
// ObjectFieldSelector selects an APIVersioned field of an object.
type ObjectFieldSelector struct {
2015-04-27 21:34:40 +00:00
// Required: Version of the schema the FieldPath is written in terms of.
// If no value is specified, it will be defaulted to the APIVersion of the
// enclosing object.
2015-04-28 00:48:28 +00:00
APIVersion string ` json:"apiVersion" `
2015-04-27 21:34:40 +00:00
// Required: Path of the field to select in the specified API version
2015-04-28 00:48:28 +00:00
FieldPath string ` json:"fieldPath" `
2014-06-06 23:40:48 +00:00
}
2016-05-23 22:08:22 +00:00
// ResourceFieldSelector represents container resources (cpu, memory) and their output format
type ResourceFieldSelector struct {
// Container name: required for volumes, optional for env vars
ContainerName string ` json:"containerName,omitempty" `
// Required: resource to select
Resource string ` json:"resource" `
// Specifies the output format of the exposed resources, defaults to "1"
Divisor resource . Quantity ` json:"divisor,omitempty" `
}
2015-12-17 20:51:51 +00:00
// Selects a key from a ConfigMap.
type ConfigMapKeySelector struct {
// The ConfigMap to select from.
LocalObjectReference ` json:",inline" `
// The key to select.
Key string ` json:"key" `
}
2016-01-18 17:20:51 +00:00
// SecretKeySelector selects a key of a Secret.
type SecretKeySelector struct {
// The name of the secret in the pod's namespace to select from.
LocalObjectReference ` json:",inline" `
// The key of the secret to select from. Must be a valid secret key.
Key string ` json:"key" `
}
2016-02-02 15:03:50 +00:00
// HTTPHeader describes a custom header to be used in HTTP probes
type HTTPHeader struct {
// The header field name
Name string ` json:"name" `
// The header field value
Value string ` json:"value" `
}
2014-08-26 21:32:00 +00:00
// HTTPGetAction describes an action based on HTTP Get requests.
type HTTPGetAction struct {
2014-08-11 06:26:42 +00:00
// Optional: Path to access on the HTTP server.
2014-12-01 05:31:52 +00:00
Path string ` json:"path,omitempty" `
2014-08-11 06:26:42 +00:00
// Required: Name or number of the port to access on the container.
2015-11-10 06:28:45 +00:00
Port intstr . IntOrString ` json:"port,omitempty" `
2016-02-02 15:03:50 +00:00
// Optional: Host name to connect to, defaults to the pod IP. You
// probably want to set "Host" in httpHeaders instead.
2014-12-01 05:31:52 +00:00
Host string ` json:"host,omitempty" `
2015-06-25 17:53:41 +00:00
// Optional: Scheme to use for connecting to the host, defaults to HTTP.
Scheme URIScheme ` json:"scheme,omitempty" `
2016-02-02 15:03:50 +00:00
// Optional: Custom headers to set in the request. HTTP allows repeated headers.
HTTPHeaders [ ] HTTPHeader ` json:"httpHeaders,omitempty" `
2014-07-03 05:35:50 +00:00
}
2015-06-25 17:53:41 +00:00
// URIScheme identifies the scheme used for connection to a host for Get actions
type URIScheme string
const (
// URISchemeHTTP means that the scheme used will be http://
URISchemeHTTP URIScheme = "HTTP"
// URISchemeHTTPS means that the scheme used will be https://
URISchemeHTTPS URIScheme = "HTTPS"
)
2014-08-26 21:32:00 +00:00
// TCPSocketAction describes an action based on opening a socket
type TCPSocketAction struct {
2014-08-11 06:44:42 +00:00
// Required: Port to connect to.
2015-11-10 06:28:45 +00:00
Port intstr . IntOrString ` json:"port,omitempty" `
2014-08-01 00:35:54 +00:00
}
2014-08-26 21:32:00 +00:00
// ExecAction describes a "run in container" action.
type ExecAction struct {
2014-08-13 04:33:56 +00:00
// Command is the command line to execute inside the container, the working directory for the
// command is root ('/') in the container's filesystem. The command is simply exec'd, it is
// not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
2014-09-02 10:00:28 +00:00
// a shell, you need to explicitly call out to that shell.
2014-12-01 05:31:52 +00:00
Command [ ] string ` json:"command,omitempty" `
2014-08-13 04:33:56 +00:00
}
2015-11-05 23:38:46 +00:00
// Probe describes a health check to be performed against a container to determine whether it is
2015-11-20 03:23:40 +00:00
// alive or ready to receive traffic.
2015-01-27 00:35:52 +00:00
type Probe struct {
// The action taken to determine the health of a container
Handler ` json:",inline" `
2014-07-03 05:35:50 +00:00
// Length of time before health checking is activated. In seconds.
2016-04-27 04:35:02 +00:00
InitialDelaySeconds int32 ` json:"initialDelaySeconds,omitempty" `
2015-01-29 04:35:49 +00:00
// Length of time before health checking times out. In seconds.
2016-04-27 04:35:02 +00:00
TimeoutSeconds int32 ` json:"timeoutSeconds,omitempty" `
2015-11-05 23:38:46 +00:00
// How often (in seconds) to perform the probe.
2016-04-27 04:35:02 +00:00
PeriodSeconds int32 ` json:"periodSeconds,omitempty" `
2015-11-05 23:38:46 +00:00
// Minimum consecutive successes for the probe to be considered successful after having failed.
// Must be 1 for liveness.
2016-04-27 04:35:02 +00:00
SuccessThreshold int32 ` json:"successThreshold,omitempty" `
2015-11-05 23:38:46 +00:00
// Minimum consecutive failures for the probe to be considered failed after having succeeded.
2016-04-27 04:35:02 +00:00
FailureThreshold int32 ` json:"failureThreshold,omitempty" `
2014-07-03 05:35:50 +00:00
}
2014-09-26 04:53:17 +00:00
// PullPolicy describes a policy for if/when to pull a container image
type PullPolicy string
const (
2014-11-13 12:01:25 +00:00
// PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
2015-01-21 04:30:42 +00:00
PullAlways PullPolicy = "Always"
2014-11-13 12:01:25 +00:00
// PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
2015-01-21 04:30:42 +00:00
PullNever PullPolicy = "Never"
2014-11-13 12:01:25 +00:00
// PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.
2015-01-21 04:30:42 +00:00
PullIfNotPresent PullPolicy = "IfNotPresent"
2014-09-26 04:53:17 +00:00
)
2015-05-18 20:37:10 +00:00
// Capability represent POSIX capabilities type
type Capability string
2014-12-15 13:08:08 +00:00
// Capabilities represent POSIX capabilities that can be added or removed to a running container.
type Capabilities struct {
// Added capabilities
2015-05-18 20:37:10 +00:00
Add [ ] Capability ` json:"add,omitempty" `
2014-12-15 13:08:08 +00:00
// Removed capabilities
2015-05-18 20:37:10 +00:00
Drop [ ] Capability ` json:"drop,omitempty" `
2014-12-15 13:08:08 +00:00
}
2015-02-09 22:44:32 +00:00
// ResourceRequirements describes the compute resource requirements.
type ResourceRequirements struct {
2015-07-30 19:59:22 +00:00
// Limits describes the maximum amount of compute resources allowed.
2015-01-25 04:19:36 +00:00
Limits ResourceList ` json:"limits,omitempty" `
2015-03-23 18:18:11 +00:00
// Requests describes the minimum amount of compute resources required.
2015-07-30 19:59:22 +00:00
// If Request is omitted for a container, it defaults to Limits if that is explicitly specified,
// otherwise to an implementation-defined value
2015-03-23 18:18:11 +00:00
Requests ResourceList ` json:"requests,omitempty" `
2015-01-25 04:19:36 +00:00
}
2014-06-06 23:40:48 +00:00
// Container represents a single container that is expected to be run on the host.
type Container struct {
2014-07-08 20:44:30 +00:00
// Required: This must be a DNS_LABEL. Each container in a pod must
// have a unique name.
2014-12-01 05:31:52 +00:00
Name string ` json:"name" `
2014-06-30 22:20:19 +00:00
// Required.
2014-12-01 05:31:52 +00:00
Image string ` json:"image" `
2015-03-31 02:56:34 +00:00
// Optional: The docker image's entrypoint is used if this is not provided; cannot be updated.
2015-05-22 22:21:03 +00:00
// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
// regardless of whether the variable exists or not.
2014-12-01 05:31:52 +00:00
Command [ ] string ` json:"command,omitempty" `
2015-03-31 02:56:34 +00:00
// Optional: The docker image's cmd is used if this is not provided; cannot be updated.
2015-05-22 22:21:03 +00:00
// Variable references $(VAR_NAME) are expanded using the container's environment. If a variable
// cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax
// can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded,
// regardless of whether the variable exists or not.
2015-03-31 02:56:34 +00:00
Args [ ] string ` json:"args,omitempty" `
2014-06-30 22:20:19 +00:00
// Optional: Defaults to Docker's default.
2015-02-23 22:25:56 +00:00
WorkingDir string ` json:"workingDir,omitempty" `
Ports [ ] ContainerPort ` json:"ports,omitempty" `
Env [ ] EnvVar ` json:"env,omitempty" `
2015-01-25 04:19:36 +00:00
// Compute resource requirements.
2015-02-03 02:24:25 +00:00
Resources ResourceRequirements ` json:"resources,omitempty" `
VolumeMounts [ ] VolumeMount ` json:"volumeMounts,omitempty" `
LivenessProbe * Probe ` json:"livenessProbe,omitempty" `
ReadinessProbe * Probe ` json:"readinessProbe,omitempty" `
Lifecycle * Lifecycle ` json:"lifecycle,omitempty" `
2015-02-18 19:09:49 +00:00
// Required.
2014-12-01 05:31:52 +00:00
TerminationMessagePath string ` json:"terminationMessagePath,omitempty" `
2015-02-18 19:09:49 +00:00
// Required: Policy for pulling images for this container
2014-12-01 05:31:52 +00:00
ImagePullPolicy PullPolicy ` json:"imagePullPolicy" `
2015-10-20 18:03:32 +00:00
// Optional: SecurityContext defines the security options the container should be run with.
// If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext.
2015-06-30 19:23:37 +00:00
SecurityContext * SecurityContext ` json:"securityContext,omitempty" `
2015-07-30 04:16:54 +00:00
// Variables for interactive containers, these have very specialized use-cases (e.g. debugging)
// and shouldn't be used for general purpose containers.
2015-10-03 20:38:49 +00:00
Stdin bool ` json:"stdin,omitempty" `
StdinOnce bool ` json:"stdinOnce,omitempty" `
TTY bool ` json:"tty,omitempty" `
2014-08-26 21:32:00 +00:00
}
// Handler defines a specific action that should be taken
// TODO: pass structured data to these actions, and document that data here.
type Handler struct {
// One and only one of the following should be specified.
// Exec specifies the action to take.
2014-12-01 05:31:52 +00:00
Exec * ExecAction ` json:"exec,omitempty" `
2014-08-26 21:32:00 +00:00
// HTTPGet specifies the http request to perform.
2014-12-01 05:31:52 +00:00
HTTPGet * HTTPGetAction ` json:"httpGet,omitempty" `
2015-01-27 00:35:52 +00:00
// TCPSocket specifies an action involving a TCP port.
// TODO: implement a realistic TCP lifecycle hook
TCPSocket * TCPSocketAction ` json:"tcpSocket,omitempty" `
2014-08-26 21:32:00 +00:00
}
// Lifecycle describes actions that the management system should take in response to container lifecycle
// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks
// until the action is complete, unless the container process fails, in which case the handler is aborted.
type Lifecycle struct {
// PostStart is called immediately after a container is created. If the handler fails, the container
// is terminated and restarted.
2014-12-01 05:31:52 +00:00
PostStart * Handler ` json:"postStart,omitempty" `
2014-08-26 21:32:00 +00:00
// PreStop is called immediately before a container is terminated. The reason for termination is
// passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated.
2014-12-01 05:31:52 +00:00
PreStop * Handler ` json:"preStop,omitempty" `
2014-06-06 23:40:48 +00:00
}
// The below types are used by kube_client and api_server.
2015-02-03 02:24:25 +00:00
type ConditionStatus string
2014-06-28 00:43:36 +00:00
2015-03-23 18:33:55 +00:00
// These are valid condition statuses. "ConditionTrue" means a resource is in the condition;
// "ConditionFalse" means a resource is not in the condition; "ConditionUnknown" means kubernetes
2015-02-03 02:24:25 +00:00
// can't decide if a resource is in the condition or not. In the future, we could add other
// intermediate conditions, e.g. ConditionDegraded.
2014-06-28 00:43:36 +00:00
const (
2015-03-23 18:33:55 +00:00
ConditionTrue ConditionStatus = "True"
ConditionFalse ConditionStatus = "False"
2015-02-03 02:24:25 +00:00
ConditionUnknown ConditionStatus = "Unknown"
2014-06-28 00:43:36 +00:00
)
2014-09-10 23:57:10 +00:00
type ContainerStateWaiting struct {
2015-09-08 16:50:19 +00:00
// A brief CamelCase string indicating details about why the container is in waiting state.
2014-12-01 05:31:52 +00:00
Reason string ` json:"reason,omitempty" `
2015-09-08 16:50:19 +00:00
// A human-readable message indicating details about why the container is in waiting state.
Message string ` json:"message,omitempty" `
2014-09-10 23:57:10 +00:00
}
type ContainerStateRunning struct {
2015-09-17 22:21:55 +00:00
StartedAt unversioned . Time ` json:"startedAt,omitempty" `
2014-09-10 23:57:10 +00:00
}
type ContainerStateTerminated struct {
2016-04-27 04:35:02 +00:00
ExitCode int32 ` json:"exitCode" `
Signal int32 ` json:"signal,omitempty" `
2015-09-17 22:21:55 +00:00
Reason string ` json:"reason,omitempty" `
Message string ` json:"message,omitempty" `
StartedAt unversioned . Time ` json:"startedAt,omitempty" `
FinishedAt unversioned . Time ` json:"finishedAt,omitempty" `
ContainerID string ` json:"containerID,omitempty" `
2014-09-10 23:57:10 +00:00
}
2014-11-13 12:01:25 +00:00
// ContainerState holds a possible state of container.
// Only one of its members may be specified.
// If none of them is specified, the default one is ContainerStateWaiting.
2014-09-10 23:57:10 +00:00
type ContainerState struct {
2015-05-27 22:02:11 +00:00
Waiting * ContainerStateWaiting ` json:"waiting,omitempty" `
Running * ContainerStateRunning ` json:"running,omitempty" `
Terminated * ContainerStateTerminated ` json:"terminated,omitempty" `
2014-09-10 23:57:10 +00:00
}
type ContainerStatus struct {
2015-03-25 11:09:35 +00:00
// Each container in a pod must have a unique name.
2015-07-10 18:19:53 +00:00
Name string ` json:"name" `
2015-03-20 00:33:52 +00:00
State ContainerState ` json:"state,omitempty" `
LastTerminationState ContainerState ` json:"lastState,omitempty" `
2016-02-12 19:33:32 +00:00
// Ready specifies whether the container has passed its readiness check.
2015-02-03 02:24:25 +00:00
Ready bool ` json:"ready" `
2014-10-28 00:29:55 +00:00
// Note that this is calculated from dead containers. But those containers are subject to
// garbage collection. This value will get capped at 5 by GC.
2016-04-27 04:35:02 +00:00
RestartCount int32 ` json:"restartCount" `
2015-07-23 04:52:05 +00:00
Image string ` json:"image" `
ImageID string ` json:"imageID" `
ContainerID string ` json:"containerID,omitempty" `
2014-09-10 23:57:10 +00:00
}
2015-02-03 02:24:25 +00:00
// PodPhase is a label for the condition of a pod at the current time.
type PodPhase string
// These are the valid statuses of pods.
const (
// PodPending means the pod has been accepted by the system, but one or more of the containers
// has not been started. This includes time before being bound to a node, as well as time spent
// pulling images onto the host.
PodPending PodPhase = "Pending"
// PodRunning means the pod has been bound to a node and all of the containers have been started.
// At least one container is still running or is in the process of being restarted.
PodRunning PodPhase = "Running"
// PodSucceeded means that all containers in the pod have voluntarily terminated
// with a container exit code of 0, and the system is not going to restart any of these containers.
PodSucceeded PodPhase = "Succeeded"
// PodFailed means that all containers in the pod have terminated, and at least one container has
// terminated in a failure (exited with a non-zero exit code or was stopped by the system).
PodFailed PodPhase = "Failed"
// PodUnknown means that for some reason the state of the pod could not be obtained, typically due
// to an error in communicating with the host of the pod.
PodUnknown PodPhase = "Unknown"
)
2015-02-24 05:21:14 +00:00
type PodConditionType string
2015-02-03 02:24:25 +00:00
// These are valid conditions of pod.
const (
2016-04-18 12:26:16 +00:00
// PodScheduled represents status of the scheduling process for this pod.
PodScheduled PodConditionType = "PodScheduled"
2015-02-03 02:24:25 +00:00
// PodReady means the pod is able to service requests and should be added to the
// load balancing pools of all matching services.
2015-02-24 05:21:14 +00:00
PodReady PodConditionType = "Ready"
2016-03-29 02:13:16 +00:00
// PodInitialized means that all init containers in the pod have started successfully.
PodInitialized PodConditionType = "Initialized"
2015-02-03 02:24:25 +00:00
)
type PodCondition struct {
2015-08-19 03:09:36 +00:00
Type PodConditionType ` json:"type" `
Status ConditionStatus ` json:"status" `
LastProbeTime unversioned . Time ` json:"lastProbeTime,omitempty" `
LastTransitionTime unversioned . Time ` json:"lastTransitionTime,omitempty" `
Reason string ` json:"reason,omitempty" `
Message string ` json:"message,omitempty" `
2015-02-03 02:24:25 +00:00
}
2014-11-13 12:01:25 +00:00
// RestartPolicy describes how the container should be restarted.
// Only one of the following restart policies may be specified.
// If none of the following policies is specified, the default one
// is RestartPolicyAlways.
2015-03-14 01:38:07 +00:00
type RestartPolicy string
const (
RestartPolicyAlways RestartPolicy = "Always"
RestartPolicyOnFailure RestartPolicy = "OnFailure"
RestartPolicyNever RestartPolicy = "Never"
)
2014-07-22 18:45:12 +00:00
2014-07-08 07:08:58 +00:00
// PodList is a list of Pods.
2014-06-09 04:39:57 +00:00
type PodList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] Pod ` json:"items" `
2014-06-06 23:40:48 +00:00
}
2014-11-12 05:21:40 +00:00
// DNSPolicy defines how a pod's DNS will be configured.
type DNSPolicy string
const (
// DNSClusterFirst indicates that the pod should use cluster DNS
// first, if it is available, then fall back on the default (as
// determined by kubelet) DNS settings.
DNSClusterFirst DNSPolicy = "ClusterFirst"
// DNSDefault indicates that the pod should use the default (as
// determined by kubelet) DNS settings.
DNSDefault DNSPolicy = "Default"
)
2016-01-26 23:03:18 +00:00
// A node selector represents the union of the results of one or more label queries
// over a set of nodes; that is, it represents the OR of the selectors represented
// by the node selector terms.
type NodeSelector struct {
//Required. A list of node selector terms. The terms are ORed.
NodeSelectorTerms [ ] NodeSelectorTerm ` json:"nodeSelectorTerms" `
}
// A null or empty node selector term matches no objects.
type NodeSelectorTerm struct {
//Required. A list of node selector requirements. The requirements are ANDed.
MatchExpressions [ ] NodeSelectorRequirement ` json:"matchExpressions" `
}
// A node selector requirement is a selector that contains values, a key, and an operator
// that relates the key and values.
type NodeSelectorRequirement struct {
// The label key that the selector applies to.
Key string ` json:"key" patchStrategy:"merge" patchMergeKey:"key" `
// Represents a key's relationship to a set of values.
// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
Operator NodeSelectorOperator ` json:"operator" `
// An array of string values. If the operator is In or NotIn,
// the values array must be non-empty. If the operator is Exists or DoesNotExist,
// the values array must be empty. If the operator is Gt or Lt, the values
// array must have a single element, which will be interpreted as an integer.
// This array is replaced during a strategic merge patch.
Values [ ] string ` json:"values,omitempty" `
}
// A node selector operator is the set of operators that can be used in
// a node selector requirement.
type NodeSelectorOperator string
const (
NodeSelectorOpIn NodeSelectorOperator = "In"
NodeSelectorOpNotIn NodeSelectorOperator = "NotIn"
NodeSelectorOpExists NodeSelectorOperator = "Exists"
NodeSelectorOpDoesNotExist NodeSelectorOperator = "DoesNotExist"
NodeSelectorOpGt NodeSelectorOperator = "Gt"
NodeSelectorOpLt NodeSelectorOperator = "Lt"
)
2016-05-04 06:50:31 +00:00
// Affinity is a group of affinity scheduling rules.
2016-01-26 23:03:18 +00:00
type Affinity struct {
2016-02-11 07:06:33 +00:00
// Describes node affinity scheduling rules for the pod.
2016-01-26 23:03:18 +00:00
NodeAffinity * NodeAffinity ` json:"nodeAffinity,omitempty" `
2016-05-04 06:50:31 +00:00
// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
PodAffinity * PodAffinity ` json:"podAffinity,omitempty" `
// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
PodAntiAffinity * PodAntiAffinity ` json:"podAntiAffinity,omitempty" `
}
// Pod affinity is a group of inter pod affinity scheduling rules.
type PodAffinity struct {
// NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
// If the affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to a pod label update), the
// system will try to eventually evict the pod from its node.
// When there are multiple elements, the lists of nodes corresponding to each
// podAffinityTerm are intersected, i.e. all terms must be satisfied.
// RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"`
// If the affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to a pod label update), the
// system may or may not try to eventually evict the pod from its node.
// When there are multiple elements, the lists of nodes corresponding to each
// podAffinityTerm are intersected, i.e. all terms must be satisfied.
RequiredDuringSchedulingIgnoredDuringExecution [ ] PodAffinityTerm ` json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" `
// The scheduler will prefer to schedule pods to nodes that satisfy
// the affinity expressions specified by this field, but it may choose
// a node that violates one or more of the expressions. The node that is
// most preferred is the one with the greatest sum of weights, i.e.
// for each node that meets all of the scheduling requirements (resource
// request, requiredDuringScheduling affinity expressions, etc.),
// compute a sum by iterating through the elements of this field and adding
// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
// node(s) with the highest sum are the most preferred.
PreferredDuringSchedulingIgnoredDuringExecution [ ] WeightedPodAffinityTerm ` json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" `
}
// Pod anti affinity is a group of inter pod anti affinity scheduling rules.
type PodAntiAffinity struct {
// NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
// If the anti-affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the anti-affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to a pod label update), the
// system will try to eventually evict the pod from its node.
// When there are multiple elements, the lists of nodes corresponding to each
// podAffinityTerm are intersected, i.e. all terms must be satisfied.
// RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"`
// If the anti-affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the anti-affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to a pod label update), the
// system may or may not try to eventually evict the pod from its node.
// When there are multiple elements, the lists of nodes corresponding to each
// podAffinityTerm are intersected, i.e. all terms must be satisfied.
RequiredDuringSchedulingIgnoredDuringExecution [ ] PodAffinityTerm ` json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" `
// The scheduler will prefer to schedule pods to nodes that satisfy
// the anti-affinity expressions specified by this field, but it may choose
// a node that violates one or more of the expressions. The node that is
// most preferred is the one with the greatest sum of weights, i.e.
// for each node that meets all of the scheduling requirements (resource
// request, requiredDuringScheduling anti-affinity expressions, etc.),
// compute a sum by iterating through the elements of this field and adding
// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
// node(s) with the highest sum are the most preferred.
PreferredDuringSchedulingIgnoredDuringExecution [ ] WeightedPodAffinityTerm ` json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" `
}
// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
type WeightedPodAffinityTerm struct {
// weight associated with matching the corresponding podAffinityTerm,
// in the range 1-100.
Weight int ` json:"weight" `
// Required. A pod affinity term, associated with the corresponding weight.
PodAffinityTerm PodAffinityTerm ` json:"podAffinityTerm" `
}
// Defines a set of pods (namely those matching the labelSelector
// relative to the given namespace(s)) that this pod should be
// co-located (affinity) or not co-located (anti-affinity) with,
// where co-located is defined as running on a node whose value of
// the label with key <topologyKey> matches that of any node on which
// a pod of the set of pods is running.
type PodAffinityTerm struct {
// A label query over a set of resources, in this case pods.
LabelSelector * unversioned . LabelSelector ` json:"labelSelector,omitempty" `
// namespaces specifies which namespaces the labelSelector applies to (matches against);
// nil list means "this pod's namespace," empty list means "all namespaces"
// The json tag here is not "omitempty" since we need to distinguish nil and empty.
// See https://golang.org/pkg/encoding/json/#Marshal for more details.
Namespaces [ ] string ` json:"namespaces" `
// This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching
// the labelSelector in the specified namespaces, where co-located is defined as running on a node
// whose value of the label with key topologyKey matches that of any node on which any of the
// selected pods is running.
// For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies"
// ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains);
// for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.
TopologyKey string ` json:"topologyKey,omitempty" `
2016-01-26 23:03:18 +00:00
}
2016-02-11 07:06:33 +00:00
// Node affinity is a group of node affinity scheduling rules.
2016-01-26 23:03:18 +00:00
type NodeAffinity struct {
2016-02-11 07:06:33 +00:00
// NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
2016-01-26 23:03:18 +00:00
// If the affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to an update), the system
// will try to eventually evict the pod from its node.
2016-02-11 07:06:33 +00:00
// RequiredDuringSchedulingRequiredDuringExecution *NodeSelector `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"`
2016-01-26 23:03:18 +00:00
// If the affinity requirements specified by this field are not met at
// scheduling time, the pod will not be scheduled onto the node.
// If the affinity requirements specified by this field cease to be met
// at some point during pod execution (e.g. due to an update), the system
// may or may not try to eventually evict the pod from its node.
RequiredDuringSchedulingIgnoredDuringExecution * NodeSelector ` json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" `
// The scheduler will prefer to schedule pods to nodes that satisfy
// the affinity expressions specified by this field, but it may choose
// a node that violates one or more of the expressions. The node that is
// most preferred is the one with the greatest sum of weights, i.e.
// for each node that meets all of the scheduling requirements (resource
// request, requiredDuringScheduling affinity expressions, etc.),
// compute a sum by iterating through the elements of this field and adding
// "weight" to the sum if the node matches the corresponding matchExpressions; the
// node(s) with the highest sum are the most preferred.
PreferredDuringSchedulingIgnoredDuringExecution [ ] PreferredSchedulingTerm ` json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" `
}
// An empty preferred scheduling term matches all objects with implicit weight 0
// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
type PreferredSchedulingTerm struct {
// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
2016-04-27 04:35:02 +00:00
Weight int32 ` json:"weight" `
2016-01-26 23:03:18 +00:00
// A node selector term, associated with the corresponding weight.
Preference NodeSelectorTerm ` json:"preference" `
}
2016-03-31 03:42:57 +00:00
// The node this Taint is attached to has the effect "effect" on
// any pod that that does not tolerate the Taint.
type Taint struct {
// Required. The taint key to be applied to a node.
Key string ` json:"key" patchStrategy:"merge" patchMergeKey:"key" `
// Required. The taint value corresponding to the taint key.
Value string ` json:"value,omitempty" `
// Required. The effect of the taint on pods
// that do not tolerate the taint.
// Valid effects are NoSchedule and PreferNoSchedule.
Effect TaintEffect ` json:"effect" `
}
type TaintEffect string
const (
// Do not allow new pods to schedule onto the node unless they tolerate the taint,
// but allow all pods submitted to Kubelet without going through the scheduler
// to start, and allow all already-running pods to continue running.
// Enforced by the scheduler.
TaintEffectNoSchedule TaintEffect = "NoSchedule"
// Like TaintEffectNoSchedule, but the scheduler tries not to schedule
// new pods onto the node, rather than prohibiting new pods from scheduling
// onto the node entirely. Enforced by the scheduler.
TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule"
// NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
// Do not allow new pods to schedule onto the node unless they tolerate the taint,
// do not allow pods to start on Kubelet unless they tolerate the taint,
// but allow all already-running pods to continue running.
// Enforced by the scheduler and Kubelet.
// TaintEffectNoScheduleNoAdmit TaintEffect = "NoScheduleNoAdmit"
// NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented.
// Do not allow new pods to schedule onto the node unless they tolerate the taint,
// do not allow pods to start on Kubelet unless they tolerate the taint,
// and evict any already-running pods that do not tolerate the taint.
// Enforced by the scheduler and Kubelet.
// TaintEffectNoScheduleNoAdmitNoExecute = "NoScheduleNoAdmitNoExecute"
)
// The pod this Toleration is attached to tolerates any taint that matches
// the triple <key,value,effect> using the matching operator <operator>.
type Toleration struct {
// Required. Key is the taint key that the toleration applies to.
Key string ` json:"key,omitempty" patchStrategy:"merge" patchMergeKey:"key" `
// operator represents a key's relationship to the value.
// Valid operators are Exists and Equal. Defaults to Equal.
// Exists is equivalent to wildcard for value, so that a pod can
// tolerate all taints of a particular category.
Operator TolerationOperator ` json:"operator,omitempty" `
// Value is the taint value the toleration matches to.
// If the operator is Exists, the value should be empty, otherwise just a regular string.
Value string ` json:"value,omitempty" `
// Effect indicates the taint effect to match. Empty means match all taint effects.
// When specified, allowed values are NoSchedule and PreferNoSchedule.
Effect TaintEffect ` json:"effect,omitempty" `
// TODO: For forgiveness (#1574), we'd eventually add at least a grace period
// here, and possibly an occurrence threshold and period.
}
// A toleration operator is the set of operators that can be used in a toleration.
type TolerationOperator string
const (
TolerationOpExists TolerationOperator = "Exists"
TolerationOpEqual TolerationOperator = "Equal"
)
2014-11-07 02:06:58 +00:00
// PodSpec is a description of a pod
type PodSpec struct {
2015-03-20 10:10:30 +00:00
Volumes [ ] Volume ` json:"volumes" `
2016-03-29 02:13:16 +00:00
// List of initialization containers belonging to the pod.
InitContainers [ ] Container ` json:"-" `
// List of containers belonging to the pod.
2014-12-01 05:31:52 +00:00
Containers [ ] Container ` json:"containers" `
RestartPolicy RestartPolicy ` json:"restartPolicy,omitempty" `
2015-04-28 12:21:57 +00:00
// Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
// Value must be non-negative integer. The value zero indicates delete immediately.
// If this value is nil, the default grace period will be used instead.
// The grace period is the duration in seconds after the processes running in the pod are sent
2015-05-04 07:42:33 +00:00
// a termination signal and the time when the processes are forcibly halted with a kill signal.
2015-04-28 12:21:57 +00:00
// Set this value longer than the expected cleanup time for your process.
TerminationGracePeriodSeconds * int64 ` json:"terminationGracePeriodSeconds,omitempty" `
2015-05-09 05:01:43 +00:00
// Optional duration in seconds relative to the StartTime that the pod may be active on a node
// before the system actively tries to terminate the pod; value must be positive integer
ActiveDeadlineSeconds * int64 ` json:"activeDeadlineSeconds,omitempty" `
2015-02-18 19:09:49 +00:00
// Required: Set DNS policy.
2014-11-12 05:21:40 +00:00
DNSPolicy DNSPolicy ` json:"dnsPolicy,omitempty" `
2014-11-07 02:06:58 +00:00
// NodeSelector is a selector which must be true for the pod to fit on a node
2014-12-01 05:31:52 +00:00
NodeSelector map [ string ] string ` json:"nodeSelector,omitempty" `
2014-12-18 22:12:58 +00:00
2015-06-19 02:35:42 +00:00
// ServiceAccountName is the name of the ServiceAccount to use to run this pod
2015-04-27 22:53:28 +00:00
// The pod will be allowed to use secrets referenced by the ServiceAccount
2015-06-19 02:35:42 +00:00
ServiceAccountName string ` json:"serviceAccountName" `
2015-04-27 22:53:28 +00:00
2015-05-22 23:40:57 +00:00
// NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
// the scheduler simply schedules this pod onto that node, assuming that it fits resource
// requirements.
NodeName string ` json:"nodeName,omitempty" `
2015-10-20 18:03:32 +00:00
// SecurityContext holds pod-level security attributes and common container settings.
// Optional: Defaults to empty. See type description for default values of each field.
2015-09-14 21:56:51 +00:00
SecurityContext * PodSecurityContext ` json:"securityContext,omitempty" `
// ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
// If specified, these secrets will be passed to individual puller implementations for them to use. For example,
// in the case of docker, only DockerConfig type secrets are honored.
ImagePullSecrets [ ] LocalObjectReference ` json:"imagePullSecrets,omitempty" `
2016-04-14 17:45:29 +00:00
// Specifies the hostname of the Pod.
// If not specified, the pod's hostname will be set to a system-defined value.
Hostname string ` json:"hostname,omitempty" `
// If specified, the fully qualified Pod hostname will be "<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>".
// If not specified, the pod will not have a domainname at all.
Subdomain string ` json:"subdomain,omitempty" `
2015-09-14 21:56:51 +00:00
}
// PodSecurityContext holds pod-level security attributes and common container settings.
2015-10-20 18:49:39 +00:00
// Some fields are also present in container.securityContext. Field values of
// container.securityContext take precedence over field values of PodSecurityContext.
2015-09-14 21:56:51 +00:00
type PodSecurityContext struct {
// Use the host's network namespace. If this option is set, the ports that will be
2015-03-23 23:34:35 +00:00
// used must be specified.
2015-09-14 21:56:51 +00:00
// Optional: Default to false
2015-03-23 23:34:35 +00:00
HostNetwork bool ` json:"hostNetwork,omitempty" `
2015-09-15 16:43:59 +00:00
// Use the host's pid namespace.
// Optional: Default to false.
HostPID bool ` json:"hostPID,omitempty" `
2015-08-10 08:14:01 +00:00
// Use the host's ipc namespace.
// Optional: Default to false.
HostIPC bool ` json:"hostIPC,omitempty" `
2015-10-20 18:03:32 +00:00
// The SELinux context to be applied to all containers.
// If unspecified, the container runtime will allocate a random SELinux context for each
// container. May also be set in SecurityContext. If set in
// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
// takes precedence for that container.
SELinuxOptions * SELinuxOptions ` json:"seLinuxOptions,omitempty" `
// The UID to run the entrypoint of the container process.
// Defaults to user specified in image metadata if unspecified.
// May also be set in SecurityContext. If set in both SecurityContext and
// PodSecurityContext, the value specified in SecurityContext takes precedence
// for that container.
RunAsUser * int64 ` json:"runAsUser,omitempty" `
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
// If unset or false, no such validation will be performed.
// May also be set in SecurityContext. If set in both SecurityContext and
// PodSecurityContext, the value specified in SecurityContext takes precedence.
RunAsNonRoot * bool ` json:"runAsNonRoot,omitempty" `
2015-10-20 18:49:39 +00:00
// A list of groups applied to the first process run in each container, in addition
// to the container's primary GID. If unspecified, no groups will be added to
// any container.
SupplementalGroups [ ] int64 ` json:"supplementalGroups,omitempty" `
// A special supplemental group that applies to all containers in a pod.
// Some volume types allow the Kubelet to change the ownership of that volume
// to be owned by the pod:
//
// 1. The owning GID will be the FSGroup
// 2. The setgid bit is set (new files created in the volume will be owned by FSGroup)
// 3. The permission bits are OR'd with rw-rw----
//
// If unset, the Kubelet will not modify the ownership and permissions of any volume.
FSGroup * int64 ` json:"fsGroup,omitempty" `
2014-11-07 02:06:58 +00:00
}
2014-11-13 15:52:13 +00:00
// PodStatus represents information about the status of a pod. Status may trail the actual
// state of a system.
type PodStatus struct {
2015-02-03 02:24:25 +00:00
Phase PodPhase ` json:"phase,omitempty" `
2015-05-11 13:39:34 +00:00
Conditions [ ] PodCondition ` json:"conditions,omitempty" `
2014-12-12 21:25:04 +00:00
// A human readable message indicating details about why the pod is in this state.
Message string ` json:"message,omitempty" `
2015-06-09 15:58:16 +00:00
// A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'
2015-06-30 19:23:37 +00:00
Reason string ` json:"reason,omitempty" `
2014-12-12 21:25:04 +00:00
2014-12-01 05:31:52 +00:00
HostIP string ` json:"hostIP,omitempty" `
PodIP string ` json:"podIP,omitempty" `
2014-11-13 15:52:13 +00:00
2015-05-09 05:01:43 +00:00
// Date and time at which the object was acknowledged by the Kubelet.
// This is before the Kubelet pulled the container image(s) for the pod.
2015-09-17 22:21:55 +00:00
StartTime * unversioned . Time ` json:"startTime,omitempty" `
2015-05-09 05:01:43 +00:00
2016-03-29 02:13:16 +00:00
// The list has one entry per init container in the manifest. The most recent successful
// init container will have ready = true, the most recently started container will have
// startTime set.
// More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses
InitContainerStatuses [ ] ContainerStatus ` json:"-" `
2015-03-25 11:09:35 +00:00
// The list has one entry per container in the manifest. Each entry is
// currently the output of `docker inspect`. This output format is *not*
// final and should not be relied upon.
2014-11-13 15:52:13 +00:00
// TODO: Make real decisions about what our info should look like. Re-enable fuzz test
// when we have done this.
2015-03-26 19:11:48 +00:00
ContainerStatuses [ ] ContainerStatus ` json:"containerStatuses,omitempty" `
2014-11-13 15:52:13 +00:00
}
2015-01-14 02:11:24 +00:00
// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
type PodStatusResult struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-01-14 02:11:24 +00:00
// Status represents the current information about a pod. This data may not be up
// to date.
Status PodStatus ` json:"status,omitempty" `
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2014-09-02 10:00:28 +00:00
// Pod is a collection of containers, used as either input (create, update) or as output (list, get).
2014-06-09 04:17:53 +00:00
type Pod struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-11-13 15:52:13 +00:00
// Spec defines the behavior of a pod.
2014-12-01 05:31:52 +00:00
Spec PodSpec ` json:"spec,omitempty" `
2014-11-13 15:52:13 +00:00
// Status represents the current information about a pod. This data may not be up
// to date.
2014-12-01 05:31:52 +00:00
Status PodStatus ` json:"status,omitempty" `
2014-06-06 23:40:48 +00:00
}
2014-11-07 02:06:58 +00:00
// PodTemplateSpec describes the data a pod should have when created from a template
type PodTemplateSpec struct {
// Metadata of the pods created from this template.
2014-12-01 05:31:52 +00:00
ObjectMeta ` json:"metadata,omitempty" `
2014-11-07 02:06:58 +00:00
// Spec defines the behavior of a pod.
2014-12-01 05:31:52 +00:00
Spec PodSpec ` json:"spec,omitempty" `
2014-06-06 23:40:48 +00:00
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2014-11-07 02:06:58 +00:00
// PodTemplate describes a template for creating copies of a predefined pod.
type PodTemplate struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-11-07 02:06:58 +00:00
2015-03-04 15:46:27 +00:00
// Template defines the pods that will be created from this pod template
Template PodTemplateSpec ` json:"template,omitempty" `
2014-11-07 02:06:58 +00:00
}
// PodTemplateList is a list of PodTemplates.
type PodTemplateList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] PodTemplate ` json:"items" `
2014-11-07 02:06:58 +00:00
}
// ReplicationControllerSpec is the specification of a replication controller.
// As the internal representation of a replication controller, it may have either
// a TemplateRef or a Template set.
type ReplicationControllerSpec struct {
// Replicas is the number of desired replicas.
2016-04-27 04:35:02 +00:00
Replicas int32 ` json:"replicas" `
2014-11-07 02:06:58 +00:00
// Selector is a label query over pods that should match the Replicas count.
2014-12-01 05:31:52 +00:00
Selector map [ string ] string ` json:"selector" `
2014-11-07 02:06:58 +00:00
// TemplateRef is a reference to an object that describes the pod that will be created if
// insufficient replicas are detected. This reference is ignored if a Template is set.
2015-07-23 04:52:05 +00:00
// Must be set before converting to a versioned API object
2015-05-28 23:29:06 +00:00
//TemplateRef *ObjectReference `json:"templateRef,omitempty"`
2014-11-07 02:06:58 +00:00
// Template is the object that describes the pod that will be created if
// insufficient replicas are detected. Internally, this takes precedence over a
// TemplateRef.
2014-12-01 05:31:52 +00:00
Template * PodTemplateSpec ` json:"template,omitempty" `
2014-11-07 02:06:58 +00:00
}
// ReplicationControllerStatus represents the current status of a replication
// controller.
type ReplicationControllerStatus struct {
// Replicas is the number of actual replicas.
2016-04-27 04:35:02 +00:00
Replicas int32 ` json:"replicas" `
2015-06-18 19:00:19 +00:00
2016-03-11 18:34:13 +00:00
// The number of pods that have labels matching the labels of the pod template of the replication controller.
2016-04-27 04:35:02 +00:00
FullyLabeledReplicas int32 ` json:"fullyLabeledReplicas,omitempty" `
2016-03-11 18:34:13 +00:00
2015-06-18 19:00:19 +00:00
// ObservedGeneration is the most recent generation observed by the controller.
ObservedGeneration int64 ` json:"observedGeneration,omitempty" `
2014-06-06 23:40:48 +00:00
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2014-09-02 10:00:28 +00:00
// ReplicationController represents the configuration of a replication controller.
2014-06-06 23:40:48 +00:00
type ReplicationController struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-11-07 02:06:58 +00:00
// Spec defines the desired behavior of this replication controller.
2014-12-01 05:31:52 +00:00
Spec ReplicationControllerSpec ` json:"spec,omitempty" `
2014-11-07 02:06:58 +00:00
// Status is the current status of this replication controller. This data may be
// out of date by some window of time.
2014-12-01 05:31:52 +00:00
Status ReplicationControllerStatus ` json:"status,omitempty" `
2014-06-06 23:40:48 +00:00
}
2014-11-07 02:06:58 +00:00
// ReplicationControllerList is a collection of replication controllers.
type ReplicationControllerList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-11-07 02:06:58 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] ReplicationController ` json:"items" `
2014-06-06 23:40:48 +00:00
}
2015-03-16 21:36:30 +00:00
const (
2015-05-23 20:41:11 +00:00
// ClusterIPNone - do not assign a cluster IP
2015-03-16 21:36:30 +00:00
// no proxying required and no environment variables should be created for pods
2015-05-23 20:41:11 +00:00
ClusterIPNone = "None"
2015-03-16 21:36:30 +00:00
)
2014-09-02 10:00:28 +00:00
// ServiceList holds a list of services.
2014-06-06 23:40:48 +00:00
type ServiceList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] Service ` json:"items" `
2014-06-06 23:40:48 +00:00
}
2014-12-17 12:52:11 +00:00
// Session Affinity Type string
2015-05-18 20:13:42 +00:00
type ServiceAffinity string
2014-12-17 12:52:11 +00:00
const (
2015-05-18 20:13:42 +00:00
// ServiceAffinityClientIP is the Client IP based.
ServiceAffinityClientIP ServiceAffinity = "ClientIP"
2014-12-17 12:52:11 +00:00
2015-05-18 20:13:42 +00:00
// ServiceAffinityNone - no session affinity.
ServiceAffinityNone ServiceAffinity = "None"
2014-12-17 12:52:11 +00:00
)
2015-05-22 21:49:26 +00:00
// Service Type string describes ingress methods for a service
type ServiceType string
const (
// ServiceTypeClusterIP means a service will only be accessible inside the
2015-05-23 20:41:11 +00:00
// cluster, via the ClusterIP.
2015-05-22 21:49:26 +00:00
ServiceTypeClusterIP ServiceType = "ClusterIP"
2015-05-20 15:59:34 +00:00
// ServiceTypeNodePort means a service will be exposed on one port of
2015-05-22 22:58:39 +00:00
// every node, in addition to 'ClusterIP' type.
2015-05-20 15:59:34 +00:00
ServiceTypeNodePort ServiceType = "NodePort"
2015-05-22 21:49:26 +00:00
// ServiceTypeLoadBalancer means a service will be exposed via an
// external load balancer (if the cloud provider supports it), in addition
// to 'NodePort' type.
ServiceTypeLoadBalancer ServiceType = "LoadBalancer"
)
2014-10-30 13:29:11 +00:00
// ServiceStatus represents the current status of a service
2015-05-22 21:33:29 +00:00
type ServiceStatus struct {
// LoadBalancer contains the current status of the load-balancer,
// if one is present.
LoadBalancer LoadBalancerStatus ` json:"loadBalancer,omitempty" `
}
// LoadBalancerStatus represents the status of a load-balancer
type LoadBalancerStatus struct {
// Ingress is a list containing ingress points for the load-balancer;
// traffic intended for the service should be sent to these ingress points.
2015-06-30 19:23:37 +00:00
Ingress [ ] LoadBalancerIngress ` json:"ingress,omitempty" `
2015-05-22 21:33:29 +00:00
}
// LoadBalancerIngress represents the status of a load-balancer ingress point:
// traffic intended for the service should be sent to an ingress point.
type LoadBalancerIngress struct {
// IP is set for load-balancer ingress points that are IP based
// (typically GCE or OpenStack load-balancers)
2015-06-30 19:23:37 +00:00
IP string ` json:"ip,omitempty" `
2015-05-22 21:33:29 +00:00
// Hostname is set for load-balancer ingress points that are DNS based
// (typically AWS load-balancers)
2015-06-30 19:23:37 +00:00
Hostname string ` json:"hostname,omitempty" `
2015-05-22 21:33:29 +00:00
}
2014-09-10 16:53:40 +00:00
2014-10-30 13:29:11 +00:00
// ServiceSpec describes the attributes that a user creates on a service
type ServiceSpec struct {
2015-08-21 01:23:24 +00:00
// Type determines how the service will be exposed. Valid options: ClusterIP, NodePort, LoadBalancer
Type ServiceType ` json:"type,omitempty" `
2015-03-13 15:16:41 +00:00
// Required: The list of ports that are exposed by this service.
Ports [ ] ServicePort ` json:"ports" `
2014-07-13 04:46:01 +00:00
2014-11-18 17:49:00 +00:00
// This service will route traffic to pods having labels matching this selector. If empty or not present,
// the service is assumed to have endpoints set by an external process and Kubernetes will not modify
// those endpoints.
Selector map [ string ] string ` json:"selector" `
2014-09-18 23:03:34 +00:00
2015-05-23 20:41:11 +00:00
// ClusterIP is usually assigned by the master. If specified by the user
2014-10-24 17:28:39 +00:00
// we will try to respect it or else fail the request. This field can
// not be changed by updates.
2015-03-16 21:36:30 +00:00
// Valid values are None, empty string (""), or a valid IP address
// None can be specified for headless services when proxying is not required
2015-05-23 20:41:11 +00:00
ClusterIP string ` json:"clusterIP,omitempty" `
2014-09-18 23:03:34 +00:00
2015-08-12 00:18:21 +00:00
// ExternalIPs are used by external load balancers, or can be set by
2015-03-04 22:40:26 +00:00
// users to handle external traffic that arrives at a node.
2015-08-12 00:18:21 +00:00
ExternalIPs [ ] string ` json:"externalIPs,omitempty" `
2014-10-30 13:29:11 +00:00
2015-08-21 01:23:24 +00:00
// Only applies to Service Type: LoadBalancer
// LoadBalancer will get created with the IP specified in this field.
// This feature depends on whether the underlying cloud-provider supports specifying
// the loadBalancerIP when a load balancer is created.
// This field will be ignored if the cloud-provider does not support the feature.
LoadBalancerIP string ` json:"loadBalancerIP,omitempty" `
2016-05-17 23:55:04 +00:00
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
2015-05-18 20:13:42 +00:00
SessionAffinity ServiceAffinity ` json:"sessionAffinity,omitempty" `
2016-05-17 23:55:04 +00:00
// Optional: If specified and supported by the platform, this will restrict traffic through the cloud-provider
// load-balancer will be restricted to the specified client IPs. This field will be ignored if the
// cloud-provider does not support the feature."
LoadBalancerSourceRanges [ ] string ` json:"loadBalancerSourceRanges,omitempty" `
2014-10-30 13:29:11 +00:00
}
2015-03-13 15:16:41 +00:00
type ServicePort struct {
// Optional if only one ServicePort is defined on this service: The
// name of this port within the service. This must be a DNS_LABEL.
// All ports within a ServiceSpec must have unique names. This maps to
// the 'Name' field in EndpointPort objects.
Name string ` json:"name" `
// The IP protocol for this port. Supports "TCP" and "UDP".
Protocol Protocol ` json:"protocol" `
// The port that will be exposed on the service.
2016-04-27 04:35:02 +00:00
Port int32 ` json:"port" `
2015-03-13 15:16:41 +00:00
// Optional: The target port on pods selected by this service. If this
// is a string, it will be looked up as a named port in the target
2016-02-23 04:06:16 +00:00
// Pod's container ports. If this is not specified, the value
// of the 'port' field is used (an identity map).
// This field is ignored for services with clusterIP=None, and should be
// omitted or set equal to the 'port' field.
2015-11-10 06:28:45 +00:00
TargetPort intstr . IntOrString ` json:"targetPort" `
2015-05-22 21:54:19 +00:00
// The port on each node on which this service is exposed.
2015-05-22 22:58:39 +00:00
// Default is to auto-allocate a port if the ServiceType of this Service requires one.
2016-04-27 04:35:02 +00:00
NodePort int32 ` json:"nodePort" `
2015-03-13 15:16:41 +00:00
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2014-10-30 13:29:11 +00:00
// Service is a named abstraction of software service (for example, mysql) consisting of local port
// (for example 3306) that the proxy listens on, and the selector that determines which pods
// will answer requests sent through the proxy.
type Service struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-10-30 13:29:11 +00:00
// Spec defines the behavior of a service.
2014-12-01 05:31:52 +00:00
Spec ServiceSpec ` json:"spec,omitempty" `
2014-10-30 13:29:11 +00:00
// Status represents the current status of a service.
2014-12-01 05:31:52 +00:00
Status ServiceStatus ` json:"status,omitempty" `
2014-06-06 23:40:48 +00:00
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-04-27 22:53:28 +00:00
// ServiceAccount binds together:
// * a name, understood by users, and perhaps by peripheral systems, for an identity
// * a principal that can be authenticated and authorized
// * a set of secrets
type ServiceAccount struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-04-27 22:53:28 +00:00
// Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount
Secrets [ ] ObjectReference ` json:"secrets" `
2015-05-20 17:08:49 +00:00
// ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images
// in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets
// can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet.
2015-06-30 19:23:37 +00:00
ImagePullSecrets [ ] LocalObjectReference ` json:"imagePullSecrets,omitempty" `
2015-04-27 22:53:28 +00:00
}
// ServiceAccountList is a list of ServiceAccount objects
type ServiceAccountList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-04-27 22:53:28 +00:00
Items [ ] ServiceAccount ` json:"items" `
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-03-20 21:24:43 +00:00
// Endpoints is a collection of endpoints that implement the actual service. Example:
// Name: "mysvc",
// Subsets: [
// {
// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
// },
// {
// Addresses: [{"ip": "10.10.3.3"}],
// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
// },
// ]
2014-06-06 23:40:48 +00:00
type Endpoints struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2015-03-20 21:24:43 +00:00
// The set of all endpoints is the union of all subsets.
Subsets [ ] EndpointSubset
2015-02-19 03:54:15 +00:00
}
2015-03-20 21:24:43 +00:00
// EndpointSubset is a group of addresses with a common set of ports. The
// expanded set of endpoints is the Cartesian product of Addresses x Ports.
// For example, given:
// {
// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}],
// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}]
// }
// The resulting set of endpoints can be viewed as:
// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
// b: [ 10.10.1.1:309, 10.10.2.2:309 ]
type EndpointSubset struct {
2015-09-10 01:28:53 +00:00
Addresses [ ] EndpointAddress
NotReadyAddresses [ ] EndpointAddress
Ports [ ] EndpointPort
2015-03-20 21:24:43 +00:00
}
2015-02-19 03:54:15 +00:00
2015-03-20 21:24:43 +00:00
// EndpointAddress is a tuple that describes single IP address.
type EndpointAddress struct {
// The IP of this endpoint.
2016-03-22 04:54:32 +00:00
// IPv6 is also accepted but not fully supported on all platforms. Also, certain
// kubernetes components, like kube-proxy, are not IPv6 ready.
2015-03-20 21:24:43 +00:00
// TODO: This should allow hostname or IP, see #4447.
IP string
2016-04-14 17:45:29 +00:00
// Optional: Hostname of this endpoint
// Meant to be used by DNS servers etc.
Hostname string ` json:"hostname,omitempty" `
2015-02-17 13:24:05 +00:00
// Optional: The kubernetes object related to the entry point.
2015-03-20 21:24:43 +00:00
TargetRef * ObjectReference
}
// EndpointPort is a tuple that describes a single port.
type EndpointPort struct {
// The name of this port (corresponds to ServicePort.Name). Optional
// if only one port is defined. Must be a DNS_LABEL.
Name string
// The port number.
2016-04-27 04:35:02 +00:00
Port int32
2015-03-20 21:24:43 +00:00
// The IP protocol for this port.
Protocol Protocol
2014-06-06 23:40:48 +00:00
}
2014-06-20 23:50:56 +00:00
2014-08-29 02:31:41 +00:00
// EndpointsList is a list of endpoints.
type EndpointsList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] Endpoints ` json:"items" `
2014-08-29 02:31:41 +00:00
}
2014-11-19 22:39:10 +00:00
// NodeSpec describes the attributes that a node is created with.
type NodeSpec struct {
2015-02-16 12:53:00 +00:00
// PodCIDR represents the pod IP range assigned to the node
// Note: assigning IP ranges to nodes might need to be revisited when we support migratable IPs.
2015-03-10 11:29:26 +00:00
PodCIDR string ` json:"podCIDR,omitempty" `
2015-02-17 20:03:14 +00:00
2015-02-11 22:37:27 +00:00
// External ID of the node assigned by some machine database (e.g. a cloud provider)
ExternalID string ` json:"externalID,omitempty" `
2015-02-17 20:03:14 +00:00
2015-05-05 14:52:20 +00:00
// ID of the node assigned by the cloud provider
// Note: format is "<ProviderName>://<ProviderSpecificNodeID>"
ProviderID string ` json:"providerID,omitempty" `
2015-02-17 20:03:14 +00:00
// Unschedulable controls node schedulability of new pods. By default node is schedulable.
Unschedulable bool ` json:"unschedulable,omitempty" `
2014-11-19 22:39:10 +00:00
}
2015-08-13 14:05:32 +00:00
// DaemonEndpoint contains information about a single Daemon endpoint.
type DaemonEndpoint struct {
2016-03-23 23:45:24 +00:00
/ *
The port tag was not properly in quotes in earlier releases , so it must be
uppercased for backwards compat ( since it was falling back to var name of
' Port ' ) .
* /
2015-08-13 14:05:32 +00:00
// Port number of the given endpoint.
2016-04-27 04:35:02 +00:00
Port int32 ` json:"Port" `
2015-08-13 14:05:32 +00:00
}
// NodeDaemonEndpoints lists ports opened by daemons running on the Node.
type NodeDaemonEndpoints struct {
// Endpoint on which Kubelet is listening.
KubeletEndpoint DaemonEndpoint ` json:"kubeletEndpoint,omitempty" `
}
2015-03-02 11:29:32 +00:00
// NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
type NodeSystemInfo struct {
2015-08-13 14:05:32 +00:00
// Machine ID reported by the node.
2015-03-02 11:29:32 +00:00
MachineID string ` json:"machineID" `
2015-08-13 14:05:32 +00:00
// System UUID reported by the node.
2015-03-02 11:29:32 +00:00
SystemUUID string ` json:"systemUUID" `
2015-08-13 14:05:32 +00:00
// Boot ID reported by the node.
2015-03-23 16:30:45 +00:00
BootID string ` json:"bootID" `
2015-08-13 14:05:32 +00:00
// Kernel Version reported by the node.
2015-05-10 04:08:25 +00:00
KernelVersion string ` json:"kernelVersion" `
2015-08-13 14:05:32 +00:00
// OS Image reported by the node.
2015-12-12 07:53:34 +00:00
OSImage string ` json:"osImage" `
2015-08-13 14:05:32 +00:00
// ContainerRuntime Version reported by the node.
2015-03-27 18:03:43 +00:00
ContainerRuntimeVersion string ` json:"containerRuntimeVersion" `
2015-08-13 14:05:32 +00:00
// Kubelet Version reported by the node.
2015-03-25 20:49:38 +00:00
KubeletVersion string ` json:"kubeletVersion" `
2015-08-13 14:05:32 +00:00
// KubeProxy Version reported by the node.
2015-03-25 20:49:38 +00:00
KubeProxyVersion string ` json:"kubeProxyVersion" `
2016-05-10 17:38:57 +00:00
// The Operating System reported by the node
OperatingSystem string ` json:"operatingSystem" `
// The Architecture reported by the node
Architecture string ` json:"architecture" `
2015-03-02 11:29:32 +00:00
}
2014-11-19 22:39:10 +00:00
// NodeStatus is information about the current status of a node.
type NodeStatus struct {
2015-12-15 02:01:30 +00:00
// Capacity represents the total resources of a node.
2015-03-25 13:44:40 +00:00
Capacity ResourceList ` json:"capacity,omitempty" `
2015-12-15 02:01:30 +00:00
// Allocatable represents the resources of a node that are available for scheduling.
Allocatable ResourceList ` json:"allocatable,omitempty" `
2014-11-12 00:44:33 +00:00
// NodePhase is the current lifecycle phase of the node.
Phase NodePhase ` json:"phase,omitempty" `
// Conditions is an array of current node conditions.
Conditions [ ] NodeCondition ` json:"conditions,omitempty" `
2015-02-13 19:07:23 +00:00
// Queried from cloud provider, if available.
Addresses [ ] NodeAddress ` json:"addresses,omitempty" `
2015-08-13 14:05:32 +00:00
// Endpoints of daemons running on the Node.
DaemonEndpoints NodeDaemonEndpoints ` json:"daemonEndpoints,omitempty" `
// Set of ids/uuids to uniquely identify the node.
2015-03-02 11:29:32 +00:00
NodeInfo NodeSystemInfo ` json:"nodeInfo,omitempty" `
2015-12-02 08:53:56 +00:00
// List of container images on this node
2016-03-23 23:45:24 +00:00
Images [ ] ContainerImage ` json:"images,omitempty" `
2016-05-30 22:48:21 +00:00
// List of attachable volumes in use (mounted) by the node.
VolumesInUse [ ] UniqueVolumeName ` json:"volumesInUse,omitempty" `
2016-06-16 20:41:43 +00:00
// List of volumes that are attached to the node.
VolumesAttached [ ] AttachedVolume ` json:"volumesAttached,omitempty" `
2015-12-02 08:53:56 +00:00
}
2016-05-30 22:48:21 +00:00
type UniqueVolumeName string
2016-05-23 20:37:30 +00:00
2016-06-16 20:41:43 +00:00
// AttachedVolume describes a volume attached to a node
type AttachedVolume struct {
// Name of the attached volume
Name UniqueVolumeName ` json:"name" `
2016-06-22 09:40:52 +00:00
// DevicePath represents the device path where the volume should be available
2016-06-16 20:41:43 +00:00
DevicePath string ` json:"devicePath" `
}
2015-12-02 08:53:56 +00:00
// Describe a container image
type ContainerImage struct {
// Names by which this image is known.
2016-02-11 22:15:50 +00:00
Names [ ] string ` json:"names" `
2015-12-02 08:53:56 +00:00
// The size of the image in bytes.
2016-02-11 22:15:50 +00:00
SizeBytes int64 ` json:"sizeBytes,omitempty" `
2014-11-12 00:44:33 +00:00
}
type NodePhase string
// These are the valid phases of node.
const (
// NodePending means the node has been created/added by the system, but not configured.
NodePending NodePhase = "Pending"
// NodeRunning means the node has been configured and has Kubernetes components running.
NodeRunning NodePhase = "Running"
// NodeTerminated means the node has been removed from the cluster.
NodeTerminated NodePhase = "Terminated"
)
2015-02-24 05:21:14 +00:00
type NodeConditionType string
2014-11-12 00:44:33 +00:00
// These are valid conditions of node. Currently, we don't have enough information to decide
// node condition. In the future, we will add more. The proposed set of conditions are:
2015-04-03 13:43:51 +00:00
// NodeReady, NodeReachable
2014-11-12 00:44:33 +00:00
const (
2015-03-27 20:36:03 +00:00
// NodeReady means kubelet is healthy and ready to accept pods.
2015-02-24 05:21:14 +00:00
NodeReady NodeConditionType = "Ready"
2015-10-22 19:14:56 +00:00
// NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk
// space on the node.
NodeOutOfDisk NodeConditionType = "OutOfDisk"
2016-05-13 03:35:18 +00:00
// NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory.
NodeMemoryPressure NodeConditionType = "MemoryPressure"
2016-05-27 09:37:20 +00:00
// NodeNetworkUnavailable means that network for the node is not correctly configured.
NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable"
2014-11-12 00:44:33 +00:00
)
type NodeCondition struct {
2015-02-24 05:21:14 +00:00
Type NodeConditionType ` json:"type" `
2015-02-03 02:24:25 +00:00
Status ConditionStatus ` json:"status" `
2015-09-17 22:21:55 +00:00
LastHeartbeatTime unversioned . Time ` json:"lastHeartbeatTime,omitempty" `
LastTransitionTime unversioned . Time ` json:"lastTransitionTime,omitempty" `
2015-02-03 02:24:25 +00:00
Reason string ` json:"reason,omitempty" `
Message string ` json:"message,omitempty" `
2014-11-19 22:39:10 +00:00
}
2015-02-13 19:07:23 +00:00
type NodeAddressType string
// These are valid address types of node. NodeLegacyHostIP is used to transit
// from out-dated HostIP field to NodeAddress.
const (
NodeLegacyHostIP NodeAddressType = "LegacyHostIP"
NodeHostName NodeAddressType = "Hostname"
NodeExternalIP NodeAddressType = "ExternalIP"
NodeInternalIP NodeAddressType = "InternalIP"
)
type NodeAddress struct {
Type NodeAddressType ` json:"type" `
Address string ` json:"address" `
}
2014-11-19 22:39:10 +00:00
// NodeResources is an object for conveying resource information about a node.
2015-09-17 10:26:01 +00:00
// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.
2014-09-25 20:55:42 +00:00
type NodeResources struct {
2014-11-19 22:39:10 +00:00
// Capacity represents the available resources of a node
2014-12-01 05:31:52 +00:00
Capacity ResourceList ` json:"capacity,omitempty" `
2014-09-25 20:55:42 +00:00
}
2015-01-03 03:10:03 +00:00
// ResourceName is the name identifying various resources in a ResourceList.
2014-09-25 20:55:42 +00:00
type ResourceName string
2016-04-27 00:54:19 +00:00
// Resource names must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters,
// with the -, _, and . characters allowed anywhere, except the first or last character.
// The default convention, matching that for annotations, is to use lower-case names, with dashes, rather than
// camel case, separating compound words.
// Fully-qualified resource typenames are constructed from a DNS-style subdomain, followed by a slash `/` and a name.
2015-01-03 03:10:03 +00:00
const (
// CPU, in cores. (500m = .5 cores)
ResourceCPU ResourceName = "cpu"
// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceMemory ResourceName = "memory"
2015-03-23 18:18:11 +00:00
// Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024)
ResourceStorage ResourceName = "storage"
2016-04-27 00:54:19 +00:00
// NVIDIA GPU, in devices. Alpha, might change: although fractional and allowing values >1, only one whole device per node is assigned.
ResourceNvidiaGPU ResourceName = "alpha.kubernetes.io/nvidia-gpu"
2015-05-18 22:32:32 +00:00
// Number of Pods that may be running on this Node: see ResourcePods
2015-01-03 03:10:03 +00:00
)
// ResourceList is a set of (resource name, quantity) pairs.
type ResourceList map [ ResourceName ] resource . Quantity
2016-01-12 22:05:27 +00:00
// +genclient=true,nonNamespaced=true
2015-12-11 04:11:22 +00:00
2015-02-16 12:53:00 +00:00
// Node is a worker node in Kubernetes
2014-12-08 03:44:27 +00:00
// The name of the node according to etcd is in ObjectMeta.Name.
type Node struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-11-19 22:39:10 +00:00
// Spec defines the behavior of a node.
2014-12-01 05:31:52 +00:00
Spec NodeSpec ` json:"spec,omitempty" `
2014-11-19 22:39:10 +00:00
// Status describes the current status of a Node
2014-12-01 05:31:52 +00:00
Status NodeStatus ` json:"status,omitempty" `
2014-06-20 21:01:16 +00:00
}
2015-02-23 21:04:45 +00:00
// NodeList is a list of nodes.
2014-12-08 03:44:27 +00:00
type NodeList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-08 03:44:27 +00:00
Items [ ] Node ` json:"items" `
2014-06-20 21:01:16 +00:00
}
2015-01-19 21:50:00 +00:00
// NamespaceSpec describes the attributes on a Namespace
type NamespaceSpec struct {
2015-03-20 16:48:12 +00:00
// Finalizers is an opaque list of values that must be empty to permanently remove object from storage
Finalizers [ ] FinalizerName
2015-01-19 21:50:00 +00:00
}
2015-03-20 16:48:12 +00:00
type FinalizerName string
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here
const (
FinalizerKubernetes FinalizerName = "kubernetes"
2016-05-18 03:24:42 +00:00
FinalizerOrphan string = "orphan"
2015-03-20 16:48:12 +00:00
)
2015-01-19 21:50:00 +00:00
// NamespaceStatus is information about the current status of a Namespace.
type NamespaceStatus struct {
2015-03-10 15:21:09 +00:00
// Phase is the current lifecycle phase of the namespace.
Phase NamespacePhase ` json:"phase,omitempty" `
2015-01-19 21:50:00 +00:00
}
2015-03-10 15:21:09 +00:00
type NamespacePhase string
// These are the valid phases of a namespace.
const (
// NamespaceActive means the namespace is available for use in the system
NamespaceActive NamespacePhase = "Active"
// NamespaceTerminating means the namespace is undergoing graceful termination
NamespaceTerminating NamespacePhase = "Terminating"
)
2016-01-12 22:05:27 +00:00
// +genclient=true,nonNamespaced=true
2015-12-11 04:11:22 +00:00
2015-01-19 21:50:00 +00:00
// A namespace provides a scope for Names.
// Use of multiple namespaces is optional
type Namespace struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-01-19 21:50:00 +00:00
// Spec defines the behavior of the Namespace.
Spec NamespaceSpec ` json:"spec,omitempty" `
// Status describes the current status of a Namespace
Status NamespaceStatus ` json:"status,omitempty" `
}
// NamespaceList is a list of Namespaces.
type NamespaceList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-01-19 21:50:00 +00:00
Items [ ] Namespace ` json:"items" `
}
2015-03-04 20:55:41 +00:00
// Binding ties one object to another - for example, a pod is bound to a node by a scheduler.
2014-07-23 23:09:37 +00:00
type Binding struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
2015-03-04 20:55:41 +00:00
// ObjectMeta describes the object that is being bound.
2014-12-01 05:31:52 +00:00
ObjectMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2015-03-04 20:55:41 +00:00
// Target is the object to bind to.
Target ObjectReference ` json:"target" `
2014-07-23 23:09:37 +00:00
}
2016-03-21 06:15:00 +00:00
// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
type Preconditions struct {
// Specifies the target UID.
UID * types . UID ` json:"uid,omitempty" `
}
2015-03-05 03:34:31 +00:00
// DeleteOptions may be provided when deleting an API object
type DeleteOptions struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
2015-03-05 03:34:31 +00:00
// Optional duration in seconds before the object should be deleted. Value must be non-negative integer.
// The value zero indicates delete immediately. If this value is nil, the default grace period for the
// specified type will be used.
2016-03-21 06:15:00 +00:00
GracePeriodSeconds * int64 ` json:"gracePeriodSeconds,omitempty" `
// Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be
// returned.
Preconditions * Preconditions ` json:"preconditions,omitempty" `
2016-04-06 17:16:15 +00:00
// Should the dependent objects be orphaned. If true/false, the "orphan"
// finalizer will be added to/removed from the object's finalizers list.
OrphanDependents * bool ` json:"orphanDependents,omitempty" `
2015-03-05 03:34:31 +00:00
}
2015-12-01 23:45:29 +00:00
// ExportOptions is the query options to the standard REST get call.
type ExportOptions struct {
unversioned . TypeMeta ` json:",inline" `
// Should this value be exported. Export strips fields that a user can not specify.
Export bool ` json:"export" `
// Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'
Exact bool ` json:"exact" `
}
2015-12-10 09:39:03 +00:00
// ListOptions is the query options to a standard REST list call, and has future support for
// watch calls.
type ListOptions struct {
unversioned . TypeMeta ` json:",inline" `
// A selector based on labels
LabelSelector labels . Selector
// A selector based on fields
FieldSelector fields . Selector
// If true, watch for changes to this list
Watch bool
// The resource version to watch (no effect on list yet)
ResourceVersion string
// Timeout for the list/watch call.
TimeoutSeconds * int64
}
2015-04-06 16:38:55 +00:00
// PodLogOptions is the query options for a Pod's logs REST call
type PodLogOptions struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta
2015-04-06 16:38:55 +00:00
// Container for which to return logs
Container string
// If true, follow the logs for the pod
Follow bool
2015-05-07 21:10:10 +00:00
// If true, return previous terminated container logs
Previous bool
2015-09-10 03:46:11 +00:00
// A relative time in seconds before the current time from which to show logs. If this value
// precedes the time a pod was started, only logs since the pod start will be returned.
// If this value is in the future, no logs will be returned.
// Only one of sinceSeconds or sinceTime may be specified.
SinceSeconds * int64
// An RFC3339 timestamp from which to show logs. If this value
2016-02-12 19:33:32 +00:00
// precedes the time a pod was started, only logs since the pod start will be returned.
2015-09-10 03:46:11 +00:00
// If this value is in the future, no logs will be returned.
// Only one of sinceSeconds or sinceTime may be specified.
SinceTime * unversioned . Time
// If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line
// of log output.
Timestamps bool
// If set, the number of lines from the end of the logs to show. If not specified,
// logs are shown from the creation of the container or sinceSeconds or sinceTime
TailLines * int64
// If set, the number of bytes to read from the server before terminating the
// log output. This may not display a complete final line of logging, and may return
// slightly more or slightly less than the specified limit.
LimitBytes * int64
2015-04-06 16:38:55 +00:00
}
2015-07-28 22:56:27 +00:00
// PodAttachOptions is the query options to a Pod's remote attach call
// TODO: merge w/ PodExecOptions below for stdin, stdout, etc
type PodAttachOptions struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
2015-07-28 22:56:27 +00:00
// Stdin if true indicates that stdin is to be redirected for the attach call
2015-07-31 21:17:53 +00:00
Stdin bool ` json:"stdin,omitempty" `
2015-07-28 22:56:27 +00:00
// Stdout if true indicates that stdout is to be redirected for the attach call
2015-07-31 21:17:53 +00:00
Stdout bool ` json:"stdout,omitempty" `
2015-07-28 22:56:27 +00:00
// Stderr if true indicates that stderr is to be redirected for the attach call
2015-07-31 21:17:53 +00:00
Stderr bool ` json:"stderr,omitempty" `
2015-07-28 22:56:27 +00:00
// TTY if true indicates that a tty will be allocated for the attach call
2015-07-31 21:17:53 +00:00
TTY bool ` json:"tty,omitempty" `
2015-07-28 22:56:27 +00:00
// Container to attach to.
2015-07-31 21:17:53 +00:00
Container string ` json:"container,omitempty" `
2015-07-28 22:56:27 +00:00
}
2015-04-14 15:03:17 +00:00
// PodExecOptions is the query options to a Pod's remote exec call
type PodExecOptions struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta
2015-04-14 15:03:17 +00:00
// Stdin if true indicates that stdin is to be redirected for the exec call
Stdin bool
// Stdout if true indicates that stdout is to be redirected for the exec call
Stdout bool
// Stderr if true indicates that stderr is to be redirected for the exec call
Stderr bool
// TTY if true indicates that a tty will be allocated for the exec call
TTY bool
// Container in which to execute the command.
Container string
2015-05-04 20:21:03 +00:00
// Command is the remote command to execute; argv array; not executed within a shell.
Command [ ] string
2015-04-14 15:03:17 +00:00
}
// PodProxyOptions is the query options to a Pod's proxy call
type PodProxyOptions struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta
2015-04-14 15:03:17 +00:00
// Path is the URL path to use for the current proxy request
Path string
}
2015-11-30 11:48:23 +00:00
// NodeProxyOptions is the query options to a Node's proxy call
type NodeProxyOptions struct {
unversioned . TypeMeta
// Path is the URL path to use for the current proxy request
Path string
}
2015-11-18 03:42:03 +00:00
// ServiceProxyOptions is the query options to a Service's proxy call.
type ServiceProxyOptions struct {
unversioned . TypeMeta
// Path is the part of URLs that include service endpoints, suffixes,
// and parameters to use for the current proxy request to service.
// For example, the whole request URL is
// http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy.
// Path is _search?q=user:kimchy.
Path string
}
2016-04-06 17:16:15 +00:00
// OwnerReference contains enough information to let you identify an owning
// object. Currently, an owning object must be in the same namespace, so there
// is no namespace field.
type OwnerReference struct {
// API version of the referent.
APIVersion string ` json:"apiVersion" `
// Kind of the referent.
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
Kind string ` json:"kind" `
// Name of the referent.
// More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names
Name string ` json:"name" `
// UID of the referent.
// More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids
UID types . UID ` json:"uid" `
2016-05-11 11:42:17 +00:00
// If true, this reference points to the managing controller.
Controller * bool ` json:"controller,omitempty" `
2016-04-06 17:16:15 +00:00
}
2014-09-24 21:35:34 +00:00
// ObjectReference contains enough information to let you inspect or modify the referred object.
type ObjectReference struct {
2015-01-14 23:22:21 +00:00
Kind string ` json:"kind,omitempty" `
Namespace string ` json:"namespace,omitempty" `
Name string ` json:"name,omitempty" `
UID types . UID ` json:"uid,omitempty" `
APIVersion string ` json:"apiVersion,omitempty" `
ResourceVersion string ` json:"resourceVersion,omitempty" `
2014-09-24 21:35:34 +00:00
// Optional. If referring to a piece of an object instead of an entire object, this string
2014-12-30 01:10:38 +00:00
// should contain information to identify the sub-object. For example, if the object
// reference is to a container within a pod, this would take on a value like:
// "spec.containers{name}" (where "name" refers to the name of the container that triggered
// the event) or if no container name is specified "spec.containers[2]" (container with
// index 2 in this pod). This syntax is chosen only to have some well-defined way of
2014-09-24 21:35:34 +00:00
// referencing a part of an object.
// TODO: this design is not final and this field is subject to change in the future.
2014-12-01 05:31:52 +00:00
FieldPath string ` json:"fieldPath,omitempty" `
2014-09-24 21:35:34 +00:00
}
2015-05-19 12:39:46 +00:00
// LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.
type LocalObjectReference struct {
//TODO: Add other useful fields. apiVersion, kind, uid?
Name string
}
2015-04-25 05:26:52 +00:00
type SerializedReference struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
Reference ObjectReference ` json:"reference,omitempty" `
2015-04-25 05:26:52 +00:00
}
2015-01-06 21:22:58 +00:00
type EventSource struct {
// Component from which the event is generated.
Component string ` json:"component,omitempty" `
// Host name on which the event is generated.
Host string ` json:"host,omitempty" `
}
2015-11-13 22:30:01 +00:00
// Valid values for event types (new types could be added in future)
const (
// Information only and will not cause any problems
EventTypeNormal string = "Normal"
// These events are to warn that something might go wrong
EventTypeWarning string = "Warning"
)
2015-12-11 04:11:22 +00:00
// +genclient=true
2014-09-24 21:35:34 +00:00
// Event is a report of an event somewhere in the cluster.
// TODO: Decide whether to store these separately or with the object they apply to.
type Event struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2014-09-24 21:35:34 +00:00
// Required. The object that this event is about.
2014-12-01 05:31:52 +00:00
InvolvedObject ObjectReference ` json:"involvedObject,omitempty" `
2014-09-24 21:35:34 +00:00
// Optional; this should be a short, machine understandable string that gives the reason
2015-01-14 01:10:57 +00:00
// for this event being generated. For example, if the event is reporting that a container
// can't start, the Reason might be "ImageNotFound".
2014-09-24 21:35:34 +00:00
// TODO: provide exact specification for format.
2014-12-01 05:31:52 +00:00
Reason string ` json:"reason,omitempty" `
2014-09-24 21:35:34 +00:00
// Optional. A human-readable description of the status of this operation.
// TODO: decide on maximum length.
2014-12-01 05:31:52 +00:00
Message string ` json:"message,omitempty" `
2014-09-24 21:35:34 +00:00
// Optional. The component reporting this event. Should be a short machine understandable string.
2015-01-06 21:22:58 +00:00
Source EventSource ` json:"source,omitempty" `
2014-10-22 05:28:12 +00:00
2015-02-06 02:21:01 +00:00
// The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
2015-09-17 22:21:55 +00:00
FirstTimestamp unversioned . Time ` json:"firstTimestamp,omitempty" `
2015-02-06 02:21:01 +00:00
2015-08-08 21:29:57 +00:00
// The time at which the most recent occurrence of this event was recorded.
2015-09-17 22:21:55 +00:00
LastTimestamp unversioned . Time ` json:"lastTimestamp,omitempty" `
2015-02-06 02:21:01 +00:00
// The number of times this event has occurred.
2016-04-27 04:35:02 +00:00
Count int32 ` json:"count,omitempty" `
2015-11-13 22:30:01 +00:00
// Type of this event (Normal, Warning), new types could be added in the future.
Type string ` json:"type,omitempty" `
2014-09-24 21:35:34 +00:00
}
// EventList is a list of events.
type EventList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-10-22 15:08:38 +00:00
2014-12-01 05:31:52 +00:00
Items [ ] Event ` json:"items" `
2014-09-24 21:35:34 +00:00
}
2014-12-08 02:19:10 +00:00
// List holds a list of objects, which may not be known by the server.
type List struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2014-12-08 02:19:10 +00:00
Items [ ] runtime . Object ` json:"items" `
}
2015-01-22 21:52:40 +00:00
2015-01-27 21:54:50 +00:00
// A type of object that is limited
type LimitType string
2015-01-23 03:21:13 +00:00
const (
// Limit that applies to all pods in a namespace
2015-01-27 21:54:50 +00:00
LimitTypePod LimitType = "Pod"
2015-01-23 03:21:13 +00:00
// Limit that applies to all containers in a namespace
2015-01-27 21:54:50 +00:00
LimitTypeContainer LimitType = "Container"
2015-01-23 03:21:13 +00:00
)
2015-01-22 21:52:40 +00:00
// LimitRangeItem defines a min/max usage limit for any resource that matches on kind
type LimitRangeItem struct {
2015-01-23 03:21:13 +00:00
// Type of resource that this limit applies to
2015-01-27 21:54:50 +00:00
Type LimitType ` json:"type,omitempty" `
2015-01-22 21:52:40 +00:00
// Max usage constraints on this kind by resource name
Max ResourceList ` json:"max,omitempty" `
// Min usage constraints on this kind by resource name
Min ResourceList ` json:"min,omitempty" `
2015-08-28 16:26:36 +00:00
// Default resource requirement limit value by resource name.
2015-03-31 14:12:57 +00:00
Default ResourceList ` json:"default,omitempty" `
2015-08-28 16:26:36 +00:00
// DefaultRequest resource requirement request value by resource name.
DefaultRequest ResourceList ` json:"defaultRequest,omitempty" `
// MaxLimitRequestRatio represents the max burst value for the named resource
MaxLimitRequestRatio ResourceList ` json:"maxLimitRequestRatio,omitempty" `
2015-01-22 21:52:40 +00:00
}
// LimitRangeSpec defines a min/max usage limit for resources that match on kind
type LimitRangeSpec struct {
// Limits is the list of LimitRangeItem objects that are enforced
Limits [ ] LimitRangeItem ` json:"limits" `
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-01-22 21:52:40 +00:00
// LimitRange sets resource usage limits for each kind of resource in a Namespace
type LimitRange struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-01-22 21:52:40 +00:00
// Spec defines the limits enforced
Spec LimitRangeSpec ` json:"spec,omitempty" `
}
// LimitRangeList is a list of LimitRange items.
type LimitRangeList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-01-22 21:52:40 +00:00
// Items is a list of LimitRange objects
Items [ ] LimitRange ` json:"items" `
}
2015-01-23 17:38:30 +00:00
// The following identify resource constants for Kubernetes object types
const (
// Pods, number
ResourcePods ResourceName = "pods"
// Services, number
ResourceServices ResourceName = "services"
// ReplicationControllers, number
ResourceReplicationControllers ResourceName = "replicationcontrollers"
// ResourceQuotas, number
ResourceQuotas ResourceName = "resourcequotas"
2015-04-08 21:03:56 +00:00
// ResourceSecrets, number
ResourceSecrets ResourceName = "secrets"
2016-02-29 17:02:05 +00:00
// ResourceConfigMaps, number
ResourceConfigMaps ResourceName = "configmaps"
2015-04-08 21:03:56 +00:00
// ResourcePersistentVolumeClaims, number
ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims"
2016-02-18 15:54:24 +00:00
// ResourceServicesNodePorts, number
ResourceServicesNodePorts ResourceName = "services.nodeports"
2016-04-14 08:55:52 +00:00
// ResourceServicesLoadBalancers, number
ResourceServicesLoadBalancers ResourceName = "services.loadbalancers"
2016-02-22 16:12:35 +00:00
// CPU request, in cores. (500m = .5 cores)
ResourceRequestsCPU ResourceName = "requests.cpu"
// Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceRequestsMemory ResourceName = "requests.memory"
// CPU limit, in cores. (500m = .5 cores)
ResourceLimitsCPU ResourceName = "limits.cpu"
// Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
ResourceLimitsMemory ResourceName = "limits.memory"
)
// A ResourceQuotaScope defines a filter that must match each object tracked by a quota
type ResourceQuotaScope string
const (
// Match all pod objects where spec.activeDeadlineSeconds
ResourceQuotaScopeTerminating ResourceQuotaScope = "Terminating"
// Match all pod objects where !spec.activeDeadlineSeconds
ResourceQuotaScopeNotTerminating ResourceQuotaScope = "NotTerminating"
// Match all pod objects that have best effort quality of service
ResourceQuotaScopeBestEffort ResourceQuotaScope = "BestEffort"
// Match all pod objects that do not have best effort quality of service
ResourceQuotaScopeNotBestEffort ResourceQuotaScope = "NotBestEffort"
2015-01-23 17:38:30 +00:00
)
// ResourceQuotaSpec defines the desired hard limits to enforce for Quota
type ResourceQuotaSpec struct {
// Hard is the set of desired hard limits for each named resource
Hard ResourceList ` json:"hard,omitempty" `
2016-02-22 16:12:35 +00:00
// A collection of filters that must match each object tracked by a quota.
// If not specified, the quota matches all objects.
Scopes [ ] ResourceQuotaScope ` json:"scopes,omitempty" `
2015-01-23 17:38:30 +00:00
}
// ResourceQuotaStatus defines the enforced hard limits and observed use
type ResourceQuotaStatus struct {
// Hard is the set of enforced hard limits for each named resource
Hard ResourceList ` json:"hard,omitempty" `
// Used is the current observed total usage of the resource in the namespace
Used ResourceList ` json:"used,omitempty" `
}
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-01-23 17:38:30 +00:00
// ResourceQuota sets aggregate quota restrictions enforced per namespace
type ResourceQuota struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-01-23 17:38:30 +00:00
// Spec defines the desired quota
Spec ResourceQuotaSpec ` json:"spec,omitempty" `
// Status defines the actual enforced quota and its current usage
Status ResourceQuotaStatus ` json:"status,omitempty" `
}
// ResourceQuotaList is a list of ResourceQuota items
type ResourceQuotaList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-01-23 17:38:30 +00:00
// Items is a list of ResourceQuota objects
Items [ ] ResourceQuota ` json:"items" `
}
2015-02-18 01:24:50 +00:00
2015-12-11 04:11:22 +00:00
// +genclient=true
2015-02-18 01:26:41 +00:00
// Secret holds secret data of a certain type. The total bytes of the values in
// the Data field must be less than MaxSecretSize bytes.
2015-02-18 01:24:50 +00:00
type Secret struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-02-18 01:24:50 +00:00
2015-05-11 19:03:10 +00:00
// Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN
// or leading dot followed by valid DNS_SUBDOMAIN.
2015-02-23 18:57:51 +00:00
// The serialized form of the secret data is a base64 encoded string,
// representing the arbitrary (possibly non-string) data value here.
2015-02-18 01:24:50 +00:00
Data map [ string ] [ ] byte ` json:"data,omitempty" `
2015-02-18 01:26:41 +00:00
2015-03-31 21:56:20 +00:00
// Used to facilitate programmatic handling of secret data.
2015-02-18 01:26:41 +00:00
Type SecretType ` json:"type,omitempty" `
2015-02-18 01:24:50 +00:00
}
2015-02-18 01:26:41 +00:00
const MaxSecretSize = 1 * 1024 * 1024
2015-02-18 01:24:50 +00:00
type SecretType string
const (
2015-04-28 03:51:20 +00:00
// SecretTypeOpaque is the default; arbitrary user-defined data
SecretTypeOpaque SecretType = "Opaque"
// SecretTypeServiceAccountToken contains a token that identifies a service account to the API
//
// Required fields:
// - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies
// - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies
// - Secret.Data["token"] - a token that identifies the service account to the API
SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token"
// ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
ServiceAccountNameKey = "kubernetes.io/service-account.name"
// ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
ServiceAccountUIDKey = "kubernetes.io/service-account.uid"
// ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets
ServiceAccountTokenKey = "token"
2015-04-21 03:25:56 +00:00
// ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets
ServiceAccountKubeconfigKey = "kubernetes.kubeconfig"
2015-06-23 22:43:59 +00:00
// ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets
ServiceAccountRootCAKey = "ca.crt"
2016-02-11 19:46:56 +00:00
// ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls
ServiceAccountNamespaceKey = "namespace"
2015-05-06 14:09:18 +00:00
// SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg
//
// Required fields:
// - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file
SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg"
// DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets
DockerConfigKey = ".dockercfg"
2015-08-14 09:08:08 +00:00
// SecretTypeDockerConfigJson contains a dockercfg file that follows the same format rules as ~/.docker/config.json
//
// Required fields:
// - Secret.Data[".dockerconfigjson"] - a serialized ~/.docker/config.json file
SecretTypeDockerConfigJson SecretType = "kubernetes.io/dockerconfigjson"
// DockerConfigJsonKey is the key of the required data for SecretTypeDockerConfigJson secrets
DockerConfigJsonKey = ".dockerconfigjson"
2015-09-10 15:30:58 +00:00
// SecretTypeBasicAuth contains data needed for basic authentication.
//
// Required at least one of fields:
// - Secret.Data["username"] - username used for authentication
// - Secret.Data["password"] - password or token needed for authentication
SecretTypeBasicAuth SecretType = "kubernetes.io/basic-auth"
// BasicAuthUsernameKey is the key of the username for SecretTypeBasicAuth secrets
BasicAuthUsernameKey = "username"
// BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets
BasicAuthPasswordKey = "password"
// SecretTypeSSHAuth contains data needed for SSH authetication.
//
// Required field:
// - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication
SecretTypeSSHAuth SecretType = "kubernetes.io/ssh-auth"
// SSHAuthPrivateKey is the key of the required SSH private key for SecretTypeSSHAuth secrets
SSHAuthPrivateKey = "ssh-privatekey"
2016-01-17 00:06:40 +00:00
// SecretTypeTLS contains information about a TLS client or server secret. It
// is primarily used with TLS termination of the Ingress resource, but may be
// used in other types.
//
// Required fields:
// - Secret.Data["tls.key"] - TLS private key.
// Secret.Data["tls.crt"] - TLS certificate.
// TODO: Consider supporting different formats, specifying CA/destinationCA.
SecretTypeTLS SecretType = "kubernetes.io/tls"
2016-06-22 09:40:52 +00:00
// TLSCertKey is the key for tls certificates in a TLS secret.
2016-01-17 00:06:40 +00:00
TLSCertKey = "tls.crt"
// TLSPrivateKeyKey is the key for the private key field in a TLS secret.
TLSPrivateKeyKey = "tls.key"
2015-02-18 01:24:50 +00:00
)
type SecretList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-02-18 01:24:50 +00:00
Items [ ] Secret ` json:"items" `
}
2015-01-08 20:41:38 +00:00
2016-02-01 22:30:47 +00:00
// +genclient=true
2016-01-15 16:48:36 +00:00
// ConfigMap holds configuration data for components or applications to consume.
type ConfigMap struct {
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
// Data contains the configuration data.
// Each key must be a valid DNS_SUBDOMAIN with an optional leading dot.
Data map [ string ] string ` json:"data,omitempty" `
}
// ConfigMapList is a resource containing a list of ConfigMap objects.
type ConfigMapList struct {
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
// Items is the list of ConfigMaps.
2016-04-21 02:04:20 +00:00
Items [ ] ConfigMap ` json:"items" `
2016-01-15 16:48:36 +00:00
}
2015-01-08 20:41:38 +00:00
// These constants are for remote command execution and port forwarding and are
// used by both the client side and server side components.
//
// This is probably not the ideal place for them, but it didn't seem worth it
// to create pkg/exec and pkg/portforward just to contain a single file with
// constants in it. Suggestions for more appropriate alternatives are
// definitely welcome!
const (
// Enable stdin for remote command execution
ExecStdinParam = "input"
// Enable stdout for remote command execution
ExecStdoutParam = "output"
// Enable stderr for remote command execution
ExecStderrParam = "error"
// Enable TTY for remote command execution
ExecTTYParam = "tty"
// Command to run for remote command execution
ExecCommandParamm = "command"
2015-09-22 20:29:51 +00:00
// Name of header that specifies stream type
StreamType = "streamType"
// Value for streamType header for stdin stream
StreamTypeStdin = "stdin"
// Value for streamType header for stdout stream
2015-01-08 20:41:38 +00:00
StreamTypeStdout = "stdout"
2015-09-22 20:29:51 +00:00
// Value for streamType header for stderr stream
2015-01-08 20:41:38 +00:00
StreamTypeStderr = "stderr"
2015-09-22 20:29:51 +00:00
// Value for streamType header for data stream
StreamTypeData = "data"
// Value for streamType header for error stream
StreamTypeError = "error"
2015-01-08 20:41:38 +00:00
2015-09-22 20:29:51 +00:00
// Name of header that specifies the port being forwarded
2015-01-08 20:41:38 +00:00
PortHeader = "port"
2015-09-22 20:29:51 +00:00
// Name of header that specifies a request ID used to associate the error
// and data streams for a single forwarded connection
PortForwardRequestIDHeader = "requestID"
2015-01-08 20:41:38 +00:00
)
2015-03-06 00:40:28 +00:00
2015-03-14 00:43:14 +00:00
// Similarly to above, these are constants to support HTTP PATCH utilized by
// both the client and server that didn't make sense for a whole package to be
// dedicated to.
type PatchType string
const (
JSONPatchType PatchType = "application/json-patch+json"
MergePatchType PatchType = "application/merge-patch+json"
StrategicMergePatchType PatchType = "application/strategic-merge-patch+json"
)
2015-04-15 19:23:02 +00:00
// Type and constants for component health validation.
type ComponentConditionType string
// These are the valid conditions for the component.
const (
ComponentHealthy ComponentConditionType = "Healthy"
)
type ComponentCondition struct {
2015-04-20 23:49:16 +00:00
Type ComponentConditionType ` json:"type" `
Status ConditionStatus ` json:"status" `
Message string ` json:"message,omitempty" `
Error string ` json:"error,omitempty" `
2015-04-15 19:23:02 +00:00
}
2016-01-12 22:05:27 +00:00
// +genclient=true,nonNamespaced=true
2015-12-11 04:11:22 +00:00
2015-04-15 19:23:02 +00:00
// ComponentStatus (and ComponentStatusList) holds the cluster validation info.
type ComponentStatus struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-04-15 19:23:02 +00:00
2015-04-20 23:49:16 +00:00
Conditions [ ] ComponentCondition ` json:"conditions,omitempty" `
2015-04-15 19:23:02 +00:00
}
type ComponentStatusList struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
unversioned . ListMeta ` json:"metadata,omitempty" `
2015-04-15 19:23:02 +00:00
2015-04-20 23:49:16 +00:00
Items [ ] ComponentStatus ` json:"items" `
2015-04-15 19:23:02 +00:00
}
2015-05-05 23:02:13 +00:00
2015-10-20 18:03:32 +00:00
// SecurityContext holds security configuration that will be applied to a container.
// Some fields are present in both SecurityContext and PodSecurityContext. When both
// are set, the values in SecurityContext take precedence.
2015-05-05 23:02:13 +00:00
type SecurityContext struct {
2015-10-20 18:03:32 +00:00
// The capabilities to add/drop when running containers.
// Defaults to the default set of capabilities granted by the container runtime.
2015-06-30 19:23:37 +00:00
Capabilities * Capabilities ` json:"capabilities,omitempty" `
2015-10-20 18:03:32 +00:00
// Run container in privileged mode.
// Processes in privileged containers are essentially equivalent to root on the host.
// Defaults to false.
2015-06-30 19:23:37 +00:00
Privileged * bool ` json:"privileged,omitempty" `
2015-10-20 18:03:32 +00:00
// The SELinux context to be applied to the container.
// If unspecified, the container runtime will allocate a random SELinux context for each
// container. May also be set in PodSecurityContext. If set in both SecurityContext and
// PodSecurityContext, the value specified in SecurityContext takes precedence.
2015-06-30 19:23:37 +00:00
SELinuxOptions * SELinuxOptions ` json:"seLinuxOptions,omitempty" `
2015-10-20 18:03:32 +00:00
// The UID to run the entrypoint of the container process.
// Defaults to user specified in image metadata if unspecified.
// May also be set in PodSecurityContext. If set in both SecurityContext and
// PodSecurityContext, the value specified in SecurityContext takes precedence.
2015-06-30 19:23:37 +00:00
RunAsUser * int64 ` json:"runAsUser,omitempty" `
2015-10-20 18:03:32 +00:00
// Indicates that the container must run as a non-root user.
// If true, the Kubelet will validate the image at runtime to ensure that it
// does not run as UID 0 (root) and fail to start the container if it does.
// If unset or false, no such validation will be performed.
// May also be set in PodSecurityContext. If set in both SecurityContext and
// PodSecurityContext, the value specified in SecurityContext takes precedence.
RunAsNonRoot * bool ` json:"runAsNonRoot,omitempty" `
2016-02-11 22:31:26 +00:00
// The read-only root filesystem allows you to restrict the locations that an application can write
// files to, ensuring the persistent data can only be written to mounts.
ReadOnlyRootFilesystem * bool ` json:"readOnlyRootFilesystem,omitempty" `
2015-05-05 23:02:13 +00:00
}
// SELinuxOptions are the labels to be applied to the container.
type SELinuxOptions struct {
// SELinux user label
2015-06-30 19:23:37 +00:00
User string ` json:"user,omitempty" `
2015-05-05 23:02:13 +00:00
// SELinux role label
2015-06-30 19:23:37 +00:00
Role string ` json:"role,omitempty" `
2015-05-05 23:02:13 +00:00
// SELinux type label
2015-06-30 19:23:37 +00:00
Type string ` json:"type,omitempty" `
2015-05-05 23:02:13 +00:00
// SELinux level label.
2015-06-30 19:23:37 +00:00
Level string ` json:"level,omitempty" `
2015-05-05 23:02:13 +00:00
}
2015-05-03 22:44:05 +00:00
// RangeAllocation is an opaque API object (not exposed to end users) that can be persisted to record
// the global allocation state of the cluster. The schema of Range and Data generic, in that Range
// should be a string representation of the inputs to a range (for instance, for IP allocation it
// might be a CIDR) and Data is an opaque blob understood by an allocator which is typically a
// binary range. Consumers should use annotations to record additional information (schema version,
// data encoding hints). A range allocation should *ALWAYS* be recreatable at any time by observation
// of the cluster, thus the object is less strongly typed than most.
type RangeAllocation struct {
2015-09-09 21:59:11 +00:00
unversioned . TypeMeta ` json:",inline" `
ObjectMeta ` json:"metadata,omitempty" `
2015-05-03 22:44:05 +00:00
// A string representing a unique label for a range of resources, such as a CIDR "10.0.0.0/8" or
// port range "10000-30000". Range is not strongly schema'd here. The Range is expected to define
// a start and end unless there is an implicit end.
Range string ` json:"range" `
// A byte array representing the serialized state of a range allocation. Additional clarifiers on
// the type or format of data should be represented with annotations. For IP allocations, this is
// represented as a bit array starting at the base IP of the CIDR in Range, with each bit representing
// a single allocated address (the fifth bit on CIDR 10.0.0.0/8 is 10.0.0.4).
Data [ ] byte ` json:"data" `
}
2015-11-27 09:07:17 +00:00
const (
// "default-scheduler" is the name of default scheduler.
DefaultSchedulerName = "default-scheduler"
2016-05-04 06:50:31 +00:00
// RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule
// corresponding to every RequiredDuringScheduling affinity rule.
// When the --hard-pod-affinity-weight scheduler flag is not specified,
// DefaultHardPodAffinityWeight defines the weight of the implicit PreferredDuringScheduling affinity rule.
DefaultHardPodAffinitySymmetricWeight int = 1
// When the --failure-domains scheduler flag is not specified,
// DefaultFailureDomains defines the set of label keys used when TopologyKey is empty in PreferredDuringScheduling anti-affinity.
DefaultFailureDomains string = unversioned . LabelHostname + "," + unversioned . LabelZoneFailureDomain + "," + unversioned . LabelZoneRegion
2015-11-27 09:07:17 +00:00
)