kubernetes
前段时间一个面试问道kubernetes相关问题,当时是一脸懵啊,这几天也上网查了下kubernetes资料,分享给大家。
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制,它是google公司使用go语言开发的一个容器引擎,并且是一个开源的应用。
目录
- kubernetes
- 1、kubernetes架构以及影响场景
- 1.1 在企业中的应用场景?
- 1.2 服务部署模式变迁以及服务部署变化的带来的问题?
- 1.3 云架构和云原生
- 2、深刻认识kubernetes核心组件以及原理
- 2.1 k8s架构
- 2.1.1 主控节点 / Master 组件
- 2.1.1 工作节点 / Node 组件
- 2.2 pod
1、kubernetes架构以及影响场景
1.1 在企业中的应用场景?
1)、自动化运维平台,企业可以使用k8s构建一套自动化运维平台
2)、充分利用服务器资源
3)、服务无缝迁移
1.2 服务部署模式变迁以及服务部署变化的带来的问题?
1)、服务器部署变迁,由最初的物理机部署--->虚拟化方式(就是把服务部署到虚拟机中,虚拟机分割物理资源 来达到充分利用服务器资源)---> 容器化方式部署
2)、容器化部署带来的问题
目前互联网公司基本都使用SOA架构,在微服务模式下,服务拆分的越来越多,那么部署维护的服务也就越来越多,这样就会面临以下问题
a、如何对服务进行横向扩展?
b、容器脱机后,数据怎么恢复?
c、重新发布新的版本,如何更新、并且更新后不影响业务?
d、如何监控容器?
e、容器如何调度创建?
f、数据安全性如何保证?
针对以上问题,使用k8s管理容器,都可以解决
1.3 云架构和云原生
K8s 主要应用于云架构和云原生的部署场景。 云:就是使用容器构建的一套服务集群网络,云有很多容器构成。 k8s:就是用来管理云中的容器。
云架构
iaas :基础设施即服务
pass: 平台即服务, 运营商提供 MySQL 、Redis、MQ、Elasticsearch 等数据库或中间件等服务;用户租用(购买或分配权限)后直接使用
saas:软件即服务
serverless: 无服务
云原生 就是让应用程序(项目、服务软件)都部署到云上的解决方案,这种方案叫云原生
特点: 1)、容器化 ,所有的服务都必须部署到容器中
2)、服务化 ,Web 服务架构是微服务架构;
3)、CI/CD,可持续交互和可持续部署;
4)、devOps,开发和运维密不可分
2、深刻认识kubernetes核心组件以及原理
2.1 k8s架构
先盗用一个图来说明k8s架构
![在这里插入图片描述]()
2.1.1 主控节点 / Master 组件
1)API Server
集群统一入口,各组件的协调者,提供认证、授权、访问控制、API注册和发现等机制,以 RESTful API 的方式提供接口服务,所有对象资源的增删改查和监听都由 API Server 处理后提交给 Etcd 存储。
2)Etcd
分布式键值存储系统集群,用于保存集群状态数据,如:Pod、Service 等资源对象信息。
3)Controller
控制器管理程序,负责控制器的管理,控制器和资源一一对应,控制器用于维护集群的状态,如:故障检测、自动扩展、滚动更新等常规后台任务。
4)Scheduler
调度程序,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上,调度程序根据调度算法为新创建的 Pod 选择一个 Node 节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
2.1.1 工作节点 / Node 组件
1)Kubelet
主控节点代理程序,在 Node 节点上执行 Master 节点安排的任务,它将每个 Pod 转换成一组容器,用于管理本节点运行容器的生命周期,如:创建容器、Pod 挂载数据卷、下载 Secret 、获取容器和节点状态等工作。
2)Proxy
网络代理程序,在 Node 节点上实现 Pod 网络代理,负责为 Service 提供 Cluster 内部的服务发现、网络规划和负载均衡。
3)Docker
容器引擎,负责所有具体的映像下载和容器运行。
4) fluentd 日志手机服务
2.2 pod
Pod 是在 K8s 集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。
简单来说:pod也是一个容器(这个容器中装的是docker创建的容器,pod用来封装容器的一个容器),pod也是一个虚拟化分组(pod有自己的ip地址和主机名)相当于一个独立的沙箱环境。
pod相当于独立主机,可以封装一个或者多个服务
通常情况下,在服务部署时,使用pod来管理一组先关的服务(pod中要么部署一个服务,要么部署一组相关的服务)