(七)Kubernetes资源清单

  Kubernetes资源清单就相当于电视剧的剧本,里面定义好了每一步,k8s按照每一步去执行。

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

一、资源清单-资源类型

  1、k8s中的资源

    ① 集群资源分类:

      a、名称空间级别:仅在此名称空间生效

        工作负载型资源(workload):Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob(ReplicationController 在V1.11版本被废弃)

        服务发现及负载均衡型资源(ServiceDiscovery LoadBalance):Service、Ingress....

        配置与存储型资源:Volime(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)

        特殊类型的存储卷:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)

 

      b、集群级别:Namespace、Node、Role、ClusterRoleBinding

      c、元数据型:HPA、PodTemplate、LomitRange

  2、资源清单

     在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的Pod,这样的yaml文件我们一般称为资源清单

    

 

                 

 

     

 

     

 

       

 

           

  3、常用字段解释说明

     ① 必须存在的属性

      

     ② 主要对象

      

       

 

       

 

      ③ 额外的参数项

       

       可以用 kubectl explain pod 命令查看更多的配置讲解。

       执行yaml文件:kubectl apply -f pod.yaml

       查看Pod信息:

        kubectl describe pod myapp-pod

       查看pod中容器启动日志:

        kubectl log myapp-pod -c test

  4、容器生命周期

     

 

 

    ① Init C(Init容器)

      Pod能够具有多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的Init容器。

      Init 容器与普通容器非常像,除了一下两点:

        · Init 容器总是运行到成功完成为止

        · 每个Init 容器都必须在下一个Init 容器启动之前成功完成

      如果Pod的Init容器失败,Kubernates会不断地重启该Pod,直到Init容器成功为止。然而,如果Pod对应的restartPolicy为Never,它不会重新启动。

    ② Init 容器的作用

      因为Init容器具有与应用程序容器分离的单独镜像,所以它们的启动相关代码具有如下优势:

        · 它们可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的

        · 它们可以包含使用工具和定制化代码来安装,但是不能出现在应用程序镜像中。例如,创建镜像没必要FROM另一个镜像,只需要在安装过程中使用类似sed、awk、python或dig这样的工具。

        · 应用程序镜像可以分离出创建和部署的角色,而没有必要联合他们构建一个单独的镜像

        · Init容器使用Linux Namespace,所以相对应用程序容器来说具有不同的文件系统视图。因此,它们能够具有访问Secret的权限,而应用程序容器则不能。

        · 它们必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以Init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法,直到满足了一组先决条件。

    ③ Init 模板

       

    创建一个Pod:创建一个ini-pod.yaml文件,将上面的内容输入到这个脚本文件中,然年执行命令:kubectl create - f ini-pod.yaml

    查询Pod命令: kubectl get pod

    删除所有pod:

      kubectl delete deployment --all

           kubectl delete pod --all

    查询svc命令:kubectl get svc

    进入pod查看内部信息:kubectl describe pod

    ④ 创建svc脚本

      

 

      ⑤ InitC 特殊说明

       · 在Pod启动过程中,Init 容器会按顺序在网络和数据卷初始化之后启动。每个容器必须在下一个容器启动之前成功退出

               · 如果由于运行时或失败退出,将导致容器启动失败,它会根据Pod 的restartPolicy制定的策略进行重试。然而,如果Pod 的restartPolicy设置为Always,Init容器失败时会使用RestartPolicy策略

       · 在所有的Init容器没有成功之前,Pod将不会变成Ready状态。Init容器的端口将不会在Service中进行聚集。正在初始化中的Pod处于Pending状态,但应该会将Initializing状态设置为true

       ·如果Pod重启,所有Init容器必须重新执行

         · 对Init容器spec的修改被限制在容器image字段,修改其他字段都不会生效。更改Init容器的image 字段,等价于重启该Pod

         · Init容器具有应用容器的所有字段。除了readinessProbe,因为Init容器无法定义不同于完成(completion)的就绪(readiness)之外的其他状态。这会在验证过程中强制执行

        · 在Pod中的每个app和Init容器的名称必须唯一;与任何其他容器共享同一个名称,会在验证时抛出错误

             

 

            

 

posted on 2021-02-13 10:50  向往的生活  阅读(230)  评论(0编辑  收藏  举报

导航

页面底部