k8s-Pod常用编排内容

root
233
文章
0
评论
2021年8月10日23:57:12 评论 6115字阅读20分23秒

k8s-Pod常用编排内容

[root@xianchaomaster1 ~]# vim pod-tomcat.yaml
apiVersion: v1  #api版本
kind: Pod       #创建的资源
metadata:    
  name: tomcat-test  #Pod的名字
  namespace: default   #Pod所在的名称空间
  labels:
    app:  tomcat     #Pod具有的标签
spec:
  containers:
  - name:  tomcat-java   #Pod里容器的名字
    ports:
   - containerPort: 8080  #容器暴露的端口
    image: xianchao/tomcat-8.5-jre8:v1  #容器使用的镜像
    imagePullPolicy: IfNotPresent    #镜像拉取策略

快速创建k8s。yaml的技巧

[root@master01 ~]# kubectl create deploy nginx --image=nginx --dry-run -o yaml > nginx-ds.yaml

快速查看k8s。yaml的技巧

[root@master01 test]# kubectl get pod -n kube-system etcd-master01 -o yaml

# Pod资源清单编写技巧

k8s编排文件5大要素:

[APIVersion定义了对象,代表了一个版本。]
apiVersion: v1
[Kind是字符串类型的值,代表了要创建的资源。服务器可以从客户端提交的请求推断出这个资源。]
kind:    <string>
[metadata是对象,定义元数据属性信息的]
metadata:
[spec制定了定义Pod的规格,里面包含容器的信息]
spec:
[status表示状态,这个不可以修改,定义pod的时候也不需要定义这个字段]
status 

 

Pod常用编排内容

格式有点问题,能看懂就行

apiVersion: v1
kind:    <string>
metadata:
  clusterName:   <string>             #对象所属群集的名称。这是用来区分不同集群中具有相同名称和命名空间的资源。此字段现在未设置在任何位置,apiserver将忽略它,如果设置了就使用设置的值
  labels:        <map[string]string>  #创建的资源具有的标签
    xx: xx
  name:  <string>                     #创建的pod资源的名字,不同名称空间下pod名称可以相同
  namespace:     <string>             #创建的资源所属的名称空间
spec:
  activeDeadlineSeconds: <integer>     #表示Pod可以运行的最长时间,达到设置的值后,Pod会自动停止。
  affinity:      <Object>              #定义亲和性的
    nodeAffinity:      <Object>        #node亲和性
      preferredDuringSchedulingIgnoredDuringExecution:       <[]Object> #表示有节点尽量满足这个位置定义的亲和性,这不是一个必须的件,软亲和性
      requiredDuringSchedulingIgnoredDuringExecution:        <Object> #表示必须有节点满足这个位置定义的亲和性,这是个硬性条件,硬和性
        nodeSelectorTerms:                   #node 标签
        - matchExpressions:      <[]Object>  #匹配表达式的
          - key: hwf       <string> -required- #这个值是关联pod标签label里定义好的key
            operator: in  #做等值选则还是不等值选则(in 等于,not in 不等于)
            values:     <[]string>          #给定值
            - 123                           #这个值是关联pod标签label里定义好的key对于的值
        - matchFields:   <[]Object>    #匹配字段的
          - key:        <string> -required-
            values:     <[]string>
    podAffinity:       <Object>      #pod亲和性
      preferredDuringSchedulingIgnoredDuringExecution:   <[]Object> #软亲和性

      requiredDuringSchedulingIgnoredDuringExecution:    <[]Object> #硬亲和性
      - labelSelector:   <Object>    #我们要判断pod跟别的pod亲和,和你需要关联的pod使用同一个标签构成亲和性
          matchExpressions:      <[]Object> #匹配表达式的
          - key: hwf       <string> -required- #这个值是关联pod标签label里定义好的key
            operator: in  #做等值选则还是不等值选则(in 等于,not in 不等于)
            values:     <[]string>          #这个值是关联pod标签label里定义好的key对于的值
            - 123
            - xx
          matchFields:   <[]Object>    #匹配字段的
          - key:        <string> -required-
            values:     <[]string>
        namespaces:      <[]string>  #labelSelector需要选则一组资源,那么这组资源是在哪个名称空间中呢,通过namespace指定,如果不指定namespaces,那么就是当前创建pod的名称空间
        topologyKey:     <string> -required-  #位置拓扑的键,这个是必须字段,查看node的标签

    podAntiAffinity:   <Object>      #node反亲和性
      preferredDuringSchedulingIgnoredDuringExecution:   <[]Object> #软亲和性

      requiredDuringSchedulingIgnoredDuringExecution:    <[]Object> #硬亲和性
      - labelSelector:   <Object>    #我们要判断pod跟别的pod亲和,和你需要关联的pod使用同一个标签构成亲和性
          matchExpressions:      <[]Object> #匹配表达式的
          - key: hwf       <string> -required- #这个值是关联pod标签label里定义好的key
            operator: in  #做等值选则还是不等值选则(in 等于,not in 不等于)
            values:     <[]string>          #这个值是关联pod标签label里定义好的key对于的值
            - 123
            - xx
          matchFields:   <[]Object>    #匹配字段的
          - key:        <string> -required-
            values:     <[]string>
        namespaces:      <[]string>  #labelSelector需要选则一组资源,那么这组资源是在哪个名称空间中呢,通过namespace指定,如果不指定namespaces,那么就是当前创建pod的名称空间
        topologyKey:     <string> -required-  #位置拓扑的键,这个是必须字段,node名称/node标签

  tolerations:                         #Pod容忍度
  - key: "node-type"                   #key值
    operator: "Equal"                  #等值关系,等于
    value: "production"                #node-type/production:NoSchedule
    effect: "NoExecute"                #策略
    tolerationSeconds: 3600            #表示可以多存活3600秒,一般不用

  initContainers:                      #初始化容器,可以有多个
  - name: init-myservice               #初始化容器名称
    image: busybox:1.28                #镜像名称,container的image一般一致
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb                    #初始化容器名称
    image: busybox:1.28                #镜像名称,container的image一般一致
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]


  containers:    <[]Object> -required- #containers是对象列表,用来定义容器的,是必须字段。对象列表 表示下面有很多对象,对象列表下面的内容用 - 连接
  - name:                              #容器名称 
    env:                               #环境变量
    -  xx: xx
    command:     <[]string>            #命令
    image:       <string>              #镜像
    imagePullPolicy: [Always | Never | IfNotPresent]      #镜像拉取策略,pod是要调度到node节点的,那pod启动需要镜像,可以根据这个字段设置镜像拉取策略,支持如下三种:
      #Always:不管本地是否存在镜像,都要重新拉取镜像
      #Never: 从不拉取镜像
      #IfNotPresent:如果本地存在,使用本地的镜像,本地不存在,从官方拉取镜像
    args: [string]                     #容器的启动命令参数列表
    workingDir: string                 #容器的工作目录
    restartPolicy: [Always | Never | OnFailure]  #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
    nodeSelector: obeject              #设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
    hostNetwork: false                 #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
    imagePullSecrets:                  #Pull镜像时使用的secret名称,以key:secretkey格式指定
    - name: string

    ports:       <[]Object>            #port是端口,属于对象列表
    - containePort:                    #containerPort是必须字段, pod中的容器需要暴露的端口
      hostIP:    <string>              #将容器中的服务暴露到宿主机的端口上时,可以指定绑定的宿主机 IP。
      hostPort:  <integer>             #容器中的服务在宿主机上映射的端口
      name:      <string>              #端口的名字
      protocol:  <string>              #协议tcp,udp

    resources:                         #资源限额
      limits:                          #资源限制,最多可用的cpu和内存
        memory: 500Mi
        cpu: 1
    requests:                        #最少需要多少资源才可以运行Pod
        memory: 250Mi
        cpu: 500m

    startupProbe:                      #启动探测
      httpGet:
        host: 127.0.0.1
        path: /health
        port: 2381
        scheme: HTTP
      initialDelaySeconds: 10          #容器启动后等待多少秒后开始探测
      periodSeconds: 10
      failureThreshold: 10
     exec:
     tcpSocket:

    readinessProbe:                     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      httpGet:                         #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        host: 127.0.0.1
        path: /health
        port: 2381
        scheme: HTTP
        HttpHeaders:
        - name: string
          value: string
      initialDelaySeconds: 10          #容器启动后等待多少秒后开始探测
      periodSeconds: 10                #对容器检查的时间间隔,单位秒,默认10秒一次
      successThreshold: 1              #这个值必须是1,存活探测中的值,连续探测几次成功,才认为成功
      timeoutSeconds: 15               #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
      failureThreshold: 8              #连续探测失败的次数,达到次数认为探测失败      
     exec:
     tcpSocket:



    livenessProbe:                     #对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
      httpGet:                         #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
        host: 127.0.0.1
        path: /health
        port: 2381
        scheme: HTTP
        HttpHeaders:
        - name: string
          value: string
      initialDelaySeconds: 10          #容器启动后等待多少秒后开始探测
      periodSeconds: 10                #对容器检查的时间间隔,单位秒,默认10秒一次
      successThreshold: 1              #这个值必须是1,存活探测中的值,连续探测几次成功,才认为成功
      timeoutSeconds: 15               #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
      failureThreshold: 8              #连续探测失败的次数,达到次数认为探测失败      
     exec:
     tcpSocket:

    volumeMounts:                       #挂载到容器内部的存储卷配置
    - mountPath: /var/lib/etcd          #存储卷在容器内mount的绝对路径,应少于512字符
      name: etcd-data                   #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
    - mountPath: /etc/kubernetes/pki/etcd
      name: etcd-certs

    volumes:                           #在该pod上定义共享存储卷列表
    - name: string                     #共享存储卷名称 (volumes类型有很多种)
      emptyDir: {}                     #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
      hostPath: string                 #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
        path: string                   #Pod所在宿主机的目录,将被用于同期中mount的目录
      secret:                          #类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:                      #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
        name: string
        items:
        - key: string
          path: string

 

下载信息 pod.yml k8s 1.21.3
下载地址
继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年8月10日23:57:12
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
k8s-Service Account Kubernetes

k8s-Service Account

k8s-Service Account的授权管理 Service Account也是一种账号,是给运行在Pod里的进程提供了必要的身份证明。需要在Pod定义中指明引用的Service Account,...
k8s-RBAC Kubernetes

k8s-RBAC

k8s-RBAC认证授权策略 RBAC介绍 在Kubernetes中,所有资源对象都是通过API进行操作,他们保存在etcd里。而对etcd的操作我们需要通过访问 kube-apiserver 来实现...
k8s-Secret Kubernetes

k8s-Secret

配置管理中心Secret Secret是什么? Configmap一般是用来存放明文数据的,如配置文件,对于一些敏感数据,如密码、私钥等数据时,要用secret类型 Secret解决了密码、token...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: