DaemonSet

简要概述

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

查看官方介绍

常用指令

TODO;

配置示例

  • 通过 kubectl 创建

无法直接通过命令行创建该资源,可先创建 Deployment 然后以此为模版更改 yaml 内容。

kubectl create deployment busybox \
	--image=registry.cn-hangzhou.aliyuncs.com/opsaid/busybox:1.35.0 \
	--dry-run=client \
	-o yaml \
	-- /bin/sh -c sleep 3600

更改 kindDaemonSet 同时移除生成 yaml 中 replicasstrategystatus 三个属性。

  • 通过 yaml 创建
apiVersion: apps/v1
kind: DaemonSet
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: {}

数据结构

DaemonSet

// DaemonSet represents the configuration of a daemon set.
type DaemonSet 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"`

    // The desired behavior of this daemon set.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
    // +optional
    Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`

    // The current status of this daemon set. This data may be
    // out of date by some window of time.
    // Populated by the system.
    // Read-only.
    // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
    // +optional
    Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
}

DaemonSetSpec

// DaemonSetSpec is the specification of a daemon set.
type DaemonSetSpec struct {
    // A label query over pods that are managed by the daemon set.
    // Must match in order to be controlled.
    // It must match the pod template's labels.
    // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
    Selector *metav1.LabelSelector `json:"selector" protobuf:"bytes,1,opt,name=selector"`

    // An object that describes the pod that will be created.
    // The DaemonSet will create exactly one copy of this pod on every node
    // that matches the template's node selector (or on every node if no node
    // selector is specified).
    // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
    Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,2,opt,name=template"`

    // An update strategy to replace existing DaemonSet pods with new pods.
    // +optional
    UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty" protobuf:"bytes,3,opt,name=updateStrategy"`

    // The minimum number of seconds for which a newly created DaemonSet 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,4,opt,name=minReadySeconds"`

    // The number of old history 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"`
}

metav1.LabelSelector

TODO;

v1.PodTemplateSpec

参考 Pods 资源。

DaemonSetUpdateStrategy

// DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.
type DaemonSetUpdateStrategy struct {
    // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.
    // +optional
    Type DaemonSetUpdateStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"`

    // Rolling update config params. Present only if type = "RollingUpdate".
    //---
    // TODO: Update this to follow our convention for oneOf, whatever we decide it
    // to be. Same as Deployment `strategy.rollingUpdate`.
    // See https://github.com/kubernetes/kubernetes/issues/35345
    // +optional
    RollingUpdate *RollingUpdateDaemonSet `json:"rollingUpdate,omitempty" protobuf:"bytes,2,opt,name=rollingUpdate"`
}

type DaemonSetUpdateStrategyType string

const (
    // Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other.
    RollingUpdateDaemonSetStrategyType DaemonSetUpdateStrategyType = "RollingUpdate"

    // Replace the old daemons only when it's killed
    OnDeleteDaemonSetStrategyType DaemonSetUpdateStrategyType = "OnDelete"
)

RollingUpdateDaemonSet

// Spec to control the desired behavior of daemon set rolling update.
type RollingUpdateDaemonSet struct {
    // The maximum number of DaemonSet pods that can be unavailable during the
    // update. Value can be an absolute number (ex: 5) or a percentage of total
    // number of DaemonSet pods at the start of the update (ex: 10%). Absolute
    // number is calculated from percentage by rounding up.
    // This cannot be 0 if MaxSurge is 0
    // Default value is 1.
    // Example: when this is set to 30%, at most 30% of the total number of nodes
    // that should be running the daemon pod (i.e. status.desiredNumberScheduled)
    // can have their pods stopped for an update at any given time. The update
    // starts by stopping at most 30% of those DaemonSet pods and then brings
    // up new DaemonSet pods in their place. Once the new pods are available,
    // it then proceeds onto other DaemonSet pods, thus ensuring that at least
    // 70% of original number of DaemonSet pods are available at all times during
    // the update.
    // +optional
    MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"`

    // The maximum number of nodes with an existing available DaemonSet pod that
    // can have an updated DaemonSet pod during during an update.
    // 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 to a minimum of 1.
    // Default value is 0.
    // Example: when this is set to 30%, at most 30% of the total number of nodes
    // that should be running the daemon pod (i.e. status.desiredNumberScheduled)
    // can have their a new pod created before the old pod is marked as deleted.
    // The update starts by launching new pods on 30% of nodes. Once an updated
    // pod is available (Ready for at least minReadySeconds) the old DaemonSet pod
    // on that node is marked deleted. If the old pod becomes unavailable for any
    // reason (Ready transitions to false, is evicted, or is drained) an updated
    // pod is immediatedly created on that node without considering surge limits.
    // Allowing surge implies the possibility that the resources consumed by the
    // daemonset on any given node can double if the readiness check fails, and
    // so resource intensive daemonsets should take into account that they may
    // cause evictions during disruption.
    // This is beta field and enabled/disabled by DaemonSetUpdateSurge feature gate.
    // +optional
    MaxSurge *intstr.IntOrString `json:"maxSurge,omitempty" protobuf:"bytes,2,opt,name=maxSurge"`
}

DaemonSetStatus

// DaemonSetStatus represents the current status of a daemon set.
type DaemonSetStatus struct {
    // The number of nodes that are running at least 1
    // daemon pod and are supposed to run the daemon pod.
    // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
    CurrentNumberScheduled int32 `json:"currentNumberScheduled" protobuf:"varint,1,opt,name=currentNumberScheduled"`

    // The number of nodes that are running the daemon pod, but are
    // not supposed to run the daemon pod.
    // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
    NumberMisscheduled int32 `json:"numberMisscheduled" protobuf:"varint,2,opt,name=numberMisscheduled"`

    // The total number of nodes that should be running the daemon
    // pod (including nodes correctly running the daemon pod).
    // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
    DesiredNumberScheduled int32 `json:"desiredNumberScheduled" protobuf:"varint,3,opt,name=desiredNumberScheduled"`

    // The number of nodes that should be running the daemon pod and have one
    // or more of the daemon pod running and ready.
    NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"`

    // The most recent generation observed by the daemon set controller.
    // +optional
    ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,5,opt,name=observedGeneration"`

    // The total number of nodes that are running updated daemon pod
    // +optional
    UpdatedNumberScheduled int32 `json:"updatedNumberScheduled,omitempty" protobuf:"varint,6,opt,name=updatedNumberScheduled"`

    // The number of nodes that should be running the
    // daemon pod and have one or more of the daemon pod running and
    // available (ready for at least spec.minReadySeconds)
    // +optional
    NumberAvailable int32 `json:"numberAvailable,omitempty" protobuf:"varint,7,opt,name=numberAvailable"`

    // The number of nodes that should be running the
    // daemon pod and have none of the daemon pod running and available
    // (ready for at least spec.minReadySeconds)
    // +optional
    NumberUnavailable int32 `json:"numberUnavailable,omitempty" protobuf:"varint,8,opt,name=numberUnavailable"`

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

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

DaemonSetCondition

type DaemonSetConditionType string

// TODO: Add valid condition types of a DaemonSet.

// DaemonSetCondition describes the state of a DaemonSet at a certain point.
type DaemonSetCondition struct {
    // Type of DaemonSet condition.
    Type DaemonSetConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=DaemonSetConditionType"`
    // 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"`
    // Last time the condition transitioned from one status to another.
    // +optional
    LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,3,opt,name=lastTransitionTime"`
    // The reason for the condition's last transition.
    // +optional
    Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"`
    // A human readable message indicating details about the transition.
    // +optional
    Message string `json:"message,omitempty" protobuf:"bytes,5,opt,name=message"`
}

v1.ConditionStatus

参考 Pod 资源。