kubernetes基础
云原生简介
1、定义
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。
2、技术栈
- 容器化:以docker、container为代表的容器运行技术
- 服务网格
- 微服务
- 不可变的基础设施:可以理解为一个应用运行所需要的基本运行需求,不可变最基本指的就是运行服务的服务器在完成部署后,就不在进行更改,如镜像等。
- 声明式API:描述应用程序的运行状态,并且由系统来决定如何来创建这个环境,如声明一个pod,会有k8s执行创建并维持副本
3、特征
- 符合12因素应用,12要素应用程序是一种构建应用程序的方法
- 面向微服务架构
- 自服务敏捷架构
- 基于API的协作
- 抗脆弱性
补充:12因素应用
1、基准代码:一份基准代码,多份部署(用同一个代码库进行版本控制,并可进行多次部署)。
2、依赖:显式地声明和隔离相互之间的依赖。
3、配置:在环境中存储配置。
4、后端服务:把后端服务当作一种附加资源。
5、构建,发布,运行:对程序执行构建或打包,并严格分离构建和运行。
6、进程:以一个或多个无状态进程运行应用。
7、端口绑定:通过端口绑定提供服务。
8、并发:通过进程模型进行扩展。
9、易处理:快速地启动,优雅地终止,最大程度上保持健壮性。
10、开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同。
11、日志:将所有运行中进程和后端服务的输出流按照时间顺序统一收集存储和展示。
12、管理进程:一次性管理进程(数据备份等)应该和正常的常驻进程使用同样的运行环境。
kubernetes简介
kubernetes基本组件的介绍
master节点的核心组件:
- kube-apiserver:提供了各种资源操作的惟一入口,并提供认证、授权、访问控制、API注册和发现等机制
- kube-controller manager:负责维护集群的状态,比如故障检测。自动扩展、滚动更新等
- kube-scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的机器上
node节点的核心组件
- kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
- container runtime:负责镜像管理以及pod和容器的真正运行(CRI)
- kube-proxy:负责为Service提供集群内部的服务发现和负责均衡
其他核心组件
-
etcd:保存整个集群的状态
-
kube-dns:负责为整个集群提供DNS服务
-
ingress controller:为服务提供外网入口
-
Heapster:提供资源监控
-
Dashboard:提供GUI
-
Federation:提供跨可用区域的集群
-
Fluentd-elasticsearch提供集群日志采集、存储与查询
各组件的详细的功能
1、kube-apiserver
kubernetes API server 提供了k8s各类资源对象的增删改查以及watch等http rest接口,这些对象包括pods、services、replicationcontrollers等,API server为REST 操作提供服务,并为集群的共享状态提供前端,所有其他组件都通过该前端进行交互。
REST API是REST风格的网络接口,REST描述的是在网络中client和server的一种交互形式。
REST是一种软件架构风格,或者说是一种规范,其强调HTTP应当以资源为中心,并且规范了URI的风格,规范了HTTP请求动作(GET/PUT/POST/DELETE/HEAD/OPTIONS)的使用,具有对应的语义。
2、kube-scheduler
1、通过调度算法把等待调度的pod列表中的每个pod分配到可用node列表最合适的Node节点上,并将信息写入到etcd中。
2、node节点上的kubulet通过API server监听到kubernetes scheduler产生的pod绑定信息,然后获取对应的pod清单,下载镜像并启动容器
pod分配到node节点的策略
- 优先从node列表中符合条件的node节点中选择资源消耗最小的node节点(CPU+内存)
- 优先选择含有指定label(标签)的节点
- 优先从备选节点列表中选择各项资源使用率最平衡的节点
3、kube-controller manager
controller manager还包括一些子控制器(副本控制器、节点控制器、命名空间控制器和服务账号控制器等),这些控制器作为集群内部的管理控制中心,负责集群内的node、pod副本、服务端点(endpoint)、命名空间(namespace)、服务账号(serviceaccount)、资源定额(ResourceQuota)的管理,当某个node节点意外宕机时,controller manager会及时发现并执行自动化修复流程确保集群中的pod副本始终处于预期的工作状态。
健康检查机制:
1、controller-manager控制器每间隔5秒检查一次节点的状态,如果controller-manager控制器没有收到来自node节点的心跳,则将该node节点标记为不可达。
2、controller-manager将在无法访问之前等待40秒
3、如果该node节点被标记为无法访问后的五分钟内还没有恢复,controller-manager会删除当前node节点上的所有pod并在其他可用的node节点上重新创建这些pod
4、kube-proxy
kubernetes网络代理运行在node节点上,它反映了node上kubernetes API中定义的服务,并可以通过一组后端进行简单的TCP、UDP和STCP转发,用户必须使用apiserver API创建一个服务来配置代理,其实就是kube-proxy通过主机上维护网络规则并执行连接转发来实现kubernetes服务访问。
kube-proxy运行在每一个节点上,监听API server中服务对象的变化,在通过管理iptables或者IPVS规则来实现网络的转发。
5、kubelet
kubelet是运行在每个node节点的代理组件,它会监视已分配给节点的pod,具体功能如下:
1、向master汇报node节点的状态信息
2、接收指令并在pod中创建docker容器
3、准备pod所需的数据卷
4、返回pod的运行状态
5、在node节点上执行容器健康检查
6、kubectl
kubectl是通过命令行对kubernetes集群进行管理的客户端工具
7、dashboard
Dashboard是基于网页的Kubernetes用户界面,可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源(如 Deployment,Job,DaemonSet 等等),也可以对Deployment实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。
etes用户界面,可以使用Dashboard获取运行在集群中的应用的概览信息,也可以创建或者修改Kubernetes资源(如 Deployment,Job,DaemonSet 等等),也可以对Deployment实现弹性伸缩、发起滚动升级、重启 Pod 或者使用向导创建新的应用。