我建议你别基于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

相关文章

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项