Go微服务架构实战
本系列文章主要是针对云原生领域微服务架构的实战,包括网关,k8s,etcd以及grpc等相关技术的应用,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加入到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较广,知识面比较宽,大家下来各取所需尽量做到熟悉和应用,之后有时间了在研究下源码,乐哉!
上篇已经完成,大家可以看下,我这里贴出来了,中篇从这周开始陆续为大家产出,因为太耗费精力,所以还望大家多多支持!
1. 微服务架构上篇
1. grpc技术介绍
2. grpc+protobuf+网关实战
3. etcd技术介绍
4. 基于etcd的服务发现与注册
5. 基于etcd的分布式锁实战
2. 微服务架构中篇
1. k8s架构介绍
1. k8s是什么
k8s就是k到s之间的距离是8,所以叫做k8s。
废话:原名是Kubernetes,简称k8s,k到s中间隔8个字符,为了方便记忆和书写就省去了这八个字符,用数字8代替。
k8s是Google公司开源的一个容器编排与调度管理框架,该项目最初是Google内部面向容器的集群管理系统,而现在是由CNCF托管的开源平台,由Google、AWS、Microsoft、IBM、Intel、Cisco和Red Hat等主要参与者支持,其目标是通过创建一组新的通用容器技术来推进云原生技术和服务的开发。作为领先的容器编排引擎,k8s提供了一个抽象层,使其可以在物理或虚拟环境中部署容器应用程序,提供以容器为中心的基础架构。
这是官方说法,说白了就是你之前docker起的容器以及对这些容器的管理和调度比较复杂,你使用k8s之后,容器的创建,调度,滚动升级等都变得异常简单,所以各个大厂小厂都在拥抱这种变化,对现有的服务进行k8s升级改造。
2. k8s能解决什么问题
对于大多数用户来说,k8s的主要作用是在一个给定的集群上把一个应用运行起来。更进一步说,k8s需要提供的是网关、水平拓展、监控、备份、灾难恢复等一系列运维能力。
3. k8s架构图
k8s系统架构遵循客户端/服务端(C/S)架构,系统架构分为Master和Node两部分,Master作为服务端,Node作为客户端。k8s系统具有多个Master服务端,可以实现高可用。在默认的情况下,一个Master服务端即可完成所有工作。
- Master节点
- 主要负责
- 集群的“大脑”,负责管理所有节点(Node)。
- 负责调度Pod在哪些节点上运行。
- 负责控制集群运行过程中的所有状态。
- 包含组件
- etcd:保存整个集群的状态
- apiserver提供了资源的唯一入口,并提供认证、授权、访问控制、API注册和发现等
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
- Node节点
- 主要负责
- 负责管理所有容器(Container)。
- 负责监控/上报所有Pod的运行状态。
- 包含组件
- kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
- Container runtime负责镜像的管理以及Pod和容器的真正运行(CRI)
- kube-poxy负责为Service提供cluster内部的服务发现和负载均衡
除了核心组件,还有一些推荐的组件:
- kube-dns负责为整个集群提供DNS服务
- Ingress Controller 为服务提供外网入口
- Heapster提供资源监控
- Flannel(提供集群间网络)
- Dashboard提供GUIFederation提供跨可用区的集群
- Fluentd-elasticsearch提供集群日志采集,存储与查询
说完组件之后,接下来开始k8s中各个资源对象的介绍。
- Pod对象
- k8s中最小的管理和部署单位,一个Pod中可以有一个或多个容器。同一Pod中的容器共享IP地址、通过localhost相互通信、共享数据卷。
- 不同Pod之间可以相互访问或者通过service访问
- Pod有自己的IP,但是不能对外使用,只能集群内使用,因为Pod随时就会被丢弃,外部的IP就无效了,可以通过别的方式对外暴露。
- 从集群外部访问不鸟,因为集群网络都是隔离的,需要借助别的资源打通
- Service对象
- 一组逻辑Pods和它们访问策略的抽象,为一组相同属性的Pods抽象出一个固定IP地址,允许Pod之间以及Pod与Service之间相互通信。
- 简称svc,通过筛选Pod的标签将一组Pod管理起来
- svc提供一定的负载均衡能力
- 对于Pod来说svc就是它们的统一入口
- Deployment对象
- 提供Pod滚动更新和ReplicaSets的控制器
- 创建Pod,创建Pod的副本集
- 删除Pod以及副本集
- ReplicaSet对象
- 保证集群在任何时间点上都有指定数量的Pod副本,除非你需要定制滚动更新的策略或者不需要滚动更新,K8s推荐使用Deployment而不是直接操作ReplicaSet
- Namespace对象
- 将集群资源汇总在指定的空间之下
- 隔离资源对象
- 默认是default空间
还有其它很多对象就不逐一介绍了,大家下去重点了解哈。
在我们了解了上述架构,组件以及资源对象之后,中篇后期文章所有基于这些对象和组件编排任务的流程就会清晰很多,我们会在上篇创建的基于grpc+etcd+gateway的项目上进行k8s任务编排,把裸机部署改造为容器化部署
最后放一张docker相关命令图,因为k8s管理的容器目前都是基于docker容器运行时环境,所有docker相关的你就得了解它。