写点什么

基于 k3s+istio 搭建一个云平台

作者:Kevin_913
  • 2023-10-24
    广东
  • 本文字数:2012 字

    阅读完需:约 7 分钟

基于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。

    服务部署以及流量控制


    apiVersion: v1kind: Servicemetadata:  namespace: minicloud  name: minicloud-workflow  labels:    app: minicloud-workflow    service: minicloud-workflowspec:  ports:  - port: 9001    name: http  selector:    app: minicloud-workflow---apiVersion: v1
    kind: ServiceAccountmetadata: namespace: minicloud name: minicloud-workflow-svc labels: account: minicloud-workflow-svc---apiVersion: apps/v1kind: Deploymentmetadata: namespace: minicloud name: minicloud-workflow-v1 labels: app: minicloud-workflow version: v1spec: replicas: 1 selector: matchLabels: app: minicloud-workflow version: v1 template: metadata: labels: app: minicloud-workflow version: v1 spec: serviceAccountName: minicloud-workflow-svc containers: - name: minicloud-workflow image: ccr.ccs.tencentyun.com/minicloud/workflow:20230612171809 imagePullPolicy: Always ports: - containerPort: 9001
    复制代码


    • 创建 istio gateway,支持 http/https/tcp,参考示例:


    apiVersion: networking.istio.io/v1alpha3kind: Gatewaymetadata:  name: minicloud-gateway  namespace: minicloud
    spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "kevin913.com.cn" tls: httpsRedirect: true - port: number: 443 name: https protocol: HTTPS tls: mode: SIMPLE credentialName: minicloud-credential hosts: - "cloud.kevin913.com.cn"
    复制代码


    • 创建 Istio virtual service, 做流量转发,这里你可以做很多事,例如多版本,loadbalance,流量控制等,可以通过 match 来做细粒度的控制,示例:


    apiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata:  namespace: minicloud  name: minicloud-workflowspec:  hosts:  - "cloud.kevin913.com.cn"  gateways:  - minicloud-api-gateway  http:  - match:    - uri:        prefix: /workflow/v1    route:    - destination:        host: minicloud-workflow        port:          number: 9001
    复制代码


    按照上面步骤操作完成以后,你就可以通过https://cloud.kevin913.com.cn/workflow/v1来访问 api 了。

    服务监控

    • 全链路跟踪,可以通过 Zipkin 来实现。

    • k3s 监控,可以使用 prometheus,推荐使用外部部署,这样就跟整个集群隔离开。

    • autoscaling,可以通过 client-go 里面的 watch 功能去实现。




    发布于: 刚刚阅读数: 4
    用户头像

    Kevin_913

    关注

    纸上得来终觉浅,绝知此事要躬行。 2019-02-25 加入

    专注于代码和设计15+年。 主要涉及Java,Golang,云平台。

    评论

    发布
    暂无评论
    基于k3s+istio搭建一个云平台_istio_Kevin_913_InfoQ写作社区