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

3、k8s项目的生命周期和yaml文件

项目的生命周期

创建——>发布——>更新——>回滚——>删除

为什么宿主机不能直接与pod映射

为什么宿主机不能直接与pod映射,中间要有集群?

service一旦和控制器的标签关联之后,会自动的发现该控制器pod的变化自动的获取pod的数量和ip地址的变化。

service既可以关联一个控制器,也可以关联多个控制器,也可以关联pod。

pod是不断变化的,service是不变的。所以必须要有一个中间的状态。

service的类型

1、ClusterIP:当设置控制器的暴露端口时,不指定type,默认就是clusterip,是service的默认类型。访问这个IP可以直接访问pod,但是外部的请求是不能直接到达的。仅限于集群内部的通信。

2、NodePort:需要在创建的时候指定端口类型:--type=NodePort,一旦设定NodePort,会在每个节点上都开放一个端口,每个节点上的端口都是相同的,NodePort的端口号的范围30000-32767

3、LoadBalancer:这个地址一般是云平台服务商提供的地址,仅限于公有云服务平台上设置的service。可以通过这个地址直接访问,实现负载均衡。

4、ExternalName:不能提供负载均衡的服务,service映射到集群外的域名,不涉及后端的pod负载均衡。(一般不用,了解即可)

pod的镜像更新-set

  • deployment的更新方式是滚动更新,也更新其中一部分,然后更新所有

pod的镜像更新就是修改pod的镜像文件

pod的镜像回滚-rollout

回滚用于命令行控制。可以回滚到上一次的操作,也可以隔代。

查看更新过的历史版本

  • 更新时加上record可以记录版本
  • 数字越大表示最近的版本

pod的镜像回滚

项目的发布3种方式

蓝绿发布

把应用服务器分为蓝组和绿组。

要先升级蓝组,先把蓝组从负载均衡中移除出去,绿组继续为用户提供服务。升级蓝组,蓝组升级完毕之后,加入到负载均衡当中,把绿组移除,再升级绿组完成之后,再把绿组加入到负责均衡当中去。

特点:

1、如果升级有问题,影响范围比较大。

2、发布策略简单

3、用户无感知,平滑过度。

早期成本是比较高的,现在有了负载均衡之后,成本也降低了。

金丝雀发布

在升级的时候,先升级一小部分,然后暂停整个升级,一部分是新的,另一大部分还是旧的。

筛选出一小部分用户在新的版本上应用,观察,如果没有问题再把剩余的部分全部更新到新的版本。

特点:

1、一旦出现问题,影响范围很小,调整和修复也很快。

2、充分评估了版本的性能,稳定,出问题的话对用户的体验影响也很小。

3、用户无感知,平滑过渡。

滚动更新

k8s的deploymen的t默认更新方式。

yaml文件

基于yml文件创建pod

配置pod.yml文件

运行yml文件创建pod

删除基于yml文件的pod

  • 删除yml文件会删除基于这个yml文件创建的pod

基于yml文件创建deployment

配置deployment.yml文件

运行之后可以看出,由deployment控制器创建的pod成功。

也可以直接暴露宿主机的端口做映射,但是这种方式只能映射node节点的80端口而不能映射master的端口。

如果想要所有节点都做映射,需要将kind:deployment换成daemonset,并删除下面的副本才可以。

基于yml文件创建service

配置service.yml文件

  • 可以在targetPort下面,添加nodePort: 30001,指定宿主机暴露端口

运行之后可以看出,给上面创建deployment的pod创建了对外服务。

当然也可以把deployment和service的yml文件写在一起,用---分割符分开,可以直接创建pod并建立对外服务。

pod内容器的重启策略

基于控制器创建的pod重启策略只能是Always(默认策略),如果用其他策略只能使用基于pod创建的yaml文件。

当pod内的容器启动失败或者运行时报错的重启策略:

  • Always:默认模式,一直重启(自愈机制的核心)
  • Never:都不重启,docker就是Never
  • OnFailure:只有状态是非0才会重启,是0不重启

command和args

command和args都会覆盖的原有容器的命令输出。

类似于docker的cmd和entrypoint,command和args级别比cmd和entrypoint要高。

args也会给command传参数,在非传参的情况下,只能有一个command,args。

command术lagrs在个yaml文件中,非传参的情况下,只能存在一个,表示容器的启动命令,
会覆盖原容器的启动命令。

1、在创建pod时,使用OnFailure策略,可以使用command和args进行传参。

2、command和args具体用法

这里使用command和args都行。


http://www.kler.cn/a/542459.html

相关文章:

  • 单张照片可生成写实3D头部模型!Adobe提出FaceLift,从单一的人脸图像中重建出360度的头部模型。
  • 前端技术学习——ES6核心基础
  • 深度剖析责任链模式
  • Node.js怎么调用到打包的python文件呢
  • 【Docker】
  • 荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测
  • uniapp商城之登录模块
  • 《深度学习》——CNN卷积神经网络模型及项目实例
  • 【Prometheus】MySQL主从搭建,以及如何通过prometheus监控MySQL运行状态
  • FTP(File Transfer Protocol)-文件传输协议
  • C++引用深度详解
  • Unity做2D小游戏5------多个动画互相转换
  • docker配置国内源
  • 【unity实战】实现摄像机跟随效果
  • 【AI知识点】大模型开源的各种级别和 deepseek 的开源级别
  • Java 大视界 -- 5G 与 Java 大数据融合的行业应用与发展趋势(82)
  • ArcGIS Pro SDK (二十六)自定义配置
  • 基于 PyTorch 的树叶分类任务:从数据准备到模型训练与测试
  • 25考研电子信息复试面试常见核心问题真题汇总,电子信息考研复试没有项目怎么办?电子信息考研复试到底该如何准备?
  • 进阶版MATLAB 3D柱状图
  • 【系统架构设计师】操作系统 - 进程管理 ① ( 进程概念 | 进程组成 | 进程 与 程序 | 进程 与 线程 | 线程 可共享的资源 - ☆考点 )
  • 工具模块新增JSON格式化打印工具类
  • 什么是容器化,它有什么好处,对后端开发有什么影响?
  • 【2025-ICLR-未中】教授多模态大语言模型理解心电图图像
  • 【C#零基础从入门到精通】(五)——C# {n:format} 占位符
  • C#调用Python的函数(编译为pyd,避免源码泄露)