Kubernetes-资源清单
在 k8s 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod ,这样的 yaml 文件我们一般称为资源清单。资源实例化成对象,描绘中间这个过程,这个文件都叫资源清单。资源清单不一定都是yaml模式,也可以是json格式
目录
一、k8s中的资源
什么是资源清单
我们跟kubernetes集群进行交互的时候,我们需要给K8S集群传输数据,传输信息,K8S才能按照我们的要求来运行,这个传输的文件,基本上都会通过资源清单进行传递。资源清单是我们跟集群进行有效交流的一个机制或一个格式。
1.什么是资源
K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象
资源就是我们可以操作的一个又一个的类型,一个又一个特殊的内容的集合。
也就是说tomcat这个pod创建出来时,我们给他传递参数,他在创建的过程中,这个过程就叫实例化。过程执行以后,产生的pod,这个pod就叫对象。
一个资源可以抽象出多个对象,但是一个对象只能符合一个资源的特性。
2.k8s中存在哪些资源
(1)名称空间级别:
工作负载型资源: Pod、ReplicaSet、Deployment ...
服务发现及负载均衡型资源: Service、Ingress...
#service是四层负载均衡,ingress是七层负载均衡
配置与存储型资源:Volume(卷)、CSI(容器存储接口) ...
特殊类型的存储卷:ConfigMap(存配置文件的)、Secre(存密钥类型的) ...
#隔离单位,与linux内核中的空间含义不一样,别搞混了,只是k8s集群中的一个逻辑的分类而已
#名称空间只是一个逻辑性的隔离,并不是真正的隔离,跟docker里的和内核空间的是两回事
(2)集群级资源:
Namespace(名称空间)、Node(节点)、ClusterRole(集群角色)、ClusterRoleBinding(集群角色绑定)
#集群级别的资源,是不需要指定级别空间的
(3)元数据型资源:
HPA(资源扩容与容缩)、PodTemplate(pod模板)、LimitRange(资源限制)
#不能独立存在,必须要有依附
#HPA资源扩容与容缩,可以根据当前pod资源使用量情况,进行资源扩容与缩容
# PodTemplate:pod模板,必须依附在控制器里
# LimitRange:资源限制,必须依附在对应的pod上
二、资源清单
1.什么是资源清单
在 k8s 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod ,这样的 yaml 文件我们一般称为资源清单。
资源实例化成对象,描绘中间这个过程,这个文件都叫资源清单。
资源清单不一定都是yaml模式,也可以是json格式。
kubectl get pod
#获取pod资源对象
kubectl get pod pod名 -o yaml
#以yaml格式输出pod的信息
kubectl get pod pod名 -o json
#以json格式输出pod信息
2.资源清单的格式
(1)资源清单格式
apiVersion: group/apiversion
# 如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions
# 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )
kind:
#资源类别,标记创建的资源类型,k8s主要支持以下资源类别:
#Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、Cronjob
metadata:
#资源元数据
name
#指定当前对象的名称,其所属的名称空间的同一类型中必须唯一
namespace
#指定当前对象隶属的名称空间,默认值为default
lables
#设定用于标识当前对象的标签,键值数据,常被用做挑选条件
annotations
#非标识键值数据,用来作为挑选条件,用于labels的补充。
主要目的是方便用户阅读查找
spec:
# 期望的状态(disired state)官方文件:单节点运行121个pod是一个比较固定的值。
status:
# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义。
<!--配置清单主要有五个一级字段,其中status用户不能定义,由k8s自身维护-->
apiVersion版本实验:
kubectl api-versions
#查看组和版本,有些组名相同但是版本号不同,
#最下方有个单独的v1版,这是默认的核心组v1版。
#所谓核心组,可以理解为项目刚初始的时候,就加入公司创建那些基本功能的小组。
#不同的k8s的版本,组和版本还不一样。
kubectl explain pod
#查看创建pod容器的版本信息。
#查询到pod容器的版本是v1版,在apiVersion:v1这么写即可
kubectl explain deployment
#查询deployment的版本
kubectl get pod pod名 -o yaml
#以yaml文件输出pod的信息
kubectl explain pod.spec.containers.image
#不知道image怎么写的时候,查看帮助信息
kubectl explain pod.spec.containers
#查看containers下面应该写哪些东西
(2)资源清单的常用命令
1)获取 apiversion 版本信息
[root@k8s-master01 ~]# kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
......(以下省略)
2)获取资源的 apiVersion 版本信息
[root@k8s-master01 ~]# kubectl explain pod
KIND: Pod
VERSION: v1
.....(以下省略)
[root@k8s-master01 ~]# kubectl explain Ingress
KIND: Ingress
VERSION: extensions/v1beta1
3)获取字段设置帮助文档
[root@k8s-master01 ~]# 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>
........
........
4)字段配置格式
apiVersion <string>
#表示字符串类型
metadata <Object>
#表示需要嵌套多层字段
labels <map[string]string>
#表示由k:v组成的映射
finalizers <[]string>
#表示字串列表
ownerReferences <[]Object>
#表示对象列表
hostPID <boolean>
#布尔类型
priority <integer>
#整型
name <string> -required-
#如果类型后面接 -required-,表示为必填字段
5)通过定义清单文件创建 Pod
apiVersion: v1 #核心组v1版本
kind: Pod #资源类别是Pod类别
metadata: #元数据
name: pod-test #元数据当前Pod的名字叫pod-test
namespace: default #放在default名称空间里,如果这一行不写,默认也是default名称空间
labels: #labels标签
app: myapp #labels标签为app:myapp
spec: #期望
containers: #容器组,pause不用指定,会自动创建
- name: nginx #第一个容器名为myapp-1
image: nginx:latest #使用的镜像为wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent #镜像拉取策略为优先使用本地镜像。
- name: busybox-1 #第二个容器名为busybox-1
image: busybox:1.35.0 #使用的镜像为busybox:1.38.0,busybox是一个网络服务的工具包
imagePullPolicy: IfNotPresent
command: #command替换的不是cmd,替换的是inpoint。arts替换的是镜像里的cmd命令
- "/bin/sh"
- "-c"
- "sleep 3600" #使busybox容器可以持久化运行3600秒。
#这样就相当于在一个pod中封装了两个mainC,一个mainC叫nginx,一个mainC叫busybox-1。
创建资源清单实验
vim pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-test
namespace: default
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
- name: busybox-1
image: busybox:1.35.0
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
kubectl create -f pod-test.yaml
#运行资源清单,让资源实例化成对象
kubectl get pod -o wide
#查看pod的信息,以及部署的节点信息
#状态有两个需要就绪,两个已经就绪,当前状态正在运行,重启次数0,创建时间2分29秒
#如果重启次数1,2,3,4,5一直增加,说明当前的pod不稳定,原因有多种,例如:资源不够用;触发oome了;配置文件写错,运行运行着崩了。
#也有可能刚开始不稳定,后来就稳定了,因为刚开始初始化不成功,后来成功了。
#重启代表着内部的容器在重建。
kubectl describe pod pod-test
#查看pod的详情
kubectl get events
#获取整个集群的events事件信息
kubectl get pod --show-labels
#查看标签
kubectl get pod -w
#实时变化内容的展示
#执行完之后,卡了,只有当前pod信息发生改变的时候,才会把改变的内容打印出来
根据kubectl get pod -o wide命令查看pod运行的节点,登录节点。
docker ps -a | grep pod-test
#可以看到有三个容器,nginx,busybox和pause
三、常用字段解释说明
更多推荐
所有评论(0)