Deployment

简要概述

staging/src/k8s.io/api/apps/v1/types.go

查看官方介绍

常用指令

调整副本数

对空间下 kube-system 资源 deployment/l7-lb-controller 的副本数调整为 0

kubectl scale --replicas=0 deployment/l7-lb-controller -n kube-system

配置示例

  • 通过 kubectl 创建

生成可运行的 yaml 内容

kubectl create deployment busybox \
	--replicas=3 \
	--image=registry.cn-hangzhou.aliyuncs.com/opsaid/busybox:1.35.0 \
	--dry-run=client \
	-o yaml \
	-- /bin/sh -c "sleep 3600"
  • 通过 yaml 创建
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: busybox
  name: busybox
spec:
  replicas: 3
  selector:
    matchLabels:
      app: busybox
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: busybox
    spec:
      containers:
      - command:
        - /bin/sh
        - -c
        - sleep 3600
        image: registry.cn-hangzhou.aliyuncs.com/opsaid/busybox:1.35.0
        name: busybox
        resources: {}

数据结构

Deployment

// Deployment enables declarative updates for Pods and ReplicaSets.
type Deployment struct {
    metav1.TypeMeta `json:",inline"`
    // Standard object's metadata.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    // +optional
    metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`

    // Specification of the desired behavior of the Deployment.
    // +optional
    Spec DeploymentSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`

    // Most recently observed status of the Deployment.
    // +optional
    Status DeploymentStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

DeploymentSpec

// DeploymentSpec is the specification of the desired behavior of the Deployment.
type DeploymentSpec struct {
    // Number of desired pods. This is a pointer to distinguish between explicit
    // zero and not specified. Defaults to 1.
    // +optional
    Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"`

    // Label selector for pods. Existing ReplicaSets whose pods are
    // selected by this will be the ones affected by this deployment.
    // It must match the pod template's labels.
    Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,2,opt,name=selector"`

    // Template describes the pods that will be created.
    Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,3,opt,name=template"`

    // The deployment strategy to use to replace existing pods with new ones.
    // +optional
    // +patchStrategy=retainKeys
    Strategy DeploymentStrategy `json:"strategy,omitempty" patchStrategy:"retainKeys" protobuf:"bytes,4,opt,name=strategy"`

    // 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 `json:"minReadySeconds,omitempty" protobuf:"varint,5,opt,name=minReadySeconds"`

    // The number of old ReplicaSets to retain to allow rollback.
    // This is a pointer to distinguish between explicit zero and not specified.
    // Defaults to 10.
    // +optional
    RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,6,opt,name=revisionHistoryLimit"`

    // Indicates that the deployment is paused.
    // +optional
    Paused bool `json:"paused,omitempty" protobuf:"varint,7,opt,name=paused"`

    // The maximum time in seconds for a deployment to make progress before it
    // is considered to be failed. The deployment controller will continue to
    // process failed deployments and a condition with a ProgressDeadlineExceeded
    // reason will be surfaced in the deployment status. Note that progress will
    // not be estimated during the time a deployment is paused. Defaults to 600s.
    // 通过使用 "kubectl rollout status deployment test" 超过这个时间未完成部署,则会出现以下错误信息:
    // error: deployment "test" exceeded its progress deadline
    ProgressDeadlineSeconds *int32 `json:"progressDeadlineSeconds,omitempty" protobuf:"varint,9,opt,name=progressDeadlineSeconds"`
}

metav1.LabelSelector

TODO;

v1.PodTemplateSpec

参考 Pods 资源。

DeploymentStrategy

// DeploymentStrategy describes how to replace existing pods with new ones.
type DeploymentStrategy struct {
    // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
    // +optional
    Type DeploymentStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=DeploymentStrategyType"`

    // Rolling update config params. Present only if DeploymentStrategyType =
    // RollingUpdate.
    //---
    // TODO: Update this to follow our convention for oneOf, whatever we decide it
    // to be.
    // +optional
    RollingUpdate *RollingUpdateDeployment `json:"rollingUpdate,omitempty" protobuf:"bytes,2,opt,name=rollingUpdate"`
}

type DeploymentStrategyType string

const (
    // Kill all existing pods before creating new ones.
    RecreateDeploymentStrategyType DeploymentStrategyType = "Recreate"

    // Replace the old ReplicaSets by new one using rolling update i.e gradually scale down the old ReplicaSets and scale up the new one.
    RollingUpdateDeploymentStrategyType DeploymentStrategyType = "RollingUpdate"
)

RollingUpdateDeployment

// Spec to control the desired behavior of rolling update.
type RollingUpdateDeployment struct {
    // The maximum number of pods that can be unavailable during the update.
    // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
    // Absolute number is calculated from percentage by rounding down.
    // This can not be 0 if MaxSurge is 0.
    // Defaults to 25%.
    // Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods
    // immediately when the rolling update starts. Once new pods are ready, old ReplicaSet
    // can be scaled down further, followed by scaling up the new ReplicaSet, ensuring
    // that the total number of pods available at all times during the update is at
    // least 70% of desired pods.
    // +optional
    MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"`

    // The maximum number of pods that can be scheduled above the desired number of
    // pods.
    // Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
    // This can not be 0 if MaxUnavailable is 0.
    // Absolute number is calculated from percentage by rounding up.
    // Defaults to 25%.
    // Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when
    // the rolling update starts, such that the total number of old and new pods do not exceed
    // 130% of desired pods. Once old pods have been killed,
    // new ReplicaSet can be scaled up further, ensuring that total number of pods running
    // at any time during the update is at most 130% of desired pods.
    // +optional
    MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"`
}

intstr.IntOrString

TODO;

DeploymentStatus

// DeploymentStatus is the most recently observed status of the Deployment.
type DeploymentStatus struct {
    // The generation observed by the deployment controller.
    // +optional
    ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,1,opt,name=observedGeneration"`

    // Total number of non-terminated pods targeted by this deployment (their labels match the selector).
    // +optional
    Replicas int32 `json:"replicas,omitempty" protobuf:"varint,2,opt,name=replicas"`

    // Total number of non-terminated pods targeted by this deployment that have the desired template spec.
    // +optional
    UpdatedReplicas int32 `json:"updatedReplicas,omitempty" protobuf:"varint,3,opt,name=updatedReplicas"`

    // Total number of ready pods targeted by this deployment.
    // +optional
    ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,7,opt,name=readyReplicas"`

    // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.
    // +optional
    AvailableReplicas int32 `json:"availableReplicas,omitempty" protobuf:"varint,4,opt,name=availableReplicas"`

    // Total number of unavailable pods targeted by this deployment. This is the total number of
    // pods that are still required for the deployment to have 100% available capacity. They may
    // either be pods that are running but not yet available or pods that still have not been created.
    // +optional
    UnavailableReplicas int32 `json:"unavailableReplicas,omitempty" protobuf:"varint,5,opt,name=unavailableReplicas"`

    // Represents the latest available observations of a deployment's current state.
    // +patchMergeKey=type
    // +patchStrategy=merge
    Conditions []DeploymentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,6,rep,name=conditions"`

    // Count of hash collisions for the Deployment. The Deployment controller uses this
    // field as a collision avoidance mechanism when it needs to create the name for the
    // newest ReplicaSet.
    // +optional
    CollisionCount *int32 `json:"collisionCount,omitempty" protobuf:"varint,8,opt,name=collisionCount"`
}

DeploymentCondition

type DeploymentConditionType string

// These are valid conditions of a deployment.
const (
    // Available means the deployment is available, ie. at least the minimum available
    // replicas required are up and running for at least minReadySeconds.
    DeploymentAvailable DeploymentConditionType = "Available"
    // Progressing means the deployment is progressing. Progress for a deployment is
    // considered when a new replica set is created or adopted, and when new pods scale
    // up or old pods scale down. Progress is not estimated for paused deployments or
    // when progressDeadlineSeconds is not specified.
    DeploymentProgressing DeploymentConditionType = "Progressing"
    // ReplicaFailure is added in a deployment when one of its pods fails to be created
    // or deleted.
    DeploymentReplicaFailure DeploymentConditionType = "ReplicaFailure"
)

// DeploymentCondition describes the state of a deployment at a certain point.
type DeploymentCondition struct {
    // Type of deployment condition.
    Type DeploymentConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=DeploymentConditionType"`
    // Status of the condition, one of True, False, Unknown.
    Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/api/core/v1.ConditionStatus"`
    // The last time this condition was updated.
    LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty" protobuf:"bytes,6,opt,name=lastUpdateTime"`
    // Last time the condition transitioned from one status to another.
    LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,7,opt,name=lastTransitionTime"`
    // The reason for the condition's last transition.
    Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"`
    // A human readable message indicating details about the transition.
    Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"`
}

v1.ConditionStatus

参考 Pods 资源。

metav1.Time

TODO;




最后修改 2023.08.08: docs: 更新对象存储文档 (d0772df)