在 K8S 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod,这样的 yaml 文件我们一般称为资源清单

1 资源清单的格式

apiVersion: group/version  ## api资源属于的组和版本,同一个组可以有多个版本       
kind: 		##  标记创建的资源类型,
##  k8s主要支持以下资源类别:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob    
metadata:	## 元数据
        name:	 ## 对像名称
        namespace:	## 对象所属命名空间
        labels:    ##指定资源标签,标签是一种键值数据

spec: 	 ## 定义目标资源的期望状态
status   ## 显示资源的当前状态,应该与spec 一致

2 常用字段的解释

参数字段类型说明
versionStringK8S API 的版本,目前基本是v1,可以用 kubectl api-version 命令查询
kindString指的是 yaml 文件定义的资源类型和角色, 比如: Pod
metadataObject元数据对象,固定值写 metadata
metadata.nameString元数据对象的名字,这里由我们编写,比如命名Pod的名字
metadata.namespaceString元数据对象的命名空间,由我们自身定义
SpecObject详细定义对象,固定值写Spec
spec.containers[]list这里是Spec对象的容器列表定义,是个列表
spec.containers[].nameString定义容器的名字
spec.containers[].imageString定义要用到的镜像名称
spec.containers[].imagePullPolicyString定义镜像拉取策,有Always、Never、IfNotPresent 三个值可选。(1)Always:是每次都尝试重新拉取镜像; (2)Never:表示仅便用本地镜 ;(3)IfNOtPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像。; 默认值是Always
spec.containers[].command[]List指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令
spec.containers[].largs[]List指定容器启动命令参数,因为是数组可以指定多个
spec.containers[].worKingDirString指定容器工作目录
spec.containers[].volumeMounts[]List指容器内部的存卷配置
spec.containers[].volumeMounts[].nameString指可以被容器挂载的存储卷的名称
spec.containers[].volumeMounts[].mountPatnString指可以被容器挂载的存储卷路径
spec.containers[].volumeMounts[].readOnlyString设置存储卷路径的读写模式,ture或者false,默认为读写模式
spec.containers[].ports[]List指定容器需要用到的端囗列表
spec.containers[].ports[].nameString指定端口名称
spec.containers[].ports[].containerPortString指定容器需要监听的端囗号
spec.containers[].ports[].hostPortString指定容器所在主机需要监听的端囗号,默认跟上面containerPort相同,注意设置了 hostPort同一台主机无法启动该容器的相同副本(因为主机端囗号不能相同,这样会冲突)
spec.containers[].ports[].protocolString指定端囗协议,支持TCP和UDP,默认值为TCP
spec.containers[].env[]List指定容器运行前需设置的环境变量列表
spec.containers[].env[].nameString指定环境变量名称
spec.containers[].env[].valueString指定环境变量值
spec.containers[].resourcesObject指定资源限制和资源请求的值(这里开始就是设置容器的资源上限〕
spec.containers[].resources.limitsObject指定设置容器运行时资源的运行上限
spec.containers[].resources.limits.cpuString指定CPU的限制,单位为core数,将用于 docker run --cpu-shares参数
spec.containers[].resources.limits.memoryString指定MEM内存的限制,单位为MiB、GiB
spec.restartPolicyString定义Pod的重启策略,可选值为Always、OnFailure, 默认值为 Always。(1)Always: Pod 一旦终止运行,则无论容器是如何终止的,Kubelet服务都将重启它。(2)OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束〔退出码为0),则 kubelet将不会重启它。(3)Never:Pod终止后,kubelet将退出码报给Master,不会重该Pod
spec.nodeSelectorObject定义Node的Label过滤标签,以key:value格式指定
spec.imagePuIlSecretsObject定义pull镜像时便用secret名称,以name:secretkey格式指定
spec.hostNetworkBoolean定义是否使用主机网络模式,默认值为false。设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法在同一台宿主机上启动第二个副本

3 清单资源文件的使用

3.1 查看帮助文档

  • 查询api-versions命令:kubectl api-versions
  • 查询帮助文档:kubectl explain pod

在这里插入图片描述

  • 查询 pod.apiVersion的帮助文档:kubectl explain pod.apiVersion

在这里插入图片描述

  • 查询metadata的帮助文档: kubectl explain pod.metadata

在这里插入图片描述

  • 查询spec的帮助文档:kubectl explain pod.spec

在这里插入图片描述

  • 查询spec.containers的帮助文档:kubectl explain pod.spec.containers

在这里插入图片描述

3.2 用资源清单文件创建pod

kubectl apply:通过文件名或控制台输入,对资源进行配置

  • 编写资源清单文件:vim pod.yml
apiVersion: v1
kind: Pod  ## 类型
metadata:
  name: nginx
  namespace: default
spec:
  containers:
  - name: nginx  ## 容器的名字
    image: myapp:v1  ## 镜像
    imagePullPolicy: IfNotPresent  ## 镜像的拉取策略
  • 应用资源清单文件:kubectl apply -f pod.yml
  • 显示运行中的Pod、Service、Deployment以及ReplicaSet的关键信息:kubectl get all

在这里插入图片描述

  • 显示名为nginx的pod的详细信息:kubectl describe pod nginx

在这里插入图片描述

3.3 清单资源文件配置deployment

(1)查看deployment的帮助文档: kubectl explain deployment

在这里插入图片描述

  • 查看deployment.spec的帮助文档:kubectl explain deployment.spec

在这里插入图片描述

  • 查看deployment.spec.selector的帮助文档:kubectl explain deployment.spec.selector

在这里插入图片描述

  • 查看帮助文档:kubectl explain deployment.spec.template

在这里插入图片描述

  • 查看帮助文档:kubectl explain deployment.spec.template.metadata

在这里插入图片描述

  • 查看帮助文档:kubectl explain deployment.spec.template.spec

在这里插入图片描述

  • 查看帮助文档:kubectl explain deployment.spec.template.spec.containers

在这里插入图片描述
(2)编写资源清单文件:vim pod.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabelsz:
      run: nginx
  template:
    metadata:
      labels: 
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v1
        imagePullPolicy: IfNotPresent 
  • 将pod.yml中的配置应用到pod:kubectl apply -f pod.yml

在这里插入图片描述

  • 显示运行中的Pod、Service、Deployment以及ReplicaSet的关键信息:kubectl get all,Deployment控制器创建成功

在这里插入图片描述

  • 显示运行中名为nginx的Deployment的详细信息:kubectl describe deployments.apps nginx

在这里插入图片描述

  • 通过yaml文件删除对象:kubectl delete -f pod.yml

在这里插入图片描述

(3)副本数量的拉伸和更新:

  • 编辑文件:pod.yml

在这里插入图片描述

  • 将pod.yml中的配置应用到pod:kubectl apply -f pod.yml

在这里插入图片描述

  • 副本的数量成功拉伸

在这里插入图片描述

(3)通过查看yaml模板修改编写yml文件

kubectl create deployment nginx --image=myapp:v1 
kubectl get deployments.apps nginx1 -o yaml  ## -o yaml:输出为yaml格式

在这里插入图片描述

  • 编辑清单资源文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - name: nginx
        image: myapp:v2
        imagePullPolicy: IfNotPresent
      - name: busyboxplus
        image: busyboxplus
        imagePullPolicy: IfNotPresent
        stdin: true
        tty: true
  • 应用资源清单文件:kubectl apply -f pod.yml
  • 查看pod的信息:kubectl get pod

在这里插入图片描述

  • 查看控制器的信息:kubectl describe deployments.apps nginx

在这里插入图片描述

  • 进入容器的交互式界面:kubectl attach nginx-6df797d79b-59mwl -c busyboxplus -it

在这里插入图片描述

4 标签:增删该查

(1)什么是Label ?

Label是Kubernetes系列中另外一个核心概念。是一组绑定到K8s资源对象上的key/value对。同一个对象的labels属性的key必须唯一。label可以附加到各种资源对象上,如Node,Pod,Service,RC等。

通过给指定的资源对象捆绑一个或多个不用的label来实现多维度的资源分组管理功能,以便于灵活,方便地进行资源分配,调度,配置,部署等管理工作

(1)标签的增删该查

  • 查看标签:kubectl get node --show-labels

在这里插入图片描述

  • 打标签: kubectl label node server4 app=nginx
  • 查看标签: kubectl get node server4 --show-labels

在这里插入图片描述

  • 删除标签:kubectl label node server4 app-
  • 查看标签:kubectl get node server4 --show-labels

在这里插入图片描述
(2)pod的标签

  • 创建pod:kubectl run nginx --image=myapp:v1
  • 查看标签:kubectl get pod --show-labels
  • 过滤标签:kubectl get pod -l run

在这里插入图片描述

  • 打标签:kubectl label pod nginx version=v1
  • 查看标签:kubectl get pod nginx --show-labels

在这里插入图片描述

  • 更改标签:kubectl label pod nginx run=myapp --overwrite
  • 查看标签:kubectl get pod nginx --show-labels

在这里插入图片描述

Logo

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

更多推荐