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

图:Kubernetes 架构(官方)

图:Kubernetes 架构(AWS)

图: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 对象
基础设施抽象

图:基础设施抽象
【Kubernetes 系列二】从虚拟机讲到 Kubernetes 架构的更多相关文章
- Kubernetes系列二: 使用kubeadm安装k8s环境
环境 三台主机,一台master,两台node 作为master 作为node节点 作为node节点 每台主机Centos版本使用 CentOS Linux release 7.6.1810 (Cor ...
- Kubernetes系列(二)Service
作者: LemonNan 原文地址: https://juejin.im/post/6863704173931593736 Service Kubernetes 的 Service 可以为一组具有相同 ...
- rancher下的kubernetes之二:安装rancher和kubernetes
在上一章<rancher下的kubernetes之一:构建标准化vmware镜像>,我们做了个通用的虚拟机镜像,可以root登录,apt已经更新,docker也装好了,现在我们就来安装ra ...
- Kubernetes系列(三) Deployment
作者: LemonNan 原文地址: https://juejin.im/post/6865672466939150349/ Kubernetes 系列 Kubernetes系列(一) Pod Kub ...
- Kubernetes系列(五) Ingress
作者: LemonNan 原文地址: https://juejin.im/post/6878269825639317517 Kubernetes 系列 Kubernetes系列(一) Pod Kube ...
- Kubernetes系列(四) StatefulSet
作者: LemonNan 原文地址: https://juejin.im/post/6870071267438329869 Kubernetes系列(四) StatefulSet Kubernetes ...
- 从0到1使用Kubernetes系列(二):安装工具介绍
该系列第一篇为:<从0到1使用Kubernetes系列--Kubernetes入门>.本文是Kubernetes系列的第二篇,将介绍使用Kubeadm+Ansible搭建Kubernete ...
- kubernetes系列:(二)、kubernetes部署mysql(单节点)
使用kubeadm搭建好kubernetes集群后就可以动手部署自己的应用了. 本文用例来自官网,如有需要请参看 kubernetes官网 一.环境说明 kubernetes 1.13.1 docke ...
- Kubernetes 系列(四):使用Traefik访问.net core api
一. 准备 本篇的要求是在前三篇的基础上已经搭建好的本地k8s以及部署了Traefik,我们将会使用Traefik Ingress来访问.net core api,比较简单,做个记录,如果还没有搭建k ...
随机推荐
- HDU 3338:Kakuro Extension(脑洞大开的网络流)
http://acm.hdu.edu.cn/showproblem.php?pid=3338 题意:在一个n*m的地图里面,有黑方块和白方块,黑方块可能是“XXXXXXX”或者“YYY/YYY”,这里 ...
- pod update更新error: RPC failed; curl 18 transfer closed with outstanding read data remaining
1. pod update 的时候出现下边的错误 error: RPC failed; curl 18 transfer closed with outstanding read data remai ...
- 数字IC后端布局阶段对Tie-high和Tie-low Net的处理
本文转自:自己的微信公众号<集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 考虑到微信公众平台 ...
- golang开发:类库篇(三)命令行工具cli的使用
为什么要使用命令行 觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要. 其实,一个生产的项目命令行是绕不过去的.比如运营需要导 ...
- Java学习笔记之---基础语法
Java学习笔记之---基础语法 一. Java中的命名规范 (一)包名 由多个单词组成时,所有字母小写(例如:onetwo) (二)类名和接口 由多个单词组成时,所有单词首字母大写(例如:OneTw ...
- k8s学习 - 概念 - Pod
k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe ...
- 计算机组成原理第五章(中央处理器CPU)
---恢复内容开始--- 指令周期(取指令.分析指令到执行完该指令所需的全部时间) 机器周期通常又称CPU周期 通常把一条指令周期分成若干个机器周期,每个机器周期完成一个基本操作 以主存的工作周期(存 ...
- 原创:Python编写通讯录,支持模糊查询,利用数据库存储
1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入“add”,可以对通 ...
- shell的用处到底大不大
我曾在智联招聘等网站上搜寻有关shell脚本员的职位,与C++.JAVA等热门语言相比,冷清很多.看上去似乎招shell程序员的公司比较少.是不是公司不重视或者是很少用到shell这个东东呢? ...
- 打开pycharm,提示invalid Log Path【已解决】
问题:打开pycharm,提示invalid Log Path 解决: 网上其他方法都说重装,这个成本有点高,所以我不去尝试. 因为我下载的是免安装版,所以使用时生成的文件是后来才生成的,所以我尝试 ...