谈谈容器和 K8s

用户头像
Gabriel
关注
发布于: 2020 年 07 月 02 日

从容器说起:

容器是当前云生态的关键技术,有两句话说的很好。

VM 让操作系统误以为自己独占了硬件。容器技术让进程误以为自己独占了操作系统。

容器技术是建立在操作系统之上的,通过网络,内存,CPU,进程等的隔离达到独占的效果。

容器的好处:

更高效的隔离:

说到隔离的目标主要是:

  1. 避免一些程序配置的复杂度, 网络端口,日志配置。

  2. 对于资源的限制和切分。

比起虚拟机建立物理机之上性价比要高的多, 毕竟操作系统开销很高。

更友好的部署

  1. docker镜像让环境部署变得容易。

  2. 一次装载到处使用,启动和关停非常迅速

容器在分布式环境的困境:

现实的场景毕竟是一个分布式的运行环境,如何管理容器,快速装卸容器,容器怎么互相通信就是一个很大的问题。

K8S解决的问题:

能提供容器动态缩扩容的能力,通过资源混部提升系统资源利用率,提供网络功能让集群内的组件互相通信。

k8s整体是声明式面向终态的管理,使用起来并不复杂。

核心功能:

部署管理

pod: 最小管理单元, 可以用labels 以及selector 筛选合适的node。

daemonSet: 每个node上跑的专有容器,一般一个node一个。

deployment: 一种资源变更或者修改的语法声明,主要有RC,其中replicate 控制副本数量, limit,request 控制资源数量。

volumn: 物理数据存储的映射。包括一些NFS,emptyDir, hostDir.

配置管理

secret/config map 用于统一管理环境变量或者配置文件和应用程序解耦,便于修改分发。

网络管理

IP 互联:

pod 内部:

pod内部的container都属于一个网络系统,可以直接访问。

同nod上的pod:

同node上的pod,利用veth pair 结合docker Bridge 进行互连。

不同node上的pod:

主要是利用一些CNI的连接能力进行互联,主要有BGP互联和overlay的方式。

通过server cluster ip 访问service:

kube-proxy:

userNameSpace: kube-proxy直接做中转负载均衡。

iptables:

通过netfilter的方式修改访问的ip直接中转到服务。

与外网域名结合:

ingress技术: nginx proxy与service进行整合。

CNI 功能:

网络IP分配,提供内部ip互相访问的能力。

常用的CNI:

flannel 主要是通过overlay的方式,包括 vxlan,和udp 一个是内核级,一个是应用级。

calico: 三层网络直接访问,主要通过BGP(bird) 洪范建立路由表,方便互联

参考文档:https://www.cnblogs.com/goldsunshine/p/10701242.html



用户头像

Gabriel

关注

每一段不曾起舞的日子,都是对生命的辜负 2020.04.11 加入

美团网/阿里巴巴

评论

发布
暂无评论
谈谈容器和K8s