【k8s】四、资源及资源清单

目录

前言

K8S中的资源

集群资源分类

namespace级别资源

工作负载型资源(workload)

服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)

配置与存储型资源

特殊型的存储卷

集群级资源

元数据型资源

资源清单

常用字段解释说明

尝试编写Pod模板

创建第一个Pod

总结

写在后面


前言

K8S中的资源

K8S中所有的内容都抽象为资源,资源实例化(被运行、被调用)之后,叫做对象

集群资源分类

  1. namespace级资源
  2. 集群级资源
  3. 元数据型资源

namespace级别资源

工作负载型资源(workload)

  • Pod
  • ReplicationController(在v1.11版本被废弃)
  • ReplicaSet
  • Deployment
  • Job
  • CronJob

服务发现及负载均衡型资源(ServiceDiscovery LoadBalance)

  • Service
  • Ingress

配置与存储型资源

  • Volume(存储卷)
  • CSI(容器存储接口,可以扩展各种各样的第三方存储卷)

特殊型的存储卷

  • ConfigMap(当配置中心来使用的资源类型)
  • Secret(保存敏感数据)
  • DownwardAPI(把外部环境中的信息输出给容器)

集群级资源

  • namespace
  • Node
  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding

元数据型资源

  • HPA
  • PodTemplate
  • LimitRange

资源清单

常用字段解释说明

以下表格是对一些常用字段的解释,并不用去死记硬背的。知道有这些字段就好了,具体用的时候去查。

参数名

字段类型

说明

是否必须

version

String

这里指定是K8S API的版本,目前基本上是v1,可以通过kubectl api-versions命令查询

kind

String

yaml文件定义的资源类型和角色,比如:Pod、Deployment、ReplicaSet、Service

metadata

Object

元数据对象,固定值就写metadata

metadata.name

String

元数据对象的名字,由我们自定义,比如命名Pod的名字,Service的名字

metadata.namespace

String

元数据对象的命名空间,由我们自定义。非必填,默认为default

spec

Object

详细定义对象,固定值就写spec

spec.containers[]

list

spec对象的容器列表定义

spec.containers[].name

String

容器名字

spec.containers[].image

String

容器所使用的镜像

spec.containers[].imagePullPolicy

String

定义镜像拉取策略,有Always、Never、IfNotPresent三个值

  • Always:意思是每次都尝试重新拉取镜像。(默认值是Always)

  • Never:表示仅使用本地镜像。

  • IfNotPresent:如果本地有镜像,就使用本地镜像,本地没有就拉取在线镜像。

spec.containers[].args[]

List

指定容器启动命令参数,因为是数组可以指定多个

spec.containers[].command

list

容器启动时执行命令,如果没有指定,则使用容器中的民老公

spec.containers[].workingDir

String

指定容器工作目录

spec.containers[].volumeMounts[]

List

指定容器内部的存储卷配置

spec.containers[].volumeMounts[].name

String

指定可以被容器挂载的存储卷的名称

spec.containers[].volumeMounts[].mountPath

String

指定可以被容器挂在的存储卷的路径

spec.containers[].volumeMounts[].readOnly

String

设置存储卷路径的读写模式,true或者false

默认为读写模式

spec.containers[].ports[]

List

指定容器需要用到的端口列表

spec.containers[].ports[].name

String

指定端口名

spec.containers[].ports[].containerPort

String

指定容器需要监听的端口号

spec.containers[].ports[].hostPort

String

指定容器所在主机需要监听的端口号,默认跟上面的containerPort相同,注意设置了hostPort,同一台主机无法启动该容器的相同副本(因为主机端口号不能相同,这样会冲突)

spec.containers[].ports[].protocol

String

指定端口协议,支持TCP和UDP。默认值为TCP

spec.containers[].env[]

List

容器运行前需要设置的环境变量列表

spec.containers[].env[].name

String

环境变量的名称

spec.containers[].env[].value

String

环境变量的值

spec.containers[].resources

Object

指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)

spec.containers[].resources.limits

Object

指定容器运行时资源的运行上限

spec.containers[].resources.limits.cpu

String

指定CPU的限制,单位为core数,将用于docker run --cou-shares参数

spec.containers[].resources.limits.memory

String

指定MEM内存的限制,单位为MiB、GiB

spec.containers[].resources.requests

Object

指定容器启动和调度时的限制设置

spec.containers[].resources.requests.cpu

String

CPU请求,单位为core数,容器启动时初始化可用数量

spec.containers[].resources.requests.memory

String

内存请i去,单位为MiB、GiB,容器启动时初始化可用数量

spec.restartPolicy

String

定义Pod重启策略,可选值为Always、OnFailure、Never,默认值为Always

  • Always:Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启Pod

  • OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器。如果容器正常结束(退出码为0),则kubelet将不会重启它。

  • Never:Pod终止后,kubelet将退出码报告给Master,不会重启该Pod

spec.nodeSelector

Object

定义Node的Label过滤标签,以key-value格式指定

spec.imagePullSecrets

Object

定义PUll镜像时使用secret名称,以name:secretkey格式指定

spec.hostNetwork

Bollean

是否使用主机网络模式,默认值为false。设置为true表示使用宿主机网络,不适用docker网桥。同时设置了true将无法在同一台宿主机上启动第二个副本。

如果非要记住资源清单里的字段,你也可以先记住一些必填的字段。但是,一些字段会随着k8s的通过命令kubectl explain就可以查看资源清单

尝试编写Pod模板

可以通过kubectl explain pod查看编写pod的资源清单所需的字段。

 想知道pod资源清单的spec字段下有哪些参数,就执行下面的语句

kubectl explain pod.spec

k8s里对于资源清单的每个参数都做了比较详细的描述。

因此我们可以编写出属于我们自己的第一个pod资源文件try-pod.yaml

# try-pod.yaml
# author: 攻城狮白玉
apiVersion: v1
kind: Pod
metadata:
  name: baiyu-pod
  namespace: baiyu-learn-k8s
  labels:
    app: baiyu-app
    version: v1
spec:
  containers:
  - name: app
    image: busybox:1.32
    command: ["/bin/sh","-c","echo 'this is app' && sleep 3600"]
    imagePullPolicy: IfNotPresent
  - name: test
    image: busybox:1.32
    command: ["/bin/sh","-c","echo 'this is test' && sleep 3600"]
    imagePullPolicy: IfNotPresent

上面的yaml资源清单脚本是在命名空间为baiyu-learn-k8s下,创建一个名为baiyu-pod的Pod,里面包含两个启动busybox镜像的容器,一个名为app,一个名为test。如下图所示

pod是k8s中资源的最小单位。一个pod里面可以包含多个容器,从本次实验的资源清单大家就可以发现。

busybox是一个集成了三百多个最常用Linux命令和工具的软件。包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。人称Linux界的瑞士军刀。

创建第一个Pod

首先创建baiyu-learn-k8s的命名空间,如果已经创建过命名空间。则无需重复本步骤

kubectl create ns baiyu-learn-k8s

 创建Pod

kubectl create -f try-pod.yaml -n baiyu-learn-k8s

查看节点状态

kubectl get pod baiyu-pod -n baiyu-learn-k8s -w

命令里的-w参数是动态查看pod的状态,起到一个类似于watch命令的效果

查看pod节点详细信息

kubectl describe pod baiyu-pod  -n baiyu-learn-k8s

查看pod节点以及IP

每个pod都有一个唯一的IP。Pod中的容器

kubectl get pod baiyu-pod -n baiyu-learn-k8s -o wide

查看Pod节点下所有容器的名字

查看baiyu-pod这个节点下的test容器的日志

kubectl logs baiyu-pod -c test  -n baiyu-learn-k8s

因为我们在容器启动的时候执行了一句echo语句,输出的是this is test。各位同学可以对照会资源清单文件。

进入test容器执行命令

kubectl exec -it baiyu-pod -n  baiyu-learn-k8s -c test /bin/sh

这里就跟各位在使用docker进入容器时的效果一样的。

删除Pod

kubectl delete pod baiyu-pod -n baiyu-learn-k8s

总结

至此,我们一起创建了属于我们自己编写的第一个Pod,通过本篇文章,同学们应该对于k8s中的资源清单有一定的了解。对于一些概念性的东西,我会尽快整理出一些通俗的文章来帮助大家理解。

写在后面

如果觉得有用的话,麻烦一键三连支持一下攻城狮白玉,并把本文分享给更多的小伙伴。你的简单支持,我的无限创作动力

猜你喜欢

转载自blog.csdn.net/zhh763984017/article/details/126990896