K8s的基本概念与架构
K8S的基础概念和架构
k8s具有强大的功能:
- 批处理
- 弹性伸缩
- 故障自我修复
- 存储编排
- 机密和配置管理
- 自动部署和回滚
- 服务发现和负载均衡
K8s具有强大的功能:
- 功能齐全的UI界面
- 全方位的立体监控系统
- 功能完备的日志手机系统
K8s基础介绍
为什么叫k8s?
K8s全程叫Kubernetes,在k和s之间有八个字母,简称为K8s
下图为K8s的logo:
Kubernetes是可移植的、可扩展、开源的容器管理平台,是谷歌的Borg的开源版本。
K8s可以创建应用、更新应用、回滚应用,也可以实现应用的扩容和缩容,做到故障自回复。
- 可移植:镜像可以从一个环境迁移到另一个环境
- 可扩展:K8s集群可以横向拓展,根据流量实现自动扩容缩容
- 开源的:源代码已经被公开,可以被用户免费使用,也可以进行二开
- 可以对容器自动化部署、自动化扩缩容、跨主机管理等;
- 可以对代码进行灰度发布、金丝雀发布、蓝绿发布、滚动更新等;
- 具有完整的监控系统和日志收集平台,具有故障自恢复的能力。
Borg是谷歌内部的一个容器编排工具,谷歌的业务百分之90以上都在Borg上运行,Borg已经在谷歌内部已经使用了十数年。
K8s就是在Borg的基础上开发出来的轻量级容器编排工具,所以K8s的基础非常牢固,得益于Borg多年的经验积累和教训,K8s就是站在巨人肩膀上开发出来的产物,以至于在发行不久后,便迅速占领了容器编排的市场。
K8s架构
K8s的物理架构是master/node模式:
K8s集群至少需要一个主节点(Master)和多个工作节点(Worker);
Master节点是集群的控制节点,负责整个集群的管理和控制,主要用于暴露API、调度部署和对节;
工作节点主要是运行容器的。
下图为单Master节点架构图:
控制节点组件介绍:
Kubectl是管理K8s命令行的工具,可以操作K8s的资源对象。当kubectl在使用的时候,会生成一个config的安全上下文,这里保存了kubectl调用的资源。【安装位置一般都可以,但一般安装在控制节点】
APIserver:提供了访问整个K8s集群的接口,当我的kubectl需要访问集群的时候,就会跟他交互。【所有的操作需要跟他交互,是整个系统的数据中心,并提供了一些认证授权,访问控制、api注册等功能】其产生的操作信息保存在ETCD中
ETCD:分布式键值对数据库,存储K8s资源信息,操作信息,网络信息等
Scheduler调度器:决定pod调度到哪个工作节点
POD:最小调度单元
Controller-Manager:控制器管理器,K8s集群内管理控制中心,负责node、endpoint等,作用:使资源可以按照期望的状态运行
如果我使用kubeadm安装的,则上述组件都是用pod跑的。
工作节点组件介绍:
kubelet:在scheduler调度pod到工作节点后,kubelet负责管理pod的状态,如启动、重启等
kube-proxy: 提供网络代理和负载均衡
coredns:提供DNS的服务
calico:网络插件,可以做到跨节点通信,提供pod的ip,还可以使用网络策略 【不一定得是他】
无论是docker还是containerd都是为了pod提供容器运行时
多master节点架构图:
K8s组件:
master节点的组件:
- apiserver
- scheduler
- controller-manager
上面三个是二进制时候会安装的组件
- ETCD # 此组件可以单独部署一个节点,所以在master上不一定要部署这个组件
在master节点上还有两个组件需要部署,不过那是用kubeadm部署的时候需要安装
- calico
- docker
Work 节点的组件:
- kubelet
- kube-proxy
- calico
- coredns
- docker
K8s的核心资源
- POD:POD是k8s中的最小调度单元、k8s是通过定义一个Pod的资源,然后在Pod里面运行容器,容器需要指定镜像,用来运行具体的服务。Pod代表集群上正在运行的一个进程,一个Pod封装一个容器(也可以封装多个容器),Pod里的容器共享存储、网络等。也就是说,可以把整个pod看作虚拟机,然后每个容器相当于运行在虚拟机的进程。
- label:标签 ,k8s中的资源对象大都可以打上标签,如Node、Pod、Service 等, 创建一个 Pod,给定一个 Label是app=tomcat,那么service可以通过label selector选择拥有app=tomcat的pod,和其相关联,也可通过 app=tomcat 删除拥有该标签的 Pod 资源。
- deployment: 控制器
Replicaset是K8s中的副本控制器,管理pod,是pod副本数量始终维持在预设的个数
deployment是管理replicaset和pod的副本控制器,Deployment可以管理多个replicaset,比replicaset更高级
deployment可以对pod扩容、缩容、滚动更新和回滚等 - service:一组pod的逻辑集合
Pod是有生命周期的,如果Pod重启IP很有可能会发生变化。如果我们的服务都是将Pod的IP地址写死,Pod的挂掉或者重启,和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod,为了解决这个问题,在kubernetes中定义了service资源对象,Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,service是一组Pod的逻辑集合,这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。