k8s的声明式资源管理

在k8s当中支持两种声明资源的方式:

1、 yaml格式:主要用于和管理资源对象

2、 json格式:主要用于在API接口之间进行消息传递

声明式管理方法(yaml)文件

1、 适合对资源的修改操作

2、 声明式管理依赖于yaml文件,所有的内容都在yaml文件当中。

3、 编辑好的yaml文件还是要靠陈述式命令发布到k8s集群当中。

分别有三种方式:

create
#只能创建,不能更新。从指定的yaml文件中读取配置。创建服务。不能更新服务。
apply -f
#既可以创建资源对象,也可以更新资源对象。如果yaml文件更改了,apply可以直接更新资源对象。(使用最多)
delete -f
#删除yaml文件中声明的资源对象。例如deployment、pod、service

如何生成yaml文件

1、 手动创建

2、 根据已有的资源直接生成

kubectl get deployments.apps nginx -o yaml > /opt/test.yaml
#基于已有资源直接创建yaml文件
kubectl apply -f test.yaml
#执行yaml文件
#只能运行一次。
#运行成功后如果还需要修改需要基于最新的deployment再创建yaml文件

kubectl apply -f test.yaml --force
#强制执行yaml文件
#如果不想使用最新的deployment再创建yaml文件可以使用--force强制执行

只要是基于yaml文件创建的的都可以导出

kubectl get svc nginx-service -o yaml > /opt/service.yaml
#基于已有的yaml文件生成

基于yaml文件创建的pod也都可以导出

kubectl get pod nginx-6fdbccbdbb-7lkzn -o yaml > /opt/service.yaml
#基于已有的yaml文件生成

常见的yaml类型

1、 deployment的yaml文件格式用于部署还有daemonset和statefulser

2、 service的yaml文件用于暴露服务端口

3、 不基于控制器的pod的yaml文件

deployment的yaml文件格式

kubectl explain deployment
#查看deployment详细信息
#只有deployment的API-VERSION版本是apps/v1vim nginx1.yaml
#创建yaml文件apiVersion: apps/v1
#声明api版本的标签
kind: Deployment
#定义资源的类型、角色或者是控制器.例如:service/pod/deployment/job/ingress/daemonset/statefulset
metadata:name: nginx1
#定义创建资源名称namespace: zyg
#定义命名空间labels:bqb: nginx1
#定义标签名称
#定义创建资源的元数据信息。例如:资源名称以及资源对象部署的命名空间也可以在这里声明、标签等等信息
spec:
#定义deployment资源需要的参数和属性replicas: 3
#定义副本数selector:
#定义标签选择器。属于哪个标签。满足哪个标签的资源定义副本数为3matchLabels:bqb: nginx1
#选择匹配的标签需要和上面定义的标签完全对应template:
#定义业务的模板。如果定义了多个副本,那么所有的副本属性都会按照模板的配置进行匹配。副本使用的配置是>哪些。metadata:labels:bqb: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配spec:containers:- name: nginximage: nginx:1.10ports:- containerPort: 80
#声明容器的相关参数。包括:容器的命名/容器的版本/容器的暴露端口号。
#虽然这里指定了暴露端口号是80,nginx镜像默认端口就是80.
#即使定义了别的端口,也不会改变容器的默认端口。
#如果不是默认端口,则需要在这里声明端口号
#      ports:
#      - containerPort: 80

service的yaml文件

kubectl explain service
#查看service详细信息vim nginx-service.yaml#定义API版本:
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: zyglabels:bqb: nginx1
#元数据信息包括:service的名称,所属的命名空间。以及要匹配的deployment的标签。要和之前的保持一致
spec:type: NodePortports:- port: 80
#定义service内部暴露的端口targetPort: 80
#定义容器对外暴露的端口nodePort: 30000
#定义外部端口如果有需要可以直接定义selector:bqb: nginx1
#这里的标签是为了匹配所有的标签都是bqb: nginx1的pod的后端提供服务kubectl apply -f nginx-service.yaml
kubectl get svc -n zyg

pod的yaml文件

kubectl explain pod
#查看pod详细信息vim nginx-pod.yaml#定义pod的apiVersion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称/所属的命名空间/标签等信息
metadata:name: centos1namespace: zyg
#定义运行在哪个命名空间
spec:restartPolicy: Never
#pod内的容器如果启动失败或者有问题时的重启策略
#Always:永不重启/Never:从不重启/Onfailure:只有异常退出才会重启。状态码非0则重启.如果状态码是0则不重启
#restartPolicy:是容器的重启策略。
#如果资源类型定义为deployment这个容器的重启策略只能是Always。不写默认是Alwayscontainers:- name: centosimage: centos:7kubectl apply -f nginx-pod.yaml
kubectl get pods -n zyg

restartPolicy的三种状态码

pod内的容器如果启动失败或者有问题时的重启策略

Always:一直重启

Never:从不重启

Onfailure:只有异常退出才会重启。状态码非0则重启.如果状态码是0则不重启

command和args

command、args定义容器运行的命令参数。类似于docker中的CMD和entrypoint

command、arges只能存在一个。args可以给command传参

  containers:- name: centosimage: centos:7command: ["echo"]args: ["hello,world!"]
#启动时候默认执行的命令
#args可以给command传参类似于(CMD和entrypoint)
#如果在yaml文件中定义了输出内容,就会覆盖掉原来容器内部的标准输出

command和args都会覆盖原容器的标准输出(CMD和entrypoint)

args的写法

例如:

写法1:
containers:- name: centosimage: centos:7args: - /bin/bash
#默认执行的shell- -c
#表示命令行- while true; do sleep 3600; done
#执行的命令,多个命令需要用分号隔开写法2:containers:- name: centosimage: centos:7args: ["/bin/bash", "-c", "touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
#在一行定义多个内容需要用逗号隔开。多个命令需要用分号隔开
#执行多个命令必须要加"/bin/bash", "-c"
#-c:表示输出命令的格式kubectl exec -it centos1 -n zyg -- cat /opt/123.txt
#使用--可以直接在容器外部查看容器内部的信息

command写法

 写法1:containers:- name: centosimage: centos:7command: ["/bin/bash", "-c", "touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
#在一行定义多个内容需要用逗号隔开。多个命令需要用分号隔开
#执行多个命令必须要加"/bin/bash", "-c"写法2:containers:- name: centosimage: centos:7command: ["/usr/bin/test", "-e", "/etc/passwd"]
#这样的格式只能执行单个命令。需要加上绝对路径

command和args的总结

同一个yaml文件内command和args只能存在一个表示容器启动时的命令

除非需要传参的时候command和args可以同时出现

无论是args或者是command都会覆盖CMD和entrypoint标准输出

建议写在一行提高可读性

总结

1、 三种发布方式

蓝绿发布、灰度发布(目前最常用)、滚动发布(基于deployment默认的发布模式)

灰度发布(目前最常用):基于deployment的滚动发布,使用了暂停的机制。pause(暂停)/resume(继续)。只有所有升级完毕之后才可以回滚

2、 三种yaml文件类型

1、 deployment的yaml文件格式用于部署还有daemonset和statefulser

2、 service的yaml文件用于暴露服务端口

3、 不基于控制器的pod的yaml文件

yaml文件内的模板模块:

deployment类型

apiVersion模块:apps/v1。只有deployment是apps/v1

kind模块:所有的类型都是由kind声明

在kind之后生成

kind之后的第一个字母需要大写

metadata模块:这一部分中namespace(命名空间)需要已经存在,否则不会自动创建。需要手动创建。

spec模块:定义副本数、标签选择器等信息

template模块:定义了业务模板需要和之前的标签保持一致

spec模块:这里的spec属于业务模板模块。这里定义的是容器的信息。定义容器名称,定义镜像版本。也可以指定容器的暴露端口。

但是需要注意。如果容器的默认端口没有修改。yaml文件中定义暴露端口不会生效。所以如果是默认的服务可以不加定义端口

service类型

apiVersion模块:v1

spec模块:中port是service的暴露端口,targetPort是容器的暴露端口。

tpye模块:的类型

pod类型

apiVersion模块:v1

spec模块:这一模块中的 restartPolicy定义pod内的容器如果启动失败或者有问题时的重启策略 Always:一直重启

Never模块:从不重启

Onfailure:只有异常退出才会重启。状态码非0则重启.如果状态码是0则不重启

restartPolicy:是容器的重启策略。

如果资源类型定义为deployment这个容器的重启策略只能是Always。不写默认是Always

command和args

同一个yaml文件内command和args只能存在一个表示容器启动时的命令,不要同时出现

除非需要传参的时候可以同时出现

无论是args或者是command都会覆盖CMD和entrypoint标准输出

建议写在一行提高可读性

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

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

相关文章

内存管理机制

内存管理机制与内存映射相关。 一、C与C 之所以将C与C放在一起是因为C是C的超集; 但是C是面向过程语言,C是面向对象的语言; C与C都可以使用malloc、calloc、realloc来申请内存空间; 其中void* malloc(size_t size)是在内存的动态…

2023年度回顾:怿星科技的转型与创新

岁月不居,时节如流。随着2023年的落幕,怿星科技在这一年中不仅实现了自身的转型,还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年,怿星科技正式完成了从服务型公司向产品型公司的战略转变,…

软件测试方法分类-按照开发阶段划分细讲

前面我给出了整体的软件测试分类,那么接下来,我会将每个分类进行细讲。 第一个我们要说到的就是按照开发阶段划分。 我们都知道软件测试方法分类中,如果按照开发阶段划分,可以分为: 1,单元测试 (Unit Te…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK,发现 虚拟机默认的 200G 空间不足了,因此想增加这个 200G 空间的限制,通过网络上查找了一些方法,加上自己亲自验证,确认 硬盘扩容 正常,方法也比较的容易&a…

P5534 【XR-3】等差数列————C++、C

目录 【XR-3】等差数列题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 【XR-3】等差数列 题目描述 小 X 给了你一个等差数列的前两项以及项数,请你求出这个等差数列各项之和。 等差数列&#…

如何使用idea部署springboot项目全过程

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

k8s的陈述式管理

k8s的陈述式管理: 所谓的陈述式管离也就是命令行工具 优点:90%以上都可以满足 对资源的增删查比较方便,对改不是很友好 缺点:命令比较冗长,复杂,难记 声明式: k8s当中的YAML文件来实现资源管…

对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

前言 一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个…

Axure骚操作:【制作可暂停与不可暂停进度加载条】

目录 一、不可暂停进度条 1.1 前期准备 1.2 效果假想 1.3 适用场景 1.4 实现步骤 (1)除按钮外的元件设置隐藏 (2)给按钮添加交互 (3)给变量值文本标签添加交互 (4)给进度条矩…

android开发百度地图api实现定位图标随手机方向转动

该功能的实现依赖于手机中的传感器元件如陀螺仪、加速度计等,具体开发详见android的官方开发文档: 传感器概览 | Android 开发者 | Android Developershttps://developer.android.com/guide/topics/sensors/sensors_overview?hlzh-cn要自定义一个传…

zookeeper之集群搭建

1. 集群角色 zookeeper集群下,有3种角色,分别是领导者(Leader)、跟随着(Follower)、观察者(Observer)。接下来我们分别看一下这三种角色的作用。 领导者(Leader): 事务请求(写操作)的唯一调度者和处理者,保…

【Spring Security】认证之案例的使用、MD5加密、CSRF防御

目录 一、引言 1、什么是SpringSecurity认证 2、为什么使用SpringSecurity之认证 3、实现步骤 二、快速实现(案例) 1、添加依赖 2、配置 3、导入数据表及相关代码 4、创建登录页及首页 5、创建配置Controller 6、用户认证 6.1、用户对象User…

【LabVIEW FPGA入门】创建第一个LabVIEW FPGA程序

本教程仅以compactRIO(FPGA-RT)举例 1.系统配置 1.1软件安装 FPGA-RT 1. LabVIEW Development System (Full or Professional) 2. LabVIEW Real-Time Module 3. LabVIEW FPGA Module 4. NI-RIO drivers 1.2硬件配置 1.使用线缆连接CompactRIO至主机…

uniapp的css样式图片大小截图展示

目录 截取图片前截取图片后第一种方式&#xff1a;代码第二种方式&#xff1a;代码最后 截取图片前 截取图片后 第一种方式&#xff1a;代码 <view class"swiper-box-img"><image class"swiper-box-img-img" :src"item.file_path" mod…

ARM CCA机密计算架构软件栈之软件组件介绍

在本节中,您将了解Arm CCA的软件组件,包括Realm World和Monitor Root World。以下图表展示了Arm CCA系统中的软件组件: 在这个图表中,世界之间的边界显示为粗虚线。由较高权限的软件强制执行的较低权限软件组件之间的边界显示为细虚线。例如,非安全EL2处的虚拟机监视器强制…

java企业网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web企业网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

Jenkins的Transfers路径怎么配置,解决Transfers配置不生效的问题

Transfers配置: 1.配置Source files: 要填写jar包的相对路径,从当前项目工作空间的根目录开始,看看我的工作空间你就懂了 !如图 我填的是 parent/build/libs/parent-1.0.0.jar,即不要 fdw1/ 的前缀 2.配置Remote directory: 远程目标文件夹,也就是你jar包要放到远程…

第一个Python程序

安装好python解释器之后呢&#xff0c;我们打开PyCharm 这里选择使用本地解释器 注意这个python.exe的路径&#xff0c;AppData是隐藏文件夹 创建完成项目之后&#xff0c;点击new->Python File 写入 print(hello world)输出

分布式【zookeeper面试题12连问】

1. 面试官&#xff1a;工作中使用过Zookeeper嘛&#xff1f;你知道它是什么&#xff0c;有什么用途呢&#xff1f; 「小菜鸡的我&#xff1a;」 有使用过的&#xff0c;使用ZooKeeper作为**「dubbo的注册中心」&#xff0c;使用ZooKeeper实现「分布式锁」**。ZooKeeper&#…

Kafka安全认证机制详解之SASL_PLAIN

一、概述 官方文档&#xff1a; https://kafka.apache.org/documentation/#security 在官方文档中&#xff0c;kafka有五种加密认证方式&#xff0c;分别如下&#xff1a; SSL&#xff1a;用于测试环境SASL/GSSAPI (Kerberos) &#xff1a;使用kerberos认证&#xff0c;密码是…