本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!
对于 Docker EE 安装的建议
本节详细说明架构的安装过程,并提供一个核对表。它并不能替代有关文档,后者提供了更多详细信息,从各方面来讲都是权威性的。本节的目标是帮助您定义一个可重复的(最好也是自动化的)过程,用以部署、升级和扩展 Docker EE 环境。
Docker EE 标准版或高级版安装的三个主要阶段如下所示:
- 部署和配置基础架构(主机、网络、存储);
- 安装和配置作为应用在主机上运行的 Docker 引擎;
- 安装和配置 UCP 和 DTR,它们作为在引擎上运行的容器而实现;
基础架构注意事项
安装文档详细说明了 Docker EE 标准版和高级版的基础架构要求。建议使用环境中现有的或特定于平台的工具来为基础架构组件提供标准化的可重复配置。
网络
Docker 组件需要通过网络通信,文档列出了为实现内部集群通信需要开放的端口。如果集群的内部网络配置不当,可能引发难以追查原因的问题。最好先从相对简单的环境开始。此参考架构假定所有主机使用同一个子网,而容器使用 Overlay 网络。
防火墙
对 Docker EE 的访问只能使用端口 443 进行(对于 DTR 是端口 443 和 80),无论访问 Web UI 还是远程 API 都不例外。因此外部防火墙配置很简单。在大多数情况下,您只需要开放端口 80、443 和 22。端口 22 用于 SSH 访问,因为 Docker EE 不需要 SSH 访问,所以它是可有可无的。对应用的访问是通过负载均衡器使用 HTTPS 进行的。如果您对外界暴露其他 TCP 服务,请在防火墙上开放这些端口。上一节已经说过,为了在集群内部通信,也需要开放多个端口。如果您在集群中的某些节点之间设有防火墙(例如用于分隔控制器与工作节点),那么也要开放相关端口。
如果在应用内部使用经过加密的 Overlay 网络,则还应该允许 ESP(封装安全有效负载)或 IP 协议 50 流量。ESP 并非基于 TCP 或 UDP 协议,它将用于安全有效负载 / 数据的端到端封装。
负载均衡器
上一节详细说明了负载均衡器。它们必须在安装之前配置完毕,而且必须有合适的主机名。外部(负载均衡器)主机名用于 HA,也用于 TLS 证书。如果在安装期间或安装后不必重新配置它们,就会比较轻松。
请参阅上一节了解 Docker 组件来获取关于负载均衡器配置的详细信息。
共享存储
用于镜像库中镜像的 DTR 共享存储必须就绪,并且必须可从 DTR 节点访问。请使用 S3 或 NFS 命令行客户端来测试其是否工作,以避免调试 DTR 存储配置的麻烦。
主机配置
主机配置根据所使用的 OS 和现有配置标准而定,不过在安装 OS 之后必须执行几个重要步骤:
- 使用 NTP 或类似服务进行时钟同步。时钟偏差可能导致难以排除的错误,特别是在使用 Raft 算法的情况下(UCP 和 DTR)。
- 所有主机的 UCP 都需要静态 IP。
- 主机名用于集群中的节点标识。必须以非临时性的方式设置主机名。
- 主机防火墙必须在安装文档中指定的所有端口上允许集群内流量。
- 如果有需要,还必须配置存储。例如,devicemapper 驱动程序需要一个在 Docker 引擎安装之前配置的逻辑存储卷。
Docker EE 基础版安装注意事项
关于 EE 安装的详细说明由文档提供。要在无法访问互联网的机器上安装,请将这些软件包添加到您自己的私有镜像仓库。安装软件包之后,确保将 docker 服务配置为在系统引导时启动。
更改 Docker EE 基础版的参数的最佳方式是使用 /etc/docker/daemon.json 配置文件。这样可以确保配置能够方便地跨不同系统和 OS 复用。请参见文档了解完整的选项列表。
启动 docker 服务,并使用 docker info 验证参数,从而确保引擎配置正确。
UCP 安装注意事项
UCP 安装程序会从一组运行 Docker EE 基础版的机器创建功能性集群。这包括创建 Swarm 集群和安装 UCP 控制器。在安装指南中描述的默认安装方式是交互式的。
要执行完全自动化的可重复部署,请对安装程序提供更多信息:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp/docker_subscription.lic:/config/docker_subscription.lic \
-e UCP_ADMIN_PASSWORD=password --name ucp docker/ucp install --host-address IP_or_interface \
--san manager1.example.com --san ucp.example.com
下列各节会说明所有这些选项。
外部证书
默认情况下,UCP 使用自签名的 TLS 证书。对于生产部署,建议使用由可信的 CA 生成的证书。在大多数情况下,该 CA 就是您的组织的内部 CA。
需要的证书和密钥如下所示:
- 根 CA 的公用证书 ca.pem。
- TLS 证书 cert.pem。它还必须包含所有中间 CA 的公用证书,并有用于访问 UCP 的所有地址的 SAN,包括负载均衡器的主机名(例如 ucp.example.com)和各个控制器的主机名(例如 ucp-controller1.example.com),以便直接访问它们。
- TLS 私钥 key.pem。
要在安装期间自动添加这些项目,请在您安装 UCP 的机器上,将这些带有正确名称的文件添加到名为 ucp-controller-server-certs 的存储卷,并使用 --external-server-cert 安装参数。
也可以在安装后通过 Web UI 添加证书。
许可证文件
要为安装提供许可证文件,可以通过命令行,也可以在 /config 中使用绑定式挂载(存储卷)。使用 -v /path/to/docker_subscription.lic:/config/docker_subscription.lic 指定其位置。
管理员密码
要使安装过程成为完全非交互式的,必须使用 --admin-password 安装参数传递管理员密码。默认的管理员用户名是 admin。可以使用 --admin-username 来更改它。
在安装命令文档中提供了安装参数的完整列表。
添加节点
完成第一个控制器节点的安装后,必须再将两个控制器加入集群,从而完成其安装。UCP 会在集群中的管理节点上配置一个完整的控制器从节点,因此在这两个控制器上只需要执行命令 docker swarm join 并使用正确的标记即可。可以通过在第一个控制器上运行 docker swarm join-token manager 来获取确切的命令。
要加入工作节点,可以在任何控制器上通过 docker swarm join-token worker 获取等效的命令:
docker swarm join-token worker
要将工作节点添加到此 swarm,请运行下列命令:
docker swarm join \
--token SWMTKN-1-00gqkzjo07dxcxb53qs4brml51vm6ca2e8fjnd6dds8lyn9ng1-092vhgjxz3jixvjf081sdge3p \
192.168.65.2:2377
要确保一切都正确运行,请在 https://ucp.example.com 登录到 UCP。
DTR 安装注意事项
DTR 的安装与 UCP 的安装类似。安装并配置一个节点,然后加入从节点来组成完整的高可用性设置。要安装第一个实例以及从节点,请将安装程序指向集群中将要安装该实例的节点。
安装后必须配置证书和镜像存储。配置共享存储之后,可以使用 join 命令添加两个从节点。
验证部署
完成所有项目的安装之后,可以执行测试来验证部署。在 UCP 控制器和运行 DTR 的节点上禁用工作负载的调度。
应该考虑的基本测试:
- 通过 https://ucp.example.com 登录,以及直接登录到管理节点,例如 https://manager1.example.com。 确认集群和所有节点都健康。
- 仿照文档中的示例来测试是否能部署应用。
- 测试用户是否能从 CLI 下载捆绑包并连接到集群。测试他们是否能使用 docker-compose。
- 使用完整的镜像工作流测试 DTR。确保存储没有配置不当,且镜像存储在正确的位置。
考虑构建一套标准的自动化测试来验证新的环境和更新。仅通过测试标准功能应该就可发现大部分配置问题。要确保使用非管理员用户身份运行这些测试,测试用户应该具有与平台用户相似的权限。通过测量每项测试所用的时间,也可以找出底层基础架构配置的问题。在这套测试中,应该包括全面部署您的组织中的实际应用。