当前位置: 首页 > news >正文

K8s的常用命令以及yaml文件的创建

目录

一、声明式管理方法:YAML文件

1、yaml文件简介

2、yaml和json的主要区别:

3、YAML的语法格式

4、yaml文件组成部分

①控制器定义

5、查看api资源版本标签

6、编写nginx-deployment.yaml资源配置清单

6.1创建资源对象

6.2查看创建的pod资源

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

二、K8s中的port概述

①port

②nodeport

③targetport

④containerport

1、创建yaml文件模板

2、查看生产yaml格式

3、查看生成的json格式

4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

5、查看字段帮助信息

6、怎样可以更轻松的写yaml

6.1用run命令生成

6.2用get命令导出

6.3yaml文件的学习方法

三、具体案例

1、案例需求:


一、声明式管理方法:YAML文件

①适合对资源的修改操作

②声明式资源管理方法依赖于资源配置清单文件对资源进行管理

③资源配置清单文件有两种格式:yaml(人性化,已读),json(易于api接口解析)

④对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群中

⑤语法格式:kubectl create/apply/delete -f xxx.yaml

1、yaml文件简介

YAML仍然是一种标记语言,主要强调这种语言是以数据为中心,而不是以标记为中心,而像XML语言就使用了大量的标记。

YAML可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类型,还可以简单表达属组,散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构,各种配置文件。

yaml配置文件的后缀为.yml

2、yaml和json的主要区别:

①yaml使用空格缩进,这是python开发人员熟悉的领域

②javascript开发人员喜欢JSON,因为它是javascript的一个子集,可以直接在Javascript中解释和编写,同时使用简写方式生命JSON,在使用没有空格的典型变量名时,不需要键中的双引号。

③有很多解释器在YAML和JSON的所有语言中都能很好的工作。

④在许多情况下,yaml的空白格式可以更容易查看,因为格式化需要更人性化的方法

⑤如果您的编辑器中没有空格可见或缩进线指示符,那么yaml的空白虽然更紧凑,更容易查看,蛋可能难以手动编辑。

⑥JSON的序列化和反序列化要快得多,因为要检查的功能明显少于yaml,这使得更小更轻的代码能够处理JSON

⑦一个常见的误解是yaml需要较少的标点符号并且比JSON更紧凑,但这是完全错误的。空格是不可兼得,所以看起来字符比较少,但是如果你计算实际的空格是必要的,以便于正确解释yaml以及正确的缩进,你会发现yaml实际上需要比json更多的字符。json不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。

3、YAML的语法格式

Kubernetes支持yaml和json格式管理资源对象

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

YAML格式:用于配置和管理,YAML的配置参数格式比较清晰

语法格式:

①大小写敏感

②以空格的方式缩进表示层级关系

③通常开头缩进两个空格(统一层级对应即可)

④不支持指标符tab缩进,只对空格表示缩进

⑤关键词字符后缩进一个空格,比如冒号都好后面需要缩进一个字符

⑥---表示yaml格式一个文件的开始

⑦支持“#”表示注释

4、yaml文件组成部分

①控制器定义

5、查看api资源版本标签

kubectl api-versions

如果是业务场景,一般首选使用 apps/v1(apps/v1 从 v1.9 版本开始提供 API)。在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 从 v1.20 版本开始不再提供 Ingress 资源。带有 beta 字样的代表的是测试版本,不用在生产环境中。

6、编写nginx-deployment.yaml资源配置清单

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

6.1创建资源对象
kubectl create -f nginx-deployment.yaml
或者
kubectl apply -f nginx-deployment.yaml

6.2查看创建的pod资源
kubectl get pods -o wide -n kube-publickubectl get deploy -n kube-public

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

vim nginx-service.yamlapiVersion: v1
kind: Service
metadata:name: nginx-demo1namespace: kube-publiclabels:name: nginx-demo1
spec:type: NodePortports:- port: 8080targetPort: 80nodePort: 31111selector:app: nginx-demo1kubectl apply -f nginx-service.yamlkubectl get svc -n kube-public在浏览器输入 nodeIP: nodePort 即可访问
http://192.168.223.11:31111

二、K8s中的port概述

①port

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

②nodeport

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

③targetport

tarport是pod的端口,从port或nodeport来的流量经过kube-proxy反向代理负载均衡转发到后端pod的targetpod上,最后进入容器

④containerport

containerport是pod内部容器的端口,targetport映射到containerport

1、创建yaml文件模板

kubectl run --dry-run打印相应的api对象而不是执行创建

--dry-run:试运行 kubectl run nginx-ceshi --image=nginx --port=80  --dry-run

--dry-run表示试运行,不是真正的执行命令(测试命令是否正确),即并不会真的创建出pod和deployment实例,去掉该参数后即可真正执行命令。

2、查看生产yaml格式

使用--dry-run试运行可不触发生产命令,然后通过-o yaml可实现对其yaml资源配置清单的查看

kubectl run nginx-ceshi --image=nginx --port=80  --dry-run -o yaml

3、查看生成的json格式

可以通过-o json查看该命令产生的json配置清单

4、通过yaml格式导出生成模板,并进行修改以及删除一些不必要的参数

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

模板:
vim nginx-ceshi.yaml
apiVersion: apps/v1betal     #api 版本改成 api/v1
kind: Deployment
metadata:creationTimestamp: null    #删除labels:run: nginx-ceshiname: nginx-ceshi
spec: replicas: 3selector: matchLabels: run: nginx-ceshistrategy: {}                #删除template: metadata: creationTimestamp: null #删除labels: run: nginx-ceshispec: containers: - image: nginxname: nginx-ceshiports: - containerPort: 80resources: {}         #删除
status: {}                    #删除

生成镜像并查看

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

kubectl get pod/nginx-deployment-6f9f6d866c-w2sdc -o yaml -n kube-public###注现在最新版本的kubctl  get 不支持 --export 参数

保存到文件中

kubectl get deployment.apps/nginx-deployment -o yaml -n kube-public > my-deploy.yaml

5、查看字段帮助信息

explain可以一层层的查看相关资源对象的帮助信息

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

6、怎样可以更轻松的写yaml

6.1用run命令生成

没有相关资源,使用run或者create命令--dry-run选项,后期可以修改yaml文件

kubectl run my-deploy --image=nginx --dry-run -o yaml > my-deploy.yaml
6.2用get命令导出

已有相关资源,使用get命令{--export选项:使用老版本的kubectl}

kubectl get deploy/nginx-deployment -o=yaml -n kube-public > new.yaml
6.3yaml文件的学习方法

①多看别人(官方)写的,能读懂
②能照着现场的文件改着用
③遇到不懂的,善用kubectl explain ...命令查看

三、具体案例

1、案例需求:

①自主式的pod pod

②资源名称:my-nginx-ky35

③命名空间:my-ky35

④容器镜像:nginx:1.14

⑤容器端口:80

⑥标签:njzb:my-ky35

⑦创建srvice去关联上面的pod

⑧修改页面,显示woshichaoren对外访问 输入地址就能访问

mkdir /opt/demo
[root@master01 ~]]#cd /opt/demo/
[root@master01 demo]]#vim pod-ns-svc.yaml

相关文章:

  • ABC354学习笔记
  • 基于Arduino IDE的ESP32开发环境搭建
  • PyQt6--Python桌面开发(33.QToolBar工具栏控件)
  • java “错误:编码GBK 的不可映射字符”
  • 云计算和大数据处理
  • 9.1 Go语言入门(环境篇)
  • 增强版 Kimi:AI 驱动的智能创作平台,实现一站式内容生成(图片、PPT、PDF)!
  • C++中string类的初步介绍
  • Spring Web MVC(2)
  • day16二叉树part03 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
  • 应用程序图标提取
  • Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)
  • 卡码网笔试 | 118 小y删数字、119 小红的字符串切割、120 小红的数字匹配
  • 如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!
  • Crontab 自动脚本实例 | 校园网保持联网
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Angularjs之国际化
  • golang 发送GET和POST示例
  • Java-详解HashMap
  • mongodb--安装和初步使用教程
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 高度不固定时垂直居中
  • 关于Flux,Vuex,Redux的思考
  • 两列自适应布局方案整理
  • 推荐一个React的管理后台框架
  • 移动端唤起键盘时取消position:fixed定位
  • HanLP分词命名实体提取详解
  • 国内开源镜像站点
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​MySQL主从复制一致性检测
  • ​字​节​一​面​
  • #if #elif #endif
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #nginx配置案例
  • #前后端分离# 头条发布系统
  • $$$$GB2312-80区位编码表$$$$
  • (1)svelte 教程:hello world
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (4)logging(日志模块)
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)windows配置JDK环境
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)c52学习之旅-流水LED灯
  • (学习日记)2024.01.19
  • (转)shell调试方法
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework 3.5安装教程
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .Net Redis的秒杀Dome和异步执行
  • .Net Remoting常用部署结构