Docker Swarm:从初学到可以部署多主机 Kubernetes

Docker 是如今前端开发人员不可或缺的一项技术,然而在实际的生产环境中,单个 Docker 容器可能无法满足业务需求。因此,多个 Docker 容器的协作管理是必要的。这就是 Docker Swarm,它是 Docker 官方提供的原生集群管理解决方案。Docker Swarm 允许将多个主机设置为一个 Docker 集群,并利用 Docker 的 API 和命令行工具在这个集群上进行操作和管理。

Kubernetes 是一个更为强大和复杂的容器管理平台,可以支持更复杂的应用程序和更多的容器集群。而 Docker Swarm 作为 Docker 自带的集群管理工具,也可以作为学习 Kubernetes 的入门基础。因此,本文将以 Docker Swarm 为主要内容,向读者介绍如何从初学到搭建多主机 Kubernetes 环境。

1. Docker Swarm 入门

1.1.准备工作

  • 安装 Docker CE:Docker CE 是 Docker 社区版,简单易用,是使用 Docker 的第一步,参考官方文档 https://docs.docker.com/install/ 进行安装即可。

  • 设置 Docker 镜像加速器:国内访问 Docker Hub 可能会非常慢,为了提高 Docker 构建和拉取镜像的速度,我们可以设置 Docker 镜像加速器,参考阿里云镜像加速器 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 进行设置。

  • 两个或多个 Docker 主机:构建 Docker Swarm 集群必须要有两个或多个主机,这些主机分别可以是物理机或虚拟机,同一个网络即可。

1.2.创建 Docker Swarm 集群

在其中一个主机上执行以下命令,创建 Docker Swarm 集群:

- ------ ----- ----

之后会生成一个 token,其他主机通过该 token 来加入集群。将该 token 备份到其他主机,如下所示:

----- ------------ ------- ---- --------------------------- -- --- - --------

-- --- - ------ -- ---- ------ --- --- --------- --------

    ------ ----- ---- ------- ------------------------------------------------------------------------------------- -------------------

-- --- - ------- -- ---- ------ --- ------- ----- ---------- -------- --- ------ --- -------------

然后在另一个主机上加入该集群,如下所示:

- ------ ----- ---- ------- ------------------------------------------------------------------------------------- -------------------

现在,我们就拥有了一个简单的 Docker Swarm 集群。

1.3.创建服务

服务是容器的一个集群。在 Docker Swarm 中,我们通过创建服务来运行相同的容器。服务管理容器的生命周期,并确保服务的可用性和可伸缩性。可以使用以下命令来创建服务:

- ------ ------- ------ ------ ---- ------------

这会创建一个名为 test 的服务,我们可以将其部署在我们的 Swarm 集群中。该服务的镜像是 nginx:latest,示例的应用层是一个静态的 nginx 服务。我们可以通过以下命令查看服务的状态:

- ------ ------- --

我们可以在其他节点上查看该服务是否运行:

- ------ --

1.4.管理 Swarm

我们可以使用 docker node 命令管理 Docker Swarm:

- ------ ---- --  - ------
- ------ ---- ------- -----------  - ---------
- ------ ---- ------- -----------  - -----------
- ------ ---- ------ -----------  - ----------
- ------ ---- -- -----------  - - ----- -------
- ------ ---- ------ -----------  - -------

Docker Swarm 对容器、服务和节点的管理都是很方便的。

2. Docker Swarm 进阶

Docker Swarm 不仅仅是一个简单的容器编排工具,它还提供了更高级的功能。这里为大家介绍一下 Docker Swarm 进阶部分的内容。

2.1.负载均衡

Docker Swarm 提供了内置的负载均衡能力,它会自动将流量分流到不同的节点上。

- ------ ------- ------ ------ ----- ---------- - -- ------- ------------

上面的命令可以创建一个名为 nginx 的服务,并将 entrypoint 设置为 nginx:latest。同时,服务的副本数量为 3,将通过端口 8080 暴露在主机上。

Docker Swarm 默认使用 round-robin 策略进行负载均衡。

2.2.健康检查和升级

Docker Swarm 提供了健康检查和自动升级的功能。

在 Docker Swarm 中,可以通过 docker service update 命令来更新服务。例如,以下命令将服务 web 的副本数量从 4 更改为 5

- ------ ------- ------ ---------- - ---

Docker Swarm 提供了一个健康检查机制,可以通过配置检查脚本来检测服务的状态是否健康。如果服务不健康,Docker Swarm 将自动停止并重启容器。

在 Dockerfile 中,可以通过 HEALTHCHECK 命令添加一个健康检查脚本。

----------- ------------- --- ---- -- ------------------- -- ---- -

以上例子中,Docker Swarm 会每 5 秒执行一次检查脚本,如果返回码为非零值,则意味着服务不健康。

2.3.存储方案

Docker Swarm 也提供了存储方案。可以使用以下命令来创建一个具有 100G 存储空间的存储方案:

- ------ ------ ------ -------- ----- ----- ---------- ----- ------------ ----- ----------- ------------

接着可以将该存储方案作为服务的一部分来使用。

- ------ ------- ------ ---------- - ------ ----- ------- ------------------------------------------------ --------- ------------------------ -----

2.4.多主机部署

在 Docker 18.02 版本之前,只有单个 Swarm 节点可用于管理服务。因此,不能将服务部署到多个节点上以实现容错能力。

现在,Docker 已经支持跨多个主机的 Swarm 集群。我们可以使用 docker swarm join 命令将新的主机加入到集群中。

2.5.实例

以下是一个 Docker Swarm 的示例:启动 5 个 nginx 服务容器,将它们绑定到同一个网络上,由 Docker Swarm 进行负载均衡。

  1. 启动 Docker Swarm 集群:
- ------ ----- ----
  1. 创建一个 Docker network:
- ------ ------- ------ -------- ------- ---------
  1. 启动 nginx 服务:
- ------ ------- ------ ------ ------------- ---------- - --------- --------- -- ----- -----
  1. 查看服务状态:
- ------ ------- --
  1. 在浏览器中访问 nginx 服务:
------------------------

3. Kubernetes

Kubernetes 是 Google 开源的分布式容器集群管理系统,旨在提供自动化容器部署、扩展和管理的平台。

Kubernetes 是一个更为强大和复杂的容器管理平台,可以支持更复杂的应用程序和更多的容器集群。你可以学习它的更高级用法,例如如何实现自定义资源对象、横向和垂直自动扩展、自定义调度策略、数据卷、状态存储等等。

3.1.搭建 Kubernetes 集群

Kubernetes 的安装和配置相对 Docker Swarm 更为复杂。然而,在为前端开发提供 K8s 支持的场景下, Minikube 提供了一种简单的方法。Minikube 可以在本地电脑上创建一个单主机 Kubernetes 集群,并且支持多种虚拟机管理器,常用的有 VirtualBox 和 KVM。

3.1.1. 安装 Minikube

请参阅 https://minikube.sigs.k8s.io/docs/start/ 进行安装和配置。如果已经安装了 Docker,可以通过 brew install minikube 命令来安装。接下来,执行以下命令验证 Minikube 是否正确安装:

- -------- -----

3.1.2. 配置 kubectl

kubectl 是 Kubernetes 的命令行工具。执行以下命令来安装 kubectl

---- ------- -------
---- ------- --------- ---------- ------ -----------
------ ---------

3.1.3. 部署配置

可以使用以下命令查看启动的集群是否正在运行:

-------- ------

接下来,通过 kubectl 来管理 Kubernetes:

------- ------------

3.1.4. 示例

  1. 启动 nginx 服务:
- ------- ------ ---------- ----- --------------------
  1. 将部署扩展到 3 个 Pod:
- ------- ----- ---------- ----- ------------
  1. 检查 Pod 的状态:
- ------- --- ----
  1. 检查服务:
- ------- --- -------

Kubernetes 的学习曲线比 Docker Swarm 更陡峭,但是它有更多的特性和更高的可扩展性,对于大型项目来说,是更好的选择。

4. 结论

Docker Swarm 和 Kubernetes 都是旨在提供容器编排和集群管理的平台。Docker Swarm 更加简单,轻量,并且可以在单个机器上管理容器集群。Kubernetes 提供了更多的高级特性,包括更容易扩展,更复杂的应用程序和更高级的资源调度。对于前端开发人员,Docker Swarm 可以作为学习 Kubernetes 的入门基础。在工作中选择何物需要结合具体情况进行评估。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6701157d0bef792019b14d28