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/v1

vim 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:
#定义标签选择器。属于哪个标签。满足哪个标签的资源定义副本数为3
    matchLabels:
      bqb: nginx1
#选择匹配的标签需要和上面定义的标签完全对应
  template:
#定义业务的模板。如果定义了多个副本,那么所有的副本属性都会按照模板的配置进行匹配。副本使用的配置是>哪些。
    metadata:
      labels:
        bqb: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配
  spec:
    containers:
    - name: nginx
      image: nginx:1.10
      ports:
      - 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-service
  namespace: zyg
  labels:
    bqb: nginx1
#元数据信息包括:service的名称,所属的命名空间。以及要匹配的deployment的标签。要和之前的保持一致
spec:
  type: NodePort
  ports:
  - 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: centos1
  namespace: zyg
#定义运行在哪个命名空间
spec:
  restartPolicy: Never
#pod内的容器如果启动失败或者有问题时的重启策略
#Always:永不重启/Never:从不重启/Onfailure:只有异常退出才会重启。状态码非0则重启.如果状态码是0则不重启
#restartPolicy:是容器的重启策略。
#如果资源类型定义为deployment这个容器的重启策略只能是Always。不写默认是Always
  containers:
  - name: centos
    image: centos:7
    
kubectl 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: centos
    image: centos:7
    command: ["echo"]
    args: ["hello,world!"]
#启动时候默认执行的命令
#args可以给command传参类似于(CMD和entrypoint)
#如果在yaml文件中定义了输出内容,就会覆盖掉原来容器内部的标准输出

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

args的写法

例如:

写法1:
containers:
  - name: centos
    image: centos:7
    args: 
    - /bin/bash
#默认执行的shell
    - -c
#表示命令行
    - while true; do sleep 3600; done
#执行的命令,多个命令需要用分号隔开

写法2:
  containers:
  - name: centos
    image: centos:7
    args: ["/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: centos
    image: centos:7
    command: ["/bin/bash", "-c", "touch /opt/123.txt; echo 123 > /opt/123.txt; sleep 3600"]
#在一行定义多个内容需要用逗号隔开。多个命令需要用分号隔开
#执行多个命令必须要加"/bin/bash", "-c"

 写法2:
  containers:
  - name: centos
    image: centos:7
    command: ["/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.mfbz.cn/a/287109.html

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

相关文章

小白入门基础 - tomcat

一:前言 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为&#x…

【解决】Unity 设置跨设备分辨率表现

开发平台:Unity 2018版本以上 开发语言:CSharp 编程平台:Visual Studio 2022   问题描述 使用 UnityEngine.dll 中关于设置分辨率的方法时,无法满足应用以设定分辨率进行屏幕显示问题。因而造成画面不同程度的拉伸情况。而这种情…

[概率论]四小时不挂猴博士

贝叶斯公式是什么 贝叶斯公式是概率论中的一个重要定理,用于计算在已知一些先验信息的情况下,更新对事件发生概率的估计。贝叶斯公式的表达式如下: P(A|B) P(B|A) * P(A) / P(B) 其中,P(A|B)表示在事件B发生的条件下事件A发生的概…

【Emgu.CV教程】第21篇 、色彩处理之ConvertTo()函数改变图像的亮度和对比度

先画重点: 亮度是指图像的整体明亮程度。增加亮度会使图像整体变得更加明亮,而减少亮度则会使图像变暗。对比度是指图像中不同区域之间亮度差异的程度。它衡量了图像中最亮和最暗区域之间的差异。对比度高的图像明暗差异大,而对比度低就是明…

2024.1.2 安装JDK和Eclipse,并配置java编译环境

2024.1.2 安装JDK和Eclipse,并配置java编译环境 一直对java一知半解,利用春节前一个月时间补补课。 一、安装jdk 首先在oracle官网上下载jdk,这里选jdk17,选择第二项直接安装,第一项是压缩文件,带有一些…

二分图的最大权匹配

二分图的最大权匹配 二分图的最大匹配 匈牙利算法 思路&#xff1a;将点分为两类&#xff0c;左边的点和右边的点。每次尝试给左边的点找一个右边的点与之匹配&#xff0c; for (int i 1; i < n; i) {Arrays.fill(st, false);//为什么要每次都要重置stif (find(i)) res…

企业CIO如何面对数字化转型

随着互联网新技术的不断发展&#xff0c;必将导致商业模式的改变&#xff0c;企业信息化的内涵也将发生改变。IT在企业的定位更可能会上升到合作伙伴型与引领型这些较高的层面&#xff0c;IT架构模式、系统建设模式、IT部门结构等都将发生质变。而数字化时代必定属于CIO的时代&…

浅谈余压监控系统在某高层住宅的应用方案

【摘要】&#xff1a; 本文介绍了余压监控系统的基本架构和功能&#xff0c;结合某高层住宅建设实例分析了高层民用建筑中设置此系统的优点与必要性&#xff0c;总结了余压监控系统的功能用于高层建筑物中楼梯间和前室、前室和走道之间的余压的监控与调节&#xff0c;使监控区域…

第一个Qt程序----Hello word!

从今天起就开始我们的第一个Qt小程序&#xff0c;点击New Project后点击右侧的Application后点击Qt Widgets Application。Qt Widgets 模块提供了一组UI元素用于创建经典的桌面风格的用户界面&#xff0c;Widgets是小部件的意思&#xff0c;也可以称为控件&#xff0c;因此Qt …

DevOps成熟度评估模型

什么是DevOps 随着敏捷软件方法的广泛采用&#xff0c;以及IT基础设施即程序代码的管理方式的推广&#xff0c;DevOps也应运而生了。 DevOps 是通过人、流程和技术的有机整合&#xff0c;以协作、自动化、精益、度量和共享文化为指引&#xff0c;旨在建立一种可以快速交付价值…

嵌入式-C语言-const关键字-指针常量和常量指针

C语言-指针常量和常量指针 一&#xff1a;结论 1.常量指针 &#xff1a;b的值不能变&#xff0c;但是b的地址能变 const int* b &x; 2.指针常量&#xff1a;p的地址不能变&#xff0c;但是p的值能变 int* const p &y; 3.巧记口诀 星在&#xff08;const&#xf…

autograd与逻辑回归

一、autograd—自动求导系统 torch.autograd.backward() torch.autograd.backward()是PyTorch中用于计算梯度的函数。以下是对该函数的参数的解释&#xff1a; 功能&#xff1a;自动求取梯度 • tensors: 用于求导的张量&#xff0c;如 loss • retain_graph : 保存计算图 •…

Zero-shot:半监督:pansharpening

Zero-shot semi-supervised learning for pansharpening &#xff08;用于全色锐化的零次半监督学习&#xff09; 全色锐化是指融合低分辨率多光谱图像&#xff08;LRMS&#xff09;和高分辨率全色&#xff08;PAN&#xff09;图像以生成高分辨率多光谱图像&#xff08;HRMS&…

安卓学习笔记

一、eclipse问题记录 &#xff08;1&#xff09;."Android requires compiler compliance level 5.0 or 6.0.Found 1.3 instead. Please useAndroid Tools > Fix Project Properties." 问题描述&#xff1a;"Android要求编译器兼容级别为5.0或6.0。但找到的…

GZ075 云计算应用赛题第3套

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenSt…

720VR全景通微信小程序商业运营版+多用户+云储存+大图切图效率高+完整的代码包以及搭建教程 功能强大

随着科技的飞速发展&#xff0c;虚拟现实技术已经逐渐融入我们的日常生活。其中&#xff0c;720VR全景技术以其独特的视角和沉浸式体验&#xff0c;受到了广泛的关注和应用。为了满足市场需求&#xff0c;春哥团队推出了720VR全景通微信小程序商业运营版&#xff0c;集多用户、…

Python - 深夜数据结构与算法之 DP

一.引言 常规算法介绍的差不多&#xff0c;最不喜欢的动态规划 Dynamic Programming 还是来啦&#xff0c;前面介绍贪心算法时以及一些最大最小收益等等的问题&#xff0c;其实都可以套用动态规划的思路来实现的&#xff0c;下面我们看看动态规划的思路与模版要点。 二.动态规…

案例分享:Qt多国语言输入法软键盘

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/135346374 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

HTML制作暴雨特效

🎀效果展示 🎀代码展示 <body> <!-- partial:index.partial.html --> <canvas id="canvas-club">

猫粮有营养吗?性价比高的主食冻干猫粮测评

随着养猫的人越来越多&#xff0c;铲屎官们对猫咪的饮食也越来越注重。除了猫粮&#xff0c;很多铲屎官还会给猫咪准备小零食。那么&#xff0c;猫咪是不是除了猫粮就没有其他可吃的了呢&#xff1f;答案当然不是。猫咪还有猫冻干、冻干猫粮、猫条等可以选择。每个铲屎官都希望…