Pod 是 Kubernetes 中最基本的资源对象之一,代表一组容器的单位。以下是几个重要的 Pod 字段的含义和用法:
metadata:包含了 Pod 的元数据,例如名称、标签、命名空间等。
spec:定义了 Pod 的行为和构建,例如容器镜像、资源限制、环境变量等。
status:存储了 Pod 的运行状态,例如 Pod IP 地址、容器状态、节点名称等。
containers:定义了 Pod 中包含的容器,包括容器名称、镜像、端口映射等。
restartPolicy:定义了在容器停止时的重启策略,可以设置为 "Always"、"OnFailure" 或 "Never"。
dnsPolicy:定义了 Pod 的 DNS 策略,例如使用 Cluster DNS 还是自定义 DNS。
nodeSelector:指定 Pod 运行在哪个节点上,可以根据节点标签进行选择。
https://dandelioncloud.cn/article/details/1566670076827103234
apiVersion: apps/v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Deployment # 指定创建资源的角色/类型,如 pod、deployment、statefulset、job、cronjob
metadata: # 资源的元数据/属性
name: demo # 资源的名字,在同一个namespace中必须唯一
namespace: default # 部署在哪个namespace中
labels: # 设定资源的标签
app: demo
version: stable
spec: # 资源规范字段
replicas: 1 # 声明副本数目
revisionHistoryLimit: 3 # 保留历史版本
selector: # 选择器
matchLabels: # 匹配标签
app: demo
version: stable
strategy: # 策略
rollingUpdate: # 滚动更新
maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
maxUnavailable: 30% # 示在更新过程中能够进入不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
type: RollingUpdate # 滚动更新策略
template: # 模版
metadata: # 资源的元数据/属性
annotations: # 自定义注解列表
sidecar.istio.io/inject: "false" # 自定义注解名字
labels: # 设定资源的标签
app: demo
version: stable
spec: # 资源规范字段
containers:
- name: demo # 容器的名字
image: demo:v1 # 容器使用的镜像地址
imagePullPolicy: IfNotPresent # 每次Pod启动拉取镜像策略,三个选择 Always、Never、IfNotPresent
# Always,每次都检查;Never,每次都不检查(不管本地是否有);IfNotPresent,如果本地有就不检查,如果没有就拉取(手动测试时,
# 已经打好镜像存在docker容器中时,使用存在不检查级别,
# 默认为每次都检查,然后会进行拉取新镜像,因镜像仓库不存在,导致部署失败)
resources: # 资源管理
limits: # 最大使用
cpu: 300m # CPU,1核心 = 1000m
memory: 500Mi # 内存,1G = 1000Mi
requests: # 容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 100m
memory: 100Mi
livenessProbe: # pod 内部健康检查的设置
httpGet: # 通过httpget检查健康,返回200-399之间,则认为容器正常
path: /healthCheck # URI地址
port: 8080 # 端口
scheme: HTTP # 协议
# host: 127.0.0.1 # 主机地址
initialDelaySeconds: 30 # 表明第一次检测在容器启动后多长时间后开始
timeoutSeconds: 5 # 检测的超时时间
periodSeconds: 30 # 检查间隔时间
successThreshold: 1 # 成功门槛
failureThreshold: 5 # 失败门槛,连接失败5次,pod杀掉,重启一个新的pod
readinessProbe: # Pod 准备服务健康检查设置
httpGet:
path: /healthCheck
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
periodSeconds: 10
successThreshold: 1
failureThreshold: 5
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
# command:
# - cat
# - /tmp/health
#也可以用这种方法
#tcpSocket: # 通过tcpSocket检查健康
# port: number
ports:
- name: http # 名称
containerPort: 8080 # 容器开发对外的端口
protocol: TCP # 协议
imagePullSecrets: # 镜像仓库拉取密钥
- name: harbor-certification
affinity: # 亲和性调试
nodeAffinity: # 节点亲和力
requiredDuringSchedulingIgnoredDuringExecution: # pod 必须部署到满足条件的节点上
nodeSelectorTerms: # 节点满足任何一个条件就可以
- matchExpressions: # 有多个选项,则只有同时满足这些逻辑选项的节点才能运行 pod
- key: beta.kubernetes.io/arch
operator: In
values:
- amd64
---
apiVersion: v1 # 指定api版本,此值必须在kubectl api-versions中
kind: Service # 指定创建资源的角色/类型
metadata: # 资源的元数据/属性
name: demo # 资源的名字,在同一个namespace中必须唯一
namespace: default # 部署在哪个namespace中
labels: # 设定资源的标签
app: demo
spec: # 资源规范字段
type: ClusterIP # ClusterIP 类型
ports:
- port: 8080 # service 端口
targetPort: http # pod端口容器暴露的端口
protocol: TCP # 协议
name: http # 端口名称
nodePort: 31319 # 对外访问端口
selector: # 选择器
app: demo
1、k8s的yaml文件中kind类型详解
在Kubernetes(k8s)的YAML语法中,kind是一种重要的关键字,它用于指定Kubernetes资源的类型。根据Kubernetes官方文档,以下是kind可能的取值:
Deployment:用于定义应用程序的声明式更新。
StatefulSet:用于有状态应用程序的声明式更新和管理。
DaemonSet:用于在集群中运行一个pod的声明式更新和管理。
Job:用于在集群上运行一次性任务的声明式更新和管理。
CronJob:用于在集群上运行定期作业的声明式更新和管理。
Service:用于定义一组pod的逻辑集合,以及访问这些pod的方式。
Pod:一个Kubernetes中最基本的资源类型,它用于定义一个或多个容器的共同运行环境。
ReplicaSet:用于确保在集群中运行指定数量的pod的声明式更新和管理。
ConfigMap:用于存储非敏感数据(如配置文件)的声明式更新和管理。
Secret:用于存储敏感数据(如密码和密钥)的声明式更新和管理。
ServiceAccount:用于定义一个pod的身份验证信息,以及与Kubernetes API Server进行交互的权限。
Ingress:用于定义从外部访问Kubernetes集群中服务的方式。
PersistentVolume:用于定义持久化存储卷,并使它们在Kubernetes集群中可用。
StorageClass:用于定义不同类型的存储,例如云存储、本地存储等,并为这些存储类型指定默认的参数和策略。
Namespace:用于在Kubernetes集群中创建逻辑分区,从而将资源隔离开来,以提高安全性和可维护性。
ServiceMonitor:用于自动发现和监控在Kubernetes集群中运行的服务。
HorizontalPodAutoscaler:用于自动调整Kubernetes集群中的pod副本数量,以根据当前负载需求实现自动扩展或收缩。
NetworkPolicy:用于定义网络访问策略,以控制pod之间的网络流量。
CustomResourceDefinition:用于定义自定义资源,以扩展Kubernetes API和CRD操作。
PodDisruptionBudget:用于定义维护期间可以安全中断的pod的最小数量,以确保Kubernetes集群的高可用性。
Role:用于定义对Kubernetes资源的操作权限,例如读、写、更新、删除等。
ClusterRole:与Role类似,但是可以在整个Kubernetes集群中使用。
1、ownerReferences:表示资源之间的从属关系。 在 kubernetes 垃圾收集器还没出来之前,所有的级联操作都需要依靠客户端自己去实现,例如删除 ReplicaSet 时会删除它依赖的 Pod。垃圾收集器通过 metadata.ownerReferences 字段标识资源的 属主、附属关系,如果属主资源没了,附属资源会自动被回收。https://zhuanlan.zhihu.com/p/577185348
apiVersion: xxx
kind: xxx
metadata: name: xxx
ownerReferences:
-apiVersion: xxx
kind: xxx
blockOwnerDeletion: true
controller: true
name: xxx
uid: xxx