k8s简介

k8s简介

 

k8s概述

Kubernetes(简称K8S) 是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。

教程主要介绍怎么使用阿里云容器服务(kubernetes版本)。

 

一、虚拟化技术

1.什么是虚拟化技术

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。
在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 虚拟化使用软件的方法重新定义划分IT资源,可以实现IT资源的动态分配、灵活调度、跨域共享,提高IT资源利用率,使IT资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。

2.虚拟化的类型

全虚拟化(Full virtualization): 也称为原始虚拟化技术, 是另一种虚拟化方法. 该模型使用虚拟机协调客户操作系统和原始硬件(见图2). 
这里"协调"是一个关键词, 因为VMM在客户操作系统和裸硬件之间用于工作协调. 一些受保护的指令必须由Hypervisor(虚拟机管理程序)来捕获和处理. 因为操作系统是通过Hypervisor来分享底层硬件. 半虚拟化(Paravirtualization):另一种类似于全虚拟化的热门技术. 它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件, 但是它的客户操作系统集成了虚拟化方面的代码.
该方法无需重新编译或引起陷阱, 因为操作系统自身能够与虚拟进程进行很好的协作.

3.虚拟化类型的区别

全虚拟化:运行速度要快于硬件模拟, 但是性能方面不如裸机, 因为Hypervisor需要占用一些资源. 全虚拟化最大的优点是操作系统没有经过任何修改. 它的唯一限制是操作系统必须能够支持底层硬件
半虚拟化:需要客户操作系统做一些修改(配合Hypervisor), 这是一个不足之处. 但是半虚拟化提供了与原始系统相近的性能. 与全虚拟化一样, 半虚拟化可以同时能支持多个不同的操作系统.

二、容器技术

1.什么是容器

容器是轻量级的操作系统级虚拟化,可以让我们在一个资源隔离的进程中运行应用及其依赖项。运行应用程序所必需的组件都将打包成一个镜像并可以复用。执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存、CPU 以及磁盘,这就保证了容器内进程不能监控容器外的任何进程。

2.容器和虚拟化的区别

虚拟机会将虚拟硬件、内核(即操作系统)以及用户空间打包在新虚拟机当中,虚拟机能够利用“虚拟机管理程序”运行在物理设备之上。虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。
一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。简言之,虚拟机先需要虚拟一个物理环境,然后构建一个完整的操作系统,再搭建一层Runtime,然后供应用程序运行。    对于容器环境来说,不需要安装主机操作系统,直接将容器层(比如LXC或libcontainer)安装在主机操作系统(通常是Linux变种)之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。
但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。容器可以看成一个装好了一组特定应用的虚拟机,它直接利用了宿主机的内核,抽象层比虚拟机更少,更加轻量化,启动速度极快。 相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。
云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样就会给迁移选择带来限制。    因为容器不像虚拟机那样同样对内核或者虚拟硬件进行打包,所以每套容器都拥有自己的隔离化用户空间,从而使得多套容器能够运行在同一主机系统之上。
我们可以看到全部操作系统层级的架构都可实现跨容器共享,惟一需要独立构建的就是二进制文件与库。正
因为如此,容器才拥有极为出色的轻量化特性。

三、kubernetes

1.什么是kubernetes

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制

2.kubernetes总体架构

3.kubernetes各组件介绍:

 
Master运行组件:
   Etcd: 保存了整个集群的状态;
   Apiserver: 提供了资源操作的唯一入口,并提供认证、授权、访问控制、 API注册和发现等机制;
   controller manager: 负责维护集群的状态,比如故障检测、自劢扩展、滚劢更新等;
   scheduler: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
Node运行组件:
   kubelet: 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
   Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
   kube-proxy: 负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons
   kube-dns负责为整个集群提供DNS服务
   Ingress Controller为服务提供外网入口
   Heapster提供资源监控
   Dashboard提供GUI
   Federation提供跨可用区的集群
   Fluentd-elasticsearch提供集群日志采集、存储不查询
 

 

k8s常用概念介绍

  • 节点 (Master node and Worker node)
    节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)
    管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。
    工作节点(Worker Node):主要负责运行容器。
  • 命名空间 (Namespace)
    k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system 和 kube-public。
  • Object
    k8s 对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s 对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。
  • POD
    Pod是 Kubernetes 部署应用或服务的最小的基本单位。一个Pod 封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。
  • 副本集 (Replica Set,RS)
    是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。
  • 部署 (Deployment)
    表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。
  • 服务 (service)
    是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。
  • Ingress
    是一种网关服务,可以将k8s服务通过http协议暴露到外部。
  • 无状态应用 & 有状态应用
    • 无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用
    • 有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库

k8s架构

 

 

通过上图可以看出k8s整体架构主要由左边的master节点和右边的worker组成,master节点负责对整个集群进行管理,右边的电脑表示worker节点负责运行我们部署的容器。

基于k8s的常见web应用部署架构

 

 

 

posted @ 2021-01-05 11:45  小学弟-  阅读(1896)  评论(0编辑  收藏  举报