k8s资源清单

news/2024/11/17 12:52:30/文章来源:https://www.cnblogs.com/misakivv/p/18304329

目录
  • 一、k8s中的资源
    • 1、集群资源分类
    • 2、什么是资源
    • 3、集群资源概述
      • 3.1、名称空间级别
      • 3.2、集群级资源
      • 3.3、元数据型资源
  • 二、查看资源清单属性
    • 1、查看资源有那些资源清单属性
      • 1.1、格式
      • 1.2、示例
        • 1.2.1、查看pod资源的资源清单属性
        • 1.2.2、查看pvc资源的资源清单属性
        • 1.2.3、查看statefulset资源的资源清单属性
    • 2、查看属性的说明
      • 2.1、格式
      • 2.2、示例
        • 2.2.1、查看statefulset.status属性说明
  • 三、常用字段解释
    • 1、必选字段
    • 2、主要字段
    • 3、额外字段
  • 四、Pod资源清单详解
  • 五、Deployment资源清单详解
  • 六、Service资源清单详解

一、k8s中的资源

1、集群资源分类

  • 命名空间级别:只在本名称空间下生效(kube-system、default)
  • 集群级别:role,在定义时未指定名称空间
  • 元数据型:HPA--通过指标进行操作

2、什么是资源

k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象。

3、集群资源概述

3.1、名称空间级别

工作负载型资源(workload):

  • Pod:Kubernetes中最基本的可调度单位,可以包含一个或多个容器,共享存储和网络资源。
  • ReplicaSet:确保集群中始终运行着指定数量的Pod副本,是Deployment的基础。
  • Deployment:提供声明式的更新能力,用于管理应用的生命周期,包括滚动更新和回滚。
  • StatefulSet:为有状态应用提供管理,确保每个Pod都有一个稳定的唯一标识和持久存储。
  • DaemonSet:确保所有(或某些)节点上运行一个Pod的副本,常用于系统日志、监控等服务。
  • Job:用于完成一次性任务的资源,确保Pod成功执行并完成其工作。
  • CronJob:用于定时执行Jobs,类似于Linux的cron。

服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)

  • Service:定义应用的服务端点,用于在集群内部或外部访问应用。Service可以实现负载均衡和服务发现。
  • Ingress:提供了外部访问集群内服务的路由规则,通常与负载均衡器或反向代理结合使用。

配置与存储型资源:

  • Volume:持久化存储的抽象,可以被Pod使用,支持多种存储类型,如空目录、主机路径、云存储等。
  • CSI:容器存储接口,允许Kubernetes与外部存储系统集成,支持广泛的存储解决方案。

特殊类型的存储卷:

  • ConfigMap:用于存储非机密的配置数据,可以被Pod作为环境变量或文件挂载。
  • Secret:用于存储敏感信息,如密码、SSH密钥、TLS证书等,加密存储并安全传递给Pod。
  • Downward API:允许Pod访问自身和Pod的元数据,如Pod IP、节点名称、重启次数等

3.2、集群级资源

  • Namespace:用于逻辑隔离资源,便于多租户和资源配额管理。
  • Node:代表集群中的物理或虚拟机器,是Pod运行的实际环境。
  • Role & ClusterRole:定义权限,用于RBAC(基于角色的访问控制)。
  • RoleBinding & ClusterRoleBinding:将Role或ClusterRole绑定到用户或用户组,授予他们特定的权限。

3.3、元数据型资源

通过指标进行操作

  • HPA (Horizontal Pod Autoscaler):根据CPU使用率或其他指标自动调整Pod副本的数量。
  • PodTemplate:Pod的模板,用于创建具有相同配置的Pod。
  • LimitRange:定义资源配额,限制Pod和容器能使用的资源量,如CPU、内存。

二、查看资源清单属性

1、查看资源有那些资源清单属性

1.1、格式

kubectl explain 资源类型

1.2、示例

1.2.1、查看pod资源的资源清单属性

kubectl explain pod

image-20240716001027411

1.2.2、查看pvc资源的资源清单属性

kubectl explain pvc

image-20240716001121292

1.2.3、查看statefulset资源的资源清单属性

kubectl explain statefulset

image-20240716001224770

2、查看属性的说明

2.1、格式

kubectl explain 资源类型.属性

2.2、示例

2.2.1、查看statefulset.status属性说明

kubectl explain statefulset.status

image-20240716001511187

三、常用字段解释

1、必选字段

参数名 字段类型 说明
version String 指 K8s API 的版本,目前基本上是 v1 ,可以用 kubectl api-versions 命令查询
kind String 指 yaml 文件定义的资源类型和角色,比如:Pod
metadata Object 元数据对象
metadata.name String 元数据对象的名字,比如命名 Pod 的名字
metadata.namespace String 元数据对象的命名空间(默认default)
spec Object 详细定义对象
spec.containers[] List 容器列表的定义
spec.containers[].name String 容器的名字
spec.containers[].image String 容器镜像的名称

2、主要字段

参数名 字段类型 说明
spec.containers[].imagePullPolicy String 定义镜像的拉取策略,有Always、Never、IfNotPresent三个值可选,(1)Always:意思是每次都尝试重新拉取镜像,(2)Never:表示仅使用本地镜像,(3)IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。上面三个值都没设置的话,默认是Always。
spec.containers[].command[] List 指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令。
spec.containers[].args[] List 批定容器启动命令参数,因为是数组可以指定多个。
spec.containers[].workingDir String 指定容器的工作目录
spec.containers[].volumeMounts[] List 指定容器内部的存储卷位置
spec.containers[].volumeMounts[].name String 指定可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPath String 指定可以被挂载的存储卷的路径
spec.containers[].volumeMounts[].readOnly String 设置存储卷路径的读写模式,true或者false,默认为读写模式
spec.containers[].ports[] List 指定容器需要用到的端口列表
spec.containers[].ports[].name String 指定端口名称
spec.containers[].ports[].containerPort String 指定容器需要监听的端口号
spec.containers[].ports[].hostPort String 指定容器所在主机需要监听的端口号,默认跟上面containerPort相同,注意设置了hostPort同一台主机无法启动该容器的相同副本(会端口冲突)
spec.containers[].ports[].protocol String 指定端口协议,支持TCP和UDP,默认为TCP
spec.containers[].env[] List 指定容器运行前需要设置的环境变量列表
spec.containers[].env[].name String 指定环境变量名称
spec.containers[].env[].value String 指定环境变量值
spec.containers[].resources Object 指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)
spec.containers[].resources.limits Object 指定设置容器运行时资源的运行上限
spec.containers[].resources.limits.cpu String 指定CPU限制,单位为core数,将用于docker run --cpu-shares参数
spec.containers[].resources.limits.memory String 指定MEM内存的限制,单位为MIB、GiB
spec.containers[].resources.requests Object 指定容器启动和调度时的限制设置
spec.containers[].resources.requests.cpu String CPU请求,单位为core数,容器启动时初始化可用数量
spec.containers[].resources.requests.memory String 内存请求,单位为MIB、GiB,容器启动时初始化可用数量

3、额外字段

参数名 字段类型 说明
spec.restartPolicy String 定义Pod的重启策略,可选值为Always、OnFailure、默认为Always。 1. Always:Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启它 2.OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet不会重启它。 3.Never:Pod终止后,kubelet将退出码报告给master,不会重启该Pod
spec.nodeSelector Object 定义Node的Label过滤标签,以key:value格式指定
spec.imagePullSecrets Object 定义pull镜像时使用secret名称,以name:secretkey格式指定
spec.hostNetwork Boolean 定义是否使用主机网络模式,默认值是false,设置true表示使用主机网络,不使用docker网桥,同时设置了true将无法在同一台宿主机上启动第二个副本

四、Pod资源清单详解

# yaml格式的pod定义文件完整内容:
apiVersion: v1       #必选,版本号,例如v1
kind: Pod       #必选,Pod
metadata:       #必选,元数据name: string       #必选,Pod名称namespace: string    #必选,Pod所属的命名空间labels:      #自定义标签- name: string     #自定义标签名字annotations:       #自定义注释列表- name: string
spec:         #必选,Pod中容器的详细定义containers:      #必选,Pod中容器列表- name: string     #必选,容器名称image: string    #必选,容器的镜像名称imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像command: [string]    #容器的启动命令列表,如不指定,使用打包时使用的启动命令args: [string]     #容器的启动命令参数列表workingDir: string     #容器的工作目录volumeMounts:    #挂载到容器内部的存储卷配置- name: string     #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名mountPath: string    #存储卷在容器内mount的绝对路径,应少于512字符readOnly: boolean    #是否为只读模式ports:       #需要暴露的端口库号列表- name: string     #端口号名称containerPort: int   #容器需要监听的端口号hostPort: int    #容器所在主机需要监听的端口号,默认与Container相同protocol: string     #端口协议,支持TCP和UDP,默认TCPenv:       #容器运行前需设置的环境变量列表- name: string     #环境变量名称value: string    #环境变量的值resources:       #资源限制和请求的设置limits:      #资源限制的设置cpu: string    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: string     #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests:      #资源请求的设置cpu: string    #Cpu请求,容器启动的初始可用数量memory: string     #内存清楚,容器启动的初始可用数量livenessProbe:     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可exec:      #对Pod容器内检查方式设置为exec方式command: [string]  #exec方式需要制定的命令或脚本httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式port: numberinitialDelaySeconds: 0  #容器启动完成后首次探测的时间,单位为秒timeoutSeconds: 0   #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds: 0    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该PodnodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定imagePullSecrets:    #Pull镜像时使用的secret名称,以key:secretkey格式指定- name: stringhostNetwork:false      #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:       #在该pod上定义共享存储卷列表- name: string     #共享存储卷名称 (volumes类型有很多种)emptyDir: {}     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath: string     #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path: string     #Pod所在宿主机的目录,将被用于同期中mount的目录secret:      #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部scretname: string  items:     - key: stringpath: stringconfigMap:     #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name: stringitems:- key: stringpath: string

五、Deployment资源清单详解

apiVersion: extensions/v1beta1   #接口版本
kind: Deployment                 #接口类型
metadata:name: cango-demo               #Deployment名称namespace: cango-prd           #命名空间labels:app: cango-demo              #标签
spec:replicas: 3strategy:rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1      #滚动升级时会先启动1个podmaxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数template:         metadata:labels:app: cango-demo  #模板名称必填sepc: #定义容器模板,该模板可以包含多个容器containers:                                                                   - name: cango-demo                                                           #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令args:                                                                #启动参数- '-storage.local.retention=$(STORAGE_RETENTION)'- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'- '-config.file=/etc/prometheus/prometheus.yml'- '-alertmanager.url=http://alertmanager:9093/alertmanager'- '-web.external-url=$(EXTERNAL_URL)'#如果command和args均没有写,那么用Docker默认的配置。#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。imagePullPolicy: IfNotPresent  #如果不存在则拉取livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:readinessProbe:httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources:              ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量- name: LOCAL_KEY     #本地Keyvalue: value- name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,valueFrom:configMapKeyRef:name: special-config   #configmap中找到name为special-configkey: special.type      #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080 #对service暴露端口volumeMounts:     #挂载volumes中定义的磁盘- name: log-cachemount: /tmp/log- name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录mountPath: /data/media    - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。mountPath: /etc/config       - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,volumes:  # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb  #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config  # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config  #ConfigMap中名称items:- key: log-script           #ConfigMap中的Keypath: path/to/log-script  #指定目录下的一个相对路径path/to/log-script- key: backup-script        #ConfigMap中的Keypath: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root         #供挂载NFS存储类型nfs:server: 10.42.0.55          #NFS服务器地址path: /opt/public           #showmount -e 看一下路径- name: rbd-pvc                 #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

六、Service资源清单详解

apiVersion: v1
kind: Service
matadata:                                #元数据name: string                           #service的名称namespace: string                      #命名空间  labels:                                #自定义标签属性列表- name: stringannotations:                           #自定义注解属性列表  - name: string
spec:                                    #详细描述selector: []                           #label selector配置,将选择具有label标签的Pod作为管理 #范围type: string                           #service的类型,指定service的访问方式,默认为 #clusterIpclusterIP: string                      #虚拟服务地址      sessionAffinity: string                #是否支持sessionports:                                 #service需要暴露的端口列表- name: string                         #端口名称protocol: string                     #端口协议,支持TCP和UDP,默认TCPport: int                            #服务监听的端口号targetPort: int                      #需要转发到后端Pod的端口号nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址loadBalancer:                        #外部负载均衡器    ingress:                           #外部负载均衡器 ip: string                       #外部负载均衡器的Ip地址值hostname: string                 #外部负载均衡器的主机名

在 kubernetes 中基本所有资源的一级属性都是一样的,主要包含5部分:

  • apiVersion 版本,由 kubernetes 内部定义,版本号必须可以用 kubectl api-versions 查询到
  • kind 类型,由 kubernetes 内部定义,类型可以用 kubectl api-resources 查询到
  • metadata 元数据,主要是资源标识和说明,常用的有 name、namespace、labels 等
  • spec 描述,这是配置中最重要的一部分,里面是对各种资源配置的详细描述
  • status 状态信息,里面的内容不需要定义,由 kubernetes 自动生成

在上面的属性中,spec 是接下来研究的重点,继续看下它的常见子属性:

  • containers <[]Object> 容器列表,用于定义容器的详细信息
  • nodeName 根据 nodeName 的值将 pod 调度到指定的 Node 节点上
  • nodeSelector <map[]> 根据NodeSelector中定义的信息选择将该 Pod 调度到包含这些 label 的 Node 上
  • hostNetwork 是否使用主机网络模式,默认为 false,如果设置为 true,表示使用宿主机网络
  • volumes <[]Object> 存储卷,用于定义 Pod 上面挂在的存储信息
  • restartPolicy 重启策略,表示 Pod 在遇到故障的时候的处理策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/744387.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CORS跨域问题梳理

什么是跨域浏览器的同源策略:浏览器为确保资源安全,而遵循的一种策略,该策略对访问资源进行了一些限制 https://www.w3.org/Security/wiki/Same_Origin_Policy https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS1、发生跨域后会出现的问题:1、限制DOM访问 <!-- &…

linux/unix/windows 查询服务器查询出口 ip

1. 使用 curl 命令 比如下面这个 curl cip.cc 2. 也可以在浏览器中直接输入 url 地址:http://www.cip.cc/ 3. 其他的类似的网址: https://ipinfo.io/ curl ipinfo.iohttps://ifconfig.me/ curl ifconfig.mehttps://ifconfig.io/ curl ifconfig.iohttps://icanhazip.com/ cu…

五、Python函数之基础

全局变量与局部变量 顶头,没有任何缩进就是全局变量 函数里的变量是局部变量 如果在函数里使用 global全局变量,则可以改变全局变量。 如果没有global全局变量,调用全局变量的时候,只能读取,无法重新赋值 nonlocal 取上一级变量 书写规范 全局变量大写 局部变量小写 递归函…

STM32时钟体系、SetSysClock、PLL、时钟源

简要介绍了一、时钟体系 1、参考手册 2、时钟源3种 3、时钟树 4.时钟详解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 HCLK时钟 PCLK1时钟 PCLK2时钟 RTC时钟 独立看门狗时钟: 12S时钟: 以太网PHY时钟: USBPHY时钟: MCO时钟输出 系统时钟配置函数SetsysClockO 系统时钟配置流程 …

YApi可视化接口管理平台部署

使用我们提供的 yapi-cli 工具,部署 YApi 平台是非常容易的。执行 yapi server 启动可视化部署程序,输入相应的配置和点击开始部署,就能完成整个网站的部署。部署完成之后,可按照提示信息,执行 node/{网站路径/server/app.js} 启动服务器。在浏览器打开指定url, 点击登录输…

八大作业管理流程

安全影响力的小编非常喜欢王老师的风格,抄了他的创意,把八大高危作业做了一个“一图看懂”系列。

玄机-第一章 应急响应-webshell查杀

作者是个垃圾,第一次玩玄机太紧张了,不知道flag是啥样找了半天,第二次开靶机多次尝试才知道格式。争取下次一次过。 靶机账号密码 root xjwebshell 1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx} 2.黑客使用的什么工具的shell github地址的md5 flag{md5} 3.黑客…

WordPress标签如何实现批量自定义链接

网站外链和内链都是非常重要的一项 SEO 工作,并且一个网站的反链建设也并非一朝一夕就能够做好,而是日积月累的增加才会更有优化效果,且不论是否为 nofollow 或者 dofollow 属性,对于很 SEOer 来说可能觉得建设 Do Follow 的反链更有用,但是我们不妨换个 SEO 思维方式,一…

Modbus转Ethernet IP网关模块与汇川PLC通讯在网关配置软件中的配置

通过Modbus转Ethernet/IP网关模块XD-MDEP100,实现汇川PLC与多种品牌Modbus设备的无缝通信,提高系统效率和稳定性。配置软件GWModbusBuilder完成网关与PLC通讯设置,支持EtherNet/IP协议,实现数据快速传输和实时监控。通过Modbus转Ethernet/IP网关模块(XD-MDEP100),可以实…

JavaScript系列:JS实现复制粘贴文字以及图片

目录一. 基于 Clipboard API 复制文字(推荐)基本概念主要方法使用限制实际应用示例二、基于 document.execCommand(copy)缺陷实际应用示例说明三、复制图片功能四、封装 一. 基于 Clipboard API 复制文字(推荐) 基本概念 Clipboard API 是一组用于在浏览器中操作剪贴板的 J…