zoukankan      html  css  js  c++  java
  • 四,k8s集群资源清单定义入门

    [TOC]

    资源对象

    1. workload:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob
    2. 服务发现及均衡:Service, Ingress
    3. 配置与存储:Volume,CSI,ConfigMap,Secret,DownwardAPI
    4. 集群级资源:Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
    5. 元数据型资源:HPA,PodTemplate,LimitRange

    创建资源的方法

    apiserver:仅接受JSON格式的资源定义;

    使用yaml格式提供配置清单,apiserver可自动将其转为JSON格式,而后再进行执行;

    大部分资源的配置清单:

    1. apiVersion: group/version

    $ kubectl api-versions

    1. kind 资源类别(pod,service,deployment等)
    2. metadata: 元数据

    name 同一个namespace下name必须是唯一的 namespace 命名空间 labels 标签,每一种资源都可以有标签 annotations 资源注解

    3.spec: 用户期望的目标状态,disired state

    4.status: 当前状态,应无限向spec状态接近,current state,本字段由kubernetes集群维护;用户不能自定义;

    清单帮助命令

    可通过 kubectl explain 来查看清单中所需要的帮助

    如:

    [root@master ~]# kubectl explain pod
    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/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/api-conventions.md#types-kinds
    
       metadata <Object>( 元数据 )
         Standard object's metadata. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
    
       spec <Object>  (用户定义的所希望的目标状态==最重要的字段)
         Specification of the desired behavior of the pod. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
    
       status   <Object>(k8s集群当前所处状态,应无限向目标状态靠拢,只读的,不受人为控制)
         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/api-conventions.md#spec-and-status
    

    这里是查看pod第一层,如想看 metadata 中的信息,直接使用 pod.metadata 继续查看

    如:

    [root@master ~]# kubectl explain pod.metadata
    KIND:     Pod
    VERSION:  v1
    
    RESOURCE: metadata <Object>
    
    DESCRIPTION:
         Standard object's metadata. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
    
         ObjectMeta is metadata that all persisted resources must have, which
         includes all objects users must create.
    
    FIELDS:
       annotations  <map[string]string>
         Annotations is an unstructured key value map stored with a resource that
         may be set by external tools to store and retrieve arbitrary metadata. They
         are not queryable and should be preserved when modifying objects. More
         info: http://kubernetes.io/docs/user-guide/annotations
    
       clusterName  <string>
         The name of the cluster which the object belongs to. This is used to
         distinguish resources with same name and namespace in different clusters.
         This field is not set anywhere right now and apiserver is going to ignore
         it if set in create or update request.
    
       creationTimestamp    <string>
         CreationTimestamp is a timestamp representing the server time when this
         object was created. It is not guaranteed to be set in happens-before order
         across separate operations. Clients may not set this value. It is
         represented in RFC3339 form and is in UTC. Populated by the system.
         Read-only. Null for lists. More info:
         https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
         .......
         .......
         # 太多就不复制了
    

    以此类推都是如此;

    • kubectl explain pod.spec
    • kubectl explain pod.status

    分类: 在每个后们都会有 一个 相对应的字段,

    类型 解释 举例
    string 字符串 字符串
    []string 字符串列表 需要填写字符串类型的数组
    map[string]string 视图字符串 需要有众多k: v类型的数据
    Object 对象 说明有需要嵌套的下一级字段
    []Object 对象列表 说明可以有多个需要嵌套的下一级字段
    - required - 必填项 当出现这个的时候,此项参数必须要填写

    创建测试清单

    创建一个pod-demo.yaml的文件,内容如下:

    • 注意事项
      • 注意大小写
      • 列表需要加“ - ”,一般同级使用
    [root@master manifests]# cat pod-demo.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
      - name: busybox
        image: busybox:latest
        command: 
        - "/bin/sh"
        - "-c"
        - "sleep 3600"
    

    使用kubectl create 命令来对文件进行加载操作

    [root@master manifests]# kubectl create -f pod-demo.yaml 
    pod/pod-demo created
    [root@master manifests]# kubectl get pods -o wide
    NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE                NOMINATED NODE   READINESS GATES
    pod-demo                        2/2     Running   0          20s     10.244.3.8   node01.kubernetes   <none>           <none>
    

    可以看到已经正常启动了。

    如要删除此pod,则使用kubectl delete 来对pod-demo.yaml进行操作也可以;

    [root@master manifests]# kubectl delete -f pod-demo.yaml 
    pod "pod-demo" deleted
    

    资源的三种创建方式

    对于kubernetes中的资源,有三种创建方式

    1、第一种是上一篇文章中的,使用命令创建

    2、第二种是本文章中演示的,配置清单式用法。又称命令式资源清单

    3、第三种是声明式资源清单,第三种是类似于第二种的清单方式。

    使用声明式是可以确保资源尽可能的向我们声明的状态改变,而且我们随时能改变我们的声明,并随时应用。

  • 相关阅读:
    服务器启动jar包详解
    linux环境安装Go环境
    crt修改默认颜色
    java调用python脚本没有返回值问题
    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of typeavailable
    markdown个人使用总结
    windows配置免密登录linux
    idea远程debug项目
    dubbo图形化控制台
    java.lang.IllegalArgumentException: Could not resolve placeholder
  • 原文地址:https://www.cnblogs.com/peng-zone/p/11575468.html
Copyright © 2011-2022 走看看