Go微服务架构实战-中篇1.k8s架构介绍
Go微服务架构实战-公粽号:堆栈future
本系列⽂章主要是针对云原⽣领域微服务架构的实战,包括⽹关,k8s,etcd以及grpc等相关技术的应⽤,同时也会把服务发现与注册,熔断,降级,限流以及分布式锁等加⼊到系列当中作为补充,课程的最后也会安排分布式链路追踪框架的学习,监控平台的搭建以及灰度发布等技术服务,所以总体来讲,课程范围涉及技术领域较⼴,知识⾯⽐较宽,⼤家下来各取所需尽量做到熟悉和应⽤,之后有时间了在研究下源码,乐哉!
上篇已经完成,⼤家可以看下,我这⾥贴出来了,中篇从这周开始陆续为⼤家产出,因为太耗费精⼒,所以还望⼤家多多⽀持!
1. 微服务架构上篇
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节点
1. 主要负责
集的“⼤脑”,负责管理所有节点(Node)。
负责调度Pod在哪些节点上运⾏。
负责控制集运⾏过程中的所有状态。
2. 包含组件
etcd:保存整个集的状态
apiserver提供了资源的唯⼀⼊⼝,并提供认证、授权、访问控制、API注册和发现等
controller manager负责维护集的状态,⽐如故障检测、⾃动扩展、滚动更新等
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
Node节点
1. 主要负责
负责管理所有容器(Container)。
负责监控/上报所有Pod的运⾏状态。
2. 包含组件
kubelet负责维护容器的⽣命周期,同时也负责Volume(CVI)和⽹络(CNI)的管理
Container runtime负责镜像的管理以及Pod和容器的真正运⾏(CRI)
kube-poxy负责为Service提供cluster内部的服务发现和负载均衡
除了核⼼组件,还有⼀些推荐的组件:
1. kube-dns负责为整个集提供DNS服务
2. Ingress Controller 为服务提供外⽹⼊⼝
3. Heapster提供资源监控
4. Flannel(提供集间⽹络)
5. Dashboard提供GUIFederation提供跨可⽤区的集
6. 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相关的你就得了解它。公粽号:堆栈future
使很多处于迷茫阶段的coder能从这⾥到光明,堆栈创世,功在当代,利在千秋
125篇原创内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。