Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >K8S资源配置清单

K8S资源配置清单

作者头像
后场技术
发布于 2021-07-23 05:28:12
发布于 2021-07-23 05:28:12
1.7K00
代码可运行
举报
文章被收录于专栏:后场技术后场技术
运行总次数:0
代码可运行

在K8S中,K8S将所有的操作对象都当做资源来进行管理,K8S为我们提供了一个叫APIserver的组件,这个组件提供了一系列的RESTful风格的接口,通过这些接口就可以实现对资源的增删改查等操作。

而所谓的资源配置清单就是我们用来创建和管理资源的配置文件。在了解资源配置清单前,我们需要先了解一下K8S中有哪些资源。

一、资源类型

1、工作负载型资源

这些资源就是K8S中承载具体的工作的一些资源,常见的类型有:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjon,...

2、服务发现及均衡型资源

这种类型的资源主要和服务相关,负责服务发现,调度等,常见的类型有:Service,Ingress,...

3、配置与存储相关资源:

这类型的资源主要和存储相关,常见类型有:Volume,CSI,ConfigMap,Secret,DownwardAPI,...

4、集群级资源

这类型资源主要提供集群的管理相关的功能,常见类型有:Namespace,Node,Role,ClusteRole,RoleBinding,ClusterRoleBinding

5、元数据型资源

这类型的资源主要提供元数据相关的功能,常见类型有:HPA,PodTemplate,LimitRange, ....

二、创建资源配置清单

K8S中的APIServer在创建资源时采用JSON格式的数据,我们可以通过使用yaml格式的配置文件来提供配置,然后K8S内部自动帮我们转换为JSON格式,然后再提交。

资源配置清单关键字, 在一个配置清单中,有五个一级字段及多个下级字段组成,我们先来看下这几个一级字段:

1. apiVersion:[group]/version

APIServer使用分组来管理api,在创建资源配置清单的时候要指定此api属于哪个组,属于core组的资源,在定义时可以省略组名,使用kubectl api-server命令可以来获取api版本。

2、kind:资源类型

kind字段用来指定要管理的资源类型,资源类型如上所述。

3、metadata:元数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
metadata字段用来指定部分元数据,其有多个二级字段:

            name:资源名称,在同一个类别中这个名称必须是唯一的

            namespace:名称空间,资源所属的名称空间

            labels:标签,每个标签都是一对键值对,一个资源可以拥有多个标签,一个标签也可以对应多个资源。标签可以在资源创建时指定,也可以在资源创建之后来管理标签。

            标签定义格式:key=value,键名和键值最长长度为63个字符,其中:

                key:由字母、数字、_、-.组成,必须以字母开头

                value:可以为空,只能以字母或数字开头或结尾,中间可以使用_、-.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pods --show-labels    # 查看pods资源时显示标签
kubectl get pods -l app           # 查看拥有app标签的pods资源
kubectl label pod pod-demo release=canary              # 给名为pod-demo的pod资源新增一个标签release=canary
kubectl label pod pod-demo release=stable --overwrite  # 修改pod-demo的release标签release=stable,不加--overwrite会报错

在K8S中,通过标签选择器来筛选资源,其中,标签除了可以指定具体的键值外,还有如下类型:

等值关系:=,==,!=,集合关系:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
KEY in (value1,value2,...)KEY键值在某些集合中
KEY notin (value1,value2,...)KEY键值不在某些集合中
KEY: 存在键KEY
!KEY: 不存在键KEY

annotations:注解,其与label不同的地方在于,它不能用于挑选资源对象,仅用于为对象提供元数据,其键和值没有长度限制

4、spec:规则字段

spec字段用于定义用户期望的状态,在这个字段下有多个二级字段,用于定义容器相关期望状态等,接下来我们将介绍部分字段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spec
  containers:指定容器相关配置,此字段是必填的,部分二级字段如下:
  - name:容器名称
    image:启动容器的镜像
    imagePullPolicy: 拉取镜像策略,其有三个值可选:Always | Never | IfNotPresent
  Always: 表示无论本地是否有镜像文件,每次创建资源时都去镜像仓库中拉取镜像
  Never: 表示从不自动从镜像仓库中拉取镜像,启动时需要手动拉取镜像到本地
  IfNotPresent: 表示如果本地有镜像时就使用本地镜像,本地没有时就自动去拉取
  当不指定此配置时,如果镜像标签是 :latest 的时候,默认采用Always的方式拉取镜像,否则默认采用IfNotPresent方式拉取镜像。
    ports:容器暴露的端口信息。在此处暴露端口可为系统提供有关容器使用的网络连接的信息,但仅仅是参考信息。如果在此处没有指定端口,也并不能保证容器没有暴露端口。任何监听容器中“0.0.0.0”地址的端口都可以被访问到。其下级还有如下字段:
    - name:暴露端口的名字
      containerPort:必填字段,暴露的容器端口号
      protocol:协议栈,默认TCP协议,可选UDP,TCP,SCTP
    command:容器运行的命令,用来指定替换容器默认的命令,command相当于Dockerfile中的Entrypoint,如果不指定该参数,那么就会采用镜像文件中的ENTRYPOINT指令。
    args:entrypoint指令的参数列表,如果不指定这个参数,则使用镜像中的CMD指令
      ** command和args参数分别对应镜像中的ENTRYPOINTCMD指令,此时就出现如下几种情况:
      a、command和args都未指定:运行镜像中的ENTRYPOINTCMD指令
      b、command指定而args未指定:只运行command指令,镜像中的ENTRYPOINTCMD指令都会被忽略
      c、command未指定而args指定:运行镜像中的ENTRYPOINT指令且将args当做参数传给ENTRYPOINT指令且镜像中的CMD指令被忽略
      d、command和args都指定:运行command指令,并把args当做参数传递给command,镜像中的ENTRYPOINTCMD指令都会被忽略
    livenessProbe:POD容器存活状态监测,检测探针有三种,ExecAction、TCPSockerAction、HttpGetAction
      exec:命令类型探针
      command:执行的探测命令,命令运行路径是容器内系统的/,且命令并不会运行在shell中,所以,需要我们手动指定运行的shell,当命令返回值是0时表示状态正常,反之表示状态异常
      httpGet:http请求型探针
        host:请求的主机地址,默认是POD IP
        httpHeaders:HTTP请求头
        path:请求的URL
        port:请求的端口,必填项
        scheme:请求协议,默认是http
      tcpSocket:TCP socket型探针
        host:请求的主机地址,默认是POD IP
        port:请求的端口号,端口范围是1-65535
        failureThreshold:连续错误次数,默认3次,即默认连续3次检测错误才表示探测结果为异常
        successThreshold:连续成功次数,默认1次,即当出现失败后,出现连续1次检测成功就认为探测结果是正常
        periodSeconds:探测时间间隔,默认10秒
        timeoutSeconds:探测超时时间,默认1秒
        initialDelaySeconds:起始探测时间间隔,表示pod启动后,该间隔之后才开始进行探测
    readinessProbe:主容器内进程状态监测,其可用的检测探针类型和livenessProbe是一致的
        此检测和service调度有很强的关联性,
        当新调度一个pod时,如果没有指定就绪性检测,此时一旦pod创建就会立即被注册到service的后端
        如果此时pod内的程序尚无法对外提供服务,就会造成部分请求失败
        所以,我们应该让一个pod在注册到service中区之前,已经通过了可用性检测,保证可以对外提供服务
    lifecycle:生命周期钩子方法
      postStart:容器启动后执行的命令,可用检测探针和livenessProbe是一致的
      preStop:容器启动前执行的命令
  restartPolicy:重启策略,Always, OnFailure,Never. Default to Always.
  nodeSelector:node选择器,可以根据node的标签选择POD运行在某些指定的node上
  nodeName:使pod运行在指定nodeName的节点之上

5、status:状态字段

status字段描述了当前状态信息,本字段由k8s集群维护

资源配置清单有很多字段,无法一一介绍,K8S也为我们提供了查看这些字段的命令:kubectl explain 资源类别[.字段名],此命令可以为我们提供当前资源类别的定义方式,如果需要知道具体的某一个字段如何定义,可以使用kubectl explain资源类别.字段名,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s7-22 ~]# kubectl explain pod.metadata.clusterName
KIND:     Pod
VERSION:  v1

FIELD:    clusterName <string>

DESCRIPTION:
     The name of the cluster which the object belongs to. This is used to
     distinguish resources with same name and namespace in different clusters.
     This field is not set anywhere right now and apiserver is going to ignore
     it if set in create or update request.

三、编写一个自定义配置清单

有了上述的介绍,我们来自己编写一个自定义配置清单,然后根据这个配置清单启动一个pod资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s7-200 manifests]# pwd
/data/k8s-yaml/manifests
[root@k8s7-200 manifests]# cat pod-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo                               # pod名称
  namespace: default                           # pod资源所属的namespace
  labels:                                      # 标签
    app: myapp
    tier: frontend
spec:
  containers:                                  # 定义容器
  - name: myapp                                # 启动第一个容器,名为myapp
    image: harbor.od.com/public/myapp:v1       # 启动容器需要使用的镜像文件
  - name: busybox                              # 启动第二个容器为busybox
    image: harbor.od.com/public/busybox:latest # 第二个容器的镜像
    command:                                   # 自定义在第二个容器中执行的命令
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

然后使用这个资源配置清单来创建资源,我们的资源配置清单可以放在服务器本地,也可以放在资源站上,创建的时候直接指定这个资源配置清单的URL即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s7-22 ~]# kubectl create -f http://k8s-yaml.od.com/manifests/pod-demo.yaml
pod/pod-demo created

此时,就根据这个资源配置清单去创建资源了,如果创建资源时报错,那么我们可以使用如下信息来查看具体的报错信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@k8s7-22 ~]# kubectl describe pod pod-demo
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后场技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
docker、k8s 面试总结
Docker 是基于容器技术实现的,容器技术最开始是基于 Linux Container(简称 LXC)技术实现的,通过内核提供的 Namespace 和 Cgroup 机制,实现了对应用程序的隔离以及物理资源的分配。
lincoln
2022/03/02
1.6K0
万字警告 - k8s入门,理应Pod先行!
大家好,欢迎来到小菜个人 solo 学堂。在这里,知识免费,不吝吸收!关注免费,不吝动手!死鬼~看完记得给我来个三连哦!
蔡不菜丶
2021/04/29
8410
万字警告 - k8s入门,理应Pod先行!
Kubernetes 资源清单(文章有点长)
Kubernetes 中所有的内容都抽象为资源,资源实例化(被调用、被执行了)之后,叫做对象。
Jared.Tan
2020/06/19
7600
Kubernetes 之资源清单
在 Kubernetes 系统中,Kubernetes 对象是持久化的实体,Kubernetes 使用这些实体去表示整个集群的状态。特别地,它们描述了如下信息:
民工哥
2021/04/21
7490
k8s的YAML与集群访问
查看服务详情 kubectl describe svc test-k8s ,可以发现 Endpoints 是各个 Pod 的 IP,也就是他会把流量转发到这些节点。
爽朗地狮子
2022/09/22
6720
k8s 资源管理之 Pod
Kubernetes 的本质就是一个集群系统,用户可以在集群中部署各种服务。所谓的部署服务,其实就是在 Kubernetes 集群中运行一个个的容器,并将指定的程序跑在容器中。 Kubernetes 的最小管理单元是 Pod 而不是容器,所以只能将容器放在 Pod 中,而 Kubernetes 一般也不会直接管理 Pod ,而是通过 Pod 控制器来管理 Pod 的。 Pod 提供服务之后,就需要考虑如何访问 Pod 中的服务,Kubernetes 提供了 Service 资源实现这个功能。 当然,如果 Pod 中程序的数据需要持久化,Kubernetes 还提供了各种存储系统。
看、未来
2022/08/11
5750
k8s 资源管理之 Pod
kubernetes面试题汇总详解
答:Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。 2、 K8s架构的组成是什么?
zhangdd
2020/05/15
13K0
Kubernetes 学习总结(3) M
APIserver符合RESTful风格,支持GET/PUT/DELETE/POST等各种操作。所以也支持kubectl通过一系列命令对各处资源进行管理控制。 常用的资源 1)、workLoad(工作负载型资源,运行APP,对外提供服务): Pod/ReplicaSet/Deployment/ StatefulSet/ DaemonSet/ Job/ Cronjob / 2)、service discovery and Load Balance(服务发现及均衡型资源):Service/ Ingress 3)、configuration and storage(配置与存储类型资源) :Volume,CSI(容器存储接口,扩展第三方的存储) ConfigMap,Secret(特殊的配置类型资源) Downward API(配置类型资源) 4)、集群级资源(配置在名称空间级别): namespace, node, role, clusterRole, roleBinding, clusterRoleBinding 5)、元数据类型资源:HPA、PodTemplate、limitRange(读取权限)
py3study
2020/01/06
4820
ASP.NET Core 借助 K8S 玩转容器编排
由于最近在学习微服务,所以就基于之前docker的基础上把玩一下k8s(Kubernetes),以了解基本概念和核心功能。
圣杰
2019/05/29
7580
ASP.NET Core 借助 K8S 玩转容器编排
4-Kubernetes入门基础之Pod介绍
前面简单的介绍了Kubernetes基础知识以及单节点和高可以用集群的搭建, 本章将从实操来介绍Kubernetes概念和术语以及控制器,便于各位读者进行学习;
全栈工程师修炼指南
2022/09/29
9780
4-Kubernetes入门基础之Pod介绍
K8s-工作负载Pod
定义: Pod是Kubernetes中最小的部署单元,是一个或多个紧密关联容器的组合。
用户9645905
2024/07/31
1080
K8s-工作负载Pod
k8s 知识总结
K8S(Kubernetes缩写)是容器编排引擎,用于实现自动化运维管理容器。 核心功能:
willsonchen
2024/01/22
5180
手动部署java项目到k8s中
但是组成这么一整套的资源比较大,不利于个人安装学习。所以本文就介绍在只有k8s集群的环境下部署java项目到容器环境中。
余生大大
2022/11/02
1.6K0
手动部署java项目到k8s中
04 . kubernetes资源清单YAML入门
通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船
iginkgo18
2020/09/27
1.7K0
k8s 实践经验(三):实操中学 k8s 五种资源(1)Pod
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
看、未来
2022/05/06
4260
k8s 实践经验(三):实操中学 k8s 五种资源(1)Pod
不背锅运维:耗时1周整理:分享K8S Pod知识点,带你一文打尽
下面来个小例子,设置自定义变量,使用env给pod里的容器设置环境变量,本例子中,设置了环境变量有SAVE_TIME、MAX_CONN、DNS_ADDR。
不背锅运维
2023/02/02
1.2K0
K8s 简单上手
上面的命令就是基于指定的 image,创建一个名为 webserver 的 pod。运行过后,用 kubectl get pods 能够看到当前 namespace 下的所有 pod 的信息
SimpleMaxR
2024/09/30
1630
再战 k8s(6):Pod Volume存储卷、健康检查
我们经常会说:容器和 Pod 是短暂的。 其含义是它们的生命周期可能很短,会被频繁地销毁和创建。容器销毁时,保存在容器内部文件系统中的数据都会被清除。
看、未来
2022/05/06
7340
再战 k8s(6):Pod Volume存储卷、健康检查
深入掌握K8S Pod
如果你使用过k8s的话,当然会了解pod的基本使用,但是为了更好的应用,你需要深入了解pod的配置、调度、升级和扩缩容等。本文将会更进一步的介绍pod。
oYabea
2020/09/07
1.4K0
k8s实践(9)--深入了解Pod
Pod是k8s系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod对象功能的,比如控制器对象是用来管控Pod对象的,Service或者Ingress资源对象是用来暴露Pod引用对象的,PersistentVolume资源对象是用来为Pod提供存储等等,k8s不会直接处理容器,而是Pod,Pod是由一个或者多个container组成的。
黄规速
2022/04/14
1.3K0
k8s实践(9)--深入了解Pod
相关推荐
docker、k8s 面试总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验