资源管理平台历史
Apache Mesos UC伯克利大学推出的资源管理平台。老一辈的框架,目前使用的企业已经不多。abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.
Docker Swarm Docker官方推出的资源管理平台。功能比较少,市场占有率很少。
Kubernetes Google推出的资源管理平台。同时Go语言开发,是Google内部的Borg系统的开源版。容器管家。Kubernetes (k8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
Kubernets介绍
http://kubernetes.io/ https://github.com/kubernetes/kubernetes https://github.com/feiskyer/kubernetes-handbook
优势特点
- 轻量级,消耗资源小
- 代码开源
- 弹性伸缩
- 负载均衡: IPVS
Kubernetes和docker是什么关系? Kubernetes是Google的一个开源容器管理项目,他能利用Docker/其他技术部署/管理容器集群。
Kubernetes和Yarn的区别? Kubernetes和Yarn的在应用层面最大区别是前者主要负责long running service 任务,后者则是跑一些batch jobs。
概念
Master (Scheduler, API Server, Replication controller)
Node (kubelet, kube-proxy, Pod(Container)): 是Pod运行的宿主机,包含一个agent进程,维护和管理该Node下所有容器的创建和启停。
Pod : Kubernetes有一个好的地方就是它把多个容器抽象成了Pod,方便用户管理。
- pod是k8s调度的最小单元。
- 1个pod是指一组容器,可以包含1个或多个容器,可以理解为pod是容器集合。或者认为pod是容器的容器
- pod内的容器可以共享相同的ip和端口空间。
kubelet 跟容器引擎交互,管理容器的生命周期
kube-proxy: 写入规则到iptables实现服务映射
通讯模式: 所有Pod都在一个可以直接连通的网络空间里。 Flannel提供跨物理机的容器间扁平 通信。
资源清单 yam
etcd 存储
pod资源分配规格
- request:pod的自愿申请量
-
limit: pod资源使用上限
- cpu: CPU share
- memory
- hugepages https://ustack.io/2019-11-21-Linux%E4%B9%8Bhugepages%E5%8E%9F%E7%90%86%E6%A6%82%E5%BF%B5.html
pod内资源利用率是如何计算的?
- 如何计算容器的CPU使用值: https://www.jianshu.com/p/eecd730f3482
虚拟环境的资源限制是如何实现的?
- java.io.IOException: No space left on device
- java.lang.OutOfMemoryError: Java heap space https://developer.aliyun.com/article/700701
配置Pod的liveness和readiness探针
Kubelet使用liveness probe(存活探针)来确定何时重启容器。 Kubelet使用readiness probe(就绪探针)来确定容器是否已经就绪可以接受流量。
Kubelet 可以选择是否执行在容器上运行的两种探针执行和做出反应:
- livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success。
- readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success