Kubernetes Yaml quicklystart
Kubernetes YAML file quicklystart
[toc]
1.集群级别资源
1.1.namespace资源清单文件
apiVersion: v1 # api版本kind: Namespace # 资源类型metadata: # 元数据 name: dev # namespace的名称
2.pod资源
2.1.pod资源清单文件-涵盖全部参数
apiVersion: v1 # 必选,版本号,例如v1kind: Pod # 必选,资源类型,例如 Podmetadata: # 必选,元数据 name : string # 必选,Pod名称 namespace: string # Pod所属的命名空间,默认为" default"labels: labels: # 自定义标签列表 - namd: stringspec: # 必选,Pod中容器的详细定义 containers: # 必选,Pod中容器列表 - name: string # 必选,容器名称 image: string # 必选,容器的镜像名称 imagePullPolicy: [ Always | Never |IfNotPresent ] # 获取镜像的策略 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,默认TCP env: # 容器运行前需设置的环境变量列表 - 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 # 内存请求,容器启动的初始可用数量 lifecycle: # 生命周期钩子 postStart: # 容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启 preStop: # 溶容器终止前执行此钩子,无论结果如何,容器都会终止 livenessProbe: # 对Pod内各容哭健唐检查的设署,当探测无响应几次后将自动重启该容器 exec: # Pod容器内检查方式设置为exec方式 command: [string] # exec方式需要制定的命令或脚本 httpGet: # 对Pod某个容器健康检查方法设置为HttpGet,需要制定Path、port path: string port: number host: string scheme: string HttpHeaders: - name : string value: string tcpSocket: # 对Pod内个容器健康检查方式设置为tcpSocket方式 port: number initialDelaySeconds: 0 # 容器启动完成后首次探测的时间,单位为秒 timeoutSeconds: 0 # 对容器健康检查探测等待响应的超时时间,单位秒,默认1秒 periodSeconds: 0 # 对容器监控检查的定期探测时间设置,单位秒,黑认18秒一次 successThreshold: 0 failureThreshold: 0 securityContext: privileged: false restartPolicy: [Always Never| OnFailure] # Pod的重启策略 nodeName: <string> # 设置NodeName表示将该Pod调度到指定到名称的node节点上 nodeSelector: obeject # 设置NodeSelector表示将该Pod调度到包含这个label的node节点上 imagePullSecrets: # Pull镜像时使用的secret名称,以key: secretkey格式指定 - name: string hostNetwork: false # 是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络 volumes: # 在该pod上定义共享存储卷列表 - name: string # 共享存储卷名称(volumes类型有很多种) emptyDir: {} # 类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录,为空值 hostPath: string # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录 path: string # Pod所在宿主机的目录,将被用于同期中mount的目录 secret: # 类型为secret的存储卷,挂载集群与定义的secret对象到容器内部 scretname: string items : - key : string path: string configMap: # 类型为configMap的存储卷,挂载预定义的configMap对象到容器内部 name: string items: - key: string path: string
2.2.pod资源基本配置清单文件
apiVersion: v1 # api版本kind: Pod # 资源类型为podmetadata: # 定义元数据 name: pod-resources # pod的名称 namespace: dev # pod所在的namespace labels: # 定义标签 app: basespec: containers: - name: nginx-port # 容器的名称 image: nginx:1.11 # 镜像版本 imagePullPolicy: IfNotPresent # 镜像拉取策略 command: ["/bin/sh"] # 容器启动后要执行的命令,命令有很多子命令,以逗号分隔 args: ["-c","touch/hello.txt;while true;do /bin/echo $(date +%T)>>/tmp/hellow.txt;sleep 3;done;"] env: # 定义环境变量 - name: "username" # 定义变量名称 value: "jiangxl" # 定义变量值 - name: "job" value: "it" ports: # 定义端口,一个- name表示一个端口,可以写多个 - name: nginx-port # 定义端口名称 containerPort: 80 # 定义开放的端口 protocol: TCP # 指定端口属于什么协议 resources: # 定义资源配置 limits: # 最大资源限制 cpu: "2" # cpu限制在2核 memory: "10Gi" # 内存限制在10G requests: # 最小资源限制 cpu: "1" # cpu限制在1核 memory: "10Mi" # 内存限制在10M
2.3.pod资源健康检查资源清单文件
apiVersion: v1kind: Podmetadata: name: pod-livereadiness namespace: devspec: containers: - name: nginx image: nginx:1.15 ports: - name: nginx-port containerPort: 80 livenessProbe: # 存活性探测 tcpSocket: # 使用TCPSocket探测方式 port: 80 # 探测的端口 initialDelaySeconds: 30 # 容器启动后30s以后开始探测 timeoutSeconds: 5 # 探测超时时间 readinessProbe: # 就绪性探测 httpGet: # 使用HTTPGet探测方式 scheme: HTTP # 协议使用http port: 80 # 应用端口 path: / # url路径
2.2.pod资源一级可配置属性
[root@k8s-master ~]\# kubectl explain podKIND: PodVERSION: v1 # 编写yaml文件时第一行的版本号可以从这里进行查找FIELDS: # 可配置的一级属性,基本所有资源都是如下五个,如果当前级别配置参数后面<>中是string就表示没有下一级配置参数,直接填写一个字符串即可,如果<>为object说明他还有下一级配置参数,可以通过资源类型.属性的方式查找 apiVersion <string> # 当前资源支持的版本 kind <string> # 控制器类型 metadata <Object> # 元数据 spec <Object> # 设置属性 status <Object> # 记录pod的状态,包括ip地址、创建时间等等,是自动增加的,不是手动写入的
2.4.pod初始化容器配置参数
[root@k8s-master ~/k8s_1.19_yaml]\# kubectl explain pod.spec.initContainersKIND: PodVERSION: v1RESOURCE: initContainers <[]Object>DESCRIPTION:FIELDS: args <[]string> # 设置容器启动参数 command <[]string> # 设置容器启动命令 env <[]Object> # 设置容器的环境变量 image <string> # 容器的镜像 imagePullPolicy <string> # 容器镜像的拉取策略 name <string> -required- # 初始化容器的名称 ports <[]Object> # 端口号设置
2.5.pod资源钩子函数配置参数
KIND: PodVERSION: v1RESOURCE: lifecycle <Object>FIELDS: postStart <Object> # 定义容器启动后执行的钩子函数 exec <Object> # exec命令方式,在容器里面执行相应的命令 command <[]string> # 指定运行的命令 httpGet <Object> # httpGet方式,探测容器应用的url host <string> # 主机地址,一般就是pod地址 path <string> # 请求的url路径 port <string> # 应用端口号 scheme <string> # 协议 tcpSocket <Object> # tcpSocket方式,访问容器指定的socket host <string> # pod地址 port <string> # 端口号 preStop <Object> # 定期容器关闭前执行的钩子函数 exec <Object> # exec命令方式,在容器里面执行相应的命令 ····· httpGet <Object> # httpGet方式,探测容器应用的url ····· tcpSocket <Object> # tcpSocket方式,访问容器指定的socket ·····
2.6.Pod资源node调度策略配置参数
apiVersion: v1kind: Podmetadata: name: pod-nodename namespace: devspec: containers: - name: nginx image: nginx:1.15 nodeName: k8s-node1 # 指定要调度的node节点名称
2.7.Pode亲和性调度配置参数
[root@k8s-master ~]\# kubectl explain pod.spec.affinity.nodeAffinityrequiredDuringSchedulingIgnoredDuringExecution <Object> # node节点必须满足所有规则才可以,相当于硬限制,(这名字真是有够长的),不会驱逐已经存在并运行的podnodeSelectorTerms <[]Object> # 定义节点选择列表,也就是定义具体匹配规则 matchFields <Object> # 根据节点字段列出的节点选择器要求选择 key # 键 operator # 关系符,支持Exists(存在)、DoesNotExist(不存在)、In(是这个范围)、NotIN(不是这个范围)、Gt(大于)、Lt(小于) values # 值 matchExpressions <Object> # 根据节点标签选择器进行匹配(推荐使用) key # 键,标签名 operator # 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt values # 值,标签值
preferredDuringSchedulingIgnoredDuringExecution <[]Object> # 优先调度到满足指定规则的Node,相当于软限制,(这名字真是有够长的),不会驱逐已经存在并运行的podpreference <Object> # 节点选择器,与权重关联,可以定义多个,多个prefence如何选择就要看权重设置的大小 matchFields <Object> # 根据节点字段进行匹配 key operator values matchExpressions <Object> # 根据节点标签选择器进行匹配(推荐使用) key # 键,标签名 operator # 关系符,支持Exists、DoesNotExist、In、NotIN、Gt、Lt values # 值,标签值weight # 设置权重,范围在1-100
# node亲和示例配置清单文件spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: disktype operator: In values: - ssd# pod亲和示例配置清单文件spec: affinity: podAffinity: # podAntiAffinity: # pod反亲和性 requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: # matchLabels: # app: fronted matchExpressions: - key: security operator: In values: - S1 topologyKey: topology.kubernetes.io/zone # 不在同一区域 # topologyKey: kubernetes.io/hostname # 不在同一主机 containers: - name: with-pod-affinity image: k8s.gcr.io/pause:2.0
3.pod资源控制器资源
3.1.ReplicaSet控制器资源清单文件
apiVersion: apps/v1 # 版本号kind : ReplicaSet # 类型metadata: # 元数据 name : # rs名称 namespace : # 所属命名空间 labels: # 标签 controller : rsspec: # 详情描述 replicas: 3 # 副本数量 selector: # 选择器,通过它指定该控制器管理哪些pod matchLabels : # Labels匹配配规则 app: nginx-pod # 匹配标签app值为nginx-pod的pod matchExpressions: # Expressions匹配规则 - {key : app, operator : In, values : [nginx-pod ] } # 指定一个就可以了 template: # 模板,也就是定义pod的信息,当副本数量不足时,会根据下面的模板创建pod副本 metadata : # 元数据 labels : # 定义标签与rs进行关联 app: nginx-pod spec: # pod属性 containers: # 定义容器 - name : nginx # 容器名称 image: nginx :1.17.1 # 镜像 ports : # 端口号 - containerPort : 80
3.2.Deployment控制器资源清单文件
apiVersion: apps/v1 # 版本号kind: Deployment # 控制器类型metadata: # 定义元数据 name: # deployment资源名称 namespace: # 所属命名空间 labels: # 定义标签 controller: deployspec: # 定义资源属性 replicas: 3 # 副本数量 revisionHistoryLimit: 3 # 保留历史版本,默认是1日 paused: false # 暂停部署,默认是false,也就是deployment资源创建好之后,是否立刻运行pod,如果设置true,deployment资源创建好不会立即运行pod progressDeadlineSeconds: 688 # 部署超时时间(s),默认是68日 tolerations: # 容忍度 - key: "key1" operator: "Equal" # 操作符为Exists时,不能指定value值 value: "value1" effect: "NoSchedule" # 此外还有NoExecute(驱逐影响目前运行着的pod)和PreferNoschedule(尽量阻止pod调度到该节点,除非没有其他节点可调用,说白了就是备胎xd.) tolerationSeconds: 6000 # 用于当某个pod运行所在的节点变成unready或者unreachable状态时,k8s可以等待该pod被调度到其他节点的最长等待时间,一般与effect的NoExecute共同使用 strategy: # 策略 type: RollingUpdate # 滚动更新策略 rollingUpdate: # 滚动更新 maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数 maxUn available: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数 selector: # 选择器,通过它指定该控制器管理哪些pod matchLabels: # Labels匹配规则 app: nginx-pod matchExpressions: # Expressions匹配规则 - {key: app, operator: In, values: [nginx-pod] } template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 metadata: labels: app: nginx-podspec: containers: - name: nginx image: nginx:1.17.1ports: ports: - containerPort: 80
3.3.HPA控制器资源清单文件
apiVersion: autoscaling/v1 # hpa支持的版本号kind: HorizontalPodAutoscaler # 类型为hpametadata: # 元数据 name: hpa-nginx # hpa名称 namespace: dev # 所在的命名空间spec: # 属性 minReplicas: 1 # 最少存活的pod数量 maxReplicas: 10 # 最多存活的pod数量 targetCPUUtilizationPercentage: 85 # 当CPU使用率达到多少指标时触发规则,这里的85表示85%,方便测试,实际生产中采用80-85% scaleTargetRef: # 声明对那个资源进行控制 apiVersion: apps/v1 # 资源的api版本 kind: Deployment # 资源类型 name: deployment-nginx # 资源名称
3.4.DaemonSet控制器资源清单文件
apiversion: apps/v1 # 版本号kind: DaemonSet # 类型metadata: # 元数据 name: # 名称 namespace: # 所属命名空间 labels: # 标签 controller: daemonsetspec: # 属性 revisionHistoryLimit: 3 # 保留历史版本 updateStrategy : # 更新策略 type: RollingUpdate # 滚动更新 rollingUpdate: # 滚动更新策略 maxUnavailable: 1 # 最大不可用状态的 Pod的最大值,可以为百分比,也可以为整数 selector : # 选择器,通过它指定该控制器管理哪些pod matchLabels: # Labels匹配规则 app: nginx-pod matchExpressions: # Expressions匹配规则 - {key: app, operator: In, values: [nginx-pod ]} template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.17.1 ports: - containerPort: 80
3.5.Job控制器资源清单文件
apiVersion: batch/v1 # 版本号kind: Job # 类型metadata: # 元数据 name: # 名称 namespace: # 所属命名空间 labels : # 标签 controller: jobspec: # 详情描述 completions: 1 # 指定job成功运行需要Pods的次数,默认值:1 parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量,默认值:1 activeDeadlineSeconds: 30 # 指定job可运行的时间期限,超过时间还未结束,系统将会尝试进行终止。 backoffLimit: 6 # 指定job失败后进行重试的次数,默认是6 manualSelector: true # 是否可以使用selector选择器选择pod,默认是false selector: # 选择器,通过它指定该控制器管理哪些pod matchLabels: # Labels匹配规则 app: counter-pod matchExpressions: # Expressions[匹配规则 - {key: app, operator: In, values: [ counter-pod]} template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本 metadata: labels: app: counter-pod spec: restartPolicy: Never # 重启策略只能设置为Never或者OnFailure containers: - name: counter image: busybox: 1.30 command: [ "bin/sh" , "-c" , "for i in 9 8 7 654 3 2 1; do echo $i;sleep 2;done" ]
3.6.CronJob资源清单文件
apiVersion: batch/v1beta1 # 版本号kind: CronJob # 类型metadata: # 元数据name: # 名称namespace: # 所属命名空间labels: # 标签 controller: cronjobspec: # 属性schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行concurrencyPolicy: # 并发执行策略,用于定义前一次作业运行尚未完成时是否运行下一次的作业failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数,默认为1successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数,默认为3startingDeadlineSeconds: # 启动作业错误的超时时长jobTemplate: # job控制器模板,用于为cronjob控制器生成job对象,下面其实就是job的定义 metadata: spec: completions: 1 parallelism: 1 activeDeadlineSeconds: 30 backoffLimit: 6 manualSelector: true selector: matchLabels: app: counter-pod matchExpressions: # 规则 - { key: app, operator: In, values: [counter-pod ] } template: metadata: labels: app: counter-pod spec: restartPolicy: Never containers: - name: counter image: busybox: 1.30 command: [ "bin/sh" , "-c" , " for i in 98 7 654 3 2 1; do echo $i;sleep 2 ;done" ]
3.7.StatefulSet资源清单文件
apiVersion: apps/v1 # api版本kind: StatefulSet # 资源类型metadata: # 定义元数据 name: remote-storage # 资源名称 namespace: kube-system # 所在的namespacespec: # 定义属性 selector: # 定义标签选择器,关联pod的标签 matchLabels: app: remote serviceName: "remote-storage" # 定义serviceName,这个serviceName将会成为主机名 replicas: 1 # 副本数 template: # pod模板信息 metadata: labels: app: remote spec: containers: - name: remote-storage image: remote_storage_adapter:v2 ports: - containerPort: 9201 name: remote
4.服务发现资源
4.1.service资源清单文件
kind: Service # 资源类型apiVersion: v1 # 资源版本metadata: # 元数据 name: service # 资源名称 namespace: dev # 所在的命名空间spec: # 属性 selector: # 标签选择器,用于确定当前service代理哪些pod app: nginx # pod的标签 type: # Service类型, 指定service的访问方式 clusterIP: # 虚拟服务的ip地址,即service地址 sessionAffinity: # session亲和性,支持ClientIP、 None两个选项 ports: # 端口信息 protocol: TCP port: 3017 # service端口 targetPort: 5003 # pod端口 nodePort: 31122 # 映射的主机端口
4.2.ingress资源清单文件
apiVersion: extensions/v1beta1kind: Ingressmetadata: name: ingress-https namespace: devspec: ingressClassName: <string> # 定义使用哪种类型的ingress controllers tls: # 定义域名绑定证书配置,只有通过https访问的方式才需要配置 - hosts: # 定义程序的域名列表 - nginx.jiangxl.com - tomcat.jiangxl.com secretName: tls-secret # 关联对应证书的secret资源 rules: # 定义ingress规则,用于关联对应的service资源 - host: nginx.jiangxl.com # 应用域名 http: # http方式 paths: # 定义要访问的路径 - path: / # 定义访问路径 backend: # 关联对应的service资源 serviceName: nginx-service # 对应的service名称 servicePort: 80 # 对应的service端口
5.数据存储资源
5.1.EmptyDir资源清单文件
apiVersion: v1kind: Podmetadata: name: volume-emptydir namespace: devspec: containers: # 定义容器列表 - name: nginx # 容器的名称 image: nginx:1.17.1 # 容器使用的镜像版本 ports: # 定义端口号 - containerPort: 80 volumeMounts: # 定义volume挂载信息,将logs-volume挂载到容器的/var/log/nginx路径 - name: logs-volume # volume的名称 mountPath: /var/log/nginx # 挂载到容器的指定路径 - name: busybox image: busybox:1.30 command: ["/bin/sh","-c","tail -f /logs/access.log"] # busybox初始命令,动态读取volume挂载路径下的文件内容 volumeMounts: # 将logs-volume挂载到容器的/logs路径 - name: logs-volume mountPath: /logs volumes: # 定义volume信息 - name: logs-volume # volume名称 emptyDir: {} # 使用的volume类型为emptydir,{}不可省略
5.2.HostPath资源清单文件
[root@k8s-master ~/k8s_1.19_yaml]\# vim volume-hostpath.yamlapiVersion: v1kind: Podmetadata: name: volume-hostpath namespace: devspec: containers: - name: nginx image: nginx:1.17.1 ports: - containerPort: 80 volumeMounts: - name: logs-volume mountPath: /var/log/nginx - name: busybox image: busybox:1.30 command: ["/bin/sh","-c","tail -f /logs/access.log"] volumeMounts: # 定义挂载那些volume卷 - name: logs-volume # volume名称 mountPath: /logs # 挂载到容器的哪个路径 volumes: - name: logs-volume hostPath: # 指定volume类型为hostPath path: /root/logs # 指定node节点上的路径,为容器提供挂载点 type: DirectoryOrCreate # 针对路径做得类型,DirectoryOrCreate表示当路径不存在时则创建
5.3.NFS类型的资源清单文件
apiVersion: v1kind: Podmetadata: name: volume-nfs namespace: devspec: containers: - name: nginx image: nginx:1.17.1 ports: - containerPort: 80 volumeMounts: - name: logs-volume mountPath: /var/log/nginx - name: busybox image: busybox:1.30 command: ["/bin/sh","-c","tail -f /logs/access.log"] volumeMounts: - name: logs-volume mountPath: /logs volumes: # 定义存储卷 - name: logs-volume # 指定存储卷的名称 nfs: # 类型为nfs server: 192.168.81.210 # nfs服务器地址 path: /data/k8s_data # nfs提供的共享路径
5.4.PV资源清单文件
apiVersion: v1kind: PersistentVolumemetadata: name: pv1spec: nfs: # 存储类型,不同的存储类型配置都不相同,nfs则填写nfs capacity: # 存储能力,目前只支持存储空间的设置 storage: 2Gi # 具体的存储大小 accessModes: # 访问模式 storageClassName: # 存储类别 persistentVolumeReclaimPolicy: # 回收策略
5.5.PVC资源清单文件
apiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc namespace: devspec: accessModes: # 访问模式 selector: # 采用标签选择具体的pv storageClassName: # 存储类别 resources: # 请求空间 requests: storage: 5Gi # 具体的请求大小
6.配置资源
6.1.configmap资源清单文件
apiVersion: v1kind: ConfigMapmetadata: name: configmap namespace: devdata: # configmap配置文件里面,不再有spec,而是data filename1: | # 文件和内容的关系相当于一个键值对,filename表示文件的名称 |必须要有,固定写法 neirong1 # 具体的内容,所有内容都要和filename保持至少2个空格的对齐 neirong2 filename2: | # configmap可以同时定义多个文件的内容,接着往下写即可,一般还是一个cm定义一个配置文件,因为pod挂载是以目录进行挂载的,除非两个文件都在一个路径 xxxxxxxx
6.2.secret资源清单文件
apiVersion: v1kind: Secret # 资源类型为Secretmetadata: name: admin-secret namespace: devtype: Opaque # 类型为Opaque,Opaque主要存储base64加密后的密码文件data: # 定义数据 username: YWRtaW4= # username为文件名称,YWRtaW4=为文件内容 password: MTIzNDU2
7.RBAC访问授权资源
7.1.Role资源清单文件
# Role只能对命名空间内的资源进行授权,需要指定namespace
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址kind: Role # 控制器类型metadata: # 元数据 name: authorization-role # 资源名称 namespace: dev # 资源所在命名空间rules: # 定义角色- apiGroups: [""] # 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作 resources: ["pods"] # 支持的资源对象列表,对那些资源进行操作 verbs: ["get","watch","list"] # 允许对资源对象的操作权限
7.2.ClusterRole资源清单文件
# ClusterRole可以对集群内所有namespace下的资源进行授权,跨namespace、非资源对象都可以进行授权
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址kind: CLusterRole # 控制器类型metadata: # 元数据 name: authorization-clusterrole # 资源名称rules: # 定义角色- apiGroups: [""] # 支持的api组列表,""空字符串表示核心API群,写什么api就对什么api进行操作 resources: ["pods"] # 支持的资源对象列表,对那些资源进行操作 verbs: ["get","watch","list"] # 允许对资源对象的操作权限
7.3.RoleBinding资源清单文件
# RoleBinding可以将subjects定义的用户绑定在同一namespace中的role角色上,仅仅只能是同一namespace种的role
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址kind: RoleBinding # 控制器类型metadata: # 元数据 name: authorization-rolebinding # 控制器名称 namespace: dev # 所在的namespacesubjects: # 关联用户信息- kind: User # 用户的类型,可以是user、group、serviceaccount name: jiangxl # 对应的用户名称 apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io namespace: dev # 用户能控制的namespaceroleRef: # 关联角色信息 kind: Role # 类型为角色 name: authorization-role # 对应的role名称 apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对dev命名空间下pod资源get、list、watch权限
7.4.CLusterRoleBinding资源清单文件
# ClusterRoleBinding可以在整个集群级别和所有namespace中,将特定的subject与ClusterRoleBinding进行绑定授予权限,这样一来这个角色就拥有就集群级别资源的操作权限
apiVersion: rbac.authorization.k8s.io/v1beta1 # 资源api地址kind: RoleBinding # 控制器类型metadata: # 元数据 name: authorization-rolebinding # 控制器名称subjects: # 关联用户信息- kind: User # 用户的类型,可以是user、group、serviceaccount name: jiangxl # 对应的用户名称 apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.ioroleRef: # 关联角色信息 kind: ClusterRole # 类型为集群角色 name: authorization-clusterrole # 对应的role名称 apiGroup: rbac.authorization.k8s.io # api组,持有引用主题的api组,默认为rbac.authorization.k8s.io
# 整个连起来的意思为用户jiangxl与authorization-role角色进行绑定,持有对集群级别以及所有命名空间下pod资源get、list、watch权限
8. LimitRange/ResourceQuota资源限制
名称空间级别资源,创建该资源时需要指定命名空间,如:kubectl apply -f </PATH/TO/YOUR_YAML_FILE> --namespace=<YOUR_NAMESPACE>
8.1 LimitRange资源清单文件
# LimitRange用于限制命令空间中单个pod的资源使用情况,对象是个体
apiVersion: v1kind: LimitRangemetadata: name: mem-limit-rangespec: limits: - default: memory: 512Mi # 默认为命名空间中pod所分配的limits.memory内存 cpu: 1 # 默认为命名空间中pod所分配的limits.cpu大小 defaultRequest: memory: 256Mi # 默认为命名空间中pod所分配的requests.memory内存 cpu: 0.5 # 默认为命名空间中pod所分配的limits.cpu大小 max: # 最大资源限制 memory: 1Gi cpu: "1000m" min: # 最小资源限制 memory: 1000Mi cpu: "500m" type: Container
# 更新limitrange,不会影响之前的pod
8.2 ResourceQuota资源清单文件
# ResourceQuota用于限制整个工作空间的资源使用情况,对象是整个命名空间
apiVersion: v1kind: ResourceQuotametadata: name: mem-cpu-demospec: hard: # 在指定命名空间下,限制每个容器必须有内存请求和限制,以及cpu请求和限制大小,并且所有cpu请求总和不能够超过2cpu,其他以此类推 requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi # 以下是对api对象资源进行的配额,按需分配,以下仅做演示 persistentvolumeclaims: "1" services.loadbalancers: "2" services.nodeports: "0" replicationcontrollers: "1" resourcequotas: "1" pods: "10" secrets: "2" configmaps: "2"
9. 综合示例
sample1:
---apiVersion: v1kind: Servicemetadata: labels: app: test-yaml name: test-yaml namespace: freeswitchspec: ports: - name: container-1-web-1 port: 8080 protocol: TCP targetPort: 8080 selector: app: test-yaml sessionAffinity: None type: ClusterIP---apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: creationTimestamp: null name: test-yamlspec: rules: - host: test.com http: paths: - backend: serviceName: test-yaml servicePort: 8080 path: /---apiVersion: apps/v1kind: Deploymentmetadata: labels: app: test-yaml name: test-yaml namespace: freeswitchspec: replicas: 3 selector: matchLabels: app: test-yaml strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: annotations: info: test for yaml labels: app: test-yaml spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - test-yaml topologyKey: kubernetes.io/hostname weight: 100 containers: - env: - name: TZ value: Asia/Shanghai - name: LANG value: C.UTF-8 image: nginx imagePullPolicy: Always lifecycle: {} livenessProbe: failureThreshold: 2 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 8080 timeoutSeconds: 2 name: test-yaml ports: - containerPort: 8080 name: web protocol: TCP readinessProbe: failureThreshold: 2 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 8080 timeoutSeconds: 2 resources: limits: cpu: 195m memory: 375Mi requests: cpu: 10m memory: 10Mi securityContext: allowPrivilegeEscalation: false capabilities: {} privileged: false procMount: Default readOnlyRootFilesystem: false runAsNonRoot: false volumeMounts: - mountPath: /usr/share/zoneinfo/Asia/Shanghai name: tz-config - mountPath: /etc/localtime name: tz-config - mountPath: /etc/timezone name: timezone dnsPolicy: ClusterFirst hostAliases: - hostnames: - www.baidu.com ip: 114.114.114.114 imagePullSecrets: - name: myregistrykey - name: myregistrykey2 restartPolicy: Always securityContext: {} volumes: - hostPath: path: /usr/share/zoneinfo/Asia/Shanghai type: "" name: tz-config - hostPath: path: /etc/timezone type: "" name: timezone
此文章基于该博客进行修改和增删: https://blog.csdn.net/weixin_44953658/article/details/116161926