四,k8s集群资源清单定义入门

资源对象

  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、第三种是声明式资源清单,第三种是类似于第二种的清单方式。

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

猜你喜欢

转载自www.cnblogs.com/peng-zone/p/11575468.html