Kubernetes简介
一、Kubernetes简介Kubernetes(k8s)是 Google 开源的容器集群管理系统,其设计源于 Google 在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。Kubernetes 在 Docker容器技术的基础上,大大地提高了容器化部署应用简单高效。经过几年的快速发展,Kubernetes 已经成为建设容器云平台的首选方案。官网:https://kubernetes...
一、Kubernetes简介
Kubernetes(k8s)是 Google 开源的容器集群管理系统,其设计源于 Google 在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。Kubernetes 在 Docker容器技术的基础上,大大地提高了容器化部署应用简单高效。经过几年的快速发展,Kubernetes 已经成为建设容器云平台的首选方案。
二、Kubernetes的主要功能
(1)自我修复
在节点故障时重新启动失败的容器,替换和重新部署容器,保证预期的副本数量;杀死健康检测失败的容器,并且在未准备好之前不会处理客户端请求,确保业务 Online。
(2)弹性伸缩
使用命令、UI 或基于 CPU 使用情况自动快速扩容和缩容应用程序实例,确保应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成为运行服务。
(3)自动部署和回滚
Kubernetes 采用滚动更新策略更新应用,一次更新一个 Pod,而非同时删除所有 Pod,如果更新过程中出现问题,Kubernetes 将回滚更改,升级保证业务不受影响。
(4)存储编排
挂载外部存储系统,无论是来自本地存储、公有云,还是网络存储都作为集群资源的一部分使用,极大提高存储使用灵活。
(5)服务发现和负载均衡
Kubernetes 为多个容器提供一个统一访问入口(内部 IP 和一个 DNS 名称),并且负载均衡关联到所有容器,使得用户无需考虑容器 IP 变动的问题。集群内应用可以通过 DNS 名称访问另一个应用,方便微服务之间通信。
(6)机密和配置管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。
(7)资源监控
Node 节点组件集成 cAdvisor 资源收集工具,可通过 Heapster 汇总整个集群节点资源数据,然后存储到 InfluxDB 时序数据库,再有 Grafana 展示,可以快速实现对集群资源监控,满足基本监控需求。
(8)提供认证和授权
支持属性访问控制(ABAC)、角色访问控制(RBAC)认证授权策略,控制用户是否有权限使用 Kubernetes API 做某些事情,精细化权限分配额。
三、Kubernetes相关资源对象
(1)Master
主要负责资源调度,控制副本,和提供统一访问集群的入口。
(2)Node
Node 由 Master 管理,并汇报 Pod 状态给 Master,同时根据 Master 的要求管理 Pod 生命周期。
(3)Pod
Pod 是 Kubernetes 中最小操作单元,一个 Pod 由一个或多个容器组成,Pod 中的容器共享存储和网络。
(4)Service
Service 是应用服务的抽象,定义了 Pod 逻辑集合和访问这个 Pod 集合的策略。Service 代理 Pod 集合对外表现为一个访问入口,分配一个集群 IP 地址,来自这个 IP 的请求将负载均衡到啊后端 Pod 中的容器。Service通过 Label Selector 选择一组 Pod提供服务。
(5)Label
标签是一个 key = value 的键值对,附加在某个资源上,每个对象可以有多个标签,然后根据这个 label 关联、查询和筛选。比如 Service 与 Pod,当多个 Service、多个 Pod 情况下,访问某个 Service 怎么就知道转发到指定的 Pod 呢?因此就需要用 Label 对每个 Pod 进行标识。
(6)Volume
数据卷,挂载宿主机文件、目录或外部存储到 Pod 中,为应用服务提供存储,也可以让 Pod 中容器之间共享数据。
(7)Namespace
命名空间将资源对象逻辑上分配到不同 Namespace,可以是不同的项目、用户等用以区分管理,并设定控制策略,从而实现多租户。命名空间也被称为虚拟集群。
(8)ReplicaSet
确保指定的 Pod 副本数量,并提供声明式更新等功能。
(9)Deployment
Deployment 是一个更高层次的 API 对象,它管理 ReplicaSets 和 Pod,并提供声明式更新等功能。
官方建议使用 Deployment 管理 ReplicaSets,而不是直接使用 ReplicaSets,这就意味着可能永远不需要直接操作 ReplicaSet 对象,因此 Deployment 将会是使用最频繁的资源对象。
(10)StatefulSet
StatefulSet 适合持久性的应用程序,有唯一的网络标识符(IP)、持久存储,有序的部署、扩展、删除和滚动更新。
典型场景:Zookeper 集群
(11)DaemonSet
DaemonSet 确保所有节点运行同一个 Pod。当节点加入 Kubernetes 集群中, Pod 会被调度到该节点上运行,当节点从集群中移除时,DaemonSet 的 Pod 会删除。删除 DaemonSet 会清理它所有创建的 Pod。
典型场景:在每个节点部署日记收集程序(如filebeat),监控程序(agent)
(12)Job
一次性任务,运行完成后 Pod 销魂,不再重新启动新容器。还可以任务定时运行。
(13)Cron Job
定时任务,一个 CronJob 对象就像一个 contab文件的一行。给定时间定期运行,以 Cron 格式编写。
典型场景:数据库备份,发送邮件
四、Kubernetes相关组件
1. Master组件
(1)kube-apiserver
Kubernetes API,集群的统一入口,负责接受请求,解析请求,是各组件的协调者,以 RESETful API 提供接口服务,所有对象资源的增删改查和监听操作都要交给 apiserver 处理后再提交给 etcd 存储。
(2)kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而 Controller Mnager 就是负责管理这些控制器的。
(3)kube-scheduler
负责去观测每个 Node 上的可用计算资源,并根据请求创建容器需要的资源量来调度、筛选可用 Node。根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上
2. Node组件
(1)kubelet
kubelet 是 Master 在 Node 节点上的 agent,管理本机运行容器的生命周期,比如创建容器、Pod 挂载数据卷、下载 secret、获取容器和节点状态等工作。
(2)kube-proxy
在 Node 节点上实现 Pod 网络代理,维护网络规则和四层负载均衡工作。
3. 容器技术
docker 或 rocket。容器引擎,运行容器
4.数据库
etcd,分布式键值存储系统。用于保存集群状态数据,比如 Pod、Service 等对象信息。
更多推荐
所有评论(0)