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: nginx
    spec:
      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-service
  labels:
    app: nginx  
spec:
  type: NodePort  
  ports:
  - port: 80
    targetPort: 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: null
  name: my-ky35
spec: {}
status: {}
---
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: my-nginx-ky35
  namespace: my-ky35
spec:
  containers:
  - image: nginx:1.14
    name: my-nginx-ky35
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    njzb: my-ky35
  name: nginx01
  namespace: my-ky35
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    njzb: my-ky35
  type: 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: null
  labels:
    app: my-redis-wyq
  name: my-redis-wyq
  namespace: my-ky35
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-redis-wyq
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-redis-wyq
    spec:
      containers:
      - image: redis:latest
        name: redis
        ports:
        - containerPort: 6379
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-redis-wyq
  name: redis01
  namespace: my-ky35
spec:
  ports:
  - port: 6379
    protocol: TCP
    nodePort: 32333
    targetPort: 6379
  selector:
    app: my-redis-wyq
  type: 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_PASSWORD
  value: "your_strong_password_here"
 或者

允许 root 用户密码为空

env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
  value: "yes"

3.4  修改yaml 文件

要修改的地方:

允许mysql 的root 密码为空

代码展示如下:

kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-mysql-wyq
  name: my-mysql-wyq
  namespace: my-ky35
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-mysql-wyq
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-mysql-wyq
    spec:
      containers:
      - image: mysql:latest
        name: mysql
        ports:
        - containerPort: 3306
        resources: {}
        env:
        - name: MYSQL_ALLOW_EMPTY_PASSWORD
          value: "yes"
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-mysql-wyq
  name: mysql01
  namespace: my-ky35
spec:
  ports:
  - port: 3306
    nodePort: 31111
    protocol: TCP
    targetPort: 3306
  selector:
    app: my-mysql-wyq
  type: NodePort
status:
  loadBalancer: {}

3.5 执行yaml 文件

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

mysql 准备好了

进入该pod
 

使用root 账户登录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展&#xff0c;表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

优先编码器电路①

优先编码器电路① 坑主要在这个输入的高位和低位上 这里的低位在最左边 就是大小端的问题 module encoder_0(input [8:0] I_n ,output reg [3:0] Y_n ); always(*)begincasex(I_n)9b1111_1111_1: Y_n < 4b1111;9b1111_1111_0: Y_n < 4b1110;9…

redis--数据类型

字符串 字符串是所有编程语言中最常见的和最常用的数据类型&#xff0c;而且也是redis最基本的数据类型之一&#xff0c;而且redis中所有的key的类型都是字符串。常用于保存 Session 信息场景&#xff0c;此数据类型比较常用 命令含义复杂度set key value设置key-valueo(1)get…

基于 vLLM 搭建 DeepSeek-V2 Chat 服务

直奔主题。 安装vLLM 官方实现的代码还没有 merge 到 vLLM 主分支&#xff0c;所以直接 git clone DeepSeek 的分支。 git clone https://github.com/zwd003/vllm.git cd vllm pip install -e .源码安装大概耗时 10 分钟。 OpenAI 接口规范启动 官方 Github 放的是单条推理…

不闭合三维TSP:成长优化算法GO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代码

一、旅行商问题 旅行商问题&#xff08;Traveling salesman problem, TSP&#xff09;是一个经典的组合优化问题&#xff0c;它可以描述为一个商品推销员去若干城市推销商品&#xff0c;要求遍历所有城市后回到出发地&#xff0c;目的是选择一个最短的路线。当城市数目较少时&…

Java-MySql:JDBC

目录 JDBC概述 JDBC搭建 1、导入mysql开发商提供的jar包 2、注册驱动 3、与数据库连接 注解&#xff1a; Statement&#xff1a; 代码 运行 PreparedStatement&#xff1a; 代码 运行 PreparedStatement和Statement Statement 增 代码 运行 删 代码 运…

前端 CSS 经典:filter 滤镜

前言&#xff1a;什么叫滤镜呢&#xff0c;就是把元素里的像素点通过一套算法转换成新的像素点&#xff0c;这就叫滤镜。而算法有 drop-shadow、blur、contrast、grayscale、hue-rotate 等。我们可以通过这些算法实现一些常见的 css 样式。 1. drop-shadow 图片阴影 可以用来…

民国漫画杂志《时代漫画》第5期.PDF

时代漫画05.PDF: https://url03.ctfile.com/f/1779803-1246745815-7953cf?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络&#xff01;

dify:开源 LLMOps平台。

单纯笔记&#xff1a; 一、关于 Dify dify/README_CN.md at main langgenius/dify GitHub Dify 是一款开源的大语言模型&#xff08;LLM&#xff09;应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以…

单表复杂查询的场景分析二:涉及数据分组与分区/多重函数计算/SQL变种

SQL演练&#xff0c;带详细分析&#xff0c;笔记和备忘。行文不易&#xff0c;感谢支持&#xff01; 本文是单表下的复杂场景问题分析&#xff0c;具体看下面的每个需求。 接上文&#xff0c;本文为连载的第二篇。 目录 数据表及说明 需求8&#xff1a;找出指定月份每个人的…

C++—结构体

结构体&#xff08;struct&#xff09;&#xff0c;是一种用户自定义复合数据类型&#xff0c;可以包含不同类型的不同成员。 结构体的声明定义和使用的基本语法&#xff1a; // 声明结构体struct 结构体类型 { 成员1类型 成员1名称; ...成员N类型 成员N名称; };除声明…

Python导入Shapefile到PostGIS的常见问题和解决方案

导入Shapefile到PostGIS的常见问题和解决方案 先决条件&#xff1a; 已经拥有含有GDAL的python环境&#xff08;如果大家需要&#xff0c;我可以后面出一片文章 问题一&#xff1a;QGIS连接到PostGIS数据库失败 错误描述&#xff1a; Connection to server at &quo…

BCD编码(8421)介绍

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

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

云下到云上,丽迅物流如何实现数据库降本50% | OceanBase案例

在2024年3月20日的首场OceanBase数据库城市行活动中&#xff0c;专注于物流及供应链解决方案的丽迅物流的架构师阳磊&#xff0c;围绕“OB Cloud在丽迅物流的实践”这一主题&#xff0c;进行了精彩的演讲。本文为此次演讲的内容回顾。 在丽迅物流&#xff08;Lesoon Logistics…

论文精读-SRFormer Permuted Self-Attention for Single Image Super-Resolution

论文精读-SRFormer: Permuted Self-Attention for Single Image Super-Resolution SRFormer:用于单图像超分辨率的排列自注意 Params&#xff1a;853K&#xff0c;MACs&#xff1a;236G 优点&#xff1a; 1、参考SwinIR的RSTB提出了新的网络块结构PAB&#xff08;排列自注意力…

盘点28个免费域名申请大全

盘点28个免费域名申请大全 免费域名推荐学习使用&#xff0c;免费就意味着没任何保障。 名称稳定时间支持解析模式后缀格式说明地址EU.org28 年NS.eu.org/. 国家简写.eu.org需要审核&#xff0c;稳定性高&#xff0c;限制少&#xff0c;国内访问有问题&#xff0c;可 CFeu.orgp…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege" Dog dog = new Do…

10个最佳Android数据恢复工具,用于恢复已删除的文件

由于我们现在在智能手机上存储了许多重要文件&#xff0c;因此了解数据恢复工具变得很重要。您永远不会知道何时需要使用适用于Android的数据恢复工具。 由于不乏Windows数据恢复工具&#xff0c;因此从崩溃的计算机中恢复文件很容易。但是&#xff0c;当涉及到从Android恢复数…

adb卸载系统垃圾应用

//获取包名 输入如下代码&#xff0c;然后在打开和关闭要获取包名的app就会打印出该app的包名 adb shell am monitor //卸载系统应用 -k会保留用户数据&#xff0c;不包含-k则不会保留用户数据 adb shell pm uninstall -k --user 0 包名 &#xff08;包名一般为&#xff1a;c…