最权威的做网站的公司哪家好人民日报最新新闻
一、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: v1DESCRIPTION:Pod is a collection of containers that can run on a host. This resource iscreated 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-testnamespace: default #放在default名称空间里,如果这一行不写,默认也是default名称空间labels: #labels标签app: myapp #labels标签为app:myapp
spec: #期望containers: #容器组,pause不用指定,会自动创建- name: nginx #第一个容器名为myapp-1image: nginx:latest #使用的镜像为wangyanglinux/myapp:v1imagePullPolicy: IfNotPresent #镜像拉取策略为优先使用本地镜像。- name: busybox-1 #第二个容器名为busybox-1image: busybox:1.35.0 #使用的镜像为busybox:1.38.0,busybox是一个网络服务的工具包imagePullPolicy: IfNotPresentcommand: #command替换的不是cmd,替换的是inpoint。arts替换的是镜像里的cmd命令- "/bin/sh" - "-c"- "sleep 3600" #使busybox容器可以持久化运行3600秒。
#这样就相当于在一个pod中封装了两个mainC,一个mainC叫nginx,一个mainC叫busybox-1。
创建资源清单实验
vim pod-test.yamlapiVersion: v1
kind: Pod
metadata:name: pod-testnamespace: defaultlabels:app: nginx
spec:containers:- name: nginximage: nginx:latest- name: busybox-1image: busybox:1.35.0command:- "/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