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中要么部署一个服务,要么部署一组相关的服务)