谈谈容器和 K8s
从容器说起:
容器是当前云生态的关键技术,有两句话说的很好。
VM 让操作系统误以为自己独占了硬件。容器技术让进程误以为自己独占了操作系统。
容器技术是建立在操作系统之上的,通过网络,内存,CPU,进程等的隔离达到独占的效果。
容器的好处:
更高效的隔离:
说到隔离的目标主要是:
避免一些程序配置的复杂度, 网络端口,日志配置。
对于资源的限制和切分。
比起虚拟机建立物理机之上性价比要高的多, 毕竟操作系统开销很高。
更友好的部署
docker镜像让环境部署变得容易。
一次装载到处使用,启动和关停非常迅速
容器在分布式环境的困境:
现实的场景毕竟是一个分布式的运行环境,如何管理容器,快速装卸容器,容器怎么互相通信就是一个很大的问题。
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
评论