mirror of https://github.com/k3s-io/k3s
3729 lines
138 KiB
Go
3729 lines
138 KiB
Go
/*
|
|
Copyright 2014 The Kubernetes Authors.
|
|
|
|
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
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/fields"
|
|
"k8s.io/apimachinery/pkg/labels"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
"k8s.io/apimachinery/pkg/util/intstr"
|
|
)
|
|
|
|
// Common string formats
|
|
// ---------------------
|
|
// Many fields in this API have formatting requirements. The commonly used
|
|
// formats are defined here.
|
|
//
|
|
// C_IDENTIFIER: This is a string that conforms to the definition of an "identifier"
|
|
// 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.
|
|
//
|
|
// 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:
|
|
// [a-z0-9]([-a-z0-9]*[a-z0-9])?
|
|
//
|
|
// DNS_SUBDOMAIN: This is a string, no more than 253 characters long, that conforms
|
|
// to the definition of a "subdomain" in RFCs 1035 and 1123. This is captured
|
|
// by the following regex:
|
|
// [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)*
|
|
//
|
|
// 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.
|
|
|
|
// ObjectMeta is metadata that all persisted resources must have, which includes all objects
|
|
// users must create.
|
|
// DEPRECATED: Use k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta instead - this type will be removed soon.
|
|
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.
|
|
// +optional
|
|
Name string
|
|
|
|
// 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
|
|
// ServerTimeout indicating a unique name could not be found in the time allotted, and the client
|
|
// should retry (optionally after the time indicated in the Retry-After header).
|
|
// +optional
|
|
GenerateName string
|
|
|
|
// 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.
|
|
// +optional
|
|
Namespace string
|
|
|
|
// SelfLink is a URL representing this object.
|
|
// +optional
|
|
SelfLink string
|
|
|
|
// 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.
|
|
// +optional
|
|
UID types.UID
|
|
|
|
// 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.
|
|
// +optional
|
|
ResourceVersion string
|
|
|
|
// A sequence number representing a specific generation of the desired state.
|
|
// Populated by the system. Read-only.
|
|
// +optional
|
|
Generation int64
|
|
|
|
// 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.
|
|
// +optional
|
|
CreationTimestamp metav1.Time
|
|
|
|
// DeletionTimestamp is RFC 3339 date and time at 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 is expected to 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. After that 30 seconds, the Kubelet will send a hard
|
|
// termination signal (SIGKILL) to the container and after cleanup, remove the pod from the
|
|
// API. In the presence of network partitions, this object may still exist after this
|
|
// timestamp, until an administrator or automated process can determine the resource is
|
|
// fully terminated.
|
|
// If not set, graceful deletion of the object has not been requested.
|
|
//
|
|
// Populated by the system when a graceful deletion is requested.
|
|
// Read-only.
|
|
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
|
|
// +optional
|
|
DeletionTimestamp *metav1.Time
|
|
|
|
// 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.
|
|
// +optional
|
|
DeletionGracePeriodSeconds *int64
|
|
|
|
// Labels are key value pairs that may be used to scope and select individual resources.
|
|
// 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.
|
|
// +optional
|
|
Labels map[string]string
|
|
|
|
// 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
|
|
// objects. Annotation keys have the same formatting restrictions as Label keys. See the
|
|
// comments on Labels for details.
|
|
// +optional
|
|
Annotations map[string]string
|
|
|
|
// List of objects depended by this object. If ALL objects in the list have
|
|
// 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.
|
|
// +optional
|
|
OwnerReferences []metav1.OwnerReference
|
|
|
|
// 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.
|
|
// +optional
|
|
Finalizers []string
|
|
|
|
// The name of the cluster which the object belongs to.
|
|
// This is used to distinguish resources with same name and namespace in different clusters.
|
|
// This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.
|
|
// +optional
|
|
ClusterName string
|
|
}
|
|
|
|
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 = ""
|
|
// NamespaceNone is the argument for a context when there is no namespace.
|
|
NamespaceNone string = ""
|
|
// NamespaceSystem is the system namespace where we place system components.
|
|
NamespaceSystem string = "kube-system"
|
|
// NamespacePublic is the namespace where we place public info (ConfigMaps)
|
|
NamespacePublic string = "kube-public"
|
|
// TerminationMessagePathDefault means the default path to capture the application termination message running in a container
|
|
TerminationMessagePathDefault string = "/dev/termination-log"
|
|
)
|
|
|
|
// Volume represents a named volume in a pod that may be accessed by any containers in the pod.
|
|
type Volume struct {
|
|
// Required: This must be a DNS_LABEL. Each volume in a pod must have
|
|
// a unique name.
|
|
Name string
|
|
// The VolumeSource represents the location and type of a volume to mount.
|
|
// 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.
|
|
// +optional
|
|
VolumeSource
|
|
}
|
|
|
|
// VolumeSource represents the source location of a volume to mount.
|
|
// Only one of its members may be specified.
|
|
type VolumeSource struct {
|
|
// 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.
|
|
// ---
|
|
// TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
|
|
// mount host directories as read/write.
|
|
// +optional
|
|
HostPath *HostPathVolumeSource
|
|
// EmptyDir represents a temporary directory that shares a pod's lifetime.
|
|
// +optional
|
|
EmptyDir *EmptyDirVolumeSource
|
|
// GCEPersistentDisk represents a GCE Disk resource that is attached to a
|
|
// kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
GCEPersistentDisk *GCEPersistentDiskVolumeSource
|
|
// AWSElasticBlockStore represents an AWS EBS disk that is attached to a
|
|
// kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource
|
|
// GitRepo represents a git repository at a particular revision.
|
|
// +optional
|
|
GitRepo *GitRepoVolumeSource
|
|
// Secret represents a secret that should populate this volume.
|
|
// +optional
|
|
Secret *SecretVolumeSource
|
|
// NFS represents an NFS mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
NFS *NFSVolumeSource
|
|
// ISCSIVolumeSource represents an ISCSI Disk resource that is attached to a
|
|
// kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
ISCSI *ISCSIVolumeSource
|
|
// Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
Glusterfs *GlusterfsVolumeSource
|
|
// PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace
|
|
// +optional
|
|
PersistentVolumeClaim *PersistentVolumeClaimVolumeSource
|
|
// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
RBD *RBDVolumeSource
|
|
|
|
// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
Quobyte *QuobyteVolumeSource
|
|
|
|
// FlexVolume represents a generic volume resource that is
|
|
// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.
|
|
// +optional
|
|
FlexVolume *FlexVolumeSource
|
|
|
|
// Cinder represents a cinder volume attached and mounted on kubelets host machine
|
|
// +optional
|
|
Cinder *CinderVolumeSource
|
|
|
|
// CephFS represents a Cephfs mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
CephFS *CephFSVolumeSource
|
|
|
|
// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
|
|
// +optional
|
|
Flocker *FlockerVolumeSource
|
|
|
|
// DownwardAPI represents metadata about the pod that should populate this volume
|
|
// +optional
|
|
DownwardAPI *DownwardAPIVolumeSource
|
|
// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
FC *FCVolumeSource
|
|
// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
|
|
// +optional
|
|
AzureFile *AzureFileVolumeSource
|
|
// ConfigMap represents a configMap that should populate this volume
|
|
// +optional
|
|
ConfigMap *ConfigMapVolumeSource
|
|
// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
|
|
// +optional
|
|
VsphereVolume *VsphereVirtualDiskVolumeSource
|
|
// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
|
|
// +optional
|
|
AzureDisk *AzureDiskVolumeSource
|
|
// PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine
|
|
PhotonPersistentDisk *PhotonPersistentDiskVolumeSource
|
|
// Items for all in one resources secrets, configmaps, and downward API
|
|
Projected *ProjectedVolumeSource
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
GCEPersistentDisk *GCEPersistentDiskVolumeSource
|
|
// AWSElasticBlockStore represents an AWS EBS disk that is attached to a
|
|
// kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource
|
|
// HostPath represents a directory on the host.
|
|
// 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.
|
|
// +optional
|
|
HostPath *HostPathVolumeSource
|
|
// Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod
|
|
// +optional
|
|
Glusterfs *GlusterfsVolumeSource
|
|
// NFS represents an NFS mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
NFS *NFSVolumeSource
|
|
// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
RBD *RBDVolumeSource
|
|
// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
Quobyte *QuobyteVolumeSource
|
|
// ISCSIVolumeSource represents an ISCSI resource that is attached to a
|
|
// kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
ISCSI *ISCSIVolumeSource
|
|
// FlexVolume represents a generic volume resource that is
|
|
// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.
|
|
// +optional
|
|
FlexVolume *FlexVolumeSource
|
|
// Cinder represents a cinder volume attached and mounted on kubelets host machine
|
|
// +optional
|
|
Cinder *CinderVolumeSource
|
|
// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
|
|
// +optional
|
|
CephFS *CephFSVolumeSource
|
|
// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
|
|
// +optional
|
|
FC *FCVolumeSource
|
|
// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
|
|
// +optional
|
|
Flocker *FlockerVolumeSource
|
|
// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
|
|
// +optional
|
|
AzureFile *AzureFileVolumeSource
|
|
// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
|
|
// +optional
|
|
VsphereVolume *VsphereVirtualDiskVolumeSource
|
|
// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
|
|
// +optional
|
|
AzureDisk *AzureDiskVolumeSource
|
|
// PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine
|
|
PhotonPersistentDisk *PhotonPersistentDiskVolumeSource
|
|
}
|
|
|
|
type PersistentVolumeClaimVolumeSource struct {
|
|
// ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume
|
|
ClaimName string
|
|
// Optional: Defaults to false (read/write). ReadOnly here
|
|
// will force the ReadOnly setting in VolumeMounts
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// +genclient=true
|
|
// +nonNamespaced=true
|
|
|
|
type PersistentVolume struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
//Spec defines a persistent volume owned by the cluster
|
|
// +optional
|
|
Spec PersistentVolumeSpec
|
|
|
|
// Status represents the current information about persistent volume.
|
|
// +optional
|
|
Status PersistentVolumeStatus
|
|
}
|
|
|
|
type PersistentVolumeSpec struct {
|
|
// Resources represents the actual resources of the volume
|
|
Capacity ResourceList
|
|
// Source represents the location and type of a volume to mount.
|
|
PersistentVolumeSource
|
|
// AccessModes contains all ways the volume can be mounted
|
|
// +optional
|
|
AccessModes []PersistentVolumeAccessMode
|
|
// 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.
|
|
// 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.
|
|
// +optional
|
|
ClaimRef *ObjectReference
|
|
// Optional: what happens to a persistent volume when released from its claim.
|
|
// +optional
|
|
PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy
|
|
// Name of StorageClass to which this persistent volume belongs. Empty value
|
|
// means that this volume does not belong to any StorageClass.
|
|
// +optional
|
|
StorageClassName string
|
|
}
|
|
|
|
// 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.
|
|
PersistentVolumeReclaimDelete PersistentVolumeReclaimPolicy = "Delete"
|
|
// PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.
|
|
// The default policy is Retain.
|
|
PersistentVolumeReclaimRetain PersistentVolumeReclaimPolicy = "Retain"
|
|
)
|
|
|
|
type PersistentVolumeStatus struct {
|
|
// Phase indicates if a volume is available, bound to a claim, or released by a claim
|
|
// +optional
|
|
Phase PersistentVolumePhase
|
|
// A human-readable message indicating details about why the volume is in this state.
|
|
// +optional
|
|
Message string
|
|
// Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI
|
|
// +optional
|
|
Reason string
|
|
}
|
|
|
|
type PersistentVolumeList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
Items []PersistentVolume
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// PersistentVolumeClaim is a user's request for and claim to a persistent volume
|
|
type PersistentVolumeClaim struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the volume requested by a pod author
|
|
// +optional
|
|
Spec PersistentVolumeClaimSpec
|
|
|
|
// Status represents the current information about a claim
|
|
// +optional
|
|
Status PersistentVolumeClaimStatus
|
|
}
|
|
|
|
type PersistentVolumeClaimList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
Items []PersistentVolumeClaim
|
|
}
|
|
|
|
// 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
|
|
// +optional
|
|
AccessModes []PersistentVolumeAccessMode
|
|
// A label query over volumes to consider for binding. This selector is
|
|
// ignored when VolumeName is set
|
|
// +optional
|
|
Selector *metav1.LabelSelector
|
|
// Resources represents the minimum resources required
|
|
// +optional
|
|
Resources ResourceRequirements
|
|
// VolumeName is the binding reference to the PersistentVolume backing this
|
|
// claim. When set to non-empty value Selector is not evaluated
|
|
// +optional
|
|
VolumeName string
|
|
// Name of the StorageClass required by the claim.
|
|
// More info: http://kubernetes.io/docs/user-guide/persistent-volumes#class-1
|
|
// +optional
|
|
StorageClassName *string
|
|
}
|
|
|
|
type PersistentVolumeClaimStatus struct {
|
|
// Phase represents the current phase of PersistentVolumeClaim
|
|
// +optional
|
|
Phase PersistentVolumeClaimPhase
|
|
// AccessModes contains all ways the volume backing the PVC can be mounted
|
|
// +optional
|
|
AccessModes []PersistentVolumeAccessMode
|
|
// Represents the actual resources of the underlying volume
|
|
// +optional
|
|
Capacity ResourceList
|
|
}
|
|
|
|
type PersistentVolumeAccessMode string
|
|
|
|
const (
|
|
// can be mounted read/write mode to exactly 1 host
|
|
ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce"
|
|
// can be mounted in read-only mode to many hosts
|
|
ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany"
|
|
// can be mounted in read/write mode to many hosts
|
|
ReadWriteMany PersistentVolumeAccessMode = "ReadWriteMany"
|
|
)
|
|
|
|
type PersistentVolumePhase string
|
|
|
|
const (
|
|
// used for PersistentVolumes that are not available
|
|
VolumePending PersistentVolumePhase = "Pending"
|
|
// used for PersistentVolumes that are not yet bound
|
|
// Available volumes are held by the binder and matched to PersistentVolumeClaims
|
|
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
|
|
// this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource
|
|
VolumeReleased PersistentVolumePhase = "Released"
|
|
// used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim
|
|
VolumeFailed PersistentVolumePhase = "Failed"
|
|
)
|
|
|
|
type PersistentVolumeClaimPhase string
|
|
|
|
const (
|
|
// used for PersistentVolumeClaims that are not yet bound
|
|
ClaimPending PersistentVolumeClaimPhase = "Pending"
|
|
// used for PersistentVolumeClaims that are bound
|
|
ClaimBound PersistentVolumeClaimPhase = "Bound"
|
|
// 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"
|
|
)
|
|
|
|
// Represents a host path mapped into a pod.
|
|
// Host path volumes do not support ownership management or SELinux relabeling.
|
|
type HostPathVolumeSource struct {
|
|
Path string
|
|
}
|
|
|
|
// Represents an empty directory for a pod.
|
|
// Empty directory volumes support ownership management and SELinux relabeling.
|
|
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
|
|
// need, we give them a backing store that satisfies that. For now
|
|
// 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.
|
|
// +optional
|
|
Medium StorageMedium
|
|
}
|
|
|
|
// StorageMedium defines ways that storage can be allocated to a volume.
|
|
type StorageMedium string
|
|
|
|
const (
|
|
StorageMediumDefault StorageMedium = "" // use whatever the default is for the node
|
|
StorageMediumMemory StorageMedium = "Memory" // use memory (tmpfs)
|
|
)
|
|
|
|
// Protocol defines network protocols supported for things like container ports.
|
|
type Protocol string
|
|
|
|
const (
|
|
// ProtocolTCP is the TCP protocol.
|
|
ProtocolTCP Protocol = "TCP"
|
|
// ProtocolUDP is the UDP protocol.
|
|
ProtocolUDP Protocol = "UDP"
|
|
)
|
|
|
|
// Represents a Persistent Disk resource in Google Compute Engine.
|
|
//
|
|
// 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.
|
|
type GCEPersistentDiskVolumeSource struct {
|
|
// Unique name of the PD resource. Used to identify the disk in GCE
|
|
PDName string
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
|
|
// TODO: how do we prevent errors in the filesystem from compromising the machine
|
|
// +optional
|
|
FSType string
|
|
// 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.
|
|
// +optional
|
|
Partition int32
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents an ISCSI disk.
|
|
// ISCSI volumes can only be mounted as read/write once.
|
|
// ISCSI volumes support ownership management and SELinux relabeling.
|
|
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)
|
|
// +optional
|
|
TargetPortal string
|
|
// Required: target iSCSI Qualified Name
|
|
// +optional
|
|
IQN string
|
|
// Required: iSCSI target lun number
|
|
// +optional
|
|
Lun int32
|
|
// Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.
|
|
// +optional
|
|
ISCSIInterface string
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
|
|
// TODO: how do we prevent errors in the filesystem from compromising the machine
|
|
// +optional
|
|
FSType string
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
// Required: list of iSCSI target portal ips for high availability.
|
|
// the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260)
|
|
// +optional
|
|
Portals []string
|
|
}
|
|
|
|
// 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.
|
|
type FCVolumeSource struct {
|
|
// Required: FC target worldwide names (WWNs)
|
|
TargetWWNs []string
|
|
// Required: FC target lun number
|
|
Lun *int32
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
|
|
// TODO: how do we prevent errors in the filesystem from compromising the machine
|
|
// +optional
|
|
FSType string
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// FlexVolume represents a generic volume resource that is
|
|
// provisioned/attached using an 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
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
|
|
// +optional
|
|
FSType string
|
|
// 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.
|
|
// +optional
|
|
SecretRef *LocalObjectReference
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
// Optional: Extra driver options if any.
|
|
// +optional
|
|
Options map[string]string
|
|
}
|
|
|
|
// Represents a Persistent Disk resource in AWS.
|
|
//
|
|
// An AWS EBS disk must exist before mounting to a container. The disk
|
|
// must also be in the same AWS zone as the kubelet. An AWS EBS disk
|
|
// can only be mounted as read/write once. AWS EBS volumes support
|
|
// ownership management and SELinux relabeling.
|
|
type AWSElasticBlockStoreVolumeSource struct {
|
|
// Unique id of the persistent disk resource. Used to identify the disk in AWS
|
|
VolumeID string
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
|
|
// TODO: how do we prevent errors in the filesystem from compromising the machine
|
|
// +optional
|
|
FSType string
|
|
// 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.
|
|
// +optional
|
|
Partition int32
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// 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.
|
|
type GitRepoVolumeSource struct {
|
|
// Repository URL
|
|
Repository string
|
|
// Commit hash, this is optional
|
|
// +optional
|
|
Revision string
|
|
// 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.
|
|
// +optional
|
|
Directory string
|
|
// TODO: Consider credentials here.
|
|
}
|
|
|
|
// Adapts a Secret into a volume.
|
|
//
|
|
// 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.
|
|
// Secret volumes support ownership management and SELinux relabeling.
|
|
type SecretVolumeSource struct {
|
|
// Name of the secret in the pod's namespace to use.
|
|
// +optional
|
|
SecretName string
|
|
// If unspecified, each key-value pair in the Data field of the referenced
|
|
// Secret will be projected into the volume as a file whose name is the
|
|
// key and content is the value. If specified, the listed keys will be
|
|
// projected into the specified paths, and unlisted keys will not be
|
|
// present. If a key is specified which is not present in the Secret,
|
|
// the volume setup will error unless it is marked optional. Paths must be
|
|
// relative and may not contain the '..' path or start with '..'.
|
|
// +optional
|
|
Items []KeyToPath
|
|
// Mode bits to use on created files by default. Must be a value between
|
|
// 0 and 0777.
|
|
// Directories within the path are not affected by this setting.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
DefaultMode *int32
|
|
// Specify whether the Secret or its key must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// Adapts a secret into a projected volume.
|
|
//
|
|
// The contents of the target Secret's Data field will be presented in a
|
|
// projected volume as files using the keys in the Data field as the file names.
|
|
// Note that this is identical to a secret volume source without the default
|
|
// mode.
|
|
type SecretProjection struct {
|
|
LocalObjectReference
|
|
// If unspecified, each key-value pair in the Data field of the referenced
|
|
// Secret will be projected into the volume as a file whose name is the
|
|
// key and content is the value. If specified, the listed keys will be
|
|
// projected into the specified paths, and unlisted keys will not be
|
|
// present. If a key is specified which is not present in the Secret,
|
|
// the volume setup will error unless it is marked optional. Paths must be
|
|
// relative and may not contain the '..' path or start with '..'.
|
|
// +optional
|
|
Items []KeyToPath
|
|
// Specify whether the Secret or its key must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// Represents an NFS mount that lasts the lifetime of a pod.
|
|
// NFS volumes do not support ownership management or SELinux relabeling.
|
|
type NFSVolumeSource struct {
|
|
// Server is the hostname or IP address of the NFS server
|
|
Server string
|
|
|
|
// Path is the exported NFS share
|
|
Path string
|
|
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the NFS export to be mounted with read-only permissions
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents a Quobyte mount that lasts the lifetime of a pod.
|
|
// Quobyte volumes do not support ownership management or SELinux relabeling.
|
|
type QuobyteVolumeSource struct {
|
|
// Registry represents a single or multiple Quobyte Registry services
|
|
// specified as a string as host:port pair (multiple entries are separated with commas)
|
|
// which acts as the central registry for volumes
|
|
Registry string
|
|
|
|
// Volume is a string that references an already created Quobyte volume by name.
|
|
Volume string
|
|
|
|
// Defaults to false (read/write). ReadOnly here will force
|
|
// the Quobyte to be mounted with read-only permissions
|
|
// +optional
|
|
ReadOnly bool
|
|
|
|
// User to map volume access to
|
|
// Defaults to the root user
|
|
// +optional
|
|
User string
|
|
|
|
// Group to map volume access to
|
|
// Default is no group
|
|
// +optional
|
|
Group string
|
|
}
|
|
|
|
// Represents a Glusterfs mount that lasts the lifetime of a pod.
|
|
// Glusterfs volumes do not support ownership management or SELinux relabeling.
|
|
type GlusterfsVolumeSource struct {
|
|
// Required: EndpointsName is the endpoint name that details Glusterfs topology
|
|
EndpointsName string
|
|
|
|
// Required: Path is the Glusterfs volume path
|
|
Path string
|
|
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the Glusterfs to be mounted with read-only permissions
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents a Rados Block Device mount that lasts the lifetime of a pod.
|
|
// RBD volumes support ownership management and SELinux relabeling.
|
|
type RBDVolumeSource struct {
|
|
// Required: CephMonitors is a collection of Ceph monitors
|
|
CephMonitors []string
|
|
// Required: RBDImage is the rados image name
|
|
RBDImage string
|
|
// Filesystem type to mount.
|
|
// Must be a filesystem type supported by the host operating system.
|
|
// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
|
|
// TODO: how do we prevent errors in the filesystem from compromising the machine
|
|
// +optional
|
|
FSType string
|
|
// Optional: RadosPool is the rados pool name,default is rbd
|
|
// +optional
|
|
RBDPool string
|
|
// Optional: RBDUser is the rados user name, default is admin
|
|
// +optional
|
|
RadosUser string
|
|
// Optional: Keyring is the path to key ring for RBDUser, default is /etc/ceph/keyring
|
|
// +optional
|
|
Keyring string
|
|
// Optional: SecretRef is name of the authentication secret for RBDUser, default is nil.
|
|
// +optional
|
|
SecretRef *LocalObjectReference
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// 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.
|
|
type CinderVolumeSource struct {
|
|
// Unique id of the volume used to identify the cinder volume
|
|
VolumeID string
|
|
// 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.
|
|
// +optional
|
|
FSType string
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents a Ceph Filesystem mount that lasts the lifetime of a pod
|
|
// Cephfs volumes do not support ownership management or SELinux relabeling.
|
|
type CephFSVolumeSource struct {
|
|
// Required: Monitors is a collection of Ceph monitors
|
|
Monitors []string
|
|
// Optional: Used as the mounted root, rather than the full Ceph tree, default is /
|
|
// +optional
|
|
Path string
|
|
// Optional: User is the rados user name, default is admin
|
|
// +optional
|
|
User string
|
|
// Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret
|
|
// +optional
|
|
SecretFile string
|
|
// Optional: SecretRef is reference to the authentication secret for User, default is empty.
|
|
// +optional
|
|
SecretRef *LocalObjectReference
|
|
// Optional: Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents a Flocker volume mounted by the Flocker agent.
|
|
// One and only one of datasetName and datasetUUID should be set.
|
|
// Flocker volumes do not support ownership management or SELinux relabeling.
|
|
type FlockerVolumeSource struct {
|
|
// Name of the dataset stored as metadata -> name on the dataset for Flocker
|
|
// should be considered as deprecated
|
|
// +optional
|
|
DatasetName string
|
|
// UUID of the dataset. This is unique identifier of a Flocker dataset
|
|
// +optional
|
|
DatasetUUID string
|
|
}
|
|
|
|
// Represents a volume containing downward API info.
|
|
// Downward API volumes support ownership management and SELinux relabeling.
|
|
type DownwardAPIVolumeSource struct {
|
|
// Items is a list of DownwardAPIVolume file
|
|
// +optional
|
|
Items []DownwardAPIVolumeFile
|
|
// Mode bits to use on created files by default. Must be a value between
|
|
// 0 and 0777.
|
|
// Directories within the path are not affected by this setting.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
DefaultMode *int32
|
|
}
|
|
|
|
// Represents a single file containing information from the downward API
|
|
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
|
|
// Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
|
|
// +optional
|
|
FieldRef *ObjectFieldSelector
|
|
// Selects a resource of the container: only resources limits and requests
|
|
// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
|
|
// +optional
|
|
ResourceFieldRef *ResourceFieldSelector
|
|
// Optional: mode bits to use on this file, must be a value between 0
|
|
// and 0777. If not specified, the volume defaultMode will be used.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
Mode *int32
|
|
}
|
|
|
|
// Represents downward API info for projecting into a projected volume.
|
|
// Note that this is identical to a downwardAPI volume source without the default
|
|
// mode.
|
|
type DownwardAPIProjection struct {
|
|
// Items is a list of DownwardAPIVolume file
|
|
// +optional
|
|
Items []DownwardAPIVolumeFile
|
|
}
|
|
|
|
// 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
|
|
// Share Name
|
|
ShareName string
|
|
// Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly bool
|
|
}
|
|
|
|
// Represents a vSphere volume resource.
|
|
type VsphereVirtualDiskVolumeSource struct {
|
|
// Path that identifies vSphere volume vmdk
|
|
VolumePath string
|
|
// 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.
|
|
// +optional
|
|
FSType string
|
|
}
|
|
|
|
// Represents a Photon Controller persistent disk resource.
|
|
type PhotonPersistentDiskVolumeSource struct {
|
|
// ID that identifies Photon Controller persistent disk
|
|
PdID string
|
|
// 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
|
|
}
|
|
|
|
type AzureDataDiskCachingMode string
|
|
|
|
const (
|
|
AzureDataDiskCachingNone AzureDataDiskCachingMode = "None"
|
|
AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly"
|
|
AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite"
|
|
)
|
|
|
|
// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
|
|
type AzureDiskVolumeSource struct {
|
|
// The Name of the data disk in the blob storage
|
|
DiskName string
|
|
// The URI the the data disk in the blob storage
|
|
DataDiskURI string
|
|
// Host Caching mode: None, Read Only, Read Write.
|
|
// +optional
|
|
CachingMode *AzureDataDiskCachingMode
|
|
// 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.
|
|
// +optional
|
|
FSType *string
|
|
// Defaults to false (read/write). ReadOnly here will force
|
|
// the ReadOnly setting in VolumeMounts.
|
|
// +optional
|
|
ReadOnly *bool
|
|
}
|
|
|
|
// 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
|
|
// If unspecified, each key-value pair in the Data field of the referenced
|
|
// ConfigMap will be projected into the volume as a file whose name is the
|
|
// key and content is the value. If specified, the listed keys will be
|
|
// projected into the specified paths, and unlisted keys will not be
|
|
// present. If a key is specified which is not present in the ConfigMap,
|
|
// the volume setup will error unless it is marked optional. Paths must be
|
|
// relative and may not contain the '..' path or start with '..'.
|
|
// +optional
|
|
Items []KeyToPath
|
|
// Mode bits to use on created files by default. Must be a value between
|
|
// 0 and 0777.
|
|
// Directories within the path are not affected by this setting.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
DefaultMode *int32
|
|
// Specify whether the ConfigMap or it's keys must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// Adapts a ConfigMap into a projected volume.
|
|
//
|
|
// The contents of the target ConfigMap's Data field will be presented in a
|
|
// projected 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.
|
|
// Note that this is identical to a configmap volume source without the default
|
|
// mode.
|
|
type ConfigMapProjection struct {
|
|
LocalObjectReference
|
|
// If unspecified, each key-value pair in the Data field of the referenced
|
|
// ConfigMap will be projected into the volume as a file whose name is the
|
|
// key and content is the value. If specified, the listed keys will be
|
|
// projected into the specified paths, and unlisted keys will not be
|
|
// present. If a key is specified which is not present in the ConfigMap,
|
|
// the volume setup will error unless it is marked optional. Paths must be
|
|
// relative and may not contain the '..' path or start with '..'.
|
|
// +optional
|
|
Items []KeyToPath
|
|
// Specify whether the ConfigMap or it's keys must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// Represents a projected volume source
|
|
type ProjectedVolumeSource struct {
|
|
// list of volume projections
|
|
Sources []VolumeProjection
|
|
// Mode bits to use on created files by default. Must be a value between
|
|
// 0 and 0777.
|
|
// Directories within the path are not affected by this setting.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
DefaultMode *int32
|
|
}
|
|
|
|
// Projection that may be projected along with other supported volume types
|
|
type VolumeProjection struct {
|
|
// all types below are the supported types for projection into the same volume
|
|
|
|
// information about the secret data to project
|
|
Secret *SecretProjection
|
|
// information about the downwardAPI data to project
|
|
DownwardAPI *DownwardAPIProjection
|
|
// information about the configMap data to project
|
|
ConfigMap *ConfigMapProjection
|
|
}
|
|
|
|
// Maps a string key to a path within a volume.
|
|
type KeyToPath struct {
|
|
// The key to project.
|
|
Key string
|
|
|
|
// 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
|
|
// Optional: mode bits to use on this file, should be a value between 0
|
|
// and 0777. If not specified, the volume defaultMode will be used.
|
|
// This might be in conflict with other options that affect the file
|
|
// mode, like fsGroup, and the result can be other mode bits set.
|
|
// +optional
|
|
Mode *int32
|
|
}
|
|
|
|
// ContainerPort represents a network port in a single container
|
|
type ContainerPort struct {
|
|
// Optional: If specified, this must be an IANA_SVC_NAME Each named port
|
|
// in a pod must have a unique name.
|
|
// +optional
|
|
Name string
|
|
// Optional: If specified, this must be a valid port number, 0 < x < 65536.
|
|
// If HostNetwork is specified, this must match ContainerPort.
|
|
// +optional
|
|
HostPort int32
|
|
// Required: This must be a valid port number, 0 < x < 65536.
|
|
ContainerPort int32
|
|
// Required: Supports "TCP" and "UDP".
|
|
// +optional
|
|
Protocol Protocol
|
|
// Optional: What host IP to bind the external port to.
|
|
// +optional
|
|
HostIP string
|
|
}
|
|
|
|
// VolumeMount describes a mounting of a Volume within a container.
|
|
type VolumeMount struct {
|
|
// Required: This must match the Name of a Volume [above].
|
|
Name string
|
|
// Optional: Defaults to false (read-write).
|
|
// +optional
|
|
ReadOnly bool
|
|
// Required. Must not contain ':'.
|
|
MountPath string
|
|
// Path within the volume from which the container's volume should be mounted.
|
|
// Defaults to "" (volume's root).
|
|
// +optional
|
|
SubPath string
|
|
}
|
|
|
|
// EnvVar represents an environment variable present in a Container.
|
|
type EnvVar struct {
|
|
// Required: This must be a C_IDENTIFIER.
|
|
Name string
|
|
// Optional: no more than one of the following may be specified.
|
|
// 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.
|
|
// +optional
|
|
Value string
|
|
// Optional: Specifies a source the value of this var should come from.
|
|
// +optional
|
|
ValueFrom *EnvVarSource
|
|
}
|
|
|
|
// EnvVarSource represents a source for the value of an EnvVar.
|
|
// Only one of its fields may be set.
|
|
type EnvVarSource struct {
|
|
// Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations,
|
|
// spec.nodeName, spec.serviceAccountName, status.podIP.
|
|
// +optional
|
|
FieldRef *ObjectFieldSelector
|
|
// Selects a resource of the container: only resources limits and requests
|
|
// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
|
|
// +optional
|
|
ResourceFieldRef *ResourceFieldSelector
|
|
// Selects a key of a ConfigMap.
|
|
// +optional
|
|
ConfigMapKeyRef *ConfigMapKeySelector
|
|
// Selects a key of a secret in the pod's namespace.
|
|
// +optional
|
|
SecretKeyRef *SecretKeySelector
|
|
}
|
|
|
|
// ObjectFieldSelector selects an APIVersioned field of an object.
|
|
type ObjectFieldSelector struct {
|
|
// 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.
|
|
APIVersion string
|
|
// Required: Path of the field to select in the specified API version
|
|
FieldPath string
|
|
}
|
|
|
|
// ResourceFieldSelector represents container resources (cpu, memory) and their output format
|
|
type ResourceFieldSelector struct {
|
|
// Container name: required for volumes, optional for env vars
|
|
// +optional
|
|
ContainerName string
|
|
// Required: resource to select
|
|
Resource string
|
|
// Specifies the output format of the exposed resources, defaults to "1"
|
|
// +optional
|
|
Divisor resource.Quantity
|
|
}
|
|
|
|
// Selects a key from a ConfigMap.
|
|
type ConfigMapKeySelector struct {
|
|
// The ConfigMap to select from.
|
|
LocalObjectReference
|
|
// The key to select.
|
|
Key string
|
|
// Specify whether the ConfigMap or it's key must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// SecretKeySelector selects a key of a Secret.
|
|
type SecretKeySelector struct {
|
|
// The name of the secret in the pod's namespace to select from.
|
|
LocalObjectReference
|
|
// The key of the secret to select from. Must be a valid secret key.
|
|
Key string
|
|
// Specify whether the Secret or it's key must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// EnvFromSource represents the source of a set of ConfigMaps
|
|
type EnvFromSource struct {
|
|
// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
|
|
// +optional
|
|
Prefix string
|
|
// The ConfigMap to select from.
|
|
//+optional
|
|
ConfigMapRef *ConfigMapEnvSource
|
|
// The Secret to select from.
|
|
//+optional
|
|
SecretRef *SecretEnvSource
|
|
}
|
|
|
|
// ConfigMapEnvSource selects a ConfigMap to populate the environment
|
|
// variables with.
|
|
//
|
|
// The contents of the target ConfigMap's Data field will represent the
|
|
// key-value pairs as environment variables.
|
|
type ConfigMapEnvSource struct {
|
|
// The ConfigMap to select from.
|
|
LocalObjectReference
|
|
// Specify whether the ConfigMap must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// SecretEnvSource selects a Secret to populate the environment
|
|
// variables with.
|
|
//
|
|
// The contents of the target Secret's Data field will represent the
|
|
// key-value pairs as environment variables.
|
|
type SecretEnvSource struct {
|
|
// The Secret to select from.
|
|
LocalObjectReference
|
|
// Specify whether the Secret must be defined
|
|
// +optional
|
|
Optional *bool
|
|
}
|
|
|
|
// HTTPHeader describes a custom header to be used in HTTP probes
|
|
type HTTPHeader struct {
|
|
// The header field name
|
|
Name string
|
|
// The header field value
|
|
Value string
|
|
}
|
|
|
|
// HTTPGetAction describes an action based on HTTP Get requests.
|
|
type HTTPGetAction struct {
|
|
// Optional: Path to access on the HTTP server.
|
|
// +optional
|
|
Path string
|
|
// Required: Name or number of the port to access on the container.
|
|
// +optional
|
|
Port intstr.IntOrString
|
|
// Optional: Host name to connect to, defaults to the pod IP. You
|
|
// probably want to set "Host" in httpHeaders instead.
|
|
// +optional
|
|
Host string
|
|
// Optional: Scheme to use for connecting to the host, defaults to HTTP.
|
|
// +optional
|
|
Scheme URIScheme
|
|
// Optional: Custom headers to set in the request. HTTP allows repeated headers.
|
|
// +optional
|
|
HTTPHeaders []HTTPHeader
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
// TCPSocketAction describes an action based on opening a socket
|
|
type TCPSocketAction struct {
|
|
// Required: Port to connect to.
|
|
// +optional
|
|
Port intstr.IntOrString
|
|
}
|
|
|
|
// ExecAction describes a "run in container" action.
|
|
type ExecAction struct {
|
|
// Command is the command line to execute inside the container, the working directory for the
|
|
// command is root ('/') in the container's filesystem. The command is simply exec'd, it is
|
|
// not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
|
|
// a shell, you need to explicitly call out to that shell.
|
|
// +optional
|
|
Command []string
|
|
}
|
|
|
|
// Probe describes a health check to be performed against a container to determine whether it is
|
|
// alive or ready to receive traffic.
|
|
type Probe struct {
|
|
// The action taken to determine the health of a container
|
|
Handler
|
|
// Length of time before health checking is activated. In seconds.
|
|
// +optional
|
|
InitialDelaySeconds int32
|
|
// Length of time before health checking times out. In seconds.
|
|
// +optional
|
|
TimeoutSeconds int32
|
|
// How often (in seconds) to perform the probe.
|
|
// +optional
|
|
PeriodSeconds int32
|
|
// Minimum consecutive successes for the probe to be considered successful after having failed.
|
|
// Must be 1 for liveness.
|
|
// +optional
|
|
SuccessThreshold int32
|
|
// Minimum consecutive failures for the probe to be considered failed after having succeeded.
|
|
// +optional
|
|
FailureThreshold int32
|
|
}
|
|
|
|
// PullPolicy describes a policy for if/when to pull a container image
|
|
type PullPolicy string
|
|
|
|
const (
|
|
// PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
|
|
PullAlways PullPolicy = "Always"
|
|
// PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
|
|
PullNever PullPolicy = "Never"
|
|
// 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.
|
|
PullIfNotPresent PullPolicy = "IfNotPresent"
|
|
)
|
|
|
|
// TerminationMessagePolicy describes how termination messages are retrieved from a container.
|
|
type TerminationMessagePolicy string
|
|
|
|
const (
|
|
// TerminationMessageReadFile is the default behavior and will set the container status message to
|
|
// the contents of the container's terminationMessagePath when the container exits.
|
|
TerminationMessageReadFile TerminationMessagePolicy = "File"
|
|
// TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs
|
|
// for the container status message when the container exits with an error and the
|
|
// terminationMessagePath has no contents.
|
|
TerminationMessageFallbackToLogsOnError TerminationMessagePolicy = "FallbackToLogsOnError"
|
|
)
|
|
|
|
// Capability represent POSIX capabilities type
|
|
type Capability string
|
|
|
|
// Capabilities represent POSIX capabilities that can be added or removed to a running container.
|
|
type Capabilities struct {
|
|
// Added capabilities
|
|
// +optional
|
|
Add []Capability
|
|
// Removed capabilities
|
|
// +optional
|
|
Drop []Capability
|
|
}
|
|
|
|
// ResourceRequirements describes the compute resource requirements.
|
|
type ResourceRequirements struct {
|
|
// Limits describes the maximum amount of compute resources allowed.
|
|
// +optional
|
|
Limits ResourceList
|
|
// Requests describes the minimum amount of compute resources required.
|
|
// If Request is omitted for a container, it defaults to Limits if that is explicitly specified,
|
|
// otherwise to an implementation-defined value
|
|
// +optional
|
|
Requests ResourceList
|
|
}
|
|
|
|
// Container represents a single container that is expected to be run on the host.
|
|
type Container struct {
|
|
// Required: This must be a DNS_LABEL. Each container in a pod must
|
|
// have a unique name.
|
|
Name string
|
|
// Required.
|
|
Image string
|
|
// Optional: The docker image's entrypoint is used if this is not provided; cannot be updated.
|
|
// 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.
|
|
// +optional
|
|
Command []string
|
|
// Optional: The docker image's cmd is used if this is not provided; cannot be updated.
|
|
// 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.
|
|
// +optional
|
|
Args []string
|
|
// Optional: Defaults to Docker's default.
|
|
// +optional
|
|
WorkingDir string
|
|
// +optional
|
|
Ports []ContainerPort
|
|
// List of sources to populate environment variables in the container.
|
|
// The keys defined within a source must be a C_IDENTIFIER. An invalid key
|
|
// will prevent the container from starting. When a key exists in multiple
|
|
// sources, the value associated with the last source will take precedence.
|
|
// Values defined by an Env with a duplicate key will take precedence.
|
|
// Cannot be updated.
|
|
// +optional
|
|
EnvFrom []EnvFromSource
|
|
// +optional
|
|
Env []EnvVar
|
|
// Compute resource requirements.
|
|
// +optional
|
|
Resources ResourceRequirements
|
|
// +optional
|
|
VolumeMounts []VolumeMount
|
|
// +optional
|
|
LivenessProbe *Probe
|
|
// +optional
|
|
ReadinessProbe *Probe
|
|
// +optional
|
|
Lifecycle *Lifecycle
|
|
// Required.
|
|
// +optional
|
|
TerminationMessagePath string
|
|
// +optional
|
|
TerminationMessagePolicy TerminationMessagePolicy
|
|
// Required: Policy for pulling images for this container
|
|
ImagePullPolicy PullPolicy
|
|
// Optional: SecurityContext defines the security options the container should be run with.
|
|
// If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext.
|
|
// +optional
|
|
SecurityContext *SecurityContext
|
|
|
|
// Variables for interactive containers, these have very specialized use-cases (e.g. debugging)
|
|
// and shouldn't be used for general purpose containers.
|
|
// +optional
|
|
Stdin bool
|
|
// +optional
|
|
StdinOnce bool
|
|
// +optional
|
|
TTY bool
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
Exec *ExecAction
|
|
// HTTPGet specifies the http request to perform.
|
|
// +optional
|
|
HTTPGet *HTTPGetAction
|
|
// TCPSocket specifies an action involving a TCP port.
|
|
// TODO: implement a realistic TCP lifecycle hook
|
|
// +optional
|
|
TCPSocket *TCPSocketAction
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
PostStart *Handler
|
|
// 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.
|
|
// +optional
|
|
PreStop *Handler
|
|
}
|
|
|
|
// The below types are used by kube_client and api_server.
|
|
|
|
type ConditionStatus string
|
|
|
|
// 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
|
|
// can't decide if a resource is in the condition or not. In the future, we could add other
|
|
// intermediate conditions, e.g. ConditionDegraded.
|
|
const (
|
|
ConditionTrue ConditionStatus = "True"
|
|
ConditionFalse ConditionStatus = "False"
|
|
ConditionUnknown ConditionStatus = "Unknown"
|
|
)
|
|
|
|
type ContainerStateWaiting struct {
|
|
// A brief CamelCase string indicating details about why the container is in waiting state.
|
|
// +optional
|
|
Reason string
|
|
// A human-readable message indicating details about why the container is in waiting state.
|
|
// +optional
|
|
Message string
|
|
}
|
|
|
|
type ContainerStateRunning struct {
|
|
// +optional
|
|
StartedAt metav1.Time
|
|
}
|
|
|
|
type ContainerStateTerminated struct {
|
|
ExitCode int32
|
|
// +optional
|
|
Signal int32
|
|
// +optional
|
|
Reason string
|
|
// +optional
|
|
Message string
|
|
// +optional
|
|
StartedAt metav1.Time
|
|
// +optional
|
|
FinishedAt metav1.Time
|
|
// +optional
|
|
ContainerID string
|
|
}
|
|
|
|
// 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.
|
|
type ContainerState struct {
|
|
// +optional
|
|
Waiting *ContainerStateWaiting
|
|
// +optional
|
|
Running *ContainerStateRunning
|
|
// +optional
|
|
Terminated *ContainerStateTerminated
|
|
}
|
|
|
|
type ContainerStatus struct {
|
|
// Each container in a pod must have a unique name.
|
|
Name string
|
|
// +optional
|
|
State ContainerState
|
|
// +optional
|
|
LastTerminationState ContainerState
|
|
// Ready specifies whether the container has passed its readiness check.
|
|
Ready bool
|
|
// 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.
|
|
RestartCount int32
|
|
Image string
|
|
ImageID string
|
|
// +optional
|
|
ContainerID string
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
type PodConditionType string
|
|
|
|
// These are valid conditions of pod.
|
|
const (
|
|
// PodScheduled represents status of the scheduling process for this pod.
|
|
PodScheduled PodConditionType = "PodScheduled"
|
|
// PodReady means the pod is able to service requests and should be added to the
|
|
// load balancing pools of all matching services.
|
|
PodReady PodConditionType = "Ready"
|
|
// PodInitialized means that all init containers in the pod have started successfully.
|
|
PodInitialized PodConditionType = "Initialized"
|
|
// PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler
|
|
// can't schedule the pod right now, for example due to insufficient resources in the cluster.
|
|
PodReasonUnschedulable = "Unschedulable"
|
|
)
|
|
|
|
type PodCondition struct {
|
|
Type PodConditionType
|
|
Status ConditionStatus
|
|
// +optional
|
|
LastProbeTime metav1.Time
|
|
// +optional
|
|
LastTransitionTime metav1.Time
|
|
// +optional
|
|
Reason string
|
|
// +optional
|
|
Message string
|
|
}
|
|
|
|
// 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.
|
|
type RestartPolicy string
|
|
|
|
const (
|
|
RestartPolicyAlways RestartPolicy = "Always"
|
|
RestartPolicyOnFailure RestartPolicy = "OnFailure"
|
|
RestartPolicyNever RestartPolicy = "Never"
|
|
)
|
|
|
|
// PodList is a list of Pods.
|
|
type PodList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Pod
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
// 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
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// 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
|
|
// Represents a key's relationship to a set of values.
|
|
// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
|
|
Operator NodeSelectorOperator
|
|
// 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.
|
|
// +optional
|
|
Values []string
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
// Affinity is a group of affinity scheduling rules.
|
|
type Affinity struct {
|
|
// Describes node affinity scheduling rules for the pod.
|
|
// +optional
|
|
NodeAffinity *NodeAffinity
|
|
// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
|
|
// +optional
|
|
PodAffinity *PodAffinity
|
|
// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
|
|
// +optional
|
|
PodAntiAffinity *PodAntiAffinity
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
// RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm
|
|
// 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.
|
|
// +optional
|
|
RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm
|
|
// 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.
|
|
// +optional
|
|
PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
// RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm
|
|
// 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.
|
|
// +optional
|
|
RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm
|
|
// 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.
|
|
// +optional
|
|
PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm
|
|
}
|
|
|
|
// 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 int32
|
|
// Required. A pod affinity term, associated with the corresponding weight.
|
|
PodAffinityTerm 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.
|
|
// +optional
|
|
LabelSelector *metav1.LabelSelector
|
|
// 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
|
|
// 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.
|
|
// +optional
|
|
TopologyKey string
|
|
}
|
|
|
|
// Node affinity is a group of node affinity scheduling rules.
|
|
type NodeAffinity 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 an update), the system
|
|
// will try to eventually evict the pod from its node.
|
|
// +optional
|
|
// RequiredDuringSchedulingRequiredDuringExecution *NodeSelector
|
|
|
|
// 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.
|
|
// +optional
|
|
RequiredDuringSchedulingIgnoredDuringExecution *NodeSelector
|
|
// 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.
|
|
// +optional
|
|
PreferredDuringSchedulingIgnoredDuringExecution []PreferredSchedulingTerm
|
|
}
|
|
|
|
// 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.
|
|
Weight int32
|
|
// A node selector term, associated with the corresponding weight.
|
|
Preference NodeSelectorTerm
|
|
}
|
|
|
|
// 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
|
|
// Required. The taint value corresponding to the taint key.
|
|
// +optional
|
|
Value string
|
|
// Required. The effect of the taint on pods
|
|
// that do not tolerate the taint.
|
|
// Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
|
|
Effect TaintEffect
|
|
// TimeAdded represents the time at which the taint was added.
|
|
// It is only written for NoExecute taints.
|
|
// +optional
|
|
TimeAdded metav1.Time
|
|
}
|
|
|
|
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.
|
|
// Like TaintEffectNoSchedule, but additionally do not allow pods submitted to
|
|
// Kubelet without going through the scheduler to start.
|
|
// Enforced by Kubelet and the scheduler.
|
|
// TaintEffectNoScheduleNoAdmit TaintEffect = "NoScheduleNoAdmit"
|
|
// Evict any already-running pods that do not tolerate the taint.
|
|
// Currently enforced by NodeController.
|
|
TaintEffectNoExecute TaintEffect = "NoExecute"
|
|
)
|
|
|
|
// 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 {
|
|
// Key is the taint key that the toleration applies to. Empty means match all taint keys.
|
|
// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
|
|
// +optional
|
|
Key string
|
|
// 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.
|
|
// +optional
|
|
Operator TolerationOperator
|
|
// Value is the taint value the toleration matches to.
|
|
// If the operator is Exists, the value should be empty, otherwise just a regular string.
|
|
// +optional
|
|
Value string
|
|
// Effect indicates the taint effect to match. Empty means match all taint effects.
|
|
// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
|
|
// +optional
|
|
Effect TaintEffect
|
|
// TolerationSeconds represents the period of time the toleration (which must be
|
|
// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
|
|
// it is not set, which means tolerate the taint forever (do not evict). Zero and
|
|
// negative values will be treated as 0 (evict immediately) by the system.
|
|
// +optional
|
|
TolerationSeconds *int64
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
// PodSpec is a description of a pod
|
|
type PodSpec struct {
|
|
Volumes []Volume
|
|
// List of initialization containers belonging to the pod.
|
|
InitContainers []Container
|
|
// List of containers belonging to the pod.
|
|
Containers []Container
|
|
// +optional
|
|
RestartPolicy RestartPolicy
|
|
// Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
|
|
// Value must be non-negative integer. The value zero indicates delete immediately.
|
|
// If this value is nil, the default grace period will be used instead.
|
|
// The grace period is the duration in seconds after the processes running in the pod are sent
|
|
// a termination signal and the time when the processes are forcibly halted with a kill signal.
|
|
// Set this value longer than the expected cleanup time for your process.
|
|
// +optional
|
|
TerminationGracePeriodSeconds *int64
|
|
// 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
|
|
// +optional
|
|
ActiveDeadlineSeconds *int64
|
|
// Required: Set DNS policy.
|
|
// +optional
|
|
DNSPolicy DNSPolicy
|
|
// NodeSelector is a selector which must be true for the pod to fit on a node
|
|
// +optional
|
|
NodeSelector map[string]string
|
|
|
|
// ServiceAccountName is the name of the ServiceAccount to use to run this pod
|
|
// The pod will be allowed to use secrets referenced by the ServiceAccount
|
|
ServiceAccountName string
|
|
// AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.
|
|
// +optional
|
|
AutomountServiceAccountToken *bool
|
|
|
|
// 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.
|
|
// +optional
|
|
NodeName string
|
|
// SecurityContext holds pod-level security attributes and common container settings.
|
|
// Optional: Defaults to empty. See type description for default values of each field.
|
|
// +optional
|
|
SecurityContext *PodSecurityContext
|
|
// 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.
|
|
// +optional
|
|
ImagePullSecrets []LocalObjectReference
|
|
// Specifies the hostname of the Pod.
|
|
// If not specified, the pod's hostname will be set to a system-defined value.
|
|
// +optional
|
|
Hostname string
|
|
// 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.
|
|
// +optional
|
|
Subdomain string
|
|
// If specified, the pod's scheduling constraints
|
|
// +optional
|
|
Affinity *Affinity
|
|
// If specified, the pod will be dispatched by specified scheduler.
|
|
// If not specified, the pod will be dispatched by default scheduler.
|
|
// +optional
|
|
SchedulerName string
|
|
// If specified, the pod's tolerations.
|
|
// +optional
|
|
Tolerations []Toleration
|
|
}
|
|
|
|
// Sysctl defines a kernel parameter to be set
|
|
type Sysctl struct {
|
|
// Name of a property to set
|
|
Name string
|
|
// Value of a property to set
|
|
Value string
|
|
}
|
|
|
|
// PodSecurityContext holds pod-level security attributes and common container settings.
|
|
// Some fields are also present in container.securityContext. Field values of
|
|
// container.securityContext take precedence over field values of PodSecurityContext.
|
|
type PodSecurityContext struct {
|
|
// Use the host's network namespace. If this option is set, the ports that will be
|
|
// used must be specified.
|
|
// Optional: Default to false
|
|
// +k8s:conversion-gen=false
|
|
// +optional
|
|
HostNetwork bool
|
|
// Use the host's pid namespace.
|
|
// Optional: Default to false.
|
|
// +k8s:conversion-gen=false
|
|
// +optional
|
|
HostPID bool
|
|
// Use the host's ipc namespace.
|
|
// Optional: Default to false.
|
|
// +k8s:conversion-gen=false
|
|
// +optional
|
|
HostIPC bool
|
|
// 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.
|
|
// +optional
|
|
SELinuxOptions *SELinuxOptions
|
|
// 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.
|
|
// +optional
|
|
RunAsUser *int64
|
|
// 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.
|
|
// +optional
|
|
RunAsNonRoot *bool
|
|
// 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.
|
|
// +optional
|
|
SupplementalGroups []int64
|
|
// 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.
|
|
// +optional
|
|
FSGroup *int64
|
|
}
|
|
|
|
// PodQOSClass defines the supported qos classes of Pods.
|
|
type PodQOSClass string
|
|
|
|
const (
|
|
// PodQOSGuaranteed is the Guaranteed qos class.
|
|
PodQOSGuaranteed PodQOSClass = "Guaranteed"
|
|
// PodQOSBurstable is the Burstable qos class.
|
|
PodQOSBurstable PodQOSClass = "Burstable"
|
|
// PodQOSBestEffort is the BestEffort qos class.
|
|
PodQOSBestEffort PodQOSClass = "BestEffort"
|
|
)
|
|
|
|
// PodStatus represents information about the status of a pod. Status may trail the actual
|
|
// state of a system.
|
|
type PodStatus struct {
|
|
// +optional
|
|
Phase PodPhase
|
|
// +optional
|
|
Conditions []PodCondition
|
|
// A human readable message indicating details about why the pod is in this state.
|
|
// +optional
|
|
Message string
|
|
// A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'
|
|
// +optional
|
|
Reason string
|
|
|
|
// +optional
|
|
HostIP string
|
|
// +optional
|
|
PodIP string
|
|
|
|
// 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.
|
|
// +optional
|
|
StartTime *metav1.Time
|
|
// +optional
|
|
QOSClass PodQOSClass
|
|
|
|
// 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://kubernetes.io/docs/user-guide/pod-states#container-statuses
|
|
InitContainerStatuses []ContainerStatus
|
|
// 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.
|
|
// TODO: Make real decisions about what our info should look like. Re-enable fuzz test
|
|
// when we have done this.
|
|
// +optional
|
|
ContainerStatuses []ContainerStatus
|
|
}
|
|
|
|
// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
|
|
type PodStatusResult struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
// Status represents the current information about a pod. This data may not be up
|
|
// to date.
|
|
// +optional
|
|
Status PodStatus
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// Pod is a collection of containers, used as either input (create, update) or as output (list, get).
|
|
type Pod struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the behavior of a pod.
|
|
// +optional
|
|
Spec PodSpec
|
|
|
|
// Status represents the current information about a pod. This data may not be up
|
|
// to date.
|
|
// +optional
|
|
Status PodStatus
|
|
}
|
|
|
|
// PodTemplateSpec describes the data a pod should have when created from a template
|
|
type PodTemplateSpec struct {
|
|
// Metadata of the pods created from this template.
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the behavior of a pod.
|
|
// +optional
|
|
Spec PodSpec
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// PodTemplate describes a template for creating copies of a predefined pod.
|
|
type PodTemplate struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Template defines the pods that will be created from this pod template
|
|
// +optional
|
|
Template PodTemplateSpec
|
|
}
|
|
|
|
// PodTemplateList is a list of PodTemplates.
|
|
type PodTemplateList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []PodTemplate
|
|
}
|
|
|
|
// 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.
|
|
Replicas int32
|
|
|
|
// Minimum number of seconds for which a newly created pod should be ready
|
|
// without any of its container crashing, for it to be considered available.
|
|
// Defaults to 0 (pod will be considered available as soon as it is ready)
|
|
// +optional
|
|
MinReadySeconds int32
|
|
|
|
// Selector is a label query over pods that should match the Replicas count.
|
|
Selector map[string]string
|
|
|
|
// 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.
|
|
// Must be set before converting to a versioned API object
|
|
// +optional
|
|
//TemplateRef *ObjectReference
|
|
|
|
// Template is the object that describes the pod that will be created if
|
|
// insufficient replicas are detected. Internally, this takes precedence over a
|
|
// TemplateRef.
|
|
// +optional
|
|
Template *PodTemplateSpec
|
|
}
|
|
|
|
// ReplicationControllerStatus represents the current status of a replication
|
|
// controller.
|
|
type ReplicationControllerStatus struct {
|
|
// Replicas is the number of actual replicas.
|
|
Replicas int32
|
|
|
|
// The number of pods that have labels matching the labels of the pod template of the replication controller.
|
|
// +optional
|
|
FullyLabeledReplicas int32
|
|
|
|
// The number of ready replicas for this replication controller.
|
|
// +optional
|
|
ReadyReplicas int32
|
|
|
|
// The number of available replicas (ready for at least minReadySeconds) for this replication controller.
|
|
// +optional
|
|
AvailableReplicas int32
|
|
|
|
// ObservedGeneration is the most recent generation observed by the controller.
|
|
// +optional
|
|
ObservedGeneration int64
|
|
|
|
// Represents the latest available observations of a replication controller's current state.
|
|
// +optional
|
|
Conditions []ReplicationControllerCondition
|
|
}
|
|
|
|
type ReplicationControllerConditionType string
|
|
|
|
// These are valid conditions of a replication controller.
|
|
const (
|
|
// ReplicationControllerReplicaFailure is added in a replication controller when one of its pods
|
|
// fails to be created due to insufficient quota, limit ranges, pod security policy, node selectors,
|
|
// etc. or deleted due to kubelet being down or finalizers are failing.
|
|
ReplicationControllerReplicaFailure ReplicationControllerConditionType = "ReplicaFailure"
|
|
)
|
|
|
|
// ReplicationControllerCondition describes the state of a replication controller at a certain point.
|
|
type ReplicationControllerCondition struct {
|
|
// Type of replication controller condition.
|
|
Type ReplicationControllerConditionType
|
|
// Status of the condition, one of True, False, Unknown.
|
|
Status ConditionStatus
|
|
// The last time the condition transitioned from one status to another.
|
|
// +optional
|
|
LastTransitionTime metav1.Time
|
|
// The reason for the condition's last transition.
|
|
// +optional
|
|
Reason string
|
|
// A human readable message indicating details about the transition.
|
|
// +optional
|
|
Message string
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// ReplicationController represents the configuration of a replication controller.
|
|
type ReplicationController struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the desired behavior of this replication controller.
|
|
// +optional
|
|
Spec ReplicationControllerSpec
|
|
|
|
// Status is the current status of this replication controller. This data may be
|
|
// out of date by some window of time.
|
|
// +optional
|
|
Status ReplicationControllerStatus
|
|
}
|
|
|
|
// ReplicationControllerList is a collection of replication controllers.
|
|
type ReplicationControllerList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []ReplicationController
|
|
}
|
|
|
|
const (
|
|
// ClusterIPNone - do not assign a cluster IP
|
|
// no proxying required and no environment variables should be created for pods
|
|
ClusterIPNone = "None"
|
|
)
|
|
|
|
// ServiceList holds a list of services.
|
|
type ServiceList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Service
|
|
}
|
|
|
|
// Session Affinity Type string
|
|
type ServiceAffinity string
|
|
|
|
const (
|
|
// ServiceAffinityClientIP is the Client IP based.
|
|
ServiceAffinityClientIP ServiceAffinity = "ClientIP"
|
|
|
|
// ServiceAffinityNone - no session affinity.
|
|
ServiceAffinityNone ServiceAffinity = "None"
|
|
)
|
|
|
|
// Service Type string describes ingress methods for a service
|
|
type ServiceType string
|
|
|
|
const (
|
|
// ServiceTypeClusterIP means a service will only be accessible inside the
|
|
// cluster, via the ClusterIP.
|
|
ServiceTypeClusterIP ServiceType = "ClusterIP"
|
|
|
|
// ServiceTypeNodePort means a service will be exposed on one port of
|
|
// every node, in addition to 'ClusterIP' type.
|
|
ServiceTypeNodePort ServiceType = "NodePort"
|
|
|
|
// 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"
|
|
|
|
// ServiceTypeExternalName means a service consists of only a reference to
|
|
// an external name that kubedns or equivalent will return as a CNAME
|
|
// record, with no exposing or proxying of any pods involved.
|
|
ServiceTypeExternalName ServiceType = "ExternalName"
|
|
)
|
|
|
|
// ServiceStatus represents the current status of a service
|
|
type ServiceStatus struct {
|
|
// LoadBalancer contains the current status of the load-balancer,
|
|
// if one is present.
|
|
// +optional
|
|
LoadBalancer LoadBalancerStatus
|
|
}
|
|
|
|
// 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.
|
|
// +optional
|
|
Ingress []LoadBalancerIngress
|
|
}
|
|
|
|
// 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)
|
|
// +optional
|
|
IP string
|
|
|
|
// Hostname is set for load-balancer ingress points that are DNS based
|
|
// (typically AWS load-balancers)
|
|
// +optional
|
|
Hostname string
|
|
}
|
|
|
|
// ServiceSpec describes the attributes that a user creates on a service
|
|
type ServiceSpec struct {
|
|
// Type determines how the Service is exposed. Defaults to ClusterIP. Valid
|
|
// options are ExternalName, ClusterIP, NodePort, and LoadBalancer.
|
|
// "ExternalName" maps to the specified externalName.
|
|
// "ClusterIP" allocates a cluster-internal IP address for load-balancing to
|
|
// endpoints. Endpoints are determined by the selector or if that is not
|
|
// specified, by manual construction of an Endpoints object. If clusterIP is
|
|
// "None", no virtual IP is allocated and the endpoints are published as a
|
|
// set of endpoints rather than a stable IP.
|
|
// "NodePort" builds on ClusterIP and allocates a port on every node which
|
|
// routes to the clusterIP.
|
|
// "LoadBalancer" builds on NodePort and creates an
|
|
// external load-balancer (if supported in the current cloud) which routes
|
|
// to the clusterIP.
|
|
// More info: http://kubernetes.io/docs/user-guide/services#overview
|
|
// +optional
|
|
Type ServiceType
|
|
|
|
// Required: The list of ports that are exposed by this service.
|
|
Ports []ServicePort
|
|
|
|
// Route service traffic to pods with label keys and values matching this
|
|
// selector. If empty or not present, the service is assumed to have an
|
|
// external process managing its endpoints, which Kubernetes will not
|
|
// modify. Only applies to types ClusterIP, NodePort, and LoadBalancer.
|
|
// Ignored if type is ExternalName.
|
|
// More info: http://kubernetes.io/docs/user-guide/services#overview
|
|
Selector map[string]string
|
|
|
|
// ClusterIP is the IP address of the service and is usually assigned
|
|
// randomly by the master. If an address is specified manually and is not in
|
|
// use by others, it will be allocated to the service; otherwise, creation
|
|
// of the service will fail. This field can not be changed through updates.
|
|
// Valid values are "None", empty string (""), or a valid IP address. "None"
|
|
// can be specified for headless services when proxying is not required.
|
|
// Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if
|
|
// type is ExternalName.
|
|
// More info: http://kubernetes.io/docs/user-guide/services#virtual-ips-and-service-proxies
|
|
// +optional
|
|
ClusterIP string
|
|
|
|
// ExternalName is the external reference that kubedns or equivalent will
|
|
// return as a CNAME record for this service. No proxying will be involved.
|
|
// Must be a valid DNS name and requires Type to be ExternalName.
|
|
ExternalName string
|
|
|
|
// ExternalIPs are used by external load balancers, or can be set by
|
|
// users to handle external traffic that arrives at a node.
|
|
// +optional
|
|
ExternalIPs []string
|
|
|
|
// 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.
|
|
// +optional
|
|
LoadBalancerIP string
|
|
|
|
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
|
|
// +optional
|
|
SessionAffinity ServiceAffinity
|
|
|
|
// 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."
|
|
// +optional
|
|
LoadBalancerSourceRanges []string
|
|
}
|
|
|
|
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
|
|
|
|
// The IP protocol for this port. Supports "TCP" and "UDP".
|
|
Protocol Protocol
|
|
|
|
// The port that will be exposed on the service.
|
|
Port int32
|
|
|
|
// 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
|
|
// 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.
|
|
TargetPort intstr.IntOrString
|
|
|
|
// The port on each node on which this service is exposed.
|
|
// Default is to auto-allocate a port if the ServiceType of this Service requires one.
|
|
NodePort int32
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// 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 {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the behavior of a service.
|
|
// +optional
|
|
Spec ServiceSpec
|
|
|
|
// Status represents the current status of a service.
|
|
// +optional
|
|
Status ServiceStatus
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// 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 {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount
|
|
Secrets []ObjectReference
|
|
|
|
// 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.
|
|
// +optional
|
|
ImagePullSecrets []LocalObjectReference
|
|
|
|
// AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted.
|
|
// Can be overridden at the pod level.
|
|
// +optional
|
|
AutomountServiceAccountToken *bool
|
|
}
|
|
|
|
// ServiceAccountList is a list of ServiceAccount objects
|
|
type ServiceAccountList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []ServiceAccount
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// 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}]
|
|
// },
|
|
// ]
|
|
type Endpoints struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// The set of all endpoints is the union of all subsets.
|
|
Subsets []EndpointSubset
|
|
}
|
|
|
|
// 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 {
|
|
Addresses []EndpointAddress
|
|
NotReadyAddresses []EndpointAddress
|
|
Ports []EndpointPort
|
|
}
|
|
|
|
// EndpointAddress is a tuple that describes single IP address.
|
|
type EndpointAddress struct {
|
|
// The IP of this endpoint.
|
|
// IPv6 is also accepted but not fully supported on all platforms. Also, certain
|
|
// kubernetes components, like kube-proxy, are not IPv6 ready.
|
|
// TODO: This should allow hostname or IP, see #4447.
|
|
IP string
|
|
// Optional: Hostname of this endpoint
|
|
// Meant to be used by DNS servers etc.
|
|
// +optional
|
|
Hostname string
|
|
// Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.
|
|
// +optional
|
|
NodeName *string
|
|
// Optional: The kubernetes object related to the entry point.
|
|
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.
|
|
Port int32
|
|
|
|
// The IP protocol for this port.
|
|
Protocol Protocol
|
|
}
|
|
|
|
// EndpointsList is a list of endpoints.
|
|
type EndpointsList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Endpoints
|
|
}
|
|
|
|
// NodeSpec describes the attributes that a node is created with.
|
|
type NodeSpec struct {
|
|
// 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.
|
|
// +optional
|
|
PodCIDR string
|
|
|
|
// External ID of the node assigned by some machine database (e.g. a cloud provider)
|
|
// +optional
|
|
ExternalID string
|
|
|
|
// ID of the node assigned by the cloud provider
|
|
// Note: format is "<ProviderName>://<ProviderSpecificNodeID>"
|
|
// +optional
|
|
ProviderID string
|
|
|
|
// Unschedulable controls node schedulability of new pods. By default node is schedulable.
|
|
// +optional
|
|
Unschedulable bool
|
|
|
|
// If specified, the node's taints.
|
|
// +optional
|
|
Taints []Taint
|
|
}
|
|
|
|
// DaemonEndpoint contains information about a single Daemon endpoint.
|
|
type DaemonEndpoint struct {
|
|
/*
|
|
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').
|
|
*/
|
|
|
|
// Port number of the given endpoint.
|
|
Port int32
|
|
}
|
|
|
|
// NodeDaemonEndpoints lists ports opened by daemons running on the Node.
|
|
type NodeDaemonEndpoints struct {
|
|
// Endpoint on which Kubelet is listening.
|
|
// +optional
|
|
KubeletEndpoint DaemonEndpoint
|
|
}
|
|
|
|
// NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
|
|
type NodeSystemInfo struct {
|
|
// MachineID reported by the node. For unique machine identification
|
|
// in the cluster this field is prefered. Learn more from man(5)
|
|
// machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
|
|
MachineID string
|
|
// SystemUUID reported by the node. For unique machine identification
|
|
// MachineID is prefered. This field is specific to Red Hat hosts
|
|
// https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html
|
|
SystemUUID string
|
|
// Boot ID reported by the node.
|
|
BootID string
|
|
// Kernel Version reported by the node.
|
|
KernelVersion string
|
|
// OS Image reported by the node.
|
|
OSImage string
|
|
// ContainerRuntime Version reported by the node.
|
|
ContainerRuntimeVersion string
|
|
// Kubelet Version reported by the node.
|
|
KubeletVersion string
|
|
// KubeProxy Version reported by the node.
|
|
KubeProxyVersion string
|
|
// The Operating System reported by the node
|
|
OperatingSystem string
|
|
// The Architecture reported by the node
|
|
Architecture string
|
|
}
|
|
|
|
// NodeStatus is information about the current status of a node.
|
|
type NodeStatus struct {
|
|
// Capacity represents the total resources of a node.
|
|
// +optional
|
|
Capacity ResourceList
|
|
// Allocatable represents the resources of a node that are available for scheduling.
|
|
// +optional
|
|
Allocatable ResourceList
|
|
// NodePhase is the current lifecycle phase of the node.
|
|
// +optional
|
|
Phase NodePhase
|
|
// Conditions is an array of current node conditions.
|
|
// +optional
|
|
Conditions []NodeCondition
|
|
// Queried from cloud provider, if available.
|
|
// +optional
|
|
Addresses []NodeAddress
|
|
// Endpoints of daemons running on the Node.
|
|
// +optional
|
|
DaemonEndpoints NodeDaemonEndpoints
|
|
// Set of ids/uuids to uniquely identify the node.
|
|
// +optional
|
|
NodeInfo NodeSystemInfo
|
|
// List of container images on this node
|
|
// +optional
|
|
Images []ContainerImage
|
|
// List of attachable volumes in use (mounted) by the node.
|
|
// +optional
|
|
VolumesInUse []UniqueVolumeName
|
|
// List of volumes that are attached to the node.
|
|
// +optional
|
|
VolumesAttached []AttachedVolume
|
|
}
|
|
|
|
type UniqueVolumeName string
|
|
|
|
// AttachedVolume describes a volume attached to a node
|
|
type AttachedVolume struct {
|
|
// Name of the attached volume
|
|
Name UniqueVolumeName
|
|
|
|
// DevicePath represents the device path where the volume should be available
|
|
DevicePath string
|
|
}
|
|
|
|
// AvoidPods describes pods that should avoid this node. This is the value for a
|
|
// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and
|
|
// will eventually become a field of NodeStatus.
|
|
type AvoidPods struct {
|
|
// Bounded-sized list of signatures of pods that should avoid this node, sorted
|
|
// in timestamp order from oldest to newest. Size of the slice is unspecified.
|
|
// +optional
|
|
PreferAvoidPods []PreferAvoidPodsEntry
|
|
}
|
|
|
|
// Describes a class of pods that should avoid this node.
|
|
type PreferAvoidPodsEntry struct {
|
|
// The class of pods.
|
|
PodSignature PodSignature
|
|
// Time at which this entry was added to the list.
|
|
// +optional
|
|
EvictionTime metav1.Time
|
|
// (brief) reason why this entry was added to the list.
|
|
// +optional
|
|
Reason string
|
|
// Human readable message indicating why this entry was added to the list.
|
|
// +optional
|
|
Message string
|
|
}
|
|
|
|
// Describes the class of pods that should avoid this node.
|
|
// Exactly one field should be set.
|
|
type PodSignature struct {
|
|
// Reference to controller whose pods should avoid this node.
|
|
// +optional
|
|
PodController *metav1.OwnerReference
|
|
}
|
|
|
|
// Describe a container image
|
|
type ContainerImage struct {
|
|
// Names by which this image is known.
|
|
Names []string
|
|
// The size of the image in bytes.
|
|
// +optional
|
|
SizeBytes int64
|
|
}
|
|
|
|
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"
|
|
)
|
|
|
|
type NodeConditionType string
|
|
|
|
// 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:
|
|
// NodeReady, NodeReachable
|
|
const (
|
|
// NodeReady means kubelet is healthy and ready to accept pods.
|
|
NodeReady NodeConditionType = "Ready"
|
|
// NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk
|
|
// space on the node.
|
|
NodeOutOfDisk NodeConditionType = "OutOfDisk"
|
|
// NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory.
|
|
NodeMemoryPressure NodeConditionType = "MemoryPressure"
|
|
// NodeDiskPressure means the kubelet is under pressure due to insufficient available disk.
|
|
NodeDiskPressure NodeConditionType = "DiskPressure"
|
|
// NodeNetworkUnavailable means that network for the node is not correctly configured.
|
|
NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable"
|
|
)
|
|
|
|
type NodeCondition struct {
|
|
Type NodeConditionType
|
|
Status ConditionStatus
|
|
// +optional
|
|
LastHeartbeatTime metav1.Time
|
|
// +optional
|
|
LastTransitionTime metav1.Time
|
|
// +optional
|
|
Reason string
|
|
// +optional
|
|
Message string
|
|
}
|
|
|
|
type NodeAddressType string
|
|
|
|
// These are valid address types of node. NodeLegacyHostIP is used to transit
|
|
// from out-dated HostIP field to NodeAddress.
|
|
const (
|
|
// Deprecated: NodeLegacyHostIP will be removed in 1.7.
|
|
NodeLegacyHostIP NodeAddressType = "LegacyHostIP"
|
|
NodeHostName NodeAddressType = "Hostname"
|
|
NodeExternalIP NodeAddressType = "ExternalIP"
|
|
NodeInternalIP NodeAddressType = "InternalIP"
|
|
NodeExternalDNS NodeAddressType = "ExternalDNS"
|
|
NodeInternalDNS NodeAddressType = "InternalDNS"
|
|
)
|
|
|
|
type NodeAddress struct {
|
|
Type NodeAddressType
|
|
Address string
|
|
}
|
|
|
|
// NodeResources is an object for conveying resource information about a node.
|
|
// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.
|
|
type NodeResources struct {
|
|
// Capacity represents the available resources of a node
|
|
// +optional
|
|
Capacity ResourceList
|
|
}
|
|
|
|
// ResourceName is the name identifying various resources in a ResourceList.
|
|
type ResourceName string
|
|
|
|
// 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.
|
|
const (
|
|
// CPU, in cores. (500m = .5 cores)
|
|
ResourceCPU ResourceName = "cpu"
|
|
// Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
|
|
ResourceMemory ResourceName = "memory"
|
|
// Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024)
|
|
ResourceStorage ResourceName = "storage"
|
|
// 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"
|
|
// Number of Pods that may be running on this Node: see ResourcePods
|
|
)
|
|
|
|
const (
|
|
// Namespace prefix for opaque counted resources (alpha).
|
|
ResourceOpaqueIntPrefix = "pod.alpha.kubernetes.io/opaque-int-resource-"
|
|
)
|
|
|
|
// ResourceList is a set of (resource name, quantity) pairs.
|
|
type ResourceList map[ResourceName]resource.Quantity
|
|
|
|
// +genclient=true
|
|
// +nonNamespaced=true
|
|
|
|
// Node is a worker node in Kubernetes
|
|
// The name of the node according to etcd is in ObjectMeta.Name.
|
|
type Node struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the behavior of a node.
|
|
// +optional
|
|
Spec NodeSpec
|
|
|
|
// Status describes the current status of a Node
|
|
// +optional
|
|
Status NodeStatus
|
|
}
|
|
|
|
// NodeList is a list of nodes.
|
|
type NodeList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Node
|
|
}
|
|
|
|
// NamespaceSpec describes the attributes on a Namespace
|
|
type NamespaceSpec struct {
|
|
// Finalizers is an opaque list of values that must be empty to permanently remove object from storage
|
|
Finalizers []FinalizerName
|
|
}
|
|
|
|
// FinalizerName is the name identifying a finalizer during namespace lifecycle.
|
|
type FinalizerName string
|
|
|
|
// These are internal finalizer values to Kubernetes, must be qualified name unless defined here or
|
|
// in metav1.
|
|
const (
|
|
FinalizerKubernetes FinalizerName = "kubernetes"
|
|
)
|
|
|
|
// NamespaceStatus is information about the current status of a Namespace.
|
|
type NamespaceStatus struct {
|
|
// Phase is the current lifecycle phase of the namespace.
|
|
// +optional
|
|
Phase NamespacePhase
|
|
}
|
|
|
|
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"
|
|
)
|
|
|
|
// +genclient=true
|
|
// +nonNamespaced=true
|
|
|
|
// A namespace provides a scope for Names.
|
|
// Use of multiple namespaces is optional
|
|
type Namespace struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the behavior of the Namespace.
|
|
// +optional
|
|
Spec NamespaceSpec
|
|
|
|
// Status describes the current status of a Namespace
|
|
// +optional
|
|
Status NamespaceStatus
|
|
}
|
|
|
|
// NamespaceList is a list of Namespaces.
|
|
type NamespaceList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Namespace
|
|
}
|
|
|
|
// Binding ties one object to another - for example, a pod is bound to a node by a scheduler.
|
|
type Binding struct {
|
|
metav1.TypeMeta
|
|
// ObjectMeta describes the object that is being bound.
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Target is the object to bind to.
|
|
Target ObjectReference
|
|
}
|
|
|
|
// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
|
|
type Preconditions struct {
|
|
// Specifies the target UID.
|
|
// +optional
|
|
UID *types.UID
|
|
}
|
|
|
|
// DeleteOptions may be provided when deleting an API object
|
|
// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
|
|
type DeleteOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// 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.
|
|
// +optional
|
|
GracePeriodSeconds *int64
|
|
|
|
// Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be
|
|
// returned.
|
|
// +optional
|
|
Preconditions *Preconditions
|
|
|
|
// Should the dependent objects be orphaned. If true/false, the "orphan"
|
|
// finalizer will be added to/removed from the object's finalizers list.
|
|
// +optional
|
|
OrphanDependents *bool
|
|
}
|
|
|
|
// ListOptions is the query options to a standard REST list call, and has future support for
|
|
// watch calls.
|
|
// DEPRECATED: This type has been moved to meta/v1 and will be removed soon.
|
|
type ListOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// 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
|
|
// When specified with a watch call, shows changes that occur after that particular version of a resource.
|
|
// Defaults to changes from the beginning of history.
|
|
// When specified for list:
|
|
// - if unset, then the result is returned from remote storage based on quorum-read flag;
|
|
// - if it's 0, then we simply return what we currently have in cache, no guarantee;
|
|
// - if set to non zero, then the result is at least as fresh as given rv.
|
|
ResourceVersion string
|
|
// Timeout for the list/watch call.
|
|
TimeoutSeconds *int64
|
|
}
|
|
|
|
// PodLogOptions is the query options for a Pod's logs REST call
|
|
type PodLogOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// Container for which to return logs
|
|
Container string
|
|
// If true, follow the logs for the pod
|
|
Follow bool
|
|
// If true, return previous terminated container logs
|
|
Previous bool
|
|
// 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
|
|
// 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.
|
|
SinceTime *metav1.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
|
|
}
|
|
|
|
// PodAttachOptions is the query options to a Pod's remote attach call
|
|
// TODO: merge w/ PodExecOptions below for stdin, stdout, etc
|
|
type PodAttachOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// Stdin if true indicates that stdin is to be redirected for the attach call
|
|
// +optional
|
|
Stdin bool
|
|
|
|
// Stdout if true indicates that stdout is to be redirected for the attach call
|
|
// +optional
|
|
Stdout bool
|
|
|
|
// Stderr if true indicates that stderr is to be redirected for the attach call
|
|
// +optional
|
|
Stderr bool
|
|
|
|
// TTY if true indicates that a tty will be allocated for the attach call
|
|
// +optional
|
|
TTY bool
|
|
|
|
// Container to attach to.
|
|
// +optional
|
|
Container string
|
|
}
|
|
|
|
// PodExecOptions is the query options to a Pod's remote exec call
|
|
type PodExecOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// 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
|
|
|
|
// Command is the remote command to execute; argv array; not executed within a shell.
|
|
Command []string
|
|
}
|
|
|
|
// PodPortForwardOptions is the query options to a Pod's port forward call
|
|
type PodPortForwardOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// The list of ports to forward
|
|
// +optional
|
|
Ports []int32
|
|
}
|
|
|
|
// PodProxyOptions is the query options to a Pod's proxy call
|
|
type PodProxyOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// Path is the URL path to use for the current proxy request
|
|
Path string
|
|
}
|
|
|
|
// NodeProxyOptions is the query options to a Node's proxy call
|
|
type NodeProxyOptions struct {
|
|
metav1.TypeMeta
|
|
|
|
// Path is the URL path to use for the current proxy request
|
|
Path string
|
|
}
|
|
|
|
// ServiceProxyOptions is the query options to a Service's proxy call.
|
|
type ServiceProxyOptions struct {
|
|
metav1.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
|
|
}
|
|
|
|
// ObjectReference contains enough information to let you inspect or modify the referred object.
|
|
type ObjectReference struct {
|
|
// +optional
|
|
Kind string
|
|
// +optional
|
|
Namespace string
|
|
// +optional
|
|
Name string
|
|
// +optional
|
|
UID types.UID
|
|
// +optional
|
|
APIVersion string
|
|
// +optional
|
|
ResourceVersion string
|
|
|
|
// Optional. If referring to a piece of an object instead of an entire object, this string
|
|
// 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
|
|
// referencing a part of an object.
|
|
// TODO: this design is not final and this field is subject to change in the future.
|
|
// +optional
|
|
FieldPath string
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
type SerializedReference struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
Reference ObjectReference
|
|
}
|
|
|
|
type EventSource struct {
|
|
// Component from which the event is generated.
|
|
// +optional
|
|
Component string
|
|
// Node name on which the event is generated.
|
|
// +optional
|
|
Host string
|
|
}
|
|
|
|
// 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"
|
|
)
|
|
|
|
// +genclient=true
|
|
|
|
// 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 {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Required. The object that this event is about.
|
|
// +optional
|
|
InvolvedObject ObjectReference
|
|
|
|
// Optional; this should be a short, machine understandable string that gives the reason
|
|
// for this event being generated. For example, if the event is reporting that a container
|
|
// can't start, the Reason might be "ImageNotFound".
|
|
// TODO: provide exact specification for format.
|
|
// +optional
|
|
Reason string
|
|
|
|
// Optional. A human-readable description of the status of this operation.
|
|
// TODO: decide on maximum length.
|
|
// +optional
|
|
Message string
|
|
|
|
// Optional. The component reporting this event. Should be a short machine understandable string.
|
|
// +optional
|
|
Source EventSource
|
|
|
|
// The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
|
|
// +optional
|
|
FirstTimestamp metav1.Time
|
|
|
|
// The time at which the most recent occurrence of this event was recorded.
|
|
// +optional
|
|
LastTimestamp metav1.Time
|
|
|
|
// The number of times this event has occurred.
|
|
// +optional
|
|
Count int32
|
|
|
|
// Type of this event (Normal, Warning), new types could be added in the future.
|
|
// +optional
|
|
Type string
|
|
}
|
|
|
|
// EventList is a list of events.
|
|
type EventList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Event
|
|
}
|
|
|
|
// List holds a list of objects, which may not be known by the server.
|
|
type List struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []runtime.Object
|
|
}
|
|
|
|
// A type of object that is limited
|
|
type LimitType string
|
|
|
|
const (
|
|
// Limit that applies to all pods in a namespace
|
|
LimitTypePod LimitType = "Pod"
|
|
// Limit that applies to all containers in a namespace
|
|
LimitTypeContainer LimitType = "Container"
|
|
// Limit that applies to all persistent volume claims in a namespace
|
|
LimitTypePersistentVolumeClaim LimitType = "PersistentVolumeClaim"
|
|
)
|
|
|
|
// LimitRangeItem defines a min/max usage limit for any resource that matches on kind
|
|
type LimitRangeItem struct {
|
|
// Type of resource that this limit applies to
|
|
// +optional
|
|
Type LimitType
|
|
// Max usage constraints on this kind by resource name
|
|
// +optional
|
|
Max ResourceList
|
|
// Min usage constraints on this kind by resource name
|
|
// +optional
|
|
Min ResourceList
|
|
// Default resource requirement limit value by resource name.
|
|
// +optional
|
|
Default ResourceList
|
|
// DefaultRequest resource requirement request value by resource name.
|
|
// +optional
|
|
DefaultRequest ResourceList
|
|
// MaxLimitRequestRatio represents the max burst value for the named resource
|
|
// +optional
|
|
MaxLimitRequestRatio ResourceList
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// LimitRange sets resource usage limits for each kind of resource in a Namespace
|
|
type LimitRange struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the limits enforced
|
|
// +optional
|
|
Spec LimitRangeSpec
|
|
}
|
|
|
|
// LimitRangeList is a list of LimitRange items.
|
|
type LimitRangeList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
// Items is a list of LimitRange objects
|
|
Items []LimitRange
|
|
}
|
|
|
|
// 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"
|
|
// ResourceSecrets, number
|
|
ResourceSecrets ResourceName = "secrets"
|
|
// ResourceConfigMaps, number
|
|
ResourceConfigMaps ResourceName = "configmaps"
|
|
// ResourcePersistentVolumeClaims, number
|
|
ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims"
|
|
// ResourceServicesNodePorts, number
|
|
ResourceServicesNodePorts ResourceName = "services.nodeports"
|
|
// ResourceServicesLoadBalancers, number
|
|
ResourceServicesLoadBalancers ResourceName = "services.loadbalancers"
|
|
// 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"
|
|
// Storage request, in bytes
|
|
ResourceRequestsStorage ResourceName = "requests.storage"
|
|
// 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"
|
|
)
|
|
|
|
// 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
|
|
// +optional
|
|
Hard ResourceList
|
|
// A collection of filters that must match each object tracked by a quota.
|
|
// If not specified, the quota matches all objects.
|
|
// +optional
|
|
Scopes []ResourceQuotaScope
|
|
}
|
|
|
|
// ResourceQuotaStatus defines the enforced hard limits and observed use
|
|
type ResourceQuotaStatus struct {
|
|
// Hard is the set of enforced hard limits for each named resource
|
|
// +optional
|
|
Hard ResourceList
|
|
// Used is the current observed total usage of the resource in the namespace
|
|
// +optional
|
|
Used ResourceList
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// ResourceQuota sets aggregate quota restrictions enforced per namespace
|
|
type ResourceQuota struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Spec defines the desired quota
|
|
// +optional
|
|
Spec ResourceQuotaSpec
|
|
|
|
// Status defines the actual enforced quota and its current usage
|
|
// +optional
|
|
Status ResourceQuotaStatus
|
|
}
|
|
|
|
// ResourceQuotaList is a list of ResourceQuota items
|
|
type ResourceQuotaList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
// Items is a list of ResourceQuota objects
|
|
Items []ResourceQuota
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// Secret holds secret data of a certain type. The total bytes of the values in
|
|
// the Data field must be less than MaxSecretSize bytes.
|
|
type Secret struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN
|
|
// or leading dot followed by valid DNS_SUBDOMAIN.
|
|
// The serialized form of the secret data is a base64 encoded string,
|
|
// representing the arbitrary (possibly non-string) data value here.
|
|
// +optional
|
|
Data map[string][]byte
|
|
|
|
// Used to facilitate programmatic handling of secret data.
|
|
// +optional
|
|
Type SecretType
|
|
}
|
|
|
|
const MaxSecretSize = 1 * 1024 * 1024
|
|
|
|
type SecretType string
|
|
|
|
const (
|
|
// 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"
|
|
// ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets
|
|
ServiceAccountKubeconfigKey = "kubernetes.kubeconfig"
|
|
// ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets
|
|
ServiceAccountRootCAKey = "ca.crt"
|
|
// ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls
|
|
ServiceAccountNamespaceKey = "namespace"
|
|
|
|
// 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"
|
|
|
|
// 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"
|
|
|
|
// 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"
|
|
|
|
// 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"
|
|
|
|
// TLSCertKey is the key for tls certificates in a TLS secret.
|
|
TLSCertKey = "tls.crt"
|
|
// TLSPrivateKeyKey is the key for the private key field in a TLS secret.
|
|
TLSPrivateKeyKey = "tls.key"
|
|
)
|
|
|
|
type SecretList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []Secret
|
|
}
|
|
|
|
// +genclient=true
|
|
|
|
// ConfigMap holds configuration data for components or applications to consume.
|
|
type ConfigMap struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// Data contains the configuration data.
|
|
// Each key must be a valid DNS_SUBDOMAIN with an optional leading dot.
|
|
// +optional
|
|
Data map[string]string
|
|
}
|
|
|
|
// ConfigMapList is a resource containing a list of ConfigMap objects.
|
|
type ConfigMapList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
// Items is the list of ConfigMaps.
|
|
Items []ConfigMap
|
|
}
|
|
|
|
// 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"
|
|
|
|
// 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
|
|
StreamTypeStdout = "stdout"
|
|
// Value for streamType header for stderr stream
|
|
StreamTypeStderr = "stderr"
|
|
// Value for streamType header for data stream
|
|
StreamTypeData = "data"
|
|
// Value for streamType header for error stream
|
|
StreamTypeError = "error"
|
|
// Value for streamType header for terminal resize stream
|
|
StreamTypeResize = "resize"
|
|
|
|
// Name of header that specifies the port being forwarded
|
|
PortHeader = "port"
|
|
// Name of header that specifies a request ID used to associate the error
|
|
// and data streams for a single forwarded connection
|
|
PortForwardRequestIDHeader = "requestID"
|
|
)
|
|
|
|
// 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 {
|
|
Type ComponentConditionType
|
|
Status ConditionStatus
|
|
// +optional
|
|
Message string
|
|
// +optional
|
|
Error string
|
|
}
|
|
|
|
// +genclient=true
|
|
// +nonNamespaced=true
|
|
|
|
// ComponentStatus (and ComponentStatusList) holds the cluster validation info.
|
|
type ComponentStatus struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
|
|
// +optional
|
|
Conditions []ComponentCondition
|
|
}
|
|
|
|
type ComponentStatusList struct {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ListMeta
|
|
|
|
Items []ComponentStatus
|
|
}
|
|
|
|
// 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.
|
|
type SecurityContext struct {
|
|
// The capabilities to add/drop when running containers.
|
|
// Defaults to the default set of capabilities granted by the container runtime.
|
|
// +optional
|
|
Capabilities *Capabilities
|
|
// Run container in privileged mode.
|
|
// Processes in privileged containers are essentially equivalent to root on the host.
|
|
// Defaults to false.
|
|
// +optional
|
|
Privileged *bool
|
|
// 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.
|
|
// +optional
|
|
SELinuxOptions *SELinuxOptions
|
|
// 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.
|
|
// +optional
|
|
RunAsUser *int64
|
|
// 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.
|
|
// +optional
|
|
RunAsNonRoot *bool
|
|
// 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.
|
|
// +optional
|
|
ReadOnlyRootFilesystem *bool
|
|
}
|
|
|
|
// SELinuxOptions are the labels to be applied to the container.
|
|
type SELinuxOptions struct {
|
|
// SELinux user label
|
|
// +optional
|
|
User string
|
|
// SELinux role label
|
|
// +optional
|
|
Role string
|
|
// SELinux type label
|
|
// +optional
|
|
Type string
|
|
// SELinux level label.
|
|
// +optional
|
|
Level string
|
|
}
|
|
|
|
// 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 {
|
|
metav1.TypeMeta
|
|
// +optional
|
|
metav1.ObjectMeta
|
|
// 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
|
|
// 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
|
|
}
|
|
|
|
const (
|
|
// "default-scheduler" is the name of default scheduler.
|
|
DefaultSchedulerName = "default-scheduler"
|
|
|
|
// 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 = metav1.LabelHostname + "," + metav1.LabelZoneFailureDomain + "," + metav1.LabelZoneRegion
|
|
)
|