k8s的yaml文件管理

声明式管理方法:

  • 1.适合于对资源的修改操作
  • 2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理
  • 资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)
  • 3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里
  • 4.语法格式:kubectl create/apply/delete -f xxxx.yaml

//查看资源配置清单

kubectl get deployment nginx -o yaml

//解释资源配置清单

kubectl explain deployment.metadatakubectl get service nginx -o yaml
kubectl explain service.metadata


 

 //修改资源配置清单并应用

在线修改:

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改


 离线修改:

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

 

 //删除资源配置清单

陈述式删除:
kubectl delete service nginx声明式删除:
kubectl delete -f nginx-svc.yaml

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

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

YAML 语法格式:

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

//查看 api 资源版本标签
kubectl api-versions
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1								#如果是业务场景一般首选使用 apps/v1
apps/v1beta1						#带有beta字样的代表的是测试版本,不用在生产环境中
apps/v1beta2
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/v1beta1
coordination.k8s.io/v1beta1
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
scheduling.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1

//写一个yaml文件demo 

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: 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 create -f nginx-deployment.yaml

//查看创建的pod资源

kubectl get pods -o wide

//创建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

注:

在k8s的service对象(申明一条访问通道)中,其中有一个字段:externalTrafficPolicy。可设置为:

  • Local:只转到本节点的容器
  • Cluster:可以转到其它节点的容器

//创建资源对象

kubectl create -f nginx-service.yaml 

//查看创建的service

kubectl get svc

详解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。

如何获取资源配置清单文件模板(yaml配置文件) 

//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//查看生成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//查看生成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//使用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

1)手撕yaml配置文件,可根据 kubectl explain 命令获取字段信息
2)无中生有的方式:kubectl create|run|expose  ....  --dry-run=client  -o yaml  > XXX.yaml
3)查看已存在的资源配置方式:kubectl get <资源类型> <资源名称> -n 命令空间 -oyaml > XXX.yaml
                             kubectl edit <资源类型> <资源名称>  手动复制资源配置,再粘贴到文件中
4)复制官方文档的资源配置案例                             

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

kubectl get svc nginx-service -o yaml//保存到文件中
kubectl get svc nginx-service -o yaml > my-svc.yaml//查看字段帮助信息,可一层层的查看相关资源对象的帮助信息
kubectl explain deployments.spec.template.spec.containers
或
kubectl explain pods.spec.containers


 

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

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

相关文章

内存快照:宕机后,Redis如何实现快速恢复?RDB

AOF的回顾 回顾Redis 的AOF的持久化机制。 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量不大。一般而言&#xff0c;只要你采用的不是 always 的持久化策略&#xff0c;就不会对性能造成太大影响。 …

伪原创神码ai怎么样【php源码】

这篇文章主要介绍了python汉化补丁包下载&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; ** Spyder汉化&#xff08;python汉化&…

打造个性化观影盛宴:对实时多兴趣召回的探索

包括 Tubi 在内的广告型点播流媒体服务&#xff0c;正在成为免费在线消费娱乐的重要组成部分。Tubi 拥有一个囊括电视剧、电影、体育和娱乐直播频道的海量视频内容库&#xff1b;同时&#xff0c;Tubi 为观众提供个性化的视频推荐&#xff0c;帮助观众快速找到想看的视频内容&a…

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

整理mongodb文档:改

个人博客 整理mongodb文档:改 求关注&#xff0c;求批评&#xff0c;求进步 文章概叙 本文主要讲的是mongodb的updateOne以及updateMany&#xff0c;主要还是在shell下进行操作&#xff0c;也讲解下主要的参数upsert以及更新的参数。 数据准备 本次需要准备的数据不是很多…

python --windows获取启动文件夹路径/获取当前用户名/添加自启动文件

如何使用Python获取计算机用户名 一、Python自带的getpass模块可以用于获取用户输入的密码&#xff0c;但是它同样可以用来获取计算机用户名。 import getpassuser getpass.getuser() print("计算机用户名为&#xff1a;", user)二、使用os模块获取用户名 Python的…

Centos7.9系统_亲测成功_磁盘满了_分区和挂载新盘_创建文件夹并挂载分区---Linux工作笔记057

由于在某些部署环境下,运维管理员,仅仅是给分配一些硬盘容量,但是并没有进行分区和挂载到对应的合适的目录下,因此这个时候就需要我们自己去处理了. 这个是自己亲测成功的:由于是后面记录的,尽量记录详细 free -h 查看一下内存情况 df -h查看 硬盘的使用情况,还有是否有没挂载…

以数据为中心的标记语言--yaml

&#x1f600;前言 本篇博文是关于以数据为中心的配置文件yaml的说明和应用&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&…

设计模式--策略模式

目录 一.场景 1.1场景 2.2 何时使用 2.3个人理解 二. 业务场景练习 2.1业务: 2.2具体实现 2.3思路 三.总结 3.1策略模式的特点&#xff1a; 3.2策略模式优点 3.3策略模式缺点 一.场景 1.1场景 许多相关的类仅仅是行为有异&#xff0c;也就是说业务代码需要根据场景不…

物联网的定义、原理、示例、未来

什么是物联网? 物联网 (IoT) 是指由嵌入传感器、软件和网络连接的物理设备、车辆、电器和其他物理对象组成的网络&#xff0c;允许它们收集和共享数据。这些设备(也称为“智能对象”)的范围可以从简单的“智能家居”设备(如智能恒温器)到可穿戴设备(如智能手表和支持RFID的服…

C++:string类模拟实现

C&#xff1a;string类模拟实现 成员变量构造和析构容量相关1.获取容器大小(_size)和容量(_capacity)2.扩容(reserve)3.更改容器大小 修改相关1.尾插2.指定位置插入3.指定位置删除4.清空5.交换两个对象 比较相关访问相关迭代器相关查找相关其它成员函数1.截取子串2.取得C格式字…

记录一次使用python调用java代码

Python调用Java代码的主要原理是通过使用Java虚拟机&#xff08;JVM&#xff09;和相关的库/工具实现的。 在Python中&#xff0c;可以使用以下几种方式来调用Java代码&#xff1a; 使用subprocess模块&#xff1a;可以通过subprocess模块来启动一个子进程&#xff0c;并在子进…