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

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象