k8s配置deployment解读

deployment 使用并管理rs ,算是更高一层的概念,这是现在比较常用的部署app的方式。deployment为pod和rs提供声明式更新(而非命令式)。支持滚动更新(rollingUpdate),支持回滚操作
直接查看原博客:k8s配置解读
资源配置主要分五类来定义内容

一:apiVersion【string】 APIVersion定义对象表示的版本,此处为:apps/v1

二:kind【string】 该对象所代表的REST资源类型,此处为:Deployment

三:metadata【ObjectMeta】 对象的元数据

四:spec【DeploymentSpec】 部署所需行为的规范

五:status【DeploymentStatus】 最近部署状态

三:metadata【ObjectMeta】

annotations【object】: 注释内容 ,如:auther: xlk
name【string】:名称在命名空间中必须是唯一的
namespace【string】:选择一个命名空间
clusterName【string】:对象所属群集的名称。这用于区分不同集群中具有相同名称和命名空间的资源。该字段目前未设置在任何位置,如果在创建或更新请求中设置,apiserver将忽略该字段
creationTimestamp【Time】:表示创建此对象时的服务器时间,客户端不能设置此值,由系统填充。
deletionGracePeriodSeconds【integer】此对象在从系统中删除之前正常终止所允许的秒数。仅在同时设置deletionTimestamp时设置。
deletionTimestamp【integer】Kubelet将通过向pod中的容器发送一个优雅的终止信号,例如请求在30秒内删除pod
finalizers 【array】 Finalizer是K8s资源删除流程中的一种控制机制,它在K8s对象上的存在形式其实是一系列标签,类似annotations,K8s在接收到一个资源对象删除请求时,会先在对象上打上一些标记,包括deletionTimestamp表示该对象已进入删除流程,当检测到对象上有finalizers标签(通常在资源对象的metadata字段中)时,删除流程会被挂起,直到所有finalizers标签被移除时,才继续进行删除流程,想删除该资源需要先“清理干净”它的依赖关系,即finalizers中定义的资源。
   K8s原生Finalizer示例:

1.PVC和PV分别原生自带kubernetes.io/pvc-protection和kubernetes.io/pv-protection的finalizers标签,其目的在于保护持久化存储不被误删,避免挂载了存储的工作负载产生问题。

2.Namespace也是自带一个kubernetes的finalizers标签的,只不过,不同于其他资源对象的metadata.finalizers标签,ns是spec.finalizers,其作用是相同的。

generateName【string】:可选的前缀名字,当Name字段没有填写时,server使用它生成一个唯一的Name。
generation【integer】:状态的特定生成的序列号。由系统填充。只读。
labels【object】:标签 key-value 键值对
managedFields【ManagedFieldsEntry array】:这主要用于内部管理,用户通常不需要设置或理解此字段。
apiVersion【string】:此资源的版本
fieldsType【string】:同字段格式和版本的鉴别器。目前只有一个可能的值:“FieldsV1”
fieldsV1【FieldsV1】:
manager【string】:
operation【string】:
subresource【string】:
time【Time】:
selfLink【string】:SelfLink是一个代表这个对象本身的URL。该字段由系统自动生成,是一个只读字段
uid【string】: UID表示当前对象在任何时间和空间中都是唯一的。该字段在资源创建成功后由系统自动生成,PUT操作不会改变该字段的值。
resourceVersion【string】:用来表示当前对象的内部版本号,client端根据这个字段来判断对象是否已经发生变化。该字段由系统生成的,是一个只读字段。
generation【integer (int64)】:一个序列号,它表示期望状态的一次生成(generation)。目前只有replication controllers支持。该字段由系统生成的,是一个只读字段。
ownerReferences【OwnerReference array】:这主要用于内部管理,用户通常不需要设置或理解此字段。
resourceVersion【string】:引用的API版本。
blockOwnerDeletion【boolean】:如果为true,并且所有者具有“ForeGroundDelete”,则在删除此引用之前,无法从键值存储中删除所有者。默认为false。要设置此字段,用户需要所有者的“删除”权限,否则将返回422
controller【boolean】:如果为true,则此引用指向管理控制器。
kind【string】:对象类型
name【string】:对象的名称
uid【string】:对象的UID

三:spec【DeploymentSpec】

replicas【integer】:期望的副本(replica)数量。
selector【LabelSelector】:选择器,必须与pod模板的标签匹配,如果该字段为空,则默认采用pod模板中的labels。Label的键和值都必须与该Selector匹配
matchLabels【object】:key value 键值对
matchExpressions【LabelSelectorRequirement array】:匹配表达式,是标签选择的key value 键值对列表
key【string】:
operator【string】:运算符表示键与一组值的关系。有效运算符为In、NotIn、Exists和DoesNotExist。
values【string array】:
template【PodTemplateSpec】:描述了将要创建的pod模版
metadata【ObjectMeta】:标准对象的元数据
与上述metadata一样
spec【PodSpec】:pod所需行为的规范
containers【Container array】:容器信息
args【string array】:
command【string array】:
env【EnvVar array】:
name【string】:
value【string】:
valueFrom【EnvVarSource】:
configMapKeyRef【ConfigMapKeySelector】:
name【string】
key【string】
optional【optional】
fieldRef【ObjectFieldSelector】:
apiVersion【string】
fieldPath【string】
resourceFieldRef【ResourceFieldSelector】:
containerName【string】:
divisor【Quantity】:指定公开资源的输出格式,默认为“1”
resource【string】:
secretKeyRef【SecretKeySelector】:
name【string】
key【string】
optional【optional】
envFrom【EnvFromSource array】
configMapRef【ConfigMapEnvSource】:选择的ConfigMap
name【string】:对象名
optional【boolean】:是否必须要ConfigMap
prefix【string】:可选标识符,用于在ConfigMap中的每个键前添加。必须是C_IDENTIFIER.
secretRef【SecretEnvSource】:选择的Secret
name【string】:对象名
optional【boolean】:是否必须要Secret
image【string】:镜像名
imagePullPolicy【string】:镜像pull策略,Always(总数), Never(总不), IfNotPresent (如果没有就pull)
lifecycle【Lifecycle】:
preStop【LifecycleHandler】:
exec【ExecAction】:
command【string array】
httpGet【HTTPGetAction】:
host【string】:
httpHeaders【HTTPHeader array】
name
value
path【string】:
port:1-65535
scheme【string】:http/https
tcpSocket【TCPSocketAction】:
postStart【LifecycleHandler】:
livenessProbe【Probe】:定期检测容器的活性。如果探测失败,容器将重新启动
exec 指定要采取的操作
command【string array】:容器内执行的命令行,只是简单地执行,而不是在shell中运行,因此传统的shell指令(“|”等)将无法工作。要使用shell,需要显式调用该shell
failureThreshold【integer】 :成功后被视为失败的探测器的最小连续故障数。默认为3。最小值为1。
grpc:GRPC指定涉及GRPC端口的操作。这是一个alpha字段,需要启用GRPCContainerProbe功能门
port【integer】:gRPC服务的端口号。数字必须在1到65535之间。
service【string】:要放入gRPC HealthCheckRequest的服务的名称
httpGet:HTTPGet指定要执行的http请求
host【string】:要连接的主机名,默认为pod IP
httpHeaders【string array】:要在请求中设置的自定义头
name【string】: 请求头字段名
value【string】: 请求头值
path【string】:HTTP服务器上的访问路径
port:容器上要访问的端口的名称或编号。数字必须在1到65535之间。名称必须是IANA_SVC_NAME
scheme【string】:http或者是https
initialDelaySeconds【integer】:容器启动后的秒数,然后启动活动性探测
periodSeconds【integer】:执行探测的频率(秒)。默认为10秒。最小值为1。
successThreshold【integer】:探测失败后被视为成功的最小连续成功数。默认值为1,最小值也是1
tcpSocket:TCPSocket指定涉及TCP端口的操作。
host【string】:要连接的主机名,默认为pod IP。
port:容器上要访问的端口的编号或名称。数字必须在1到65535之间。名称必须是IANA_SVC_NAME
terminationGracePeriodSeconds【integer】:持续时间(以秒为单位),探测失败时pod需要正常终止。0表示立即停止,最小为1,需要启用ProbeTerminationGracePeriod功能,如果未设置,则使用spec.terminationGracePeriodSeconds。
timeoutSeconds【integer】:探测器超时后的秒数。默认为1秒。最小值为1
name【string】:pod中的容器名 ,必须一个唯一的名称
ports【ContainerPort array】:要从容器中公开的端口列表
containerPort【integer】: pod IP地址上要公开的端口数。这必须是有效的端口号,0<x<65536。
hostIP【string】: 将外部端口绑定到哪个主机IP。
hostPort【integer】:要在主机上公开的端口。如果指定,则必须是有效的端口号0<x<65536。如果指定了HostNetwork,则必须与ContainerPort匹配。大多数容器不需要这个。
name【string】:如果指定,则必须是IANA_SVC_NAME,并且在pod中是唯一的。pod中的每个命名端口必须具有唯一的名称。服务可以引用的端口的名称。
protocol【string】:端口的协议。必须是UDP、TCP或SCTP。默认为“TCP”。
readinessProbe【Probe】: 定期检查容器中服务准备情况。如果探测失败,容器将从服务端点移除(参数同livenessProbe)
securityContext【SecurityContext】: 定义了容器运行时应该使用的安全选项
startupProbe【Probe】:如果指定,则在成功完成之前不会执行其他探测。如果此探测器失败,Pod将重新启动
stdin【boolean】:此容器是否应在容器运行时为stdin分配缓冲区。如果未设置,则从容器中的stdin读取数据将始终导致EOF。默认值为false。
stdinOnce【boolean】:如果此标志为false,则从stdin读取的容器进程将永远不会收到EOF。默认值为false
terminationMessagePath【string】:将容器的终止消息写入的文件装入容器文件系统的路径。
tty【boolean】:容器是否应该为自己分配一个TTY,还需要’stdin’为true。默认值为false。
volumeDevices【VolumeDevice array】:容器要使用的块设备列表。[{“devicePath”: xx, “name”: xx}]
devicePath【string】:设备将映射到的容器内部的路径
name【string】:名称必须与pod中persistentVolumeClaim的名称匹配
volumeMounts【VolumeMount array】:容器要使用的的文件系统。
name【string】:这必须与Volume的名称匹配。
mountPath【string】: 容器中挂载卷的路径。不能包含“:”。
mountPropagation【string】:确定如何将挂载从主机传播到容器,反之亦然。未设置时,将使用MountPropagationNone。
readOnly【boolean】:如果为true,则为只读安装,否则为读写安装(false或未指定)。默认为false。
subPath【string】:从中装入容器卷的卷内的路径,默认为“”(卷的根目录)
subPathExpr【string】:卷内的扩展路径,容器的卷应从中装入。默认为“”
workingDir【string】:容器的工作目录。如果未指定,将使用容器运行时的默认值
volumes【Volume array】:容器挂载卷
name【string】:卷的名称。必须是DNS_LABEL,并且在pod中是唯一的
emptyDir 【EmptyDirVolumeSource】:共享pod生命周期的临时目录
persistentVolumeClaim【PersistentVolumeClaimVolumeSource】:
claimName【string】:PVC名
readOnly【boolean】
awsElasticBlockStore【AWSElasticBlockStoreVolumeSource】:
azureDisk【AzureDiskVolumeSource】:
azureFile【AzureFileVolumeSource】:
cephfs【CephFSVolumeSource】:
cinder【CinderVolumeSource】:
configMap【ConfigMapVolumeSource】:
csi【CSIVolumeSource】:
downwardAPI【DownwardAPIVolumeSource】:
ephemeral【EphemeralVolumeSource】:
fc【FCVolumeSource】:
flexVolume【FlexVolumeSource】:
flocker【FlockerVolumeSource】:
gcePersistentDisk【GCEPersistentDiskVolumeSource】:
glusterfs【GlusterfsVolumeSource】:
hostPath【HostPathVolumeSource】:
iscsi【ISCSIVolumeSource】:
nfs【NFSVolumeSource】:
photonPersistentDisk【PhotonPersistentDiskVolumeSource】:
portworxVolume【PortworxVolumeSource】:
projected【ProjectedVolumeSource】:
quobyte【QuobyteVolumeSource】:
rbd【RBDVolumeSource】:
scaleIO【ScaleIOVolumeSource】:
secret【SecretVolumeSource】:
storageos【StorageOSVolumeSource】:
vsphereVolume【VsphereVirtualDiskVolumeSource】:
activeDeadlineSeconds【integer】 :可选持续时间,如启动在指定秒内未成功,则系统标记为失败且杀死容器
affinity【Affinity】 :pod的调度约束
nodeAffinity【NodeAffinity】: pod的 描述节点关联调度规则
preferredDuringSchedulingIgnoredDuringExecution 调度器更愿意将POD调度到满足此字段指定的关联表达式的节点
PreferredSchedulingTerm array
NodeSelector
podAffinity 【PodAffinity】: 描述pod关联调度规则(例如,将此pod与其他pod放在同一节点、区域等中)  
preferredDuringSchedulingIgnoredDuringExecution 调度器更愿意将POD调度到满足此字段指定的关联表达式的节点

WeightedPodAffinityTerm array
PodAffinityTerm array
podAntiAffinity【PodAntiAffinity】: 描述pod反亲和力调度规则(例如,避免将此pod与其他pod放在同一节点、区域等)
preferredDuringSchedulingIgnoredDuringExecution 调度器更愿意将POD调度到满足此字段指定的关联表达式的节点
WeightedPodAffinityTerm array
PodAffinityTerm array
automountServiceAccountToken【boolean】: 是否应自动装载服务帐户令牌
dnsConfig【PodDNSConfig】: 指定pod的DNS参数。此处指定的参数将根据DNSPolicy合并到生成的DNS配置中。
nameservers【string array】 :DNS名称服务器IP地址的列表,重复的名称服务器将被删除
searches【string array】:用于主机名查找的DNS搜索域列表,重复的搜索路径将被删除
options【PodDNSConfigOption array】:DNS解析程序选项的列表
name【string】
value【string】
dnsPolicy【string】: 为pod设置DNS策略。默认为“ClusterFirst”。
ClusterFirst :表示pod应首先使用群集DNS,除非hostNetwork为true,如果它可用,则返回默认(由kubelet确定)DNS设置
ClusterFirstWithHostNet:表示pod应该首先使用群集DNS,如果可用,然后使用默认(由kubelet确定)DNS设置
Default:表示pod应该使用默认(由kubelet确定)DNS设置
None:表示pod应该使用空的DNS设置
enableServiceLinks【boolean】:是否应将有关服务的信息注入pod的环境变量中,以匹配Docker链接的语法。可选:默认为true。
ephemeralContainers【EphemeralContainer array】:该pod运行的临时容器列表,例如执行临时容器用来调试
hostAliases【HostAlias array】:如果指定,这些主机和IP将被注入pod的主机文件。这仅对非hostNetwork网络的pod有效
hostnames【string array】
ip【string】
hostIPC【boolean】:使用主机的ipc命名空间。可选:默认为false
hostNetwork【boolean】:使用主机的网络命名空间。如果设置了此选项,则必须指定要使用的端口。默认为false。
hostPID【boolean】:使用主机的pid命名空间。可选:默认为false。
hostname【string】:指定Pod的主机名如果未指定,Pod的主机名将设置为系统定义的值
imagePullSecrets【LocalObjectReference array】:对同一命名空间中的screct的可选引用列表,用于提取此PodSpec使用的任何镜像。如果指定,这些screct将被传递给各个puller实现,供它们使用。
name【string】:对象名称
initContainers【Container array】:初始化容器在容器启动之前按顺序执行。如果任何init容器出现故障,pod将被视为出现故障,并根据其重启策略进行处理
nodeName【string】:将这个pod调度到特定节点
nodeSelector【object】:选择器,该选择器必须与要在该节点上调度的pod的节点标签相匹配
os【PodOS】:指定pod中容器的操作系统。如果设置了此选项,某些pod和container字段将受到限制。
name 当前支持的值是linux和windows
overhead【object】:表示与为给定运行时类运行pod相关的资源开销
preemptionPolicy【string】:用于抢占优先级较低的POD的策略,默认为PreemptLowerPriority
priority【integer】:优先级值,值越高,优先级越高
priorityClassName【string】:如果指定,则指示pod的优先级,如果未指定则为0,system-node-critical/system-cluster-critical 属系统级别最高。
readinessGates【PodReadinessGate array】:将对所有准备就绪网关进行pod准备就绪评估。当一个pod的所有容器都已准备就绪,且准备就绪网关关中规定的所有条件的状态均为“真”时,该pod已准备就绪
conditionType【string】:指pod条件列表中具有匹配类型的条件
“ContainerReady”表示pod中的所有容器是否都已就绪 “Initialized”表示pod中的所有init容器都已成功启动
“PodScheduled”表示此pod的调度进程的状态 “Ready”表示pod能够为请求提供服务
restartPolicy【string】:重新启动pod内所有容器的策略,默认Always,枚举值:Always、Never、OnFailure
runtimeClassName【string】:指节点中的RuntimeClass对象
schedulerName【string】:pod将由指定的调度程序调度。如果未指定,pod将由默认调度程序调度。
securityContext【PodSecurityContext】:保存pod级别的安全属性和通用容器设置。可选:默认为空
serviceAccount【string】: 已废弃,改用下面serviceAccountName
serviceAccountName【string】:运行此pod的ServiceAccount的名称
setHostnameAsFQDN【boolean】:如果为true,pod的主机名将配置为pod的FQDN,而不是leaf name(默认值)
shareProcessNamespace【boolean】:在pod中的所有容器之间共享一个进程名称空间。默认为false,如True,容器将能够查看同一pod中其他容器的进程并发送信号,并且每个容器中的第一个进程将不会被分配PID 1。不能同时设置HostPID和ShareProcessNamespace
subdomain【string】:如果指定,完全限定的Pod主机名将是“.svc.”。如果未指定,pod将根本没有域名。
terminationGracePeriodSeconds【integer】:pod需要优雅终止的可选持续时间(秒),默认为30秒
tolerations【Toleration array】:容忍度
topologySpreadConstraints【TopologySpreadConstraint array】:描述了一组POD应该如何在拓扑域中分布。调度器将以遵守约束的方式调度POD。所有地形预约束均为ANDed。
minReadySeconds【integer】: 新创建的pod在没有任何容器崩溃的情况下准备就绪的最短秒数,以使其被视为可用。默认值为0(pod准备就绪后将被视为可用)
paused【boolean】:部署是否暂停。
progressDeadlineSeconds【integer】部署被视为失败继续处理失败的部署持续时间,默认600秒,部署暂停期间不会算计。
revisionHistoryLimit【integer】:定义保留允许回滚的历史发布配置的数量,默认为10
strategy【DeploymentStrategy】:用新pod替换现有pod的部署策略
type【策略类型】:Recreate/RollingUpdate(默认)
Recreate:“重新创建”`在创建新的POD之前杀死所有现有的POD。
rollingUpdate【map】:滚动更新配置参数。仅当DeploymentStrategyType=RollingUpdate时显示。
maxSurge:当设置为30%时,在滚动更新开始时,新的ReplicaSet可以立即放大,以便新旧POD的总数不超过所需POD的130%。默认25%
maxUnavailable:当设置为30%时,当滚动更新开始时,旧的复制集可以立即缩小到所需POD的70%。默认25%

四:status【DeploymentStatus】
availableReplicas【integer】:此部署可用pod总数
collisionCount【integer】:部署的哈希冲突计数
conditions【DeploymentCondition array】:前状态的最新可用观察结果
lastTransitionTime【time】:上次情况从一种状态过渡到另一种状态时间
lastUpdateTime【time】:最近一次状态更新的时间
message【string】:状态更新相关的信息
reason【string】:条件最后更新的原因
status【string】:变更状态True, False, Unknown.
type【string】:状态类型
observedGeneration【integer】:部署控制器观察到的数量
readyReplicas【integer】:当前处于就绪状态的pod数量
replicas【integer】:当前部署处在正在运行状态的pod数量
unavailableReplicas【integer】:当前部署处在不可用状态的pod数量
updatedReplicas【integer】:与模版中定义的实例数量对比后未终止的pod数量

猜你喜欢

转载自blog.csdn.net/u013078871/article/details/126824540