kubernetes学习之基本概念
1、kubernetes定义
- kubernetes本质上就是一组服务器集群,kubernetes可以在集群的各个节点上运行特定的docker容器
- kubernetes是Google在2014年开源的一个容器集群管理系统
- kubernetes简称K8S
- K8S用于容器化应用程序的部署、扩展和管理
- K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能
- K8S目标是让部署容器化应用简单高效
2、kubernetes特性
- 自我修复
- 弹性伸缩,实时根据服务器的并发情况,增加或所见容器数量
- 自动部署 根据yaml文件自动部署。
- 回滚
- 服务发现和负载均衡
- 机密和配置共享管理
- 存储编排
- 批处理
3、kubernetes集群架构及组件
K8S集群分为两类节点:
master node:主 负责管理调度
master节点组件:
- APIServer 集群的统一入口,各组件协调者,以Restful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储
- Scheduler 根据调度算法为新创建的pod选择一个NODE节点,可以任意部署在同一个节点上,也可以部署在不同的节点上
- Controller Manager 处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的
worker node:工作 负责业务执行
node节点组件:
- Kubelet kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、POD挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet将pod转换成一组容器
- Kubeproxy 在node节点上实现pod网络代理,维护网络规则和四层负载均衡工作
etcd节点组件
- Etcd 分布式键值存储系统,用于保存集群状态数据,比如pod,service等对象信息
k8s工作原理:
kubectl向api server发送用户指令,比如启动nginx
api server到etcd做用户鉴权认证及权限认证
认证成功后,api server向scheduler发送指令,scheduler通过etcd(同样是通过api server到etcd查找)查找合适的worker node
etcd向scheduler发送每个节点的相关信息,如ip。
scheduler通过算法找到合适的worker节点,并把ip返回给api server
apiserver得到ip后,向controller-manager发送指令
controller-manager找到对应的节点,并向该节点的kubelet发送启动指令
kubelet向该节点上的pod发送指令来启动具体的nginx容器
如果该nginx要和外网互通,kube-proxy就会分配ip和代理
4、kubernetes核心概念
- Pod
- 最小部署单元
- 一组容器的集合
- 一个POD中的容器共享网络命名空间
- pod是短暂的
- Controllers
- ReplicaSet:确保预期的pod副本数量
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DameonSet:确保所有Node运行同一个pod
- Job:一次性任务
- Cronjob:定时任务
- Service
- 将一组pod关联起来,提供一个统一的入口
- 即时pod地址发生变化,这个统一入口也不会发生变化,可以保证用户访问不受影响
- Label
- 一组pod是一个统一的标签
- Service通过标签和一组pod进行关联
- NameSpace
- 用来隔离pod的运行环境(默认情况下,pod是可以互相访问)
- 为不同的公司提供隔离的pod运行环境
- 为开发环境、测试环境、生产环境分别准备不同的命名空间进行业务隔离