• (七)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容器的名称必须唯一;与任何其他容器共享同一个名称,会在验证时抛出错误

                 

                

  • 相关阅读:
    H3C 配置vlan及vlan间路由
    H3C 端口安全技术
    H3C 备份系统应用程序与文件
    H3C 类似于Linux编辑命令
    H3C telnet
    H3C基本命令
    Python里的目录
    Python 模块
    Python 函数
    JS 100内与7相关的数
  • 原文地址:https://www.cnblogs.com/jichuang/p/14399877.html
Copyright © 2020-2023  润新知