k8s学习——相关概念
K8S特性:
1.自动装箱:
构建于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率。
2.自我修复(自愈):
支持容器故障后自动重启、节点故障后重新调度容器,以及其他可用节点、健康状态检查失败后关闭容器并重新创建等自我修复机制。
3.水平扩展:
支持通过简单命令或UI手动水平扩展,以及基于CPU等资源负载率的自动水平扩展机制。
4.服务发现和负载均衡:
Kubernetes通过其附加组件之一的KubeDNS(或CoreDNS)为系统内置了服务发现功能,它会为每个Service配置DNS名称,并允许集群内的客户端直接使用此名称发出访问请求,而Service则通过iptables或ipvs内建了负载均衡机制。
5.自动发布和回滚:
Kubernetes支持“灰度”更新应用程序或配置信息,它会监控更新过程中应用程序的健康状态,以确保它不会在同一时刻杀掉所有实例,而此过程中一旦有故障发生,就会立即自动执行回滚操作。
6.密钥和配置管理:
Kubernetes的ConfigMap实现了配置数据与Docker镜像解耦,需要时,仅对配置做出变更无须重新构建Docker镜像,这为应用开发部署带来了很大的灵活性。此外,对于应用所依赖的一些敏感数据,如用户名和密码、令牌、密钥等信息,Kubernetes专门提供了Secret对象为其解耦,即便利了应用的快速开发和交付,又提供了一定程度上的安全保障。
7.存储编排:
Kubernetes支持Pod对象按需自动挂载不同类型的存储系统,这包括节点本地存储、公有云服务商的云存储。以及网络存储系统。
8.批处理执行:
除了服务型应用,Kubernetes还支持批处理作业以及CI,如果需要,一样可以实现容器故障后恢复
主要主件说明:
APISERVER: 所有服务访问统一入口
CrontrollerManager: 维持副本期望数目
Scheduler: 负责介绍任务,选择合适的节点进行分配任务
ETCD: 键值对数据库,储存K8S集群所有重要信息(持久化)
Kubelet: 直接跟容器引擎交互实现容器的生命周期管理
Kube-proxy: 负责写入规则至 IPTABLES IPVS 实现服务映射访问的
COREDNS: 可以为集群中的SVC创建一个域名IP的对应关系解析
DASHBOARD: 给K8S集群提供一个 B/S 结构访问体系
INGRESS CONTROLLER: 官方只能实现四层代理,INGRESS 可以实现七层代理
FEDERATION: 提供一个客园跨集群中心的K8S统一管理功能
PROMETHEUS: 提供K8S集群的 监控能力
ELK: 提供K8S集群日志统一分析介入平台
pod概念:
ReplicationController:用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收。在版本Kubernetes中建议使用ReplicaSet来取代ReplicationController。ReplicaSet跟ReplicationController没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector
虽然ReplicaSet可以独立使用,但一般还是建议使用Deployment来自动管理ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)
Horizontal Pod Autoscaling 仅适用于Deployment和ReplicaSet,在V1版本中仅支持根据Pod的CUP利用率扩容,在v1alpha版本中,支持根据内存和用户自定义的metric扩缩容。
StatefulSet:是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括:
稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行,基于init containers来实现
有序收缩,有序删除
DaemonSet:确保全部(或者一些)Node上运行一个Pod的副本,当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod
Job:负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个Pod成功结束
Cron Job:管理基于时间的Job,即:
在给定时间点只运行一次
周期性地在给定时间点运行
K8S网络通讯方式:
Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平的网络空间中,这在GCE(Google Compute Engine)里面是现成的网络模型,Kubernetes假定这个网络已经存在。而在私有云里搭建Kubernetes集群,就不能假定这个网络已经存在了。我们需要自己实现这个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行Kubernetes。