zoukankan      html  css  js  c++  java
  • 【Kubernetes 系列二】从虚拟机讲到 Kubernetes 架构

    在认识 Kubernetes 之前,我们需了解下容器,在了解容器之前,我们得先知道什么是虚拟机。

    什么是虚拟机?

    虚拟机(VM, Virtual Machine)是计算机系统的仿真,以便隔离真实计算机硬件,运行多个不同的操作系统。虚拟化技术是硬件隔离的,运行在虚拟机(客体机)中的程序不直接与真实机器(宿主机)交互。

    常见的虚拟机软件有:

    软件 初次发布时间 早期主导的公司 操作系统 编写语言
    VMware Workstation 1999 VMware Windows, Linux C, C++, F#
    VirtualBox 2007.1.17 Oracle Windows, macOS, Linux and Solaris C, C++, x86 Assembly
    OpenStack 2010.10.21 Rackspace Hosting, NASA 跨平台 Python

    虚拟机因为要隔离出单独的一个个系统,相比容器,占用内存和磁盘空间较大,运行起来很笨重。

    什么是容器?

    容器(Container),通常是指 Linux 容器(LXC, Linux Containers ),是轻量级的虚拟化技术(我们把虚拟机技术称之为重量级的虚拟化技术)。它不隔离出一个个子系统,而是直接运行在真机上,隔离的是进程,使用的底层技术其实是 Linux Namespaces(Linux 命名空间)。什么是 Linux Namespaces 呢?

    在计算机领域,Namespace 是用来表明标识符的可见范围。在 XML 定义中就用 xmlns(XML Namespace)来确定标签的含义,隔离命名冲突,例如:

    <html>
    <h:table xmlns:h="http://www.w3.org/TR/html4/">
       <h:tr>
       <h:td>Apples</h:td>
       <h:td>Bananas</h:td>
       </h:tr>
    </h:table>
    <f:table xmlns:f="http://www.w3school.com.cn/furniture">
       <f:name>African Coffee Table</f:name>
       <f:width>80</f:width>
       <f:length>120</f:length>
    </f:table>
    </html>
    

    学过 Android 的,可以联想下 Android XML 布局文件中默认的 xmlns

    `xmlns:android="http://schemas.android.com/apk/res/android" `
    

    以及我们自定义组件属性时,使用的 xmlns

    `xmlns:app="http://schemas.android.com/apk/res-auto"`
    

    学过 C++的还可以联想下其关键字 namespace。

    言归正传,Linux Namespaces 是 Linux 内核中对容器的支持,不同 Namespace 之间内核资源是隔离的。Linux Namespaces 最早出现在 Linux 2.4,到 4.6 时已经有 7 种 Namespaces了,每种 Namespace 隔离不同种类的内核资源,具体列表如下:

    Namespace Since Constant Isolates
    Cgroup Linux 2.6.24 → Linux 4.5 CLONE_NEWCGROUP Cgroup root directory(Cgroup 的根目录)
    IPC Linux 2.6.19 CLONE_NEWIPC System V IPC, POSIX message queues(信号量、消息队列和共享内存)
    Network Linux 2.6.24 → Linux 2.6.29 CLONE_NEWNET Network devices, stacks, ports, etc.(网络设备、栈和端口等)
    Mount Linux 2.4.19 CLONE_NEWNS Mount points(文件系统挂载点)
    PID Linux 2.6.24 CLONE_NEWPID Process IDs(进程 ID)
    User Linux 2.6.23 → Linux 3.8 CLONE_NEWUSER User and group IDs(用户和组 ID)
    UTS Linux 2.6.19 CLONE_NEWUTS Hostname and NIS domain name(主机名和 NIS 域名)

    重要的 6 种 Namespace 在 2010 年就已经出现并多数编码完成,Linux 的容器支持愈加完善,Docker 的出现正逢其时。

    Docker

    我们前面讲到 Docker,始于 2010 年 dotCloud 开发的基于Linux 容器的虚拟化技术,即 Docker 技术。这项技术于 2013 年 3 月在 Github 上开源并发布 v0.1 版本,吸引大量人气,甚至 Google、Redhat、IBM 和Amazon 等大公司也表示全力支持。到2014年6月9日,Docker v1.0 正式发布。如前述虚拟机软件,整理 Docker 基本信息如下:

    软件 初次发布时间 早期主导的公司 操作系统 编写语言
    Docker 2013.3 dotCloud(Docker Inc.) Linux, Windows, MacOS Go

    初步认识 Docker,只需要了解其中的 3 个概念:

    1. 镜像(Image),这里的镜像不是我们平常所熟知的 ISO 压缩文件,而是一种使用 Union FS 分层存储技术存储的 root 文件系统,包含容器运行时所需的程序、库、资源和配置等文件。
    2. 容器(Container),Docker 语义下的容器是镜像运行时的实体,其实质就是一个 Docker 进程。可以对容器执行创建、启动、停止、删除和暂停操作。容器的存储方式也是分层存储,以镜像为基础层,在其上创建一个当前容器的存储层,称之为容器存储层。(注:容器存储层的生命周期与容器同步,故写入文件时应使用数据卷或绑定宿主目录)
    3. 登记处(Registry),一个登记处可以登记多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像。登记处便利了镜像的分发和管理。

    Kubernetes

    随着 Docker 技术的流行,人们对统一部署、扩展和运行容器集群的需求日益强烈。于是,Kubernetes 应运而生。

    Kubernetes (源自古希腊语,意为领航员、舵手,简称 K8S,8 代表中间的 8 个字母)由 Google 公司于 2014 年推出,并于 2015 年 7 月 21 日发布 v1.0 。Kubernetes 系统深受 Google 内部另一个大型集群管理系统 Borg 的影响,其 logo 上的七个轮辐就是在向电影《星际迷航》中的 Borg 人 Seven 致意。

    架构

    Kubernetes 采用主从式架构,一个集群控制节点(Master)和多个工作节点(Node)。包含以下核心组件:

    图:Kubernetes 核心组件

    Architecture Diagram

    图:Kubernetes 架构(官方)

    图:Kubernetes 架构(AWS)

    Kubernetes High Level component architecture

    图:Kubernetes 架构(Slide from [this](https://schd.ws/hosted_files/kccnceu18/00/What does "production ready" really mean for a Kubernetes cluster.pdf) presentation from Lucas Käldström (@kubernetesonarm))


    图:Kubernetes 架构

    Kubernetes 对象

    Kubernetes 采用声明式设计,通过 API 对象声明期望的状态(desired state),然后系统会通过控制面(control plane)最终达到期望。

    图:Kubernetes 对象

    基础设施抽象


    图:基础设施抽象

  • 相关阅读:
    2010年7月29日_周四_Working with CallbackResults
    2010年7月19日_周一_Using the Common Data Source API in a Web application
    2010年7月20日_周二_Accessing ArcGIS Server from a Web application
    Flex代码自动换行(自动格式化)
    2010年7月21日_周三_Developing a scriptable Web ADF control
    2010年7月30日_周五_ASP.NET callback solution
    2010年8月02日_周一_map control
    SDE数据库的异地部署
    2010年7月27日_周二_introduction_to_web_controls
    ICE在VC中的配置
  • 原文地址:https://www.cnblogs.com/lshare/p/11336648.html
Copyright © 2011-2022 走看看