四,k8s集群资源清单定义入门
资源对象
- workload:Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, Cronjob
- 服务发现及均衡:Service, Ingress
- 配置与存储:Volume,CSI,ConfigMap,Secret,DownwardAPI
- 集群级资源:Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
- 元数据型资源:HPA,PodTemplate,LimitRange
创建资源的方法
apiserver:仅接受JSON格式的资源定义;
使用yaml格式提供配置清单,apiserver可自动将其转为JSON格式,而后再进行执行;
大部分资源的配置清单:
- apiVersion: group/version
$ kubectl api-versions
- kind 资源类别(pod,service,deployment等)
- 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、第三种是声明式资源清单,第三种是类似于第二种的清单方式。
使用声明式是可以确保资源尽可能的向我们声明的状态改变,而且我们随时能改变我们的声明,并随时应用。