Kubernetes & MicroService

王渊命 @jolestar 青云容器平台负责人

bg


微服务带来的变化

  • 部署单元
  • 依赖方式
  • 架构模式

bg


微服务涉及的技术点

  • 服务发现 服务目录 服务列表 配置中心
  • 服务生命周期 变更,升级
  • 服务依赖关系
  • 链路跟踪 限流 降级 熔断
  • 访问控制

bg


为微服务而生的 Kubernetes

  • Kubernetes 架构
  • Kubernetes Pod - Sidecar 模式
  • Kubernetes 支持微服务的一些特性
  • 微服务集大成之 istio

bg


Kubernetes 架构

  • 一个状态存储
  • 多个控制器

bg


controller

图片来源: https://www.slideshare.net/sttts/kubernetes-architecture-and-introduction-paris-kubernetes-meetup


Kubernetes 的 Pod - Sidecar 模式

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: mypod
  5. spec:
  6. containers:
  7. - name: webserver
  8. image: ubuntu
  9. workingDir: /tmp/mypod
  10. command: ["python3", "-m", "http.server", "80"]
  11. volumeMounts:
  12. - name: htdocs
  13. mountPath: /tmp/mypod
  14. - name: busybox
  15. image: sttts/busybox-curl
  16. volumeMounts:
  17. - name: htdocs
  18. mountPath: /tmp/mypod
  19. volumes:
  20. - name: htdocs
  21. hostPath:
  22. path: /tmp/mypod

Kubernetes 的 Pod - Sidecar 模式

pod


Sidecar 模式

  • 方便更细粒度的拆解服务,降低运维管理成本
  • 提供一种非侵入的方式来扩展服务

bg


服务发现

Service , ClusterIP 以及 DNS

ServiceAccount and Kubernetes-API

bg


Service , ClusterIP 以及 DNS

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: myservice
  5. spec:
  6. ports:
  7. - port: 80
  8. protocol: TCP
  9. targetPort: 9376
  10. selector:
  11. app: my-app
  12. clusterIP: 10.96.0.11
  1. curl http://myservice

bg


Service , ClusterIP 以及 DNS

Kubernetes & MicroService - 图11


Service , ClusterIP 以及 DNS

  • kube-dns
  • dnsmasq
  • dns-sidecar
  1. cat /etc/resolv.con
  2. nameserver 10.96.0.10
  3. search default.svc.cluster.local svc.cluster.local cluster.local

bg


ServiceAccount and Kubernetes-API

  1. endpoints, _ = client.Core().Endpoints(namespace).Get("my-service", metav1.GetOptions{})
  2. addrs := []string{}
  3. for _, ss := range endpoints {
  4. for _, addr := range ss.Addresses {
  5. ips = append(addrs, fmt.Sprintf(`"%s"`, addr.IP))
  6. }
  7. }
  8. glog.Infof("Endpoints = %s", addrs)

bg


Leader 选举

  • ETCD
  • Zookeeper

bg


通过 Kubernetes 进行 Leader 选举

  1. $ kubectl exec elector-sidecar -c nodejs -- wget -qO- http://localhost:8080
  2. Master is elector-sidecar

bg


Kubernetes 支持微服务的运维特性

  • 监控与日志收集
  • 滚动升级
    1. kubectl set image deployment <deployment> <container>=<image>
    2. kubectl rollout status deployment <deployment>
    3. kubectl rollout pause deployment <deployment>
    4. kubectl rollout resume deployment <deployment>
    5. kubectl rollout undo deployment <deployment>
  • 自动伸缩
    1. kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

bg


微服务集大成之 istio

  • 智能路由以及负载均衡
  • 流量加密、服务间认证
  • 跨语言以及平台
  • 全范围(Fleet-wide)策略执行
  • 深度监控和报告 (Prometheus & Grafana, Zipkin)

bg


istio — Service Mesh

  • Visibility
  • Resiliency
    • Timeouts/Retry
    • Circuit breakers
    • Health checks
      • Fault injection
  • Efficiency
    • LoadBalancer
    • TLS offload
      • Proxy
  • Traffic Control
  • Security
  • Policy Enforcement

bg


istio 架构 — Enject 魔法

Kubernetes & MicroService - 图19


istio 服务依赖关系

BookInfo Service Graph
BookInfo Service Graph


总结

  • 架构问题,一层解决不了的时候就再抽象一层
  • Kubernetes 提供了一种便于在服务之间增加控制层的能力

一个硬广告

QingCloud Kubernetes 服务已经上线,欢迎试用

  • 快速一键部署 Kubernetes 集群,原生 Kubernetes API
  • 网络,存储和 IaaS 平台深度整合
  • 内置监控以及日志收集组件

bg


关于我

个人博客: http://jolestar.com

about