自从服务上云引入K8S后,我们开发模式也发生了改变。我们最能想到的一种开发流程就是:
以上的开发流程中会产生以下几个问题:
telepresence,是K8S官方文档中推荐的一种开发方式,具体提供以下几个功能:
它的工作原理是在本地和 Kubernetes
集群中搭建一个透明的双向代理,这使得我们可以在本地用熟悉的 IDE
和调试工具来运行一个微服务,访问kubernetes内部服务时,telepresence能够将对应流量引入到K8S中,完成调用(可以使用FQDN,clusterIP进行调用),好像它就运行在这个集群中一样,其次还可以拦截微服务流量,将kubernetes流量引入本地,具体原理图如下:
在这基础上,可以减少编译调试,更换镜像的操作,但是仍然没解决多人同时开发一个微服务的情况。
Istio负责对外部进入的流量进行标记,通过istio路由到同一服务的不同版本。
Okteto负责快速调试,轻松在windows上远程调试go代码,代码更改会立即应用于Kubernetes,无需提交、构建或推送(主要依靠的是syncthing),其次我们将pod内部端口映射到windows指定端口,调试直接可使用localhost即可。
整体流程图如下:
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" ]
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的版本
自从用上 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)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。