zoukankan      html  css  js  c++  java
  • (二)k8s编写资源清单

    1 Kubernetes 中的资源

    1.1什么是资源

    Kubernetes 中所有的内容都抽象为资源,资源实例化(被调用、被执行了)之后,叫做对象。

    大致地可以总结为:对象描述了什么容器化应用在运行(以及在哪个 Node 上);可以被应用使用的资源;关于应用如何表现的策略,比如重启策略、升级策略,以及容错策略;

    Kubernetes 对象是 "目标性记录": 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在。通过创建对象,可以有效地告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的,这就是 Kubernetes 集群的 期望状态。

    1.2 Kubernetes 中有哪些常用资源对象?

    学习k8s就是学习资源使用,pod是重中之重,其它的资源都为围绕pod,为pod提供服务

    依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别:

    • 工作负载型资源(wordload):运行应用程序,对外提供服务

              Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob

    • 服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)

              Service、Ingress…

    • 配置与存储型资源

              Volume(存储卷)、CSI(容器存储接口,可以扩展各种各样的第三方存储卷)

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

    • 集群级资源

              Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding

    • 元数据型资源

              HPA、PodTemplate、LimitRange

    1.3创建资源的方式

    1)直接通过命令行创建

    #创建控制器

    kubectl create deploy ngx-deps --image=nginx

    kubectl get all #查看所有资源

    kubectl get deploy

    kubectl get deploy ngx-deps -o yaml

    kubectl get pods #查看pod

    kubectl get pods -o wide #显示详细信息

    kubectl delete pod/ngx-deps-d554574bd-zf8d7 删除pod

    kubectl expose deployment ngx --type=NodePort --target-port=80 --port=80

    #为控制器创建service

    kubectl create service clusterip ngx-deps --tcp=80:80 --type=NodePort

    kubectl get svc #查看service

    kubectl get svc/ngx-deps -o yaml #查看service详细信息

    kubectl describe svc/ngx-deps #查看描述信息

    kubectl delete svc/ngx-deps #删除service

    2)通过 yaml 资源清单文件创建 (推荐)

    2 资源清单

    2.1 资源清单主要字段

    获取对象的JSON格式的配置清单可以通过 kubectl get TYPE/NAME -o yaml 命令来获取

    apiVersion: group/version  指明api资源属于哪个群组和版本,同一个组可以有多个版本

        $ kubectl api-versions 获取k8s版本上所有的apiVersion版本信息

        $ kubectl explain pod 获取资源的apiVersion版本信息

    kind: 资源类别,标记创建的资源类型,k8s主要支持以下资源类别

        Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob

    metadata:元数据,主要提供以下字段

        name:同一类别下的name是唯一的

        namespace:对应的对象属于哪个名称空间

        labels:标签,每一个资源都可以有标签,标签是一种键值数据

        annotations:资源注解

    spec: 定义目标资源的期望状态(disired state),资源对象中最重要的字段

    status: 显示资源的当前状态(current state),本字段由kubernetes进行维护

    2.2查看资源清单的帮助

    如果需要了解某一级字段表示的对象之下的二级对象字段时,只需要指定其二级字段的对象名称即可,三级四级字段对象等的查看方式依次类推。例如查看Pod资源的Spec对象支持嵌套使用的二级字段:

    [root@master ~]# kubectl explain pods #查看pod资源字段下的一级字段

    [root@master ~]# kubectl explain pods.metadata #二级字段

    [root@master ~]# kubectl explain pods.spec #二级字段

    [root@master ~]# kubectl explain pods.spec.containers # 三级字段

    [root@master ~]# kubectl explain pods
    
    KIND: Pod
    
    VERSION: v1
    
     
    
    DESCRIPTION:
    
    Pod is a collection of containers that can run on a host. This resource is
    
    created by clients and scheduled onto hosts.
    
     
    
    FIELDS:
    
    apiVersion <string> #该字段类型是个字符串
    
    APIVersion defines the versioned schema of this representation of an
    
    object. Servers should convert recognized schemas to the latest internal
    
    value, and may reject unrecognized values. More info:
    
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
    
     
    
    kind <string>
    
    Kind is a string value representing the REST resource this object
    
    represents. Servers may infer this from the endpoint the client submits
    
    requests to. Cannot be updated. In CamelCase. More info:
    
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
    
     
    
    metadata <Object> #该字段类型是个对象,意味着它下面还有很多二级字段
    
    Standard object's metadata. More info:
    
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
    
     
    
    spec <Object>
    
    Specification of the desired behavior of the pod. More info:
    
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-stat
    
     
    
    status <Object>
    
    Most recently observed status of the pod. This data may not be up to date.
    
    Populated by the system. Read-only. More info:
    
    https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-stat
    
     
    View Code

    3编写配置清单

    3.1创建Pod资源清单

    mkdir manfests

    cd manfests/

    vim pod-nginx.yaml #新建一个文件,注意区分大小写

    apiVersion: v1

    kind: Pod

    metadata:

        name: pod-demo

    spec:

        #一个pod下,运行两个容器

        containers:

         - name: myapp

         image: ikubernetes/myapp:v1

         - name: tomcat

         image: tomcat

    kubectl create -f pod-nginx.yaml

    kubectl get pod pod-demo    

    kubectl describe pod pod-demo

    kubectl logs pod-demo tomcat

    kubectl exec -it pod-demo -c tomcat -- /bin/sh #进入容器

    kubectl delete pods pod-demo

    #以上是一个自主式pod示例清单,不被控制器管理

    3.2 Pod资源spec的containers字段解析

    [root@master ~]# kubectl explain pods.spec.containers

    name <string> 指定容器名称

    image <string> 指定容器所需镜像仓库及镜像名,例如ikubernetes/myapp:v1

    imagePullPolicy <string> (可取以下三个值Always,Never,IfNotpresent)

         Always:镜像标签为"latest"时,总是去指定的仓库中获取镜像

         Never:禁止去仓库中下载镜像,即仅使用本地镜像

         IfNotpresent:如果本地没有该镜像,则去镜像仓库中下载镜像

    ports <[]Object> 值是一个列表,由一到多个端口对象组成。例如:(名称(可后期调用) 端口号 协议 暴露在的地址上) 暴露端口只是提供额外信息的,不能限制系统是否真的暴露

          containerPort <integer> 指定暴露的容器端口

          name <string> 当前端口的名称

          hostIP <string> 主机端口要绑定的主机IP

          hostPort <integer> 主机端口,它将接收到请求通过NAT转发至containerPort字段指定的端口

          protocol <string> 端口的协议,默认是TCP

    args <[]string> 传递参数给command 相当于docker中的CMD

    command <[]string> 相当于docker中的ENTRYPOINT

    1、如果既没有指定args,也没有指定command,那么会默认使用dockfile的cmd和entrypoint。 

    2、如果指定了command,但没有提供args,那么就直接运行command。 

    3、如果指定了args,但是没指定command,那么将使用镜像中的entrypoint命令,把我们写的args当做参数传递给镜像中的entrypoint。

    4、如果既用来command,又用了args,那么镜像中的cmd和entrypoint将被忽略,而使用K8s提供的command with args。

  • 相关阅读:
    Mysql初始化root密码和允许远程访问
    windows下nodejs express安装及入门网站,视频资料,开源项目介绍
    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
    python3.4学习笔记(二十五) Python 调用mysql redis实例代码
    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
    python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
    python3.4学习笔记(二十) python strip()函数 去空格 函数的用法
    python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
  • 原文地址:https://www.cnblogs.com/chuangcc/p/14335327.html
Copyright © 2011-2022 走看看