k8s资源清单

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

目录

一、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、格式
  1. kubectl explain 资源类型
复制代码
1.2、示例

1.2.1、查看pod资源的资源清单属性
  1. kubectl explain pod
复制代码

1.2.2、查看pvc资源的资源清单属性
  1. kubectl explain pvc
复制代码

1.2.3、查看statefulset资源的资源清单属性
  1. kubectl explain statefulset
复制代码

2、查看属性的说明

2.1、格式
  1. kubectl explain 资源类型.属性
复制代码
2.2、示例

2.2.1、查看statefulset.status属性说明
  1. kubectl explain statefulset.status
复制代码

三、常用字段解释

1、必选字段

参数名字段类型说明versionString指 K8s API 的版本,现在基本上是 v1 ,可以用 kubectl api-versions 下令查询kindString指 yaml 文件定义的资源类型和角色,好比:PodmetadataObject元数据对象metadata.nameString元数据对象的名字,好比定名 Pod 的名字metadata.namespaceString元数据对象的定名空间(默认default)specObject详细定义对象spec.containers[]List容器列表的定义spec.containers[].nameString容器的名字spec.containers[].imageString容器镜像的名称2、重要字段

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

参数名字段类型说明spec.restartPolicyString定义Pod的重启计谋,可选值为Always、OnFailure、默认为Always。 1. Always:Pod一旦停止运行,则无论容器是如何停止的,kubelet服务都将重启它 2.OnFailure:只有Pod以非零退出码停止时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet不会重启它。 3.Never:Pod停止后,kubelet将退出码报告给master,不会重启该Podspec.nodeSelectorObject定义Node的Label过滤标签,以key:value格式指定spec.imagePullSecretsObject定义pull镜像时使用secret名称,以name:secretkey格式指定spec.hostNetworkBoolean定义是否使用主机网络模式,默认值是false,设置true表示使用主机网络,不使用docker网桥,同时设置了true将无法在同一台宿主机上启动第二个副本四、Pod资源清单详解
  1. # yaml格式的pod定义文件完整内容:
  2. apiVersion: v1       #必选,版本号,例如v1
  3. kind: Pod       #必选,Pod
  4. metadata:       #必选,元数据
  5.   name: string       #必选,Pod名称
  6.   namespace: string    #必选,Pod所属的命名空间
  7.   labels:      #自定义标签
  8.     - name: string     #自定义标签名字
  9.   annotations:       #自定义注释列表
  10.     - name: string
  11. spec:         #必选,Pod中容器的详细定义
  12.   containers:      #必选,Pod中容器列表
  13.   - name: string     #必选,容器名称
  14.     image: string    #必选,容器的镜像名称
  15.     imagePullPolicy: [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
  16.     command: [string]    #容器的启动命令列表,如不指定,使用打包时使用的启动命令
  17.     args: [string]     #容器的启动命令参数列表
  18.     workingDir: string     #容器的工作目录
  19.     volumeMounts:    #挂载到容器内部的存储卷配置
  20.     - name: string     #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
  21.       mountPath: string    #存储卷在容器内mount的绝对路径,应少于512字符
  22.       readOnly: boolean    #是否为只读模式
  23.     ports:       #需要暴露的端口库号列表
  24.     - name: string     #端口号名称
  25.       containerPort: int   #容器需要监听的端口号
  26.       hostPort: int    #容器所在主机需要监听的端口号,默认与Container相同
  27.       protocol: string     #端口协议,支持TCP和UDP,默认TCP
  28.     env:       #容器运行前需设置的环境变量列表
  29.     - name: string     #环境变量名称
  30.       value: string    #环境变量的值
  31.     resources:       #资源限制和请求的设置
  32.       limits:      #资源限制的设置
  33.         cpu: string    #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
  34.         memory: string     #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
  35.       requests:      #资源请求的设置
  36.         cpu: string    #Cpu请求,容器启动的初始可用数量
  37.         memory: string     #内存清楚,容器启动的初始可用数量
  38.     livenessProbe:     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
  39.       exec:      #对Pod容器内检查方式设置为exec方式
  40.         command: [string]  #exec方式需要制定的命令或脚本
  41.       httpGet:       #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
  42.         path: string
  43.         port: number
  44.         host: string
  45.         scheme: string
  46.         HttpHeaders:
  47.         - name: string
  48.           value: string
  49.       tcpSocket:     #对Pod内个容器健康检查方式设置为tcpSocket方式
  50.          port: number
  51.        initialDelaySeconds: 0  #容器启动完成后首次探测的时间,单位为秒
  52.        timeoutSeconds: 0   #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
  53.        periodSeconds: 0    #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
  54.        successThreshold: 0
  55.        failureThreshold: 0
  56.        securityContext:
  57.          privileged:false
  58.     restartPolicy: [Always | Never | OnFailure]#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
  59.     nodeSelector: obeject  #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
  60.     imagePullSecrets:    #Pull镜像时使用的secret名称,以key:secretkey格式指定
  61.     - name: string
  62.     hostNetwork:false      #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
  63.     volumes:       #在该pod上定义共享存储卷列表
  64.     - name: string     #共享存储卷名称 (volumes类型有很多种)
  65.       emptyDir: {}     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
  66.       hostPath: string     #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
  67.         path: string     #Pod所在宿主机的目录,将被用于同期中mount的目录
  68.       secret:      #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
  69.         scretname: string  
  70.         items:     
  71.         - key: string
  72.           path: string
  73.       configMap:     #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
  74.         name: string
  75.         items:
  76.         - key: string
  77.           path: string
复制代码
五、Deployment资源清单详解
  1. apiVersion: extensions/v1beta1   #接口版本
  2. kind: Deployment                 #接口类型
  3. metadata:
  4.   name: cango-demo               #Deployment名称
  5.   namespace: cango-prd           #命名空间
  6.   labels:
  7.     app: cango-demo              #标签
  8. spec:
  9.   replicas: 3
  10.    strategy:
  11.     rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间
  12.       maxSurge: 1      #滚动升级时会先启动1个pod
  13.       maxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数
  14.   template:         
  15.     metadata:
  16.       labels:
  17.         app: cango-demo  #模板名称必填
  18.     sepc: #定义容器模板,该模板可以包含多个容器
  19.       containers:                                                                  
  20.         - name: cango-demo                                                           #镜像名称
  21.           image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址
  22.           command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令
  23.           args:                                                                #启动参数
  24.             - '-storage.local.retention=$(STORAGE_RETENTION)'
  25.             - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
  26.             - '-config.file=/etc/prometheus/prometheus.yml'
  27.             - '-alertmanager.url=http://alertmanager:9093/alertmanager'
  28.             - '-web.external-url=$(EXTERNAL_URL)'
  29.     #如果command和args均没有写,那么用Docker默认的配置。
  30.     #如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。
  31.     #如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。
  32.     #如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。
  33.           imagePullPolicy: IfNotPresent  #如果不存在则拉取
  34.           livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;
  35.             httpGet:
  36.               path: /health #如果没有心跳检测接口就为/
  37.               port: 8080
  38.               scheme: HTTP
  39.             initialDelaySeconds: 60 ##启动后延时多久开始运行检测
  40.             timeoutSeconds: 5
  41.             successThreshold: 1
  42.             failureThreshold: 5
  43.             readinessProbe:
  44.           readinessProbe:
  45.             httpGet:
  46.               path: /health #如果没有心跳检测接口就为/
  47.               port: 8080
  48.               scheme: HTTP
  49.             initialDelaySeconds: 30 ##启动后延时多久开始运行检测
  50.             timeoutSeconds: 5
  51.             successThreshold: 1
  52.             failureThreshold: 5
  53.           resources:              ##CPU内存限制
  54.             requests:
  55.               cpu: 2
  56.               memory: 2048Mi
  57.             limits:
  58.               cpu: 2
  59.               memory: 2048Mi
  60.           env:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量
  61.             - name: LOCAL_KEY     #本地Key
  62.               value: value
  63.             - name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,
  64.               valueFrom:
  65.                 configMapKeyRef:
  66.                   name: special-config   #configmap中找到name为special-config
  67.                   key: special.type      #找到name为special-config里data下的key
  68.           ports:
  69.             - name: http
  70.               containerPort: 8080 #对service暴露端口
  71.           volumeMounts:     #挂载volumes中定义的磁盘
  72.           - name: log-cache
  73.             mount: /tmp/log
  74.           - name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录
  75.             mountPath: /data/media   
  76.           - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfs
  77.             mountPath: /mnt/nfs
  78.           - name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。
  79.             mountPath: /etc/config      
  80.           - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)
  81. #使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,
  82.   volumes:  # 定义磁盘给上面volumeMounts挂载
  83.   - name: log-cache
  84.     emptyDir: {}
  85.   - name: sdb  #挂载宿主机上面的目录
  86.     hostPath:
  87.       path: /any/path/it/will/be/replaced
  88.   - name: example-volume-config  # 供ConfigMap文件内容到指定路径使用
  89.     configMap:
  90.       name: example-volume-config  #ConfigMap中名称
  91.       items:
  92.       - key: log-script           #ConfigMap中的Key
  93.         path: path/to/log-script  #指定目录下的一个相对路径path/to/log-script
  94.       - key: backup-script        #ConfigMap中的Key
  95.         path: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script
  96.   - name: nfs-client-root         #供挂载NFS存储类型
  97.     nfs:
  98.       server: 10.42.0.55          #NFS服务器地址
  99.       path: /opt/public           #showmount -e 看一下路径
  100.   - name: rbd-pvc                 #挂载PVC磁盘
  101.     persistentVolumeClaim:
  102.       claimName: rbd-pvc1         #挂载已经申请的pvc磁盘
复制代码
六、Service资源清单详解
  1. apiVersion: v1
  2. kind: Service
  3. matadata:                                #元数据
  4.   name: string                           #service的名称
  5.   namespace: string                      #命名空间  
  6.   labels:                                #自定义标签属性列表
  7.     - name: string
  8.   annotations:                           #自定义注解属性列表  
  9.     - name: string
  10. spec:                                    #详细描述
  11.   selector: []                           #label selector配置,将选择具有label标签的Pod作为管理
  12.                                          #范围
  13.   type: string                           #service的类型,指定service的访问方式,默认为
  14.                                          #clusterIp
  15.   clusterIP: string                      #虚拟服务地址      
  16.   sessionAffinity: string                #是否支持session
  17.   ports:                                 #service需要暴露的端口列表
  18.   - name: string                         #端口名称
  19.     protocol: string                     #端口协议,支持TCP和UDP,默认TCP
  20.     port: int                            #服务监听的端口号
  21.     targetPort: int                      #需要转发到后端Pod的端口号
  22.     nodePort: int                        #当type = NodePort时,指定映射到物理机的端口号
  23.   status:                                #当spce.type=LoadBalancer时,设置外部负载均衡器的地址
  24.     loadBalancer:                        #外部负载均衡器   
  25.       ingress:                           #外部负载均衡器
  26.         ip: string                       #外部负载均衡器的Ip地址值
  27.         hostname: string                 #外部负载均衡器的主机名
复制代码
在 kubernetes 中基本全部资源的一级属性都是一样的,重要包罗5部分:

  • apiVersion 版本,由 kubernetes 内部定义,版本号必须可以用 kubectl api-versions 查询到
  • kind 类型,由 kubernetes 内部定义,类型可以用 kubectl api-resources 查询到
  • metadata 元数据,重要是资源标识和说明,常用的有 name、namespace、labels 等
  • spec 描述,这是设置中最紧张的一部分,里面是对各种资源设置的详细描述
  • status 状态信息,里面的内容不需要定义,由 kubernetes 自动生成
在上面的属性中,spec 是接下来研究的重点,继续看下它的常见子属性:

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表