docker是管理一个主机上的多个容器的工具,K8S是管理多主机多容器的工具
一、kubernets入门
kubernetes是古希腊语,译为舵手或领航员,其是google基于borg与omega的经验,用go语言写后开源的,简写K8S。
特性:便携性(公有云私有云/混合云);可拓展性(模块化、插件化);自我修复(自动发布/重启/复制/伸缩)
K8s的核心功能:应用管理(自动发布、自动恢复、自动扩展、滚动升级)
资源使用率(最大化)
面向服务(将服务的地位提升到机器之上,实现细粒度的服务质量(QoS)
二、kubernets核心组件和概念
1、 2种角色+6大功能组件+N种资源对象+kubectl
master管理节点(apiserver/etcd/scheduler/controller-manager) node计算节点(kubelet/kube-proxy)
Apiserver: master和Node之间的所有交互,都是通过apiserver进行的,并记录到etcd中
Scheduler: 只负责调度,负责调度策略
Controller-manager: (核心管理组件)有n个控制器,每一个实时控制一个资源管理对象(node、pod副本、服务端点endpoint、命名空间namespace、服务账号serviceAccount、资源配额ResourecQuota等),它会给node发指令
Etcd: 数据库,master保存所有node和服务运行的状态以及调整的实时信息
Kubelet: 主要是接收master发来的具体操作的指令,并执行(增删改查扩缩容等),负责node节点上pod的全生命周期管理;并把本机运行的所有容器的运行状态传给master
Kube-proxy: 客户端访问本机容器服务时,起到智能代理的做用(服务到容器的负载均衡策略),将请求负载分发到具有相通功能的后端容器上
Kubectl: 是人机交互的命令行工具
2、 kubernetes容器的搭建和使用
3、 Kubernetes Workload概念和应用
K8s是声明型配置,只需要给予K8S声明(需求)即可
3.1 pod
K8s中,创建、调度和管理的最小部署单位是pod,而不是容器
一个pod对应于由若干容器组成的一个容器组,同个组内的容器共享存储卷(volume)和网络栈;
包装复杂应用的实例:主服务+辅助工具
只需要写业务容器,不用操作pause,这是由k8s自动创建的
Pod的网络端口设置,k8s与容器的区别为用CNI(常用的为calico),而非docker0
3.2 replicationController(RC)
管理一组pod,确保用户期望的pod数量(创建或销毁Pod),在线Pod数量调整
应用自动故障恢复:主机健康检查(kubelet负责);自动在健康的node上重新创建Pod
容器健康检查:容器健康检查(kubelet负责);kill僵死的容器,并重启
应用滚动升级:逐个杀掉旧版本的容器,同时逐个启动新版本的容器,始终保持同数量的在起容器
3.3 Label
Key:value的配置:资源对象的元数据;查询关键字
通过label select 选择相应的主机或Pod
3.4 Service(服务流程,端口的几种模式,怎么访问)
在容器副本集的上面,逻辑上设置了新的负载均衡的地址,是给客户端使用的稳定的访问地址。
Rc+service=微服务
一组相通功能pod的对外访问地址;
虚拟cluster ip 地址+虚拟端口号 IP + Port(四层)
负载分发:将请求分发到后端pod
3.5 命令行管理工具kubectl
4 pod中的volume(存储卷)