yaml文件编写

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

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

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

一,yaml语法格式

1.1 基本语法规则

  • 使用空格进行缩进(不使用制表符),通常使用两个或四个空格。缩进代表层级关系,同级左边对齐。
  • 符号 : 符号 - 符号 , 后面要加上空格
  • 对字母的大小写敏感
  • 字符串要用双引号 “” 或者单引号 ‘’
  • 多行字符串使用 | 保留换行符,>代表折叠换行符
  • 符号 # 注释
  • 符号 — 表示yaml文件的开始,用来分割文件

1.2 api资源版本标签

kubectl api-servions
admissionregistration.k8s.io/v1     #v1业务场景下首选
admissionregistration.k8s.io/v1beta1  #beta代表测试版本,现实生产环境不用
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

1.3nginx-deployment.yaml

(1)编写yaml

mkdir /opt/demo
cd demo/
vim nginx-deployment.yamlapiVersion: apps/v1		#指定api版本标签大写写要注意  kubectl explain deployment
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: nginxspec:containers:				#定义容器属性- name: nginx				#定义一个容器名,一个 - name: 定义一个容器image: nginx:1.15.4		#定义容器使用的镜像以及版本ports:- containerPort: 80		#定义容器的对外的端口#查看资源配置清单
kubectl get deployment nginx -o yaml#解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata#修改资源配置清单并应用
离线修改:
修改yaml文件,并用 kubectl·apply -f·xxxx.yaml·文件使之生效
当apply不生效时,先使用delete清除资源,再apply创建资源kubectl get service nginx -o yaml >.nginx-svc.yaml  #使用重定向的方式生成svc yaml文件
vim nginx-svc.yaml           #修改port:8080
kubectl .delete -f.nginx-svc.yaml
kubectl apply -f .nginx-svc.yaml
kubectl get svc在线修改:
直接使用·kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port:888)
PS:此修改方式不会对yaml文件内容修改7 metadata:
pod元数据:
名称:Pod的名称,必须在命名空间内唯一。
命名空间:Pod所属的命名空间,便于资源的组织和管理。
标签和注释:用于标识和选择Pod的元数据

(2)创建,查看资源

kubectl create -f nginx-deployment.yaml    #创建资源对象kubectl get pods -o wide                             查看创建的pod资源

1.4创建service服务对外提供访问并测试

(1)编写yaml

vim nginx-service.yamlapiVersion: v1          # API 版本,指定使用的 Kubernetes API 版本
kind: Service           # 资源类型,表示创建一个 Service
metadata:               # 元数据部分,包含服务的基本信息name: nginx-service   # 服务名称,用于识别该 Servicelabels:               # 标签,用于标识和选择相关资源app: nginx          # 标签键值对,便于选择器使用spec:                   # 规格部分,定义服务的行为type: NodePort # 服务类型NodePort,允许通过节点的IP和指定端口访问服务,不设置会自定义端口从30000~32767ports:                # 服务暴露的端口配置- port: 80            # 服务端口,客户端通过此端口访问服务targetPort: 80      # 目标端口,实际后端 Pod 上的端口selector:             # 选择器,用于将流量路由到特定的 Podsapp: nginx          # 选择具有相同标签的 Pods注意标签要和nginx-deployment.yaml一致kubectl get service nginx-service -o yaml

(2)创建资源对象,并查看

kubectl create -f nginx-service.yaml     #创建资源对象kubectl get svc     #查看创建的service

机器svc中已经有nginx-service

(3)在浏览器访问

http://192.168.88.30:31642
http://192.168.88.40:31642

总结

二,k8s中的pod

port

  • port 是 k8s 集群内部访问service的端口,即通过 clusterIP: port 可以从 Pod 所在的 Node 上访问到 service

nodePort

  • nodePort 是外部访问 k8s 集群中 service 的端口,通过 nodeIP: nodePort 可以从外部访问到某个 service。

targetPort

  • targetPort 是 Pod 的端口,从 port 或 nodePort 来的流量经过 kube-proxy 反向代理负载均衡转发到后端 Pod 的 targetPort 上,最后进入容器。

containerPort

  • containerPort 是 Pod 内部容器的端口,targetPort 映射到 containerPort。

三,从例子中熟悉资源清单编写

1.创建nginx

1.1编写nginx-1.yaml

cd /opt/demo
vim nginx-1.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: nginx-1namespace: defaultlabels:app: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: nginx:latestports:- name: httpcontainerPort: 80kubectl create -f nginx-1.yaml
kubectl get pod
kubectl get pod -o wide
curl -I 10.244.2.157
kubectl get pod --show-labels
kubectl get pod -A
kubectl describe deployment.apps nginx-1

1.2创建svc

cd /opt/demo
vim nginx-svc1.yamlapiVersion: vl
kind: Service
metadata:name: nginx-1namespace: default
spec:type: NodePortports:- port: 8080targetPort: 80nodePort: 32222selector:app: myappkubectl apply -f nginx-svc1.yamlkubectl get pod,svc

2.创建redis

2.1编写redis-1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: redis-1labels:app: redis
spec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:latestports:- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:name: redis-service4labels:app: redis
spec:type: NodePortports:- port: 6379targetPort: 6370nodePort: 32223selector:app: rediskubectl apply -f redis-1.yaml
kubectl get pod,svc

四,快速创建yaml文件

1.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

2.查看生成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

3.查看生成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

4.使用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

5.生成的yaml文件

vim nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:creationTimestamp: null     #删除labels:run: nginx-testname: nginx-test
spec:containers:- image: nginxname: nginx-testports:- containerPort: 80resources: {}             #删除dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}                    #删除

6.将现有的资源生成模板导出

kubectl get svc nginx-service -o yaml

7.保存到文件中

kubectl get svc nginx-service -o yaml > my-svc.yaml

8.查看字段帮助信息,可一层层的查看相关资源对象的帮助信息

kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers

总结

1.快速创建yaml文件

(1)–dry-run 命令生成

kubectl run my-deploy --image=nginx --dry-run=client -o yaml > my-deploy.yaml

(2)get命令导出

kubectl get svc nginx-service -o yaml > my-svc.yaml
或
kubectl edit svc nginx-service  #复制配置,再粘贴到新文件

2.yaml文件的学习方法:

(1)多看官方写的,能读懂理解的

(2)能照着现场的文件改着用

(3)遇到不懂的,用kubectl explain 命令查看

3.yaml文件组成

(1)控制定义,主要用来描述资源预设的状态,控制类型:deployment,statusfulset,service。需要控制副本数量,使用的容器镜像,预先设置的配置参数和环境变量

metadata,selector,template,spec

(2)被控制对象,被控制器(deployment,statusfulset)管理的资源实例(pod),对控制对象的定义,状态由yaml文件决定

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

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

相关文章

Node.js 全栈开发进阶篇

​🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js- 全栈开发进阶篇 前言 大家好,我是青山。在上一篇文章中,…

密码学与数学证明。

通常的数学证明工具主要有:以平行公设为基础的几何证明体系,以牛顿三定律为基础的经典力学证明体系,以四则计算为基础的计算证明方法,以正则三段论为基础的断言思证系统,以数学归纳法和夹挤定理为基础的包络收敛分析证…

Vue(JavaScript)读取csv表格并求某一列之和(大浮点数处理: decimal.js)

文章目录 想要读这个表格,并且求第二列所有价格的和方法一:通过添加文件输入元素上传csv完整(正确)代码之前的错误部分因为价格是小数,所以下面的代码出错。如果把parseFloat改成parseInt,那么求和没有意义…

C语言初阶必会的练习题(3)之位操作符(^ 、、>>等)的应用

C语言初阶必会的练习题(3) 放在最前面的1、不允许创建临时变量,交换两个整数的内容1.1、分析:见代码注释(a)方法 1(b)方法 2 1.2、结果展示方法 1 的 结果:方法 2 的 结果…

基于SSM框架的乡村农户对口扶贫系统

基于SSM框架的乡村农户对口扶贫系统。 设计步骤: 项目架构创建:首先创建项目的基本架构,包括com.zc.xxx路径下的文件和resources资源文件夹。 SSM架构:使用Spring、SpringMVC、MyBatis作为后端架构,采用POJO—Dao—…

前端Web用户 token 持久化

用户 token 持久化 业务背景:Token的有效期会持续一段时间,在这段时间内没有必要重复请求token,但是pinia本身是基于内存的管理方式,刷新浏览器Token会丢失,为了避免丢失需要配置持久化进行缓存 基础思路&#xff1a…

【学习笔记】SAP ABAP——OPEN SQL(一)【INTO语句】

【INTO语句】 结构体插入(插入一条语句时) SELECT...INTO [CORRESPONDING FIELDS OF] <wa> FROM <db> WHERE <condition>.内表插入(插入多条语句时) SELECT...INTO|APPENDING [CORRESPONDING FIELDS OF] TABLE <itab>FROM <db> WHERE <con…

微服务透传日志traceId

问题 在微服务架构中&#xff0c;一次业务执行完可能需要跨多个服务&#xff0c;这个时候&#xff0c;我们想看到业务完整的日志信息&#xff0c;就要从各个服务中获取&#xff0c;即便是使用了ELK把日志收集到一起&#xff0c;但如果不做处理&#xff0c;也是无法完整把一次业…

Qt中实现高准确率的语音识别

选择语音识别引擎 开源语音识别项目中&#xff0c;以下两款工具可以用于支持中英文识别&#xff0c;并且与Qt兼容&#xff1a; Vosk&#xff1a;Vosk是一个开源的语音识别工具&#xff0c;支持中英文及多种语言&#xff0c;具备离线识别能力&#xff0c;且不依赖互联网。 Padd…

c语言中的线程管理pthread详解

在C语言中,多线程编程常用的POSIX线程(POSIX Threads, pthreads)库主要由pthread.h头文件提供。pthread.h定义了许多用于线程创建、管理、同步的函数和数据结构。下面是pthread.h中的核心概念和主要函数的详细介绍。 1. 基本概念 线程:线程是一个轻量级的进程,可以并发执…

十五:java web(7)-- Spring Boot

目录 1. Spring Boot 简介 1.1 简介 1.2 Spring Boot 的特点 1.3 Spring Boot 和 Spring 的关系 2. Spring Boot 快速入门 2.1 创建第一个 Spring Boot 项目 3. Spring Boot 配置管理 3.1 application.properties 和 application.yml 配置 这两种都可以 好像现在更推荐…

关于打开网页非常慢的解决方法

方法一&#xff1a;刷新dns缓存 ipconfig /flushdns方法二&#xff1a;许多网站&#xff0c;太落后&#xff0c;不支持ipv6&#xff0c;所以关闭ipv6即可

使用Python简单实现客户端界面

服务端实现 import threading import timeimport wx from socket import socket, AF_INET, SOCK_STREAMclass LServer(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, id1002, titleL服务器端界面, poswx.DefaultPosition, size(400, 450))# 窗口中添加面板pl …

JDK1.5 java代码打包jar HmacSha256

文章目录 demo地址背景实现编写代码编译class文件打包 JAR 文件执行生成的 JAR 文件辅助验证方式 常见问题和解决方法常规生成jar方案maven插件idea工具 demo地址 https://github.com/xiangge-zx/HmacSha256 背景 最近接到一个需求,做一个可以用来HmacSha256加密的小工具&am…

ubuntu 22.04 server 安装 xtrabackup 2.4 qpress LTS

ubuntu 22.04 server 安装 xtrabackup 2.4 qpress LTS 参考 https://docs.percona.com/percona-xtrabackup/innovation-release/apt-repo.html https://www.ubuntuupdates.org/ppa/percona_server_with_xtradb?distjammy centos7 xtrabackup mysql&#xff08;8&#xff0…

MySQL 8.0中的‘caching_sha2_password‘身份验证插件问题

使用Navicat Premium 12连接MySQL数据库时会出现Authentication plugin ‘caching_sha2_password’ cannot be loaded的错误。 出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是…

Go八股(Ⅳ)***slice,string,defer***

***slice&#xff0c;string&#xff0c;defer*** 1.slice和arry的区别 arry&#xff1a; Go语言中arry即为数据的一种集合&#xff0c;需要在声明时指定容量和初值&#xff0c;且一旦声明就长度固定&#xff0c;访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

雪花算法(Snowflake Algorithm)C# 实现版本

这里采用10位的工作ID,当时间回拔时,采用工作ID增加1来避免生成与旧的ID重复。 雪花算法的结构 雪花算法生成的ID是一个64位的Long型数字,结构如下: 高41位:时间戳(timestamp)中间10位:工作节点ID(workerId),用来避免时间回拔。低12位:序列号(sequence)时间戳(…

服务器虚拟化:构建高效、灵活的数据中心

服务器虚拟化&#xff1a;构建高效、灵活的数据中心 在当今数字化时代&#xff0c;服务器虚拟化已经成为构建高效、灵活数据中心的关键技术。通过服务器虚拟化&#xff0c;企业可以将物理服务器划分为多个虚拟服务器&#xff0c;从而提高资源利用率、降低成本、增强灵活性和提…

2024-11-07 问AI: [AI面试题] 解释推荐系统的概念

文心一言 推荐系统是一种信息过滤系统&#xff0c;旨在预测用户对物品的“评分”或“偏好”&#xff0c;并为用户提供个性化的推荐。以下是关于推荐系统的详细解释&#xff1a; 一、定义与功能 推荐系统通过分析和利用用户的历史行为、偏好和其他信息&#xff0c;来预测用户…