yaml文件格式详解 及 k8s实战演示

目录

一   k8s 支持的语言格式

1,YAML 语法格式

2,查看 api 资源版本标签

二   k8s 运行nginx pod实例  yaml文件 具体讲解

1,写一个yaml文件demo

2,deployment 管理nginx 的yaml 文件

3,创建资源对象

4,查看创建的pod资源

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

6,创建service资源对象

7,查看创建的service

8,验证结果

三   快速写yaml 文件方法

1,用 --dry-run 命令 创建但不执行

2,  查看生成yaml格式

3,  查看生成json格式

4,  使用yaml格式导出生成模板

5,  将现有的资源生成模板导出

6,  保存到文件中

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

四    实战演练

1,用yaml 文件  k8s 运行nginx的pod实例

1.1 实验需求

1.2 创建命名空间

1.3 创建pod 实例

1.4 创建service

1.5  修改得到的yaml 文件

1.6  执行yaml 文件

1.7  查看结果

1.8 进容器 做页面

1.9 访问 nginx

2,  用yaml 文件  k8s 运行redis的pod实例 (指定暴露端口)

2.1 用deployment 控制器创造 redis 实例

2.2 暴露端口

2.3 修改yaml 文件

2.4  执行yaml 文件

2.5 访问 redis

3, 用yaml 文件  k8s 运行mysql 的pod实例

3.1 报错分析

3.2 查看pod 日志

3.3 解决办法

 或者

3.4  修改yaml 文件

3.5 执行yaml 文件

3.6 进入mysql 的容器,用root 登录


一   k8s 支持的语言格式

Kubernetes 支持 YAML 和 JSON 格式管理资源对象
JSON 格式:主要用于 api 接口之间消息的传递
YAML 格式:用于配置和管理,YAML 是一种简洁的非标记性语言,内容格式人性化,较易读
 

1,YAML 语法格式

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

2,查看 api 资源版本标签

kubectl api-versions 命令帮助用户了解其 Kubernetes 集群所支持的 API 资源及版本范围,是管理和操作集群时的一个有用的信息参考点。

kubectl api-versions

如果是业务场景一般首选使用 apps/v1
带有beta字样的代表的是测试版本,不用在生产环境中

二   k8s 运行nginx pod实例  yaml文件 具体讲解

1,写一个yaml文件demo

mkdir /opt/demo
cd demo/vim nginx-deployment.yaml

 

2,deployment 管理nginx 的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: nginxspec:containers:				#定义容器属性- name: nginx				#定义一个容器名,一个 - name: 定义一个容器image: nginx:1.15.4		#定义容器使用的镜像以及版本ports:- containerPort: 80		#定义容器的对外的端口

详解k8s中的port:
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。

即我要指定暴露nginx的端口,就在yaml 文件中指定nodeport

3,创建资源对象

kubectl create -f nginx-deployment.yaml

4,查看创建的pod资源

kubectl get pods -o wide
NAME                              READY   STATUS    RESTARTS   AGE    IP            NODE            NOMINATED NODE
nginx-deployment-d55b94fd-29qk2   1/1     Running   0          7m9s   172.17.36.4   192.168.80.12   <none>
nginx-deployment-d55b94fd-9j42r   1/1     Running   0          7m9s   172.17.36.3   192.168.80.12   <none>
nginx-deployment-d55b94fd-ksl6l   1/1     Running   0          7m9s   172.17.26.3   192.168.80.11   <none>

5,创建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

6,创建service资源对象

kubectl create -f nginx-service.yaml 

7,查看创建的service

kubectl get svc
NAME            TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP   10.0.0.1     <none>        443/TCP        16d
nginx-service   NodePort    10.0.0.119   <none>        80:35680/TCP   14s

8,验证结果

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

http://192.168.80.11:35680
http://192.168.80.12:35680

三   快速写yaml 文件方法

1,用 --dry-run 命令 创建但不执行

创建自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client

创建无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client

2,  查看生成yaml格式

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml

3,  查看生成json格式

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o json

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o json

4,  使用yaml格式导出生成模板

并进行修改以及删除一些不必要的参数

自主状态pod

kubectl run nginx-test --image=nginx --port=80 --dry-run=client -o yaml > nginx-test.yaml

无状态pod

kubectl create deployment nginx-deploy --image=nginx --port=80 --replicas=3 --dry-run=client -o yaml  > nginx-deploy.yaml

5,  将现有的资源生成模板导出

kubectl get svc nginx-service -o yaml

6,  保存到文件中

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

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

这个很重要,比如不知道deployment 的yaml 文件怎么写,可以输入 kubectl explain deployment

下面会提示你需要哪些信息

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

四    实战演练

1,用yaml 文件  k8s 运行nginx的pod实例

1.1 实验需求

1.2 创建命名空间
kubectl create ns my-ky35 --dry-run=client -o yaml  >nginx.yaml

1.3 创建pod 实例
kubectl run  my-nginx-ky35 --image=nginx:1.14  --port=80 --labels=njzb=my-ky35 --dry-run=client  -n my-ky35 -o yaml  >> nginx.yaml 
 
1.4 创建service
kubectl expose pod  my-nginx-ky35  --port=80 --target-port=80 --name=nginx01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>nginx.yaml 

tips: 此步骤 要先有命令空间   和  pod 实例

此步骤只是要 暴露端口的yaml语言

1.5  修改得到的yaml 文件
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: nullname: my-ky35
spec: {}
status: {}
---
apiVersion: v1
kind: Pod
metadata:creationTimestamp: nulllabels:njzb: my-ky35name: my-nginx-ky35namespace: my-ky35
spec:containers:- image: nginx:1.14name: my-nginx-ky35ports:- containerPort: 80resources: {}dnsPolicy: ClusterFirstrestartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:njzb: my-ky35name: nginx01namespace: my-ky35
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:njzb: my-ky35type: NodePort
status:loadBalancer: {}

tips:

1.6  执行yaml 文件
kubectl apply -f nginx.yaml 

1.7  查看结果

1.8 进容器 做页面
kubectl exec -it  my-nginx-ky35 -n my-ky35 bash

1.9 访问 nginx

2,  用yaml 文件  k8s 运行redis的pod实例 (指定暴露端口)

2.1 用deployment 控制器创造 redis 实例
kubectl create deployment my-redis-wyq --image=redis:latest  --port=6379  --dry-run=client  -n my-ky35 -o yaml  >> redis.yaml 

2.2 暴露端口
kubectl expose deployment  my-redis-wyq  --port=6379 --target-port=6379 --name=redis01 --type=NodePort --dry-run=client  -n my-ky35  -o yaml  >>redis.yaml 

注意:这边是创造的deployment

所以不论暴露端口还是  删除   都是指定deployment 名字

2.3 修改yaml 文件

在两个apiVersion: apps/v1 中间加 ---

在暴露端口的那段yaml 文件    指定命名空间

添加nodeport   指定暴露端口

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: my-redis-wyqname: my-redis-wyqnamespace: my-ky35
spec:replicas: 1selector:matchLabels:app: my-redis-wyqstrategy: {}template:metadata:creationTimestamp: nulllabels:app: my-redis-wyqspec:containers:- image: redis:latestname: redisports:- containerPort: 6379resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: my-redis-wyqname: redis01namespace: my-ky35
spec:ports:- port: 6379protocol: TCPnodePort: 32333targetPort: 6379selector:app: my-redis-wyqtype: NodePort
status:loadBalancer: {}

2.4  执行yaml 文件
kubectl apply -f redis.yaml

2.5 访问 redis

连接redis  测试

3, 用yaml 文件  k8s 运行mysql 的pod实例

3.1 报错分析

和上述步骤一样时会报错。报错如下:

CrashLoopBackOff 是 Kubernetes 中的一个状态,表明 Pod 内的容器反复启动后立即退出(崩溃),然后 Kubernetes 会按照重启策略(通常默认是重启)不断地尝试重新启动容器。这种状况通常是由于容器内的应用运行时出现错误,导致进程非正常终止。 

3.2 查看pod 日志

在master01 

查看日志

kubectl logs my-mysql-wyq-99f66bcc-dbjvf -n my-ky35

 

因为 MySQL 服务容器在启动时遇到问题,因为它发现数据库还没有被初始化,并且您没有提供必要的环境变量来设定 root 用户的密码。MySQL 容器要求在首次启动时明确指定关于 root 密码的处理方式 

3.3 解决办法

可以通过设置 MYSQL_ROOT_PASSWORD 环境变量来指定 root 用户的密码

env:
- name: MYSQL_ROOT_PASSWORDvalue: "your_strong_password_here"
 或者

允许 root 用户密码为空

env:
- name: MYSQL_ALLOW_EMPTY_PASSWORDvalue: "yes"

3.4  修改yaml 文件

要修改的地方:

允许mysql 的root 密码为空

代码展示如下:

kind: Deployment
metadata:creationTimestamp: nulllabels:app: my-mysql-wyqname: my-mysql-wyqnamespace: my-ky35
spec:replicas: 1selector:matchLabels:app: my-mysql-wyqstrategy: {}template:metadata:creationTimestamp: nulllabels:app: my-mysql-wyqspec:containers:- image: mysql:latestname: mysqlports:- containerPort: 3306resources: {}env:- name: MYSQL_ALLOW_EMPTY_PASSWORDvalue: "yes"
status: {}
---
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: my-mysql-wyqname: mysql01namespace: my-ky35
spec:ports:- port: 3306nodePort: 31111protocol: TCPtargetPort: 3306selector:app: my-mysql-wyqtype: NodePort
status:loadBalancer: {}

3.5 执行yaml 文件

3.6 进入mysql 的容器,用root 登录

mysql 准备好了

进入该pod
 

使用root 账户登录

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

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

相关文章

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前&#xff0c;需要先了解一下压力模拟工具&#xff0c;可以将 CPU、MEM、IO 等进行压力模拟&#xff0c;可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具&#xff0c;它是专门针对 linux…

mysql 多表关联查询性能优化-同一sql不同的执行计划

一、问题背景 相同的sql&#xff0c;不同的日期&#xff0c;执行的时间差异很大&#xff0c;执行计划不一样。执行快时&#xff0c;30ms左右。执行慢时&#xff0c;15s左右。 二、分析结论 1、经过分析&#xff0c;发现不同日期下&#xff0c;sql的执行计划不同&#xff0c;驱…

基于springboot+vue的学生考勤管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境 &#xff08;注明&#xff09;以下的所有关于yum和rpm以及tar的软件需要自己准备&#xff0c;没有的话可以私信博主 实验目标&#xff1a; 1.实现mysql主从复制 2.实现mysql读写分离与负载均衡 实验一、搭建mysql主从复制 1.建立时间同步环境&#xff0c;在主节…

C++BuilderXE 如何让listView按文件名数字排序而非字母排序

int m_nDataColSort0; bool IsAsctrue; void __fastcall TForm1::RzListView4Compare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare) { if(m_nDataColSort0) { //按列表第二列排序 //CompareCompareText(Item1->SubItems-…

【MySQL精通之路】全文搜索-自然语言全文搜索

1.使用方法 默认情况下&#xff0c;或者使用IN NATURAL LANGUAGE MODE修饰符&#xff0c;MATCH&#xff08;&#xff09;函数对文本集合的字符串执行自然语言搜索。 1.1 集合 集合是FULLTEXT索引中包含的一个或多个列的集合。 1.2 搜索字符串 搜索字符串作为AGINST&#x…

高效定时器设计方案——层级时间轮

层级时间轮实现高性能定时器 此篇介绍时间轮&#xff0c;它的时间复杂度是最优的&#xff0c;插入、查找&#xff08;最小&#xff09;、删除都是O&#xff08;1&#xff09;&#xff0c;很恐怖的性能 这里示例一个三层时间轮&#xff0c;模拟时钟表盘的运作方式&#xff0c;…

力扣爆刷第142天之二叉树五连刷(构造树、搜索树)

力扣爆刷第142天之二叉树五连刷&#xff08;构造树、搜索树&#xff09; 文章目录 力扣爆刷第142天之二叉树五连刷&#xff08;构造树、搜索树&#xff09;一、106. 从中序与后序遍历序列构造二叉树二、654. 最大二叉树三、617. 合并二叉树四、700. 二叉搜索树中的搜索五、98. …

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习中非常重要的一类神经网络&#xff0c;主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理&#xff0c;并…

每日一题Reverse Card (Easy Version)

文章目录 题名&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a; 题名&#xff1a; Reverse Card (Easy Version) 题意&#xff1a; 给定 n n n&#xff0c; m m m&#xff0c;存在 1 < a < n 1<a<n 1<a<n&#xff0c; 1 < b < m …

什么是网关鉴权及其在Spring Cloud Gateway中的实现

在现代微服务架构中&#xff0c;网关扮演着非常重要的角色&#xff0c;它是系统和外部世界之间的入口&#xff0c;负责路由请求、流量控制以及安全保护等任务。其中&#xff0c;网关鉴权是保障系统安全的重要环节之一。本文将深入介绍什么是网关鉴权&#xff0c;以及如何通过过…

BCD编码(8421)介绍

概念 BCD (Binary-Coded Decimal) 是一种二进制的数字编码形式&#xff0c;其特点每个十进制数位用4个二进制位来表示。 在网络IO中&#xff0c;你传输一个数字类型最少需要一字节&#xff0c;传输两个数字类型最少需要两字节&#xff0c;但是当你使用BCD编码后传输&#xff…

防静电液的这些用处你知道多少

防静电液又叫抗静电剂&#xff0c;是工业上常用来消除静电的化学用品&#xff0c;一般是液体状态&#xff0c;它的用途很广泛。 防静电液适用于对静电有控制要求的电器、仪器桌面、台面、塑料制品、包装品、存储盒、托盘、毛毯、织物等任何物品表面。 应用举例如消除各种塑胶材…

微服务中的鉴权怎么做?

大家好&#xff0c;我是苍何呀。 现在出去找工作&#xff0c;简历上不写上微服务的技术&#xff0c;仿佛自己跟不上时代了&#xff0c;面试官更是喜欢盯着微服务项目来提问。 但其实虽说微服务是主流&#xff0c;随着云原生架构的发展&#xff0c;微服务也是趋势&#xff0c;…

图论-最短路算法

1. Floyd算法 作用&#xff1a;用于求解多源最短路&#xff0c;可以求解出任意两点的最短路 利用动态规划只需三重循环即可&#xff08;动态规划可以把问题求解分为多个阶段&#xff09;定义dp[k][i][j]表示点i到点j的路径&#xff08;除去起点终点&#xff09;中最大编号不超…

算法题【面试准备】

算法题【面试准备】 前言推荐算法题NC72二叉树的镜像NC8:二叉树根节点到叶子节点和为指定值的路径NC9二叉树中是否存在节点和为指定值的路径NC14二叉树的之字形层序遍历[NC15 求二叉树的层序遍历](https://www.nowcoder.com/study/live/689/2/69)NC37:合并区间[NC111 最大数](h…

AI模型发展之路:开源还是闭源?

AI模型发展之路&#xff1a;开源还是闭源&#xff1f; 开源路径优势&#xff1a;发展前景&#xff1a; 闭源路径优势&#xff1a;发展前景&#xff1a; 一、自动化内容生成文章生成技术原理应用场景 视频生成技术原理应用场景 音频生成技术原理应用场景 二、内容分发与推广智能…

leetcode725-Split Linked List in Parts

题目 给你一个头结点为 head 的单链表和一个整数 k &#xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺序排列&…

数据库的约束 not null, unique, default, primary key, foreign key, check

约束可以理解成 数据库提供的一种针对数据的合法性进行验证的机制, 在创建表的时候使用 1. 约束类型 NOT NULL - 指示某列不能存储 NULL 值, 表里的这个内容是必填项UNIQUE - 保证某列的每行必须有唯一的值, 不能重复 每次插入/修改时, 都要先触发查询, 如果当前插入/修改的…

原来Rstudio还可以这么使用,又方便了一些

在别人的电子书&#xff0c;你的电子书&#xff0c;都在bookdown中我们讲述了bookdown用于自动化文档生成。里面涉及到一个文件Rproj用于项目管理。 本身是一个很简单的文件&#xff0c;里面的内容一般不需要修改&#xff0c;只是放置在每个项目目录下即可。 比如我们有个内容…