【Kubernetes】Kubernetes之YAML文件详解

news2024/12/27 11:17:33

YAML

  • 一、YAML 的概述
    • 1. Kubernetes 支持资源管理格式
    • 2. YAML 语法格式
  • 二、YAML 文件
    • 1. 如何获取 api 资源相关信息
    • 2. 编写资源配置文件
      • 2.1 手动编写 yaml 文件
        • 详解K8S中的port
      • 2.2 使用镜像生成 yaml 文件
      • 2.3 根据现有资源导出 yaml 文件
  • 总结
    • 1. 如何获取资源清单文件(yaml配置文件)
    • 2. 如何设置流量发送给本机或者其他节点的Pod


一、YAML 的概述

1. Kubernetes 支持资源管理格式

Kubernetes 支持 YAML 和 JSON 格式管理资源对象

  • JSON 格式:主要用于 api 接口之间消息的传递

  • YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读

2. YAML 语法格式

  • 大小写敏感

  • 使用缩进表示层级关系

  • 不支持Tab键制表符缩进,只使用空格缩进

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格

  • 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等

  • “—”表示YAML格式,一个文件的开始,用于分隔文件间

  • “#”表示注释

二、YAML 文件

1. 如何获取 api 资源相关信息

#查看 api 资源版本标签
kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1 
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1
coordination.k8s.io/v1beta1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
extensions/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
networking.k8s.io/v1
networking.k8s.io/v1beta1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

在这里插入图片描述

#查看资源所需要的版本
kubectl api-resources

在这里插入图片描述

#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息#获取资源及其字段的文档
kubectl explain XXXX

例如
kubectl explain deployment		#查看资源字段文档
kubectl explain deployment.metadata

在这里插入图片描述

2. 编写资源配置文件

mkdir /opt/demo
cd demo/

2.1 手动编写 yaml 文件

编写deployment文件

vim nginx-deployment.yaml
apiVersion: apps/v1		#指定api版本标签
kind: Deployment		#定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
metadata:					#定义资源的元数据信息,比如资源的名称、namespace、标签等信息
  name: nginx-deployment	#定义资源的名称,在同一个namespace空间中必须是唯一的
  labels:				#定义Deployment资源标签
    app: nginx	
spec:					#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3			#定义副本数量
  selector:				#定义标签选择器
    matchLabels:		#定义匹配标签
      app: nginx		#需与 .spec.template.metadata.labels 定义的标签保持一致
  template:				#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配
    metadata:
      labels:           #定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:				#定义容器属性
      - name: nginx				#定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.15.4		#定义容器使用的镜像以及版本
        ports:
        - containerPort: 80		#定义容器的对外的端口

在这里插入图片描述

#创建资源对象
kubectl create -f nginx-deployment.yaml

#查看创建的pod资源
kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP           NODE     NOMINATED NODE   READINESS GATES
nginx-5658bdf5d4-k9pjg              1/1     Running   0          134m   10.244.2.8   node02   <none>           <none>
nginx-deployment-746ccc65d8-6rkbg   1/1     Running   0          58s    10.244.2.9   node02   <none>           <none>
nginx-deployment-746ccc65d8-b2vp5   1/1     Running   0          58s    10.244.1.9   node01   <none>           <none>
nginx-deployment-746ccc65d8-nn449   1/1     Running   0          58s    10.244.1.8   node01   <none>           <none>

在这里插入图片描述

编写service文件

#创建service服务对外提供访问并测试
vim nginx-service.yaml
apiVersion: v1  
kind: Service  
metadata:
  name: nginx-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 80  
  selector:
    app: nginx

在这里插入图片描述

#创建资源对象
kubectl create -f nginx-service.yaml 

#查看创建的service
kubectl get svc
NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.96.0.1     <none>        443/TCP        178m
nginx-service   NodePort    10.96.77.77   <none>        80:31636/TCP   19s

#在浏览器输入 nodeIP:nodePort 即可访问
http://192.168.145.12:31636
http://192.168.145.13:31636

在这里插入图片描述

在这里插入图片描述

详解K8S中的port

  • port:是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service。
  • nodePort: 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。
  • targetPort: 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。
  • containerPort: 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

2.2 使用镜像生成 yaml 文件

#kubectl run --dry-run=client 打印相应的 API 对象而不执行创建
kubectl run nginx-test --image=nginx --port=80 --dry-run=client			#后续可以修改
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

在这里插入图片描述

#查看生成yaml格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

在这里插入图片描述

#查看生成json格式
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

在这里插入图片描述

#使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml
kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

在这里插入图片描述

2.3 根据现有资源导出 yaml 文件

#将现有的资源生成模板导出
kubectl get svc nginx-service -o yaml

#保存到文件中
kubectl get svc nginx-service -o yaml > my-svc.yaml		#删除不需要的字段

在这里插入图片描述

#查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

在这里插入图片描述

总结

1. 如何获取资源清单文件(yaml配置文件)

1) 手撕 yaml 配置文件,可根据 kubectl explain 命令获取字段信息
2) 无中生有的方式: kuectl create|run|expose  ... --dry-run=client  -o yaml > XXX.yaml
3) 查看已存在的资源配置方式:kubectl get <资源类型><资源名称> -n 命令空间 -o yaml > XXX.yaml
  					     kubectl edit <资源类型> <资源名称>  手动复制资源配置,再粘贴到文件中
4) 复制官方文档的资源配置案例							 

2. 如何设置流量发送给本机或者其他节点的Pod

在K8S的service对象(申明一条访问通道)中设置externalTrafficPolicy字段

cluster:默认模式,设置将请求发送给其他节点的pod
local:设置将请求发送给本机的pod

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/848820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[LeetCode - Python]349. 两个数组的交集(Easy);350. 两个数组的交集 II(Easy)

题目&#xff1a; 349. 两个数组的交集(Easy) 代码 1.哈希表 set清重 两次遍历&#xff1a; class Solution:def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:dict {}ret []for i in set(nums1) :if i not in dict:dict[i] 0 for j in …

selenium+python —— 实现基本自动化测试

安装selenium 打开命令控制符输入&#xff1a;pip install -U selenium 火狐浏览器安装firebug&#xff1a;www.firebug.com&#xff0c;调试所有网站语言&#xff0c;调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件&#xff0c;实现简单的浏览器操 作的录制与回…

centos7 ESXi 磁盘扩充容量

1、背景 有一天&#xff0c;突然程序报空间不足了。。。。。。 2023-06-23 02:26:51.631 UTC [26190] LOG: could not open temporary statistics file "pg_stat_tmp/global.tmp": No space left on device 2023-06-23 02:26:51.631 UTC [26190] LOG: could not …

恒运资本:2倍牛股突然闪崩,业绩创新高股出炉,最高日赚近2亿

上半年哪些公司净利润有望创前史新高&#xff1f; 2倍牛股单季成绩环比下滑&#xff0c;早盘股价大跳水 A股半年报进入发表高峰期&#xff0c;仅8月7日晚间&#xff0c;就有超30家公司发表半年报和成绩预告状况&#xff0c;超七成净利润同比增加。净利润增速最高的是翔港科技&…

基于Spring Boot的影视点播网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的影视点播网站设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java springboot…

Flowable-多实例

目录 概述概念多实例配置图形标记XML内容界面操作视频教程 BPMN2.0 中引入了多实例的概念&#xff0c;它是在业务流程中定义“重复”环节的一个方法&#xff0c;Flowable 对其予以了支持。配置为多实例的活动在流程运行时会创建多个活动实例&#xff0c;既可以顺序依次执行也 可…

海外市场裂变营销:打造爆炸式增长的成功之道

随着全球化的加速发展&#xff0c;越来越多的品牌开始将目光投向海外市场。然而&#xff0c;在激烈的国际竞争中脱颖而出&#xff0c;并在海外市场取得成功并不容易。在这样的背景下&#xff0c;裂变营销成为了一个备受关注的策略&#xff0c;它能够帮助品牌在海外市场快速拓展…

vue3 excel 导出功能

1.安装 xlsx 库 npm install xlsx2.创建导出函数 src/utils/excelUtils.js import * as XLSX from xlsx;const exportToExcel (fileName, datas, sheetNames) > {// 创建工作簿const wb XLSX.utils.book_new()for (let i 0; i < datas.length; i) {let data datas…

教雅川学缠论06-中枢

本系列文章之前讲的内容都只有上升和下降两类趋势&#xff0c;并没有提及盘整&#xff0c;在缠论中&#xff0c;中枢这个新词汇用来定义盘整&#xff0c;中枢&#xff1a; 1.至少由5条线段&#xff08;或笔&#xff09;组成 2.中枢是有方向的&#xff0c;中枢左右两侧外面的线&…

C语言文件操作基本方法

1、文件的分类 ANSI C 的缓冲文件系统 缓冲文件系统 缓冲文件系统是指&#xff0c;系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时&#xff0c;必须首先输出到缓冲区中。待缓冲区装满后&#xff0c;再一起输出到磁盘文件中。 从磁盘文件向内…

lz4 与 lz77 压缩算法举例

lz4算法 abcd efab cdeh 压缩过程&#xff1a; 以长度&#xff14;为滑窗&#xff0c;&#xff11;为步长&#xff0c;对abcd计算hash存入hash table&#xff0c;计算 bcde, cdef,defa,efab,fabc的 hash 分别加入 hash table&#xff0c;下一个滑窗 abcd 找到了匹配&#xf…

Acwing.883 高斯消元解线性方程组

题目 输入一个包含n个方程n个未知数的线性方程组。 方程组中的系数为实数。 求解这个方程组。 下图为一个包含m个方程n个未知数的线性方程组示例: 输入格式 第一行包含整数n。 接下来n行&#xff0c;每行包含n1个实数&#xff0c;表示一个方程的n个系数以及等号右侧的常数。 …

Spark Catalog详解

前言 旁边的实习生说:我想要用spark代码中对hive库中的内部表和外部表进行删除(包括数据),咋感觉网上搜了一圈都找不到解决方案啊,spark这么鸡肋吗? 我:你应该静下心来好好把spark基础知识进行全面学习。 实习生:难道spark有这功能,而我没有学习过?咋弄啊? 我:学习…

WinForm项目打包成一个exe安装包教程(VS2022)

目录 1、下载扩展Microsoft Visual Studio Installer Projects 2、新建Set up项目 3、应用程序文件夹下添加文件 4、添加卸载程序 5、添加运行环境 6、添加程序图标&#xff08;选做&#xff09; 7、生成项目exe 1、下载扩展Microsoft Visual Studio Installer Projects…

深入篇【C++】C++<继承>特性详细总结附代码案例(单继承/多继承)

深入篇【C】C<继承>特性详细总结(单继承/多继承&#xff09; Ⅰ.继承理解Ⅱ.继承方式Ⅲ.基类派生类对象赋值转化Ⅳ.继承中同名成员Ⅴ.派生类的默认成员函数Ⅵ.继承中友元与静态Ⅶ.多继承<菱形继承问题>Ⅷ.继承与组合 Ⅰ.继承理解 继承的本质就是复用&#xff0c;而…

螺旋模型四象限指的是什么?

螺旋模型融合了瀑布模型、快速原型模型&#xff0c;最大的优点强调了风险分析&#xff0c;有助于将软件质量融入开发中;小分段构建大型软件&#xff0c;易于计算成本;客户参与&#xff0c;保证项目可控性。但构建过程太过繁琐&#xff0c;适合大型项目不适合小型项目。 上图是螺…

通信原理板块——基础知识(一)

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、通信的基本概念——消息、信息和…

【QT】 QTabWidgetQTabBar控件样式设计(QSS)

很高兴在雪易的CSDN遇见你 &#xff0c;给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT控件QTabWidget&QTabBar的样式设计&#xff0c;介绍两者可以自定义的内容&#xff0c;以及如何定义&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴…

内生安全构建数据存储

一、数据安全成为防护核心&#xff0c;存储安全防护不容有失 1、数据作为企业的核心资产亟需重点保护&#xff0c;数据安全已成网络空间防护核心 2、国家高度重视关键信息基础设施的数据安全&#xff0c;存储安全已成为审核重点 二、存储安全是数据安全的关键一环&#xff0c;应…

Linux6.35 Kubernetes Pod详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes Pod详解一、Pod基础概念1.在Kubrenetes集群中Pod有如下两种使用方式2.pause容器使得Pod中的所有容器可以共享两种资源&#xff1a;网络和存储3.kubernetes中的pause容器主要为每个容器提供以下功能4.Kubernetes设计这样的P…