一.Kubernetes是什么
Kubernetes 是一个开源的容器编排系统,用于自动化地部署、扩展和管理容器化应用程序。
它主要功能包括:弹性伸缩(Autoscaling)、服务发现(KubeDnS/CoreDNS)、配置中心(configMap/Secret)、服务网关(ingress Controller)、负载均衡(Load Balancer)、服务安全(RBAC API)、跟踪监控(Metrics API/Dashboard)
Kubernetes 架构主要包括主节点(Master)和工作节点(Node)。
主节点中有几个关键组件,首先API Server:作为整个集群的中心,负责处理REST请求,更新对象状态,调度其他组件。然后就是Controller Manager:控制管理器,监控集群的状态,确保其处于预期状态。还有一个组件就是,Scheduler(调度器):根据资源需求、软硬件及其策略配置为新创建的Pod选择合适的Node进行绑定。-最后就是etcd:作为持久存储,保存整个集群的配置数据。
工作节点的几个关键组件:Kubelet:在每个Node上运行,负责该节点的容器生命周期管理。Proxy:为Service提供网络代理及负载均衡服务。Docker:根据镜像运行容器实例。Volume:提供持久化存储,支持多种类型,如本地存储、网络存储。
Kubernetes(k8s)的工作流程:首先用户通过客户端工具或者可视化界面提交创建Pod等资源的请求。API Server接收请求,进行认证和授权检查,然后将资源对象的数据存储到etcd中。调度器监听新的Pod创建请求,根据调度算法和策略选择合适的工作节点(Node),并将绑定结果存储回etcd。各个工作节点上的Kubelet(读库布利特)定期从API Server获取需要运行的Pod清单,调用容器运行时接口(如Docker)创建和启动容器实例。各类控制器(如部署控制器、副本集控制器)监控API Server中的资源对象状态。
Pod 是 Kubernetes 的最小部署单元,它包含一个或多个紧密关联的容器。Pod 中的容器共享网络命名空间、存储卷和IP地址等资源。
Service 是一种抽象概念,用于定义一组具有相同功能的Pod的逻辑集合,并为它们提供一个统一的访问入口。Service 通过标签选择器来识别后端的Pod,并提供负载均衡和服务发现功能。
Deployment 是一种高级资源对象,可以自动管理Pod的创建、更新和删除,实现滚动升级。
ReplicaSet(复制集) 是一种控制器资源对象,用于确保指定数量的副本Pod始终处于运行状态。它通常由Deployment或其他控制器使用。
ConfigMap 是一种配置信息的资源对象,用于将非机密的配置数据从代码中分离出来,以便更好地管理和更新。
Secret 是一种用于存储敏感信息(如密码、密钥等)的资源对象,它可以在Pod中作为环境变量或文件挂载到容器中。
PersistentVolume(PV)是一种持久化存储资源对象,用于表示集群中的物理存储设备。它提供了一种独立于Pod生命周期的存储机制,可以被多个Pod共享和使用。
PersistentVolumeClaim(PVC)是一种请求存储资源的声明对象,用于申请特定大小和访问模式的持久化存储。当PVC被创建时,Kubernetes会自动为其分配合适的PV。
Namespace 是一种逻辑隔离的资源对象,用于将集群中的资源划分为不同的虚拟集群。
Ingress 是一种API对象,用于管理外部访问集群内部服务的规则。提供负载均衡、SSL和其他HTTP/HTTPS相关的功能
Label(标签)是一种附加到资源对象上的键值对,用于分类和组织这些对象。它允许用户根据自己的需求为资源对象(如Pod、Node、Service等)定义标签,以便于管理和操作。一个Label由键(key)和值(value)组成,例如:environment: production