kubenetes特点:
轻量级:消耗资源少
开源
弹性伸缩
负载均衡:IPVS
kubenetes组件
- api server: 所有服务访问统一入口,提供认证、授权、访问控制并定义pod访问策略
- crontrollerManager: 维护集群的状态,故障检测、自动扩展、滚动更新、控制器维持副本期望数目
- scheduler: 资源调度
- etcd: 键值对数据库 储存k8s集群所有重要信息(持久化)
- kubelet: 管理容器的生命周期
- kube-proxy: 为service提供cluster内部的服务发现和负载均衡,负责写入规则至iptables ipvs实现服务映射访问
- coredns: 为集群中的SVC创建一个域名ip的对应关系解析
- ingress controller: 为服务提供外网入口,官方只能实现四层代理,ingress 可以实现七层代理
- federation: 提供一个可以跨集群中心多k8s统一管理功能
- prometheus: 提供k8s集群的监控能力
- elk: 提供k8s集群日志统一分析介入平台
- container runtime: 镜像管理以及Pod和容器的真正运行
pod控制器类型
运行在Node环境中,
一个pod中可以运行多个容器
每个pod运行着一个特殊的pause为同一个pod中的其他容器提供网络和volume卷
RC & RS & Deployment
ReplicationController:
用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod 来替代;而如果异常多出来的容器也会自动回收。
在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationControlle
ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector
虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling update但Deployment支持)
deployment在滚动更新时先创建一个新的RS-1,启动一个podv2,在RS中退出一个podv1以此滚动更新,更新完成后RS是不会进行删除的而是停用,回滚时,RS启用并建立一个podv1,RS-1删除一个podv2以此进行回滚。
HPA
Horizontal Pod Autoscaling 仅使用与Deployment和ReplicaSet,在v1版本中仅支持根据Pod的CPU利用率扩缩容,在v1a1pha版本中,支持根据内存和用户自定义的metric扩缩容
StatefulSet
StatefulSet是为了解决有状态服务的问题(对应Deployments 和ReplicaSets是为无状态服务而设计),其应用场景包括:
*稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
稳定的网络标志,即Pod重新调度后其PodName和 HostName不变,基于Headless Service(即没有ClusterIP的Service )来实现
*有序部署,有序扩展,即Pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从О到N-1,在下一个Pod运行之前所有之前的 Pod必须都是Running 和Ready状态)基于init containers来实现
有序收缩,有序删除(即从N-1到o)
DaemonSet
DaemonSet确保全部(或者一些)Node 上运行一个 Pod 的副本。当有Node加入集群时,也会为他们新增一个Pod 。当有Node从集群移除时,这些Pod 也会被回收。删除DaemonSet将会删除它创建的所有Pod
使用DaemonSet的一些典型用法:
*运行集群存储daemon,例如在每个Node 上运行glusterd、ceph。
*在每个Node上运行日志收集daemon,例如fluentd、logstash。
*在每个Node上运行监控 daemon,例如Prometheus Node Exporter
Job,Cronjob
Job 负载批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
Cron Job管理基于时间的Job,即:
*在给定时间点只运行一次
*周期性地在给定时间点运行
Service服务发现
对一个类型的服务提供唯一 一个名字 》唯一ip:端口
提供某种远程服务 映射到提供这种服务的一组容器应用上
,