【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)

本文主要是介绍【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

系列文章目录

😜即日起,更新云原生相关知识,喜欢的小伙伴可以给我点个三连喔

😜收录至专栏 云原生

😜【云原生Docker系列第一篇】Docker镜像管理

😜【云原生Docker系列第二篇】Docker容器管理

😜【云原生Docker系列第三篇】Docker网络模式

😜【云原生Docker系列第四篇】Docker Cgroups资源控制操作

😜【云原生Docker系列第五篇】Docker数据管理

😜【云原生Docker系列第六篇】基于docker创建镜像

😜【云原生Docker系列第七篇】浅谈镜像的分层原理

😜【云原生Docker系列第九篇】Docker-Compose 容器集群的快速编排

😜 【云原生Docker系列第十篇】搭建本地私有仓库

😜【云原生Docker系列项目实战第一篇】dockerfile+lnmp+workpress

😜【云原生Kubernetes系列第一篇】深入理解容器集群管理系统Kubernetes(k8s)

😜【云原生Kubernetes系列第二篇】Kubernetes(k8s)核心组件

😜【云原生Kubernetes系列第三篇】二进制部署单节点Kubernetes(k8s)v1.20

😜【云原生Kubernetes系列第四篇】二进制部署多master集群Kubernetes(k8s)v1.20
😜【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构

文章目录

  • 系列文章目录
  • 一、YAMY是什么
    • 1.1 YAML语法格式
    • 1.2 基本数据类型
    • 1.3 YAML 序列
    • 1.4 YAML 映射
    • 1.5 序列的映射
    • 1.6 映射的映射
    • 1.7 序列的序列
    • 1.8 映射的序列
  • 二、k8s中的yaml
    • 2.1 查看 api 资源版本标签
    • 2.2 yaml案例1
    • 2.3 yaml案例2
    • 2.4 yaml案例3
    • 2.5 yaml案例4
    • 2.6 yaml案例5
  • 总结
    • 编写service配置清单方法
    • 查看某个资源对应的版本号

一、YAMY是什么

YAMY是一个可读性搞,用来表达数据序列化的格式。

YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。

文件后缀:.yaml或者.yml

可以转换成JSON或XML格式

1.1 YAML语法格式

  • 大小写敏感
  • 使用缩进表示层级关系
  • 不支持Tab键制表符缩进,只使用空格缩进
  • 缩进的空格数日不重要,只要相同层级的元素左侧对齐即可,通常开头缩进两个空格
  • 符号字符后缩进一个空格,如冒号,逗号,短横杆(-)等
  • w—”表示YAML格式,一个文件的开始,用于分隔文件间
  • “#”表示注释

1.2 基本数据类型

  1. 纯量:纯量是最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点数、Null、时间、日期
  2. 数组:以 - 开头的行表示构成一个数组, 一组按次序排列的值,又称为序列(sequence) / 列表(list)
  3. 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
---
xxx
xxx
xxx---
mmm
mmmm
mmmm---
ssss
sss
sssss

每个—代表一个文件,从上而下顺序执行

docker-compose不支持—,Ansible剧本中只支持一个—,k8s中支持多个—,单个—可以省略

1.3 YAML 序列

YAML 序列是一个列表。在其最简单的形式中,每行有一个项目,每行以破折号和空格开始

---
- linux
- macos
- Windows

1.4 YAML 映射

---
centos: linux
CPU: AMD
RAM: '16GB'

1.5 序列的映射

linux:- centos- redhat
Windows:- w7- w10

linux是第一个键,他的值是一个序列,包含centos和redhat;Windows是第二个键,我的值是一个序列,包含w7和w10

1.6 映射的映射

linux:centos: 7redhat: 8
Windows:w7: 10.1w10: 12.2

1.7 序列的序列

- [centos,redhat]
- [w7,w10]

1.8 映射的序列

-linux: centos
-RAM: '16GB'

二、k8s中的yaml

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

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

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

#查看资源配置清单
[root@master01 opt]# kubectl get deployment nginx -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "1"creationTimestamp: "2022-07-17T11:55:25Z"generation: 2labels:app: nginxmanagedFields:......#解释资源配置清单
kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata#删除资源配置清单
#陈述式删除:
kubectl delete service nginx
#声明式删除:
kubectl delete -f nginx-svc.yaml

2.1 查看 api 资源版本标签

#查看每个资源的api版本号
三种方法
kubectl api-versions
kubectl api-resources 
kubectl explain deployment

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 yaml案例1

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

在这里插入图片描述

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

在这里插入图片描述

此时在浏览器输入 nodeIP:nodePort 即可访问

http://192.168.109.133:32761/

http://192.168.109.132:32761/

在这里插入图片描述
在这里插入图片描述

2.3 yaml案例2

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-stevelunamespace: defaultlabels:app: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: soscscs/myapp:v1ports:- name: httpcontainerPort: 80

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#定义service的yaml文件
vim demo1-svc.yaml
apiVersion: v1
kind: Service
metadata:name: myapp-svcnamespace: defaultspec:type: NodePortports:- port: 8080targetPort: 80nodePort: 31234selector:app: myapp

在这里插入图片描述

[root@master01 demo]# curl 10.96.222.48:8080
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

2.4 yaml案例3

通过现有模板生成

#通过现有模板生成
kubectl get deployments.apps myapp-stevelu -o yaml > demo2.yaml
vim demo2.yaml 
#通过模板生成的yaml文件有很长一段我们将没有用的删掉,只留下有用信息
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myappname: myapp-stevelunamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: soscscs/myapp:v1name: myappports:- containerPort: 80name: httpprotocol: TCP

在这里插入图片描述

2.5 yaml案例4

根据陈述式命令导出一个yaml配置文件,俗称空跑,并不会正在生成deployment,再根据生成的yaml文件进行修改成自己想要的

[root@master01 demo]# kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o yaml>demo3.yaml
[root@master01 demo]# ls
demo1-svc.yaml  demo1.yaml  demo2.yaml  demo3.yaml  nginx-deployment.yaml  nginx-service.yaml
[root@master01 demo]# vim demo3.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myappname: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: soscscs/myapp:v1name: myapp

–dry-run=client的对象不是由apiserver验证的,只是由客户端验证

2.6 yaml案例5

  • 资源类型:pod
  • 资源名称:my-nginx
  • 命名空间:test
  • 容器镜像:nginx:1.14
  • 容器端口:80
  • 标签:app=nginx
  • 创建Deployment资源,资源名称为nginx-deploy,命名空间为test,4个副本,nginx:1.14,镜像端口:80,标签:name=nginx-test1、service 关联上而创建的Pod,资源名称为nginx-deploy-sve
#根据陈述式命令导出一个配置文件
[root@master01 demo]# kubectl create -n test deployment nginx-deploy --image=nginx:1.14 --port=80 --replicas=4 --dry-run=client -oyaml >deploy.yaml
#创建test命名空间
[root@master01 demo]# kubectl create ns test
#根据需求修改
[root@master01 demo]# vim  deploy.yaml
apiVersion: apps/v1  #deployment版本号
kind: Deployment     #类型
metadata:            #资源的元信息labels:            #标签name: nginx-test1name: nginx-deploy  #资源名称namespace: test     #命名空间(一个命名空间下,同种类型下的资源名称是唯一的)
spec:                #下面设置资源属性replicas: 4        #副本数selector:          #标签选择器matchLabels:name: nginx-test1template:          #该控制器创建的pod副本的模板metadata:        #pod的元信息labels:        #pod的标签name: nginx-test1spec:            #pod的属性containers:    #容器的信息- image: nginx:1.14   #容器的信息name: nginx         #容器的名称ports:              #容器的端口- containerPort: 80
[root@master01 demo]# kubectl apply -f deploy.yaml 
deployment.apps/nginx-deploy created
#查看创建的资源
[root@master01 demo]# kubectl get all -n test
NAME                                READY   STATUS    RESTARTS   AGE
pod/nginx-deploy-5bbd7cdf77-69f7x   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-8t6r8   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-lx9vt   1/1     Running   0          4m39s
pod/nginx-deploy-5bbd7cdf77-znz5h   1/1     Running   0          4m39sNAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deploy   4/4     4            4           4m39sNAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deploy-5bbd7cdf77   4         4         4       4m39s

在这里插入图片描述

#生成service资源的yaml文件,并修改
[root@master01 demo]# kubectl expose -n test deployment nginx-deploy --port=80 --target-port=80 --type=NodePort --dry-run=client -oyaml
apiVersion: v1         #service的版本号
kind: Service
metadata:labels:name: nginx-test1name: nginx-deploynamespace: test
spec:ports:          #service端口号- port: 80      #clusterIPprotocol: TCP #端口协议targetPort: 80  #跟容器端口的对应关系nodePort: 31111  #nodeip的端口号selector:    #标签选择器name: nginx-test1type: NodePort   #service的类型
#将上面修改后的service资源写入文件
[root@master01 demo]# vim deploy-svc.yaml
[root@master01 demo]# kubectl apply -f deploy-svc.yaml 
service/nginx-deploy created
#查看service详细信息
[root@master01 demo]# kubectl describe svc -n test
Name:                     nginx-deploy
Namespace:                test
Labels:                   name=nginx-test1
Annotations:              <none>
Selector:                 name=nginx-test1
Type:                     NodePort
IP Families:              <none>
IP:                       10.96.77.82
IPs:                      10.96.77.82
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31111/TCP
Endpoints:                10.244.1.26:80,10.244.1.
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

在这里插入图片描述
在这里插入图片描述

总结

编写service配置清单方法

1.根据现有的文件输出一个yaml格式的配置文件,再修改

2.根据陈述式命令导出一个配置文件(空跑)

kubectl create deploy myapp --image=soscscs/myapp:v1 --replicas=3 --dry-run=client -o json>demo4.yaml
kukectl run my=nginx --image=nginx:1.14 --port=80 --dry-run=client -oyaml > pod -my-nginx.yaml

3.从头到尾自己编写

查看某个资源对应的版本号

#法一
kubectl api-versions
#法二
kubectl api-resources
#法三
kubectl explain [资源名称]

在这里插入图片描述

这篇关于【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/801517

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

轻松掌握python的dataclass让你的代码更简洁优雅

《轻松掌握python的dataclass让你的代码更简洁优雅》本文总结了几个我在使用Python的dataclass时常用的技巧,dataclass装饰器可以帮助我们简化数据类的定义过程,包括设置默... 目录1. 传统的类定义方式2. dataclass装饰器定义类2.1. 默认值2.2. 隐藏敏感信息

一文带你搞懂Nginx中的配置文件

《一文带你搞懂Nginx中的配置文件》Nginx(发音为“engine-x”)是一款高性能的Web服务器、反向代理服务器和负载均衡器,广泛应用于全球各类网站和应用中,下面就跟随小编一起来了解下如何... 目录摘要一、Nginx 配置文件结构概述二、全局配置(Global Configuration)1. w

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se