K8s生产架构

部分图片显示问题,特附上有道云笔记中的连接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4828390005C5458DAB0838EA1B775D28node

K8s生产架构

Kubernetes的生产架构,如图所示:nginx

  • client: Kubernetes集群外部用户、客户端等
  • 服务访问层:Traefik ingress实现服务发现、负载均衡和路由规则定义等
  • 业务应用层:基于K8s平台构建和运行的企业业务应用,如CI/CD持续集成,微服务项目、日志管理、监控告警、私有镜像仓库等服务。
  • 基础设置层:K8s容器管理平台和数据是持久化存储等系统组成的基础设施服务。

基础设施层

K8s平台

  • 部署管理:Kubernetes平台除了直接使用公有云如阿里云、AWS等云服务提供商的K8s服务外,咱们还能够本身部署和管理等,如使用Kubespray工具。
  • 网络通讯:在容器和容器之间、容器和主机网络方面,可使用Calico或Flannel等方案。
  • HA高可用:Kubernetes节点分为Master和Node两种类型节点,前者负责运行集群相关的控制管理服务,然后者负责运行Pod容器。在多Node节点模式下,因为Kubernetes Pod具备自然的容灾冗余HA高可用实现,所以,咱们并不须要关心Node节点的HA高可用,而只需关心Master节点的HA便可,Master节点的HA高可用,经过多Master节点+HAProxy方案实现便可。从Kubernetes 1.12版本起,kube-proxy服务默认使用ipvs实现,取消了以前的iptables。这有助于提高K8s大规模集群环境下的性能和稳定性。
  • Docker和操做系统优化:在生产环境中,Docker和操做系统版本应当使用较新的release版本。而且,主机操做系统应当作必定程度的优化配置,如关闭swap内存交换分区,预留必定的CPU核数和内存资源给宿主机使用等。

业务应用层

  • 镜像管理:使用Harbor私有镜像仓库服务;
    • Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
    • 镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增长了一些安全、访问控制、管理的功能以知足企业对于镜像仓库的需求。
    • harbor以docker-compose的规范形式组织各个组件,并经过docker-compose工具进行启停。
    • docker的registry是用本地存储或者s3都是能够的,harbor是在docker的registry的功能之上提供用户权限管理、镜像复制等功能,提升使用的registry的效率。
  • 日志管理:使用Elasticsearch、Filebeat 和 Kibana技术栈;
    • Elasticsearch:是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎。能够用于搜索各类文档,提供可扩展的搜索,具备接近实时的搜索,并支持多租户。
    • Filebeat:是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),而且转发这些信息到elasticsearch或者logstarsh中存放。
    • Kibana: 做为可视化的展现平台。
  • 监控告警管理:使用Cadvisor、Prometheus和Grafana技术栈;
  • 微服务架构:使用Service Mesh服务网格中的Istio方案;
    • Istio:是一个由 IBM、Google 以及 Lyft 联合推出的开源软件,以无痛方式为运行在 Kubernetes 上的微服务提供流量管理,访问策略管理以及监控等功能。
  • Devops:使用Gitlab、Jenkins等持续集成工具;
  • 单体应用:无状态类服务使用deployment,有状态类服务则使用Statefulset,若是关联的服务较多且复杂则使用Helm。
  • 规划好Namespace:应当作到每一个namespace专属用于某类型的应用,如monitor namespace统一管理诸如监控告警和日志管理方面的pod、service、pvc、ingress等资源。这样,能够较为方便的管理和区分K8s上的各类应用。

服务访问层

外部客户端访问K8s集群内的服务、负载均衡和路由规则定义使用Traefik Ingress实现。此外,应当实现Ingress服务HA高可用,能够想象在K8s集群中,大量的出入口流量都进过Ingress,其负载是很是大的,其重要程度不言而喻,所以实现HA就很是重要。ingress controller节点(不管是基于nginx仍是traefik实现)应当至少为2个节点,并在这些节点上,部署Keepalived和HAproxy共同维护一个VIP地址,将其提供给ingress使用。docker

  • 在该架构中,Ingress节点通常使用独立的服务器,即只作将集群外部流量接入到集群内部。除了使用external Ip来暴露ingress的Service到集群外部,还可使用hostNetwork,若是是公有云,还可使用LoadBalance。这样Ingress Controller将监听节点的80和443端口,经过热备的形式部署多个ingress节点,并在每一个节点上部署Keepalived,多个节点共同维护一个VIP,实现Ingress服务的高可用。安全

  • 如上图所示,部署两个ingress节点172.16.10.11和172.16.10.12。公网ip映射或转发到内网的VIP地址172.16.10.10上(若是VIP自己是公网IP则能够不用转发)。ingress controller的副本数replicaCount为2,将被调度到node1和node2这两个节点上。同时,使用pod反亲和性禁止ingress pod调度在同一个节点上。服务器

相关文章
相关标签/搜索