乐趣区

关于kubernetes:Kubernetes-普及系列容器基础入门

随着云原生时代的降临,云以及分布式计算曾经是时下最受欢迎的技术之一了。其中 Docker 作为最出名的容器平台,到底有着怎么的魅力来让其无人不知无人不晓?废话不多说,让咱们开始逐层掀开容器技术的神秘面纱吧!

Docker


从传统 IT 到 IaaS 到 PaaS 的能力变迁

让工夫回到 2013 年 ,在该时候,虚拟机和云服务曾经很风行了。支流用户的常见做法,就是在云平台(比方腾讯云、AWS、OpenStack 等),像治理物理服务器一样用脚本来做治理和部署利用。

这样的做法始终存在本地环境和线上环境不统一导致部署呈现问题的危险,所以各家云平台的思路都是去模拟出更加靠近本地服务器的环境,来给用户提供更好的上云体验。所以开源的 PaaS 我的项目提供“利用托管”的能力,就是解决该问题的一个最佳计划。

在泛滥开源 PaaS 我的项目中,最热门的 Cloud Foundry 基本上曾经吸引了所有云厂商的眼光,开启了以开源 PaaS 为外围构建平台层服务能力的改革。

大家可能并不是很相熟 Cloud Foundry,简略地说,Cloud Foundry 所做的就是提供一个 “cf push” 命令行工具,让大家可能对一些支流语言的代码进行打包上传和散发。而后 Cloud Foundry 通过调用操作系统的 CGroups 和 Linux Namespace,独自为每一个利用创立一个隔离的沙盒环境,而后在其中启动这些利用的过程。


Cloud Foundry 的最外围命令 cf push 的业务流程图

所以过后 Cloud Foundry 最外围的能力,就是提供隔离的运行环境,也就是“容器”了。


过后的 PaaS 风潮参与者,dotCloud 是最不起眼的公司之一

同期,有一家名叫 dotCloud 的公司,因为它的主打产品跟 Cloud Foundry 社区是脱节的,所以长期以来都无人问津。终于,dotCloud 公司决定开源本人的容器我的项目 Docker。

但很惋惜在过后并没有人关注 dotCloud 的该决定,因为“容器”该概念素来就不是什么陈腐的货色,也不是 Docker 公司创造的。哪怕是在过后最热门的 PaaS 我的项目 Cloud Foundry 里,容器也只是其最底层,最没人关注的那一部分。

而 Docker 我的项目,实际上和 Cloud Foundry 的容器并没有太大的不同,所以在 Docker 公布后不久,Cloud Foundry 的首席产品经理 James Bayer 就在社区里做了一次具体比照,通知用户 Docker 实际上只是一个同样应用 Cgroups 和 Namespace 实现的“沙盒”而已,没有什么特地的黑科技,也不须要特地关注。

然而,几个月后,James Bayer 就被打脸了。Docker 只用了短短几个月,就让所有 PaaS 社区都出局了。事实上,Docker 我的项目的确和 Cloud Foundry 的容器在大部分性能和实现原理上并没有什么区别,但仅有的一个不一样的性能,成了 Docker 我的项目的制胜要害。

该性能就是 Docker 镜像。

过后支流的 PaaS 我的项目,如 Cloud Foundry,都通过提供一套利用打包性能,帮忙用户大规模部署到集群。但就是该打包性能,须要用户为每个利用做大量的配置工作和调试工作,能力让本地能供正确运行的利用,在集群里也能正确运行。

而 Docker 镜像,恰好解决了该根本性的问题。Docker 镜像的实质,就是一个压缩包,但和 PaaS 的利用打包相比,该压缩包里则是多了残缺的运行环境依赖内容,比方操作系统的所有文件和目录。只有用户拿着该压缩包,便能够通过某些技术手段在任何中央创立一个沙盒来运行用户的利用了,因为其做到了本地环境和云端环境高度的统一,再加上 Docker 充斥趣味性的推广,比方“1 分钟部署一个 WordPress 网站”、“3 分钟部署一个 Nginx 集群”等,最终通过与开发者的亲密关系,加上解决了打包的根本性难题,从而一举登天。

Linux Namespace,Linux Cgroups,rootfs

咱们后面曾经介绍了 Docker 的倒退,那么,回归到技术自身,容器到底是什么呢?这里能够先下一个定义:

一个“容器”,实际上是一个由 Linux Namespace、Linux Cgroups 和 rootfs 三种技术构建进去的过程的隔离环境。

  • Linux NamespaceLinux Cgroups,提供了运行时的隔离和资源的授予。
  • rootfs,也就是镜像,提供了容器的运行内容。

比方对于如下 Dockerfile:

# 应用官网提供的 Python 开发镜像作为根底镜像
FROM python:3.8-slim-buster

# 将工作目录切换为 /app
WORKDIR /app

# 拷贝利用依赖形容文件到工作目录
COPY requirements.txt requirements.txt

# 应用 pip 命令装置利用以及其所需的依赖
RUN pip3 install -r requirements.txt

# 拷贝利用文件到工作目录
COPY . .

# 设置容器过程为 "python3 app.py",也是该 Python 利用的启动命令
CMD ["python3", "app.py"]

在该 Dockerfile 里,咱们先通过一个根底镜像 python:3.8-slim-buster,装置依赖并复制利用到工作目录,最初指定利用的过程,即启动命令。在该形容下,咱们会失去如下容器视图:

该容器的过程是“python3 app.py”,运行在由 Linux namespace + Linux cgroups 形成的隔离环境里。而它所须要的各种文件,包含 Python、app.py 和整个操作系统文件,则由多个联结挂载在一起的 rootfs 提供。该 rootfs 的最上层,是只读的 Docker 镜像。在 Docker 镜像之上,是 Docker 的管理器增加的 init 层,用于长期寄存被管理器批改过的 /etc/hosts 等文件。在 rootfs 的最上层是读写层,以 Copy-On-Write 的形式寄存所有对只读层文件的批改,和容器申明的 Volume 挂载点。从该容器视图里,咱们能够总结出一个运行中的 Linux 容器,由以下内容形成:

  • 一组联结挂载的 rootfs,这部分咱们称之为容器的“镜像”(Image)。
  • 一个由 Linux namespace + Linux cgouprs 形成的隔离环境,这部分咱们称之为容器的“运行时”(Runtime)。

Docker install

前文曾经介绍了容器的实质和其背地的逻辑,咱们当初以 Ubuntu 18 LTS 为例,介绍如何装置 Docker,为前面的 Kubernetes 做好筹备。

配置 REPOSITORY

1、更新 apt 包管理器索引和配置 apt 可能应用 HTTPS 的仓库。

 sudo apt-get update
 
 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

2、增加 Docker 官网 GPG 公钥。

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

3、指定应用稳定版的 Docker 版本。

echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

装置 Docker engine

1、更新 apt 包管理器索引,而后装置最新的稳定版 Docker engine。

 sudo apt-get update
 
 sudo apt-get install docker-ce docker-ce-cli containerd.io

2、装置实现后,通过执行 hello-world 镜像,验证 Docker engine。

sudo docker run hello-world

当初装置实现,能够开始应用 Docker 了。

容器编排

作为一名开发者,咱们其实并不关怀容器运行时的差别,因为在整个“开发 - 公布”流程中,真正公布的其实是容器镜像。对于云服务商来说,则能够通过容器镜像将他们和潜在用户(如开发者)间接关联起来。因而,可能定义容器组织和治理标准的“容器编排”技术,成为了云计算最热门的技术。 这其中,最具代表性的容器编排工具有如下两个:

• Docker 公司的 Compose+Swarm 组合;

• Google 与 RedHat 公司独特主导的 Kubernetes 我的项目。而目前该我的项目曾经成为业界规范。

接下来的 Kubernetes 遍及系列,将会带大家深刻理解目前承载着云原生倒退的相对配角——Kubernetes,让咱们下回再见!

退出移动版