基于 k3s+istio 搭建一个云平台
这篇文章将使用 k3s+istio 如何来创建自己的云平台,其中 k3s 用作服务编排,istio 代替 Traefik 用做流量管理。
概念介绍
k3s: kubernetes 的一个简化版,众所周知,k8s 是需要比较高的一些配置,例如推荐配置是 8+12,在目前尤其基于共有云的 kubernetes 集群是昂贵的,但是对于一些中小型项目,想要用到 kubernetes 的一些 features,例如服务编排,命名空间,configmap 等,这时候 k3s 就应运而生。
k3s - Lightweight Kubernetes, Easy to install, half the memory, all in a binary of less than 100 MB. k3s 包括了 kubernerts 大部分核心功能,但只占用很少的资源,也支持平移到 kubernetes。它的架构主要包括,一个 k3s server 和 k3s agent,其中 agent nodes 内置一个 DB 保存,同时也可以使用外部的 DB 来保存 node 信息,详情参考(https://docs.k3s.io/architecture)
Istio: 一个 servermess 框架,通过 enovy 来实现更复杂的一些流量管理等功能,它也支持多种链路追踪,像 Prometheus,zipkin 等,同时也提供了多样的可视化界面,也支持集成 Grafana。
流量管理支持动态路由,熔断,降级,流量转移,详细参考(https://istio.io/latest/zh/docs/concepts/traffic-management/)
搭建
创建 k3s 环境,curl -sfL https://get.k3s.io | sh -,我是基于腾讯云的一个包含 k3s 的一个基础镜像来搭建的。
部署 Istio,由于 k3s 默认用 traefix 作为流量管理工具,所以使用 istio 之前先禁用 traefix,详情参考(https://istio.io/latest/zh/docs/setup/platform-setup/k3d/),安装完成以后,将会生成istio-system 和 istio-ingress 两个命名空间,其中 istio-system 包括一个 istiod 的核心 service。
需要注意的一点是,istio 默认是需要 1G 的 memory,如果你的服务器 memory 过小,可以尝试将 istio 的内存减少,例如我的一个 2G 的 server,我目前配置的是 512M。
服务部署以及流量控制
创建一个 k3s 的 deployment,这个跟 kubernetes 无异。你可以通过 kubectl 去创建,也可以通过 client-go 用 api 的形式创建,参考(https://github.com/kxu913/go-cli/tree/main/serverless-generator),以下是一个简单的部署文件。
创建 istio gateway,支持 http/https/tcp,参考示例:
创建 Istio virtual service, 做流量转发,这里你可以做很多事,例如多版本,loadbalance,流量控制等,可以通过 match 来做细粒度的控制,示例:
按照上面步骤操作完成以后,你就可以通过https://cloud.kevin913.com.cn/workflow/v1
来访问 api 了。
服务监控
全链路跟踪,可以通过 Zipkin 来实现。
k3s 监控,可以使用 prometheus,推荐使用外部部署,这样就跟整个集群隔离开。
autoscaling,可以通过 client-go 里面的 watch 功能去实现。
版权声明: 本文为 InfoQ 作者【Kevin_913】的原创文章。
原文链接:【http://xie.infoq.cn/article/30956326b91e1af7fc1252f1e】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论