目录

一、k8s中的资源

1.什么是资源

2.k8s中存在哪些资源

(1)名称空间级别:

(2)集群级资源:

(3)元数据型资源:

二、资源清单

1.什么是资源清单

2.资源清单的格式

(1)资源清单格式

apiVersion版本实验:

(2)资源清单的常用命令

1)获取 apiversion 版本信息

2)获取资源的 apiVersion 版本信息

3)获取字段设置帮助文档

4)字段配置格式

5)通过定义清单文件创建 Pod

创建资源清单实验

三、常用字段解释说明


一、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资源扩容与容缩)、PodTemplatepod模板)、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

三、常用字段解释说明

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐