一、 Kubernetes是什么
- Kubernetes简称K8S;
- k8s本质上是一组服务器集群,k8s可以在集群的各个节点上运行特定的docker容器;
- Kubernetes是Google在2014年开源的一个容器集群管理系统;
- k8s用于容器化应用程序的部署,扩展和管理;
- k8s提供了容器比安排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能;
- k8s目标是让部署容器化应用简单高效。
二、 Kubernetes特性
- 自我修复:当某个容器挂掉或服务器挂掉,会自动启动新的容器;
- 弹性伸缩:实时根据服务器的并发情况,增加或缩减容器数量;
- 自动部署和回滚:
- 服务发现和负载均衡
- 机密和配置管理
- 存储编排
- 批处理
三、 Kubernetes集群架构与组件
- k8s集群分为两类节点
master node:主
worker node:工作 - master节点的组件(程序)
kube-apiserver:Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储;
schduler:根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上;
controller manager:处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的;
etcd:etcd:分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。 - node节点的组件(程序)
kubelet:向docker发送指令管理docker容器;kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器;
kube-proxy:管理docker容器的网络。在Node节点上实现Pod网络管理,维护网络规则和四层负载均衡工作;
docker或rocket:容器引擎,运行容器。 - 一次请求的完整过程(比如想要启动一个nginx)
首先,用户通过kubectl来发送指令到apiserver,apiserver会通过Etcd(Etcd类似数据库)对用户进行权限的验证;通过验证后,apiserver会向scheduler发送指令(你给我找一个节点,我要启动nginx),scheduler就会通过apiserver去查询Etcd当前有哪些节点,scheduler得到各个节点的ip后,然后scheduler通过算法得出一个合法的ip返回给apiserver;apiserver将得到的ip发送给controller-manager,controller-manager通过apiserver去和相应ip地址的节点node的kubelet进行通信,kubelet再通过docker去启动具体的容器。
四、 Kubernetes核心概念(重要)
Pod
(1)pod是k8s最小部署单元;
(2)一个pod中可以有一个或者多个容器,pod又称为容器组,一组容器的集合;
(3)一个Pod中的容器共享网络命名空间;
(4)Pod是短暂的
Controllers:控制器,控制pod,启动、停止、删除
(1)ReplicaSet:确保预期的Pod副本数量;
(2)Deployment:无状态应用部署;
(3)StatefulSet:有状态应用部署;
(4)DaemonSet:确保所有Node运行同一个Pod;
(5)Job:一次性任务;
(6)Cronjob:定时任务。
Service
(1)防止pod失联;
(2)定义一组pod的访问策略。
Label
(1)标签,附加到某个资源上,用于关联对象、查询和筛选;
(2)一组pod有一个统一的标签,service是通过标签和一组pod进行关联的。
Namespace
(1)命名空间,将对象逻辑上隔离;
(2)为开发环境、测试环境、生产环境分别准备不同的名称空间,进行隔离。