特点:
轻量级、开源、可移植、可扩展、负载均衡、高可用
Pod概念:
只要pod被启动,pod里面的pause容器就会被启动,其他的容器共享pause容器的网络和存储卷,使用的端口不能冲突。
Pod是k8s进行创建、调度和管理的最小操作单元,pod相当于豆荚,容器相当于豆荚中的豆子,一个pod可以有一个或多个容器,pod运行在节点上,一个节点可以运行一个或多个pod。
Pod ip:pod的IP地址
Cluster IP:service IP地址的一种类型,service相当于pod副本的代理,相对于几个原pod和pod副本与service组成一个小集群。
Node ip:是kubernetes集群中每个节点的物理网卡的IP地址,是真实存在的物理网络。
Leabel:是标签,是k8s访问资源的一种方式,pod、副本、service可以统称为k8s的资源。
Pod控制器:
也叫副本管理器,用来创建、修改、删除副本,可以控制副本的数量。
replicationcontroller确保容器应用的副本数始终保持在用户定义的副本数,replicaset支持集合selector,其他相同,所以取代RC,虽然replicaset可以独立使用但是不支持rolling-update,deployment支持rolling-update,但不支持创建pod,所以通常使用deployment来管理replicaset。
Horizontal pod autoscaling 仅适用于deployment和replicaset,在1版本中只支持CPU利用率扩容,在vlalpha版本中,支持内存和自定义扩容。
Statefulset是为了解决状态服务的问题(对应deployment和replicaset是为无状态服务而设计),应用场景稳定的持久化存储、稳定的网络标志、有序部署有序扩展,有序收缩有序删除。
Daemonset确保全部(或者一些)node上运行一个pod的副本。当有node加入集群时,也会为他们新增一个pod。当有node从集群中移除时,这些pod也会被回收。删除daemonset将会删除它创建的所有pod,用运行集群存储daemon,在每个node上运行日志集群daemon,在每个node上运行监控daemon。
Job负责批处理任务,即在给定的时间点仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束。
Cron job管理基于时间的job,在给定时间点只运行一次,周期性的在给定时间点运行。
服务发现:
这是一种pod与pod之间通信的方案
Kubernetes架构和组件:
高可用集群副本数量最好是大于等于3个
Api server所有服务访问的统一入口,把请求存储在etcd里面
Replication controller 副本管理器,维持副本期望数目
Scheduler调度器,负责介绍任务,选择合适的节点分配任务
Etcd键值对数据库,存储k8s集群中所有的重要信息(实现持久化)
kubelet直接与容器引擎交互实现容器的生命周期管理
Kube-proxy负责写入规则至iptables、IPVS规则实现服务映射访问
CoreDNS可以对集群中的service创建一个域名IP对应关系解析
Dashboard给k8s集群提供一个B/S访问结构体系
Ingress controller官方只能实现四层代理,ingress可以实现七层代理
Frederation提供一个跨集群中心多k8s统一管理
Prometheus提供k8s集群监控能力
Elk提供k8s集群日志统一分析介入平台
用户提交service描述文件,由kube proxy负责具体的工作流量转发
网络通信模式:
Kubernetes的网络模型假定所有pod都在一个可以直接连通的扁平网络空间中,在GCE(Google compute engine)里面是现成的网络模型,假定的这个网络已经存在。在私有云里搭建kubernetes集群,需要我们自己实现这个网络假设。
同一个pod内的多个容器之间:是通过pause容器的l0网卡进行通信
各pod之间的通信:是通过覆盖网络overlay network进行通信。
Pod与service之间的通信:通过各个节点的iptables规则实现的。
网络解决方案:kubernetes+flannel
Flannel是coreos团队针对kubernetes设计的一个网络规划服务,简单来说,它的功能是让不同节点主机创建的容器都具有全集群唯一的虚拟IP地址。还能在这些IP地址之间建立一个覆盖网络overlay network,通过这个覆盖网络,将数据包原封不动的传递到目标容器内。
Etcd与flannel说明:存储管理flannel分配的IP地址段资源,监控etcd中每个pod的实际地址,并在内存中建立维护pod节点路由表。
容器的生命周期:
Init C 初始化容器:
Lnit C 容器启动成功以后才会启动应用容器,Init 容器总是运行到成功完成为止,每个 Init 容器都必须在下一个 Init 容器启动之前成功完成,如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动。如果 Pod 重启,所有 Init 容器必须重新执行
容器探针:
探针是由kubelet对容器执行的定期诊断,ExecAction(命令),TCPSocktAction(对指定端口上的容器的IP地址进行TCP检测),HTTPGetAction(对指定端口的容器的IP执行HTTP get,200<=HTTP get<400),结果有成功,失败,未知(容器挂死,一直等待)。
Readness probe:就绪检测,只有探针检测通过了,容器才会对外提供服务
Livenss probe:生存检测,检测容器是否运行正常,Start、stop、相位。
Pod状态:Pending 挂起,running 运行中,succeeded 成功,failed 失败,unkown 未知。