ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

  • 虚拟化服务

    • Docker笔记

    • Kubernetes笔记

      • Kubernetes介绍
      • Kubernetes部署
      • K8S资源与标签
        • Kubernetes资源对象
          • 资源对象介绍
          • 资源对象分类
          • 资源名简写
          • 创建资源的方法
        • 资源配置清单
          • 配置清单介绍
          • 配置清单通用参数
          • 配置清单创建自主式Pod例子
          • 配置清单多资源定义
        • 资源标签
          • 资源标签介绍
          • 打标方式
          • 标签定义规范
          • 标签选择器
          • 资源内嵌字段定义标签选择器
        • 资源注解
          • 资源注解介绍
          • 定义方式
      • Pod资源详解
      • Kubectl命令
      • 控制器资源配置
      • Service资源配置
      • Ingress资源配置
      • configMap资源配置
      • Volume资源配置
      • Volume资源配置
    • Jenkins笔记

    • K3S笔记

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 虚拟化服务
  • Kubernetes笔记
Hoshinozora
2023-02-26
目录

K8S资源与标签

# Kubernetes资源对象

# 资源对象介绍

  • 资源实例化后就是对象,但一般不做区别,所以也可以说资源即是对象。在K8S中所有能被操作的东西都是资源,一切皆资源。

# 资源对象分类

我们一般可以将K8S资源划分为以下几类。

  • # 工作负载型资源
    • 用于实际工作的资源。
    • 如:Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、Cronjob。
  • # 服务发现及服务均衡资源
    • 如:Service、Ingress。
  • # 配置中心与存储卷资源
    • 如:Volume、CSI、ConfigMap、Secret。
  • # 集群级资源
    • 需要运行在集群节点上的资源。
    • 如:NameSpace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding。
  • # 元数据型资源
    • 用于提供或操作元数据的资源。
    • 如:HPA、PodTemplate、LimitRange。

# 资源名简写

某些资源名在kubectl命令中是可以简写的,例如:

全称 简写
pod po
service svc
replication controller rc
replica set rs
deployment deploy
ingress ing

# 创建资源的方法

我们需要通过APIServer来进行资源创建,而APIServer仅接收JSON格式的资源定义,除了直接调API接口创建,我们还可以通过以下方式进行创建。

  • 通过kubectl命令行直接创建资源。
    • kubectl会先将我们的参数转化为json格式,然后再提交给APIServer执行。
  • 通过kubectl命令提交yaml格式配置创建资源。
    • 用yaml格式提供配置清单,APIServer会自动将其转为json格式,而后再进行执行。

# 资源配置清单

# 配置清单介绍

  • 配置清单就是定义好要创建的资源的yaml文件,用于提交给APIServer进行资源创建,一个yaml文件中可以编写多个资源的配置。

# 配置清单通用参数

  • # apiVersion: [资源版本]
    • 资源版本即是**"API群组名/Version"**。
      • 如:apiVersion: node.k8s.io/v1、apiVersion: node.k8s.io/v1beta1
    • 没有组名则表示是核心组最根本的资源。
      • 如:apiVersion: v1
    • 版本分类 (尽量使用稳定版)
      • 带beta的是公测版:大部分稳定,但后续可能会修改
      • 带alpha的是内测版:不保证稳定
      • 以上都不带的是稳定版:基本不会更改,只会添加新的
  • # kind: [资源类别]
    • 资源类别用于表示要创建的资源的类别,需要注意区分大小写。
    • 如:kind: Deployment、kind: Service
  • # metadata
    • 用于定义资源实例化后的资源对象元数据。
    • name <string> - 指定资源名称,名称只能由'-'和'.'以及字母和数字组成。
    • namespace <string> - 指定资源所属的名称空间,默认为default。
    • labels <map[string]string> - 指定资源标签
    • annotations <map[string]string> - 指定资源注解
    • selfLink - 资源引用路径,无需配置由K8S自动生成,我们可通过本地打开它,来获取相关资源的信息
  • # spec
    • 用于定义资源对象的配置、特性、目标状态等。
  • # status (只读)
    • 用于显示资源对象的当前状态,K8S即是用于确保我们每一个资源定义完后,使当前状态无限向目标状态转移。
    • status字段由kubernetes集群维护,无法随意定义。

# 配置清单创建自主式Pod例子

  1. 创建资源配置清单文件。

    • vim pod-demo.yml
  2. 定义Pod资源。

apiVersion: v1
# 资源类别
kind: Pod
metadata:
  # 资源名
  name: pod-demo
  # 资源标签, 键值对格式
  labels:
    app: myapp
    version: demo
spec:
  # 指定容器参数,可定义多个容器,但一般只会定义一个容器
  containers:
  # 容器名1
  - name: myapp
  	# 容器镜像地址1
    image: ikubernetes/myapp:v1
  # 容器名2
  - name: busybox
    # 容器镜像地址2
    image: busybox:latest
    # 启动命令
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  1. 保存后使用kubectl命令提交创建即可。
    • kubectl create -f pod-demo.yml

# 配置清单多资源定义

  • 多个资源也可以定义在一个配置清单中,我们一般会将多个相关联的资源定义在一起。

  • 定义方法:配置清单中使用 "---" 将各资源隔开即可。

  • 例如:

appVersion: v1
kind: Service
pass
---
appVersion: v1
kind: Pod
pass
1
2
3
4
5
6
7

# 资源标签

# 资源标签介绍

  • 标签就是附加在对象之上的键值对,标签可以方便我们进行资源的管理,如增删改查等操作。

  • 同时在集群中,也被用于各资源之间关联关系的建立,比如:Service和Pod等。

  • 资源的标签即可在资源创建时定义,也可以在资源创建之后,对资源进行标签的增删改等管理。

  • 标签和资源对象之间是多对多的关系,一个资源对象之上可存在多个标签,一个标签也可以被多个资源对象所使用。

# 打标方式

  • 我们可以分不同维度对资源进行打标,例如:
    • app应用维度标签,比如redis、mysql等
    • tier架构层级维度标签,比如前端、后端、数据层等
    • release版本维度标签,稳定版、开发版等

# 标签定义规范

  • 标签名称、标签值都必须小于63个字符。
  • 标签名称不能为空,只能使用 [a-Z0-9_.-] 来进行定义,且必须以字母或数字开头。
  • 标签值可以为空,只能使用 [a-Z0-9_.-] 来进行定义,且必须以字母和数字开头及结尾。

# 标签选择器

标签选择器是提供给我们根据标签筛选或匹配资源用的。

  • 基于等值关系进行选择:使用 =, ==, != 的就是等值关系标签选择器。
    • 如:kubectl get pod -l app!=myapp-deploy
  • 基于集合关系进行选择:使用 in, not in 的就是集合关系标签选择器,会通过指定标签的值来进行集合判断。
    • 如:KEYNAME in (VALUE1, VALUE2...)、KEYNAME not in (VALUE1, VALUE2...)

# 资源内嵌字段定义标签选择器

许多资源支持通过内嵌字段来定义该资源使用的标签选择器,比如定义Pod控制器要管理的Pod资源,就需要用到标签选择器来进行匹配。

  • # matchLabels
    • 直接给定键值来定义使用的标签选择器,如:

      nodeSelector:
        标签名称: 标签值
        ... ...  
      
      1
      2
      3
  • # matchExpressions
    • 基于给定的表达式来定义使用的标签选择器。
    • 会用指定的标签的值,基于operator指定的表达式运算符,来和values指定的值进行比较。
    • 格式:{key: "KEY", operator: "OPERATOR", values: [VAL1,VAL2...]}
    • OPERATOR
      • In(属于)、NotIn(不属于),使用这两种,values的值必须是一个非空列表。
      • Exists(存在)、NotExists(不存在),使用这两种,values的值必须是一个空列表。

# 资源注解

# 资源注解介绍

  • annotations - 资源注解,与label相似也是键值对,但不能用于挑选资源对象,仅用于为对象提供"元数据",它没有键/值长度的限制。
  • 它可以使用kubectl describe命令来进行查看、kubectl edit命令来进行编辑。

# 定义方式

metadata:
  ... ...
  annotations:
    注解名: 注解值
    zhuzhi/created-by: sekaiova
1
2
3
4
5

?

#Linux#DevOps#Kubernetes#容器编排#资源对象#配置清单#标签
Kubernetes部署
Pod资源详解

← Kubernetes部署 Pod资源详解→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式