前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【K8S】一种基于Istio+Okteto下的快乐开发模式

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

原创
作者头像
于顾而言SASE
发布2024-03-20 10:22:52
910
发布2024-03-20 10:22:52
举报
文章被收录于专栏:golang与云原生golang与云原生

自从服务上云引入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即可。

整体流程图如下:

酸爽的实机演示

磨磨刀

狩猎开始了

  • 代码仓库中新增okteto.yaml,格式如下:
代码语言:javascript
复制
name: whisperkoo-dev
# 自己的golang1.9编译镜像
image: whisperkoo/go-dev:0.0.1

initContainer:
      image: okteto/bin:1.2.22

workdir: /service/
 
# win->port的端口映射,一个用来远程调试端口,一个用来访问的grpc端口
forward:
- 9000:9000
- 9001:9001
 
interface: 0.0.0.0
 
environment:
     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,来进行流量控制:
代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - match:
    - headers:
        appmode:
          exact: dev #控制哪些特征的流量
    route:
    - destination:
        host: reviews
        subset: dev  #路由到这个host下的路由策略
  - route:
    - destination:
        host: reviews
        subset: v3

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule #路由策略集
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: dev
    labels:
      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 / 流量管理

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Istio+Okteto一发入魂
  • 酸爽的实机演示
    • 磨磨刀
      • 狩猎开始了
      • Reference
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档