我建议你别基于k8s用写应用 No.178

2024-05-15 08:18

本文主要是介绍我建议你别基于k8s用写应用 No.178,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近一个月大蕉断更了,主要就在做一些跟 k8s 相关的事情,就在昨天刚刚交付产品了一个版本,这几周几乎把大蕉榨干了。但是大蕉从来不是一个怕事的人,干就完了,一个当十个用,没什么大问题。

但是经过了几个月基于k8s写应用,我还是建议你别轻易尝试用 k8s ,这时候就有人问了,我看你前几个月还叫我们没事多学学 k8s 呢,为什么今天就说轻易别基于 k8s 写应用呢?

且听我细细说来。

基于 Docker 定义运行环境实在是太方便了,你可能没法像以前一样有一大堆的发布脚本排查发布环境的问题了。

这样线上环境太稳定,可能会裁剪一部分的开发运维人员。对于一个 Python 应用来说,以前我们需要安装 Linux,安装Python,安装 pip,安装相关的依赖库。可是对于 Docker 镜像定义方式 Dockerfile 来说。

FROM python:3
RUN pip install MySQL-python

这两行,Python 环境 和 MySQL 依赖就装好了,已经不需要害怕每个人的环境不一样,不需要害怕线上环境被谁搞坏了。运维可能会失业。

应用升级和回滚真的太方便了,你可能没法像以前一样搞一大堆的发布步骤。

加一个配置文件,换一个依赖包,升级一下linux内核版本,还要兼容一下。搞得每次发布都能由你自己搞。有了 k8s 你已经没这个机会了。这样你的价值会大大缩水。用 k8s 升级只需要这一行就够了。

kubectl set image deployment your-app your-container=image:tag

这样 k8s 集群会对你的应用进行滚动升级,你不需要害怕升级的时候因为同时重启的问题导致服务不可用,它都帮你解决了。它升级的做法是先启动一个容器,确认这个容器正常服务了,再干掉原来的容器。

当然,发布出问题也是很常见的,以前的回滚要找发布包,回滚依赖,一堆事情做。现在有了 k8s ,回滚也变得简单起来。

kubectl rollout undo deployment/your-app

回滚的步骤跟升级是一样的,会先启动原来镜像版本的容器,然后再干掉现在版本的容器。这一波操作,会导致你的存在感降低,你无法在发布的时候进行一顿疯狂操作了,很可惜,你很可能会被优化掉。

服务间暴露和调用真的太方便了,只能由你解决的调用 bug 可能一去不复返了。

想想这个场景,一个新人加入团队,面对代码里一堆的根据 ip 调用的逻辑,这个新人能怎么办呢?必然只能问你啊,这个 ip 是什么,另外一个 ip 又是什么?k8s 自带名字服务和负载均衡,如果只是在集群内调用,你终于不需要再用 ip + 端口的模式调用集群内的其他服务了,无论是 RPC 还是 HTTP 调用,都需要ip + 端口吧?很遗憾 k8s 集群默认并不会给你分配任何一个固定 ip 和端口,所有的 ip 和 端口都是动态分配的,你已经不能使用 ip 大法了。那么 k8s 是怎么做到的呢?

首先要明确一个 k8s 的 label 机制。我们俗称 label 名字叫 打标签,就是我会给我的应用(Deployment)打上一些标签,比如打一个标签名叫  app=my-app ,这个就类似给驴的脚底打上三颗痣。然后我再定义一个 Service ,不管这个应用长啥样,也不管它在哪里,只需要找标签为 app=my-app 的应用就完事了,就是说,无论你是剃光头还是留胡子,我都不管,我就找三颗痣,找到了你就是我的宠物。

很多很多的 magic ,等你你来发现,且听我细细说,如果你对 k8s 有兴趣,留言告诉我,我考虑写个实战系列。

如果你是靠各种邪术写魔法代码混职场的,我强烈建议你千万别用 k8s ,你很可能会混不下去。

最后一天上班,明天要肥家啦。在这里预祝大家春节快乐,不要怕,带好口罩~大蕉保佑你!!mua~

这篇关于我建议你别基于k8s用写应用 No.178的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991289

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布