前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes容器平台架构简析

Kubernetes容器平台架构简析

作者头像
数据库架构之美
修改2019-12-27 20:06:33
7960
修改2019-12-27 20:06:33
举报

行业背景

Docker自2013年发行以来,得到了飞速的发展,直至今日已经成为了基础架构中必不可缺的一份子,也是构建企业云平台的有效手段。而作为容器编排及管理的利器的kubernetes,已经与docker紧紧绑在一起,K8S对docker提供了更加原生的支持,同时提供了资源调度、容器生命周期管理、负载均衡、弹性伸缩、高可用等底层功能。

Docker基本概念

Docker简单理解其实就是运行在linux上的虚拟机,但是又和传统的虚拟机有所不同,docker相比虚拟机更加轻量,对资源的利用更高,最大的一个特点就是docker不需要在宿主机上虚拟出一个虚拟机操作系统,多个docker共享宿主机的linux内核,相比虚拟机性能更好。还有一点,docker可以将应用程序和依赖的库文件一起打包入镜像,这个镜像就是应用的完整的运行时环境,这样大大简化了应用发布及迁移的流程。

K8S核心技术

对于初学者来说可能觉得k8s的技术复杂,但其实k8s并没有什么核心技术,k8s只是一个工具实现了我们资源可控、网络隔离、弹性伸缩、快速部署等功能。它其实就是将操作系统的一些命令或者功能封装进k8s里帮助我们实现上面的功能。比如通过操作系统cgroup实现容器的资源隔离和限制,通过iptables,lvs实现端口映射和流量转发,数据库使用成熟的分布式存储etcd,flannel网络其实也只是在真实物理网络上虚拟出来的overlay网络,持久化卷也是基于外部的ceph或者nfs、gluserfs或者本地盘等物理存储构建。所以我们看,k8s就是将需要的技术做了整合,实现的集群的管理。

K8S架构

好了,废话不多说,下面简单介绍一下docker及k8s的架构及组网理念。

Docker的话其实没什么好说的,有镜像、仓库、容器等基本概念。对于docker我们掌握一些基本命令就行,主要参考下面这个图:

我们可以简单看看docker的网络,当创建一个docker时会在操作系统上创建一个网桥,网桥也就是虚拟软交换机,这个虚拟交换机将宿主机物理网口和容器的网口互联起来,构成局域网。

下面我们再看看k8s架构,k8s集群由master和node节点组成,master由如下组件组成:APIserver+scheduler+controller manager+etcd,node节点由kubelet+kube-proxy+pod组成

APIserver:所有资源增删改查的唯一入口,k8s集群的命令行和api接口都是通过调用apiserver实现的,主要处理rest操作以及更新etcd中的内容。

Scheduler:集群的调度器,将pod绑定到node上,同时实现pod在node上的调度。

Controller manager:所有其他集群级别的功能,是资源对象的自动化控制中心。

Etcd:集群的数据库,所有需要持久化的信息存储于etcd中。

Kubelet:实现对pod以及容器、镜像、卷等的管理。

Kube-proxy:实现pod间的负载均衡,实现对service ip的访问。

K8S网络与负载均衡

网络是k8s集群中的一个难点,理解k8s网络构成有利于我们理解集群的架构。我们先来看看三类ip:

Node ip:主机的物理ip

Service ip:k8s虚拟ip,由k8s管理和分配,单独的ip没有通信功能,要配合service port才能使用,每个node上的service ip是相同的。

Pod ip:pod的ip地址,内部docker的ip,也就是上面讨论的通过docker网桥与物理网卡互联的ip地址,可以在node上通过ssh访问。

下面我们先看看一个请求的转发流程,我们知道一个请求要想访问某个pod,请求先经过node的物理网卡,通过iptables的转发规则,将访问地址和端口进行转换,转为svc的地址,service同样使用iptables规则通过kube-proxy定义的转发百分比将流量转发到不同pod上。

这里有个问题我们可以延伸下。Svc转发到的多个pod可能不在一个机器上,这样就涉及到跨机器访问,就是说可能a机器的svc需要转发流量到b机器的pod中,那么这种情况下k8s是如何做的呢?这里其实就涉及到overlay网络。

我们知道overlay网络是承载在物理网络上的虚拟网络,这个网络本质上还是走的物理机的物理网卡,但是这个网络其实对物理网络是透明的,用户可以不关心物理网络。那么它是怎么工作的呢?K8s是通过flannel网络实现的。Flannel网络是通过ip隧道协议将数据包前面再封装一层,将源地址和目的地址的外部网络ip(node ip)与内部网络ip(pod ip)封装到数据包里,这样数据包从a机器的svc转发到b机器的物理网卡上时先进行解包,然后得到内部ip,转发到pod上。但是整体上看对于用户就是几个pod间的overlay网络互连的,用户无需关心其他细节。Flannel网络虽然简单,但是这种方式需要解包,所以在集群十分大的情况下可能存在性能问题,所以我们有了flannel网络的替代品:calico,calico网络是完全通过ip路由实现的转发,这种方式也有缺点,就是在集群很大的情况下,路由表可能十分庞大。

当然k8s的内容还有很多,比如说如何构建一个应用,包括namespace、service、deployment、pod等的构建,还有k8s的用户角色与权限认证体系等,这里不再一一讨论。本文旨在帮助初学者构建k8s的一个总体架构,理解k8s的工作机制,至于具体的命令还需要自己去实践。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档