K8s架构入门(一篇就够)
1.为什么要学习k8s我们的项目现在越来越大,服务越来越多,在有几千个服务的时候,手动来管理容器一是工作量很大,再是容易出错,所以想到要出一个管理容器的工具。那kubernets应用而生,k8s是kubernets简称,是用来管理容器的。2.服务部署的模式&云架构&云原生服务部署模式的发展经历了几个阶段,早期都是单体应用,直接部署,后来服务分离,服务化之后单独部署现在是微服务,同一
1.为什么要学习k8s
我们的项目现在越来越大,服务越来越多,在有几千个服务的时候,手动来管理容器一是工作量很大,再是容易出错,所以想到要出一个管理容器的工具。那kubernetes应用而生,k8s是kubernetes简称,是用来管理容器的。
使用k8s有以下几个好处:
a.容器化后可减少运维工作量,可以理解k8s就是一套自动化运维平台
b.容器化后能更好利用系统的资源
c.服务的复制迁移更方便
2.服务部署的模式&云架构&云原生
服务部署模式
服务部署模式的发展经历了几个阶段:
a.早期都是单体应用,直接部署服务器,这样的部署方式,我们可以通过服务器的配置,使用qps指标来大概估算下,服务器的资源利用率。
比如200qps,包含100个请求静态资源的请求和100个动态资源的请求
假设:静态请求占用2M内存,动态请求占用10M内存
200qps占用内存= 100*2M + 100*10M = 1200M
如果服务器内存是4g, 那最多可用600qps。但这是没有考虑cpu,带宽,线程的其他资源的前提下,如果考虑进来,可能最多支持300qps。但是使用300qps 的时候,内存的资源利用率就不高了。所以虚拟化技术应用而生。
b.虚拟机部署,更高效的利用系统资源
虚拟机就是为了隔离出各种系统资源,比如cpu,内存,当然这里也有操作系统。它能更好的利用系统资源。
虚拟机比较多的时候,就需要一种管理虚拟机的技术,有openstack
c.容器化部署,也是为了高效利用系统资源
但是容器化比虚拟机更轻量级,它不抽象出操作系统,只是隔离cpu,内存等系统资源。
那我们这里所强调的k8s 就是一种容器管理技术。
现在是微服务,同一个服务可能就要部署多份。
但是当发展到现在都是soa系统架构下,微服务越来越多,那也会呈现出很多的问题,比如:
* 容器如何横向扩展?
* 容器与容器之前如何更好的通信(网络交互)?
* 一个容器宕机了怎么办?
* 如何对容器的运行情况进行监控?
那这些都是K8s可以完美解决的问题。接下来我们会一一介绍到。
云
什么是云?
云就是使用容器构建的一套服务集群网络,可以理解为容器的集合。
比如我们公司在阿里云上购买的ECS,RDS。实际上就是购买的具体容器,这些容器提供这样的基础设施,服务等功能。
云与k8s的关系?
前面我们提到,k8s就是管理容器的技术,它就是来管理云中的容器的。
云架构
就是我们常说的
Iaas 基础设施即服务
Pass 平台即服务
Saas 软件即服务
以及未来的一种发展趋势,serverless 无服务器
未来我们所有的应用都会上云,无非是共有云还是私有云的问题。
云原生
就是在云架构的基础上,系统都上云之后,提供了云上的解决方案,这样的解决方案成为云原生。
现在我们的很多项目都具备这样的 云原生雏形。
但是我们这里提到的云原生还需具备以下的几点特性:
a.微服务
b.容器化
c.CI/CD 持续集成,持续交付
d.DevOpe 开发运维集成,Devlope&Operations
重点强调快速迭代,需求,产品,研发,测试,运维人员的协调沟通发展。
3.k8s基本架构
k8s的架构主要是由master节点和node节点构成
一个master节点可以对应多个node节点。
master节点不存储容器,主要由四个部分构成:
a.api server k8s网关,所有请求指令都必须先到这里
b.scheduler 调度器,控制网关过来的请求路由到哪个node
c.controller 控制器,主要用来维护k8s资源对象
d.etcd 主要用来资源对象
node节点就是存储具体容器的,但是不仅仅只有容器,主要包括:
a.docker 容器引擎,运行容器的基础环境
b.kubelet 在每个node节点都存在一份,主要来执行关于资源操作的指令,负责pod的维护。
c.kube-proxy 代理服务,用于负载均衡,在多个pod之间做负载均衡
d.fluentd 日志收集服务
e.pod 是k8s的最小服务单元,pod内部才是容器,k8s通过操作pod来操作容器
那pod的组成结构又是怎么样的呢?
pod 也是一个容器,是封装容器的容器,是一个虚拟化的分组,有自己的ip和port。
那个pod里面的子容器之间的交互,就像在一台机器上的交互。具体的实现是通过pause容器来实现的。
在初始化一个pod容器的时候,就会生成一个pause容器。这个容器使得pod里面的子容器能够共享网络和存储,方便内部容器之间的调用。
4.k8s的核心组件
4.1pod
4.2ReplicaSet
4.3Deployment
4.4StatefulSet
5.k8s的服务注册与发现
5.1service服务发现:pod如何对外网提供服务
5.2service服务发现:负载均衡访问问题的思考
5.3service服务发现:实现负载均衡的原理
5.4service服务发现:实现负载均衡原理的深入
更多推荐
所有评论(0)