云原生软件开发模式
云原生环境下软件开发模式的转变
简介
现在云原生时代,软件开发模式有了一些改变。原本软件开发过程中,本地开发、本地调试都不是很复杂,开发完就往服务器上一丢,或者跑CI/CD,部署流程自动化,也不会耗费很长时间,调试的话也能在本地调试好,中间的loop时间不会很长。但是云原生时代,各种软件架构都变得复杂了,各种微服务架构,很多都是部署到k8s中,调试也比较麻烦。如果修改了一段代码,提交到git仓库,触发CI/CD流程,最终部署到k8s中,中间的过程还是需要等待的,并不是立即就能看到效果。 其实也就是分为 inner loop、outloop两部分,其实开发时间中很大一部分时间就被浪费掉了。
参考一下两篇文章:
- http://jorgemoral.es/posts/2020_03_17-develop_apps_in_k8s_and_not_die_trying-inner_loop_outer_loop/
- https://thenewstack.io/kubernetes-infrastructure-know-the-inner-dev-loop/
其实也有一些工具来改善这些情况,下面就来介绍几款这样的工具
skaffold
Skaffold是由Google发布的命令行工具,专注于促进K8S应用的持续deployment。自动化building和deploying到k8s集群的任务,可以让开发者专注于编写代码。
下面就举个例子来试一下:
go的一个工程:
1 | ├── Dockerfile |
main.go
1 | package main |
skaffold.yaml:
1 | apiVersion: skaffold/v4beta8 |
gin.deploy.yaml
1 | apiVersion: apps/v1 |
gin.svc.yaml
1 | apiVersion: v1 |
Dockerfile
1 | FROM golang:1.21-alpine AS builder |
就会在指定的k8s集群中部署服务:
同时给你在本地映射端口: http://127.0.0.1:4503
此时你修改代码,再次点击 触发编译
访问原来接口,就发现已经更改了
看来 Skaffold 就是在本地构建,虽然说节省了一点时间。
telepresence
Telepresence是一款为Kubernetes微服务框架提供快速本地化开发功能的开源软件。Telepresence在Kubernetes集群中运行的Pod中部署双向网络代理,该Pod将Kubernetes环境(如TCP连接,环境变量,卷)中的数据代理到本地进程。本地进程透明地覆盖其网络,以便DNS调用和TCP连接通过代理路由到远程Kubernetes集群,能够获取远端K8S集群的各项资源。
还是简单使用一下
发现gin-server-demo这个deployment 被注入了一个container,查看一下:
此时已经不能访问了
这时候你在本地跑这个应用,就会发现 访问远程服务器的流量已经被拦截在本地了,也就是说你本地起的服务,在远程也可访问到了,很容易做修改,不必等待ci过程了。仅仅受限于你本地编译的速度了。