K8S到底是什么东西?(概念篇)
1. Kubernetes介绍
Kubernetes(简称:K8S) 是Google在2014年6月开源的一个容器集群管理系统,使用Go语言来发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用更简单并且高效,Kubernetest提供了资源调度,容器管理,服务发现,扩容缩容,监控,维护等一整套功能。
官网地址: https://kubernetes.io
2. Kubernetes的核心组件
首先我们要知道集群中有master节点和node节点。
Master节点:k8s集群中的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd储存服务(可选),运行API Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。
Node节点:k8s集群中的工作节点,监听API Server发送过来的新的工作分配,他们会执行分配 给它们工作,然后将结果报告给Kubernetes主节点。
Master节点里的核心组件:
1. API Server 提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,只有API Server与存储通信,其他模块通过API Server访问集群状态。
2. Scheduler 新建立的Pod进行节点(node)选择(分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
3. Controller 负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。
4. Etcd 作为整个集群存储(key-value),集群中所有的状态都储存在etcd实例中,也有监控的能力。
Node节点:
1. Kubelet 负责管控容器,Kubelet会从Kubernetes API Server 接收Pod的请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes的 API Server。
2. Container Runtime 每一个Node都会运行一个Container Runtime,其负责下载镜像和运行容器。Kubernetes 本身并不提供容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境,kubelet 使用Unix socket 之上的 GRPC框架与容器运行时进行通信,kubelet作为客户端,而CRI shim 作为服务器。
3. Kube proxy 基于一种公共访问策略(负载均衡),服务提供了一种访问一群pod的途径,此方式通过一个虚拟的IP来实现,客户端能够访问此IP,并能够将服务器透明的代理至Pod。每一个Node都会运行一个kube-proxy,kube proxy通过iptables规则引导访问至服务IP,并将重定向至正确的后端应用,通过这种方式kube-proxy提供了一个高可用的负载均衡解决方案。服务发现主要通过DNS实现。
4. Pod 是Kubernetes进行创建,调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活,一个Pod可以包含一个容器或则多个相关容器。
3.Kubernetes的功能
1. 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器。
2. 自我修复(自愈能力):
当容器失败时,会对容器进行重启。
当所部署的Node节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务。
3. 水平扩展:通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁。
4. 服务发现:用户不需使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡。
5. 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次或批量式更新。
6. 版本回退: 可以根据应用部署情况,对应用容器变化的应用,进行历史版本即时回退。
7. 密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
8. 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录,网络存储(NFS,Gluster,Ceph等)、公共云存储服务。
9. 批量处理:提供一次性任务,定时任务,满足批量数据处理和分析的场景。
