【K8S】一种基于Istio+Okteto下的快乐开发模式

news/2024/4/15 4:27:42/文章来源:https://blog.csdn.net/qq_33823833/article/details/136532920

自从服务上云引入K8S后,我们开发模式也发生了改变。我们最能想到的一种开发流程就是:

  1. 首先用ide编写业务代码
  2. 其次,编译打包成镜像,并上传至habor
  3. 接着,通过kubectl edit deployment替换镜像或者通过helm --install的方式更新版本
  4. 最后,通过postman调用grpc或者通过打流仪之类的进行业务验证

以上的开发流程中会产生以下几个问题:

  • 流程繁琐,完全不敏捷
  • 如果大家都同时改同一个微服务,或者有其他依赖,很容易乱掉
  • 内部微服务不对外暴露,只能使用NodePort方式或apisix网关转发一下

telepresence,是K8S官方文档中推荐的一种开发方式,具体提供以下几个功能:

  1. 本地的服务就可以完整的访问到远程集群中的其他服务。
  2. 本地的服务直接访问到 Kubernetes 里的各种资源,包括环境变量、Secrets、Config map 等。
  3. 集群中的服务能直接访问到本地暴露出来的接口。

它的工作原理是在本地和 Kubernetes 集群中搭建一个透明的双向代理,这使得我们可以在本地用熟悉的 IDE 和调试工具来运行一个微服务,访问kubernetes内部服务时,telepresence能够将对应流量引入到K8S中,完成调用(可以使用FQDN,clusterIP进行调用),好像它就运行在这个集群中一样,其次还可以拦截微服务流量,将kubernetes流量引入本地,具体原理图如下:

在这基础上,可以减少编译调试,更换镜像的操作,但是仍然没解决多人同时开发一个微服务的情况。

Istio+Okteto一发入魂

Istio负责对外部进入的流量进行标记,通过istio路由到同一服务的不同版本。

Okteto负责快速调试,轻松在windows上远程调试go代码,代码更改会立即应用于Kubernetes,无需提交、构建或推送(主要依靠的是syncthing),其次我们将pod内部端口映射到windows指定端口,调试直接可使用localhost即可。

整体流程图如下:

酸爽的实机演示

磨磨刀

  • goland:GoLand安装+破解 - 潆勖 - 博客园 (cnblogs.com)
  • okteto:https://downloads.okteto.com/cli/okteto.exe,添加到PATH环境变量中
  • syncthing:Syncthing | Downloads,拷贝到C:\Users\User\.okteto
  • kubetcl-windows:在 Windows 上安装 kubectl,添加到PATH环境变量中
  • 拷贝k8s集群配置文件:windos上新建目录C:\Users\User\.kube\,然后登录K8S的master集群,拷贝/root/.kube/config至新建目录中,安装如下:

狩猎开始了

  • 代码仓库中新增okteto.yaml,格式如下:
name: whisperkoo-dev
# 自己的golang1.9编译镜像
image: whisperkoo/go-dev:0.0.1initContainer:image: okteto/bin:1.2.22workdir: /service/# win->port的端口映射,一个用来远程调试端口,一个用来访问的grpc端口
forward:
- 9000:9000
- 9001:9001interface: 0.0.0.0environment:environment: development# 若没有在k8s上创建好{name}指定的pod,则需要设置为true(不存在pod会默认创建pod),默认值为false
autocreate: true
command: [ "bash" ]
  • goland下执行,okteto up,如下图所示,自动创建了pod,并同步了代码文件:

  • 编译+运行,go mod tidy + go build + go run main.go --host 0.0.0.0
  • 通过postman调用grpc服务,这里面cookies携带appmode,来进行流量控制:

  • Kubernetes 集群上安装Istio环境,并配置虚拟服务(Virtual Service)和目标规则(Destination Rule),如下图所示:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews
spec:hosts:- reviewshttp:- match:- headers:appmode:exact: dev #控制哪些特征的流量route:- destination:host: reviewssubset: dev  #路由到这个host下的路由策略- route:- destination:host: reviewssubset: v3apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule #路由策略集
metadata:name: my-destination-rule
spec:host: my-svctrafficPolicy:loadBalancer:simple: RANDOMsubsets:- name: v1labels:version: v1- name: v2labels:version: v2trafficPolicy:loadBalancer:simple: ROUND_ROBIN- name: devlabels:appmode: dev  #流量引入到这里,whisperkoo-dev yaml中appmode为dev的版本
  • 不用了就okteto down,优雅退出

Reference

自从用上 Telepresence 后,本地调试 Kubernetes 中的微服务不再是梦!-腾讯云开发者社区-腾讯云 (tencent.com)

K8S调试利器:telepresence2使用文档 - 掘金 (juejin.cn)

ubuntu下使用Telepresence本地开发调试k8s微服务_k8s telepresence_君君要上天的博客-CSDN博客

okteto学习笔记_Tamayo0914的博客-CSDN博客

windows/MacOS/Linux下搭建Okteto+vscode远程开发环境_okteto安装_FTLIKON的博客-CSDN博客

如何在 Kubernetes 上开发和调试 Go 应用程序 - 知乎 (zhihu.com)

Docker Compose on Kubernetes with Okteto | Okteto Documentation

Istio流量管理实现机制深度解析 - 割肉机 - 博客园 (cnblogs.com)

Okteto Manifest | Okteto Documentation

Istio / 流量管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_998750.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

少儿编程机器人技术架构解析与实现流程

随着科技的飞速发展,少儿编程机器人成为了越来越受欢迎的教育工具,为孩子们提供了学习编程的新途径。在这篇文章中,我们将深入探讨少儿编程机器人的技术架构和实现过程,揭示背后的技术原理和开发策略。同时,我们也将介…

穿越牛熊,股市的春天还有多远?

2023年,资本市场的严冬令无数投资者和机构投资者都感受到了前所未有的压力。VC/PE、公募基金、股权投资类公司等机构,在这一年里业绩普遍不佳,寒意弥漫。VC/PE机构的营业收入普遍呈现负增长,公募基金更是历史上首次连续两年亏损&a…

Halcon基本语法

Halcon是什么? Halcon(全称为Halcon Imaging Library)是由德国MVTec Software GmbH开发的一套功能强大的机器视觉软件库。Halcon提供了丰富的图像处理和机器视觉算法,用于解决各种工业和科学领域中的视觉检测、识别和测量等问题。…

重学SpringBoot3-WebMvcAutoConfiguration类

重学SpringBoot3-WebMvcAutoConfiguration类 是什么什么用生效条件作用 自定义配置的三种方式自定义配置举例1. 自定义 DispatcherServlet 配置2. 静态资源配置3. 自定义MVC配置4. 消息转换器5. 异常处理 是什么 org.springframework.boot.autoconfigure.web.servlet.WebMvcAut…

HTML---表单验证

文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…

Vision Transformer结构解析

Vision Transformer结构解析 ViT简介ViT参数量ViT三大模块ViT图像预处理模块——PatchEmbed多层Transformer Encoder模块MLP(FFN)模块 基本的Transformer模块Vision Transformer类的实现Transformer知识点网络结构计算复杂度对比Transformer的参数量和计…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

通过联合部署DDoS高防和WAF提升网站防护能力

如果您的网站遭受的攻击既有流量型攻击,又混杂精巧的Web应用层攻击时(例如SQL注入、跨站脚本攻击、命令注入等)时,推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF(Web Application Firewall)&#xff0…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi,我是贝格前端工场,优化升级各类管理系统的界面和体验,是我们核心业务之一,欢迎老铁们评论点赞互动,有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面,对需求总是轻描淡…

springboot整合redis redis连idea

首先是maven项目里pom.xml添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId> </dependency> 然后是application.properties 中增加redis配置 spring.redis.host=lo…

C++ 标准库类型string

C/C总述&#xff1a;Study C/C-CSDN博客 目录 定义和初始化string对象 string的增 使用push_back进行尾插 使用insert插入 使用append函数完成string的拼接 string的删 使用pop_back进行尾删 使用erase删除 string的查 使用find函数正向搜索第一个匹配项 使用rf…

ArcGIS学习(十二)ModelBuilder参数化建模

ArcGIS学习(十二)ModelBuilder参数化建模 1.ModelBuilder应用基础 本任务给大家带来的是ArcGIS中一个非常有意思也很重要的模块一-ModelBuilder。ModelBuilder有什么用呢? 大家设想一下这些场景: 你在做一项复杂研究,使用到ArcGIS中的多个工具和步骤,包括缓冲区分析、空…

【查找算法】插值查找

文章目录 一&#xff1a;插值查找**代码公式&#xff1a;int mid left (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);**1.1 基本概念1.2 基本思想1.3 原理介绍 二&#xff1a;代码实现 一&#xff1a;插值查找 代码公式&#xff1a;int mid left (…

Python笔记|基础算数运算+数字类型(1)

重新整理记录一下python的基础知识 基础运算符 、-、*、/ &#xff1b;括号 ()用来分组。 >>>2 2 4 >>>50 - 5*6 20 >>>(50 - 5*6) / 4 5.0 >>>8 / 5 1.6向下取整除法&#xff1a;向下舍入到最接近的整数的数学除法。运算符是 //。比如1…

Win UI3开发笔记(四)设置主题续2

本机深色主题下设置的背景颜色可以作用于整个对话框&#xff0c;本机浅色模式下设置的背景颜色只作用与下边的部分。 如果本机选深色&#xff0c;程序选浅色&#xff0c;设置为light只对上部分管用&#xff0c;下部分不管用。如图&#xff0c;左边那个hello按钮要看不见了。。…

C++指针(四)万字图文详解!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 前言 相关文章&#xff1a;C指针&#xff08;一&#xff09;、C指针&#xff08;二&#xff09;、C指针&#xff08;三&#xff09; 本篇博客是介绍函数指针、函数指针数组、回调函数、指针函数的。 点赞破六…

怎么将pom在文件放到src下方

今天在IDEA从git拉取项目的时候&#xff0c;发现pom.xml文件在文件夹src的上方&#xff0c;平时看惯了项目的pom.xml文件在文件夹src的下方&#xff0c;应该怎么去设置呢&#xff1f; 点击设置——>点击Folder Always on Top 即可 参考&#xff1a;http://t.csdnimg.cn/s34…

2024蓝桥杯每日一题(二分)

一、第一题&#xff1a;教室 解题思路&#xff1a;二分差分 对天数进行二分&#xff0c;在ck函数中用差分方法优化多次区间累加。 【Python程序代码】 n,m map(int,input().split()) a [0] list(map(int,input().split())) d,s,t [0]*(m5),[0]*(m5),[0]*(m5) for…

CSS补充(下),弹性布局(上)

高级选择器 1.兄弟选择器 2.同时满足 div.bg{background-color: red;}p.bg{background-color: green;}spam.bg{background-color: blue;}注&#xff1a;选择器中间没有空格&#xff0c;有明确标识的选择器写在后面 3.各种伪类的应用 3.1作为第几个子元素 选择器:nth-child…

LeetCode 2917.找出数组中的 K-or 值:基础位运算

【LetMeFly】2917.找出数组中的 K-or 值&#xff1a;基础位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-k-or-of-an-array/ 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数&#xff1a; 只有…