kubernetes概述
- kubernetes是Google在2014年开源的一个容器集群管理系统,简称k8s;
- k8s用于容器化应用程序的部署,扩展和管理;
- k8s提供了容器编排、资源调度、弹性伸缩、部署管理、服务发现等一系列功能;
- k8s官方网址 https://www.kubernetes.io
kubernetes特性
- 自我修复
在节点故障时,重启失败的容器,替换以及重新部署,保证预期的副本数;杀掉健康检查失败的容器,并且在未准备好时不会处理客户端请求,保证线上服务不中断; - 弹性伸缩
使用命令、UI或基于CPU使用情况快速扩容或缩容应用程序,保证应用业务的高可用性,业务低峰时回收资源; - 自动部署和回滚
k8s采用滚动更新策略更新服务,一次更新一个pod,而不是同时删除全部pod,实行业务平滑部署,部署过程中服务不中断; - 服务发现和负载均衡
k8s为多个容器提供提供一个统一访问入口(内部ip地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需关注容器ip问题; - 机密和配置管理
管理机密数据和应用配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性,还可以将一些常用配置存储在k8s中,方便应用程序使用; - 存储编排
挂在外部存储系统,无论是本地存储、公有云,还是网络存储,都作为集群资源的一部分使用,提高存储灵活性; - 批处理
提供一次性任务、定时任务,满足批量数据处理和分析的场景。
kubernetes集群架构及组件
- master组件
kube-apiserver
kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象的增删改查和监听操作都交给apiserver处理后在提交给etcd存储;
kube-controller-manager
处理集群中常规后台任务,一个资源对应一个控制器,而controller-manager就是负责管理这些控制器的;
kube-scheduler
根据调度算法为新创建的pod选择一个node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上;
etcd
分布式键值存储系统,用于保存集群状态数据,比如pod、service等对象信息。
- node组件
kubelet
kubelet是master在node节点上的agnet,管理本机运行容器的生命周期,比如创建容器、pod挂载数据卷、下载secret、获取容器和节点工作状态等工作,kubelet将每个pod转换成一组容器;
kube-proxy
在node节点实现pod网络代理,维护网络规则和四层负载均衡工作。 - docker或rocket
容器引擎,运行容器。
kubernetes核心概念
- pod
最小部署单元;
一组容器的集合;
一个pod中的容器共享网络命名空间;
pod是短暂的。 - controllers
ReplicaSet: 确保预期的副本数;
Deployment:无状态应用部署;
StatefulSet: 有状态应用部署;
DaemonSet:确保所有node运行同一个pod;
Job:一次性任务;
Cronjob:定时任务。 - service
防止pod失联;
定义一组pod的访问策略。 - label
标签,附加到某个资源上,用于关联对象、查询和筛选。 - namespace
命名空间,将对象在逻辑上进行隔离。