大家好,我是小白。给白白们讲解一下云计算中火热的容器编排技术Kubernetes...
关注公众号的白白们都知道,前面讲解了Linux容器技术docker,那Kubernetes又是做什么的呢?
简言之呢,docker虽然帮助我们实现了容器化,但仅仅是个使用容器工具箱,而我们生产环境呢并不仅仅只需要运行一个容器就能满足我们的需求,我们还需要负载均衡,DNS解析,弹性伸缩,服务自动发现等等需求,而这就是kubernetes所能提供给我们的。
一、何为Kubernetes
Kubernetes项目源自于Google的borg项目,天生站在巨人的肩膀上,自2014年6月开源以来,Kubernetes在众多厂商和开源爱好者的共同努力下迅速崛起。现在已经基本成为容器编排的事实标准。而且越来越多的公司和组织加入CNCF,众多的开源爱好者参与Kubernetes社区开发,现在,Kubernetes已经成为容器编排领域的事实标准。
Kubernetes 的目标旨在消除编排物理、虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的业务上进行自助运营。Kubernetes也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。
Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。Kubernetes特性:
自动装箱:构建于容器之上,基于资源依赖和其他约束自动完成容器部署。自我修复:容器故障后自动重启、节点故障后重新调度容器,以及容器自我修复机制。水平扩展:通过简单明了实现水平扩展,基于CPU等资源负载率的自动水平扩展。服务发现和负载均衡:实现内部负载均衡可以实现服务访问负载。自动发布和回滚:可以自动实现版本的发布和回滚。秘钥和配置管理:对于密码等信息,专门提供了Secert对象为其解耦。存储编排:支持多种不同类型的存储,包括本地存储、云存储、网络存储等。批量处理执行:除服务型应用,还支持批处理作业CI(持续集成),如有需要,一样可以实现容器故障后修复。
二、Kubernetes架构
Kubernetes 主要由以下几个核心组件组成:
1.etcd 集群持久化数据存储, 保存了整个集群的状态信息等;
2.apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
3.controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
4.scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
5.kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
6.Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
7.kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡
除了核心组件,还有一些推荐的 Add-ons:
*kube-dns 负责为整个集群提供 DNS 服务
*Ingress Controller 为服务提供外网入口
*Heapster 提供资源监控
*Dashboard 提供 GUI
*Federation 提供跨可用区的集群
*Fluentd-elasticsearch 提供集群日志采集、存储与查询
*cAdvisor 集成在Kubelet中,对Node机器进行监控
三、Kubernetes核心概念
单元pod: 一组容器集合,k8s最小调度部署单元
*k8s不能直接控制容器,通过控制pod来间接管理容器
*不同控制器对模板的处理方式方式不同,比如,有的会立即删除旧pod,依据新模板创建新pod来保持最新
*一个pod包含一个或多个容器
*提供容器运行环境,容器共享共享 PID、IPC、Network 和 UTS namespace
控制器controller:控制器,控制pod(启动、停止、删除……)
*ReplicaSet:确保预期pod副本数,保证任何时候都是固定pod数量在工作(动态地根据需求增删pod),通过Deployment来设置ReplicaSet
*ReplicationController:自动增删pod,同ReplicaSet功能相同,ReplicaSet是它的升级版
*Deployment:无状态应用部署,是比ReplicationController更高一层的api,还可以更新回滚ReplicaSet
*StatefulSet:有状态应用部署
*DaemonSet:确保pod在所有node节点分布
*Job:一次性任务,
*Cronjob:定时任务
服务service:将一组相关pod关联起来,对外提供服务,提供统一入口,提供服务代理和发现机制
*服务的负载均衡
*服务的自动发现
*内部DNS域名服务
*定义相关pod访问策略
标签label:标记pod,node等资源
*便于识别pod,node
*亲和反亲和等策略
命名空间namespace:提供逻辑隔离,包括鉴权,资源管理等
*同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名
网友评论