Kubernetes抽象出一个Pod对象 , 是一组(一个或多个)容器 ,这些容器共享存储、网络等 ,这些容器是相对紧密的耦合在一起的 。 Pod是Kubernetes内创建和管理的最小可调度单元 , 调度过程是按Pod整体所需资源一起进行调度的 。 Pod本身只是逻辑上的概念 , 在容器管理这层并不认识Pod对象 。
Pod的实现需要使用一个中间容器(Infra容器) , 在这个Pod中 , Infra容器永远是第一个被创建的容器 , 用户定义的其他容器通过Join Network Namespace的方式与Infra容器关联在一起 。 抽象一个中间容器的原因在于各个业务容器是对等的 , 其启动没有严格的先后顺序 , 需借助中间容器实现共享网络和存储的目的 。
其中 , Node、Pod与容器三者关系 , 如下图所示 。 Node表示一台机器 , 可调度多个Pod , 而一个Pod内又能包含多个容器 。
至此 , 再来通过Kubernetes中各个对象的关联关系来更为深刻的理解Pod的意义 。 下图可以看出 , Pod其实是整个编排过程中操作的核心 , 很多对象直接或间接的同Pod相关联 。
- Service对象
下图是kube-proxy通过iptables模式来实现Service的过程 , Service对象有一个虚拟clusterIP , 集群内请求访问clusterIP时 , 会由iptables规则负载均衡到后端endpoints 。
- 声明式API
下图描绘了一个场景:目标副本数为3 。 对于声明式而言 , 用户设定目标为3 , 系统获取当前副本数为2 , 系统判定当前值与目标值的差为1 , 便自行加1 , 最终实现副本数为3的目标状态 。 而对于命令式 , 需用户判断当前副本数为2 , 用户给出指令副本+1 , 系统接收用户指令 , 执行副本数+1操作 , 最终系统副本数为3 。
kubernetes的一大核心设计就是采用了声明式API , 利用该设计思想有效的实现了系统的自动化运行 。 Kubernetes声明式API指定了集群期望的运行状态 , 集群控制器会通过List&Watch机制来获取当前状态 , 并根据当前状态自动执行相应的操作至目标状态 。
Kubernetes中 , 用户通过提交定义好的API对象来声明期望状态 , 系统允许有多个API写端 , 以PATCH方式对API对象进行修改 。 Kubectl工具支持三种对象管理方式:命令式命令行、命令式对象配置(yaml)、声明式对象配置(yaml) 。 举例如下:命令式命令行:
- kubectl run nginx –image nginx
命令式对象配置:
- kubectl create –f nginx.yaml
- kubectl replace –f nginx.yaml
以上先kubectl create再kubectl replace的操作 , 与命令式命令行不存在本质区别 。 只是把具体命令写入yaml配置文件中而已 。 声明式对象配置:
- 罗永浩|为何小商贩大多喜欢用微信支付,却很少使用支付宝?什么原因?
- 罗永浩|罗永浩称拿火烤钟薛高精神有问题:直击钟薛高卖得贵
- 罗永浩|罗永浩官宣新创业公司名字,看来锤子真的被放弃了!
- 罗永浩|罗永浩称不会再有“真还传2” 所有让写担保的都不签了
- 罗永浩|罗永浩称拿火烤钟薛高精神有问题:劝网友先看检测报告再黑
- “快来”为你解读视联网发展阶段之婴儿篇“快来直播”带你了解视联网发展阶段视联网的发展趋势...|“快来”为你解读视联网发展阶段之婴儿篇
- 罗永浩|罗永浩直播间拍蚊子为自己正名:让投资人放心
- 罗永浩|又一位互联网大佬宣布移居海外!!
- 锤子科技|和锤子科技说再见!罗永浩:新公司已经成立!
- 罗永浩|罗永浩谈钟薛高卖得贵:品质碾压哈根达斯 还没它贵!