在Alpine Linux 3.9.0上创建Docker Swarm

介绍

本指南将向您展示如何使用多个Alpine Linux 3.9.0服务器和Portainer创建和配置Docker群。请注意,Vultr提供了一个一键式Docker应用程序,该应用程序当前支持CentOS 7 x64和Ubuntu 16.04 x64。

先决条件

首先,您至少需要两台运行Alpine Linux 3.9.0的VC2服务器。在您的Docker群中,其中一台服务器将充当manager node与外部网络的接口,并将作业委派给工作者节点。然后,另一台服务器将充当worker node-由管理者节点委派给它的作业。

请注意,如果您的应用程序需要冗余和/或更多的计算能力,则可以启动两个以上的服���器,并且本指南中提供的步骤仍然适用。

部署方式

访问Vultr 服务器部署界面

确保Vultr Cloud (VC2)在页面顶部选择选项卡。

您可以从该Server Location部分中选择任何位置,但是所有服务器都必须位于同一位置,否则将无法向其部署Docker群。

选择该部分的ISO Library标签,Server Type然后选择Alpine Linux 3.9.0 x86_64图像。

从该Server Size部分中选择一个适当的选项。本指南将使用25 GB SSD服务器大小,但这可能不足以满足您应用程序的资源要求。尽管Vultr可以在启动服务器后轻松升级服务器的大小,但是您仍应仔细考虑应用程序需要哪种服务器大小才能最佳地执行。

在该Additional Features部分中,您必须选择Enable Private Networking选项。尽管不需要其他选项来遵循本指南,但是您应该考虑每个选项在您的应用程序上下文中是否有意义。

如果您以前Multiple Private Networks在帐户上启用了该选项,则需要为服务器选择一个现有的或创建一个新的专用网络。如果尚未启用它,则可以忽略此部分。有关手动配置专用网络的信息,请参阅本指南

Firewall Group现在跳过该部分。只有充当Docker群中的管理器节点的服务器才需要暴露的端口,并且应在服务器部署后对其进行配置。

在页面的最底部,您必须输入Server Qty至少两个。如前所述,您可能需要两台以上的服务器,但是只要有两台就足以按照本指南进行操作。

最后,在该Server Hostname & Label部分中,为每个服务器输入有意义且令人难忘的主机名和标签。对于这种引导的目的,第一服务器的主机名和标签将是docker-managerDocker Manager,respectively-和docker-workerDocker Worker分别用于第二,。

仔细检查所有配置后,您可以单击Deploy Now页面底部的按钮以启动服务器。

在服务器上安装Alpine Linux 3.9.0

因为您从Vultr的ISO库中选择了一个操作系统,所以需要在每台服务器上手动安装和配置Alpine Linux 3.9.0。

给Vultr一两分钟来分配服务器后,在服务器管理界面上单击服务器的三点more options图标,然后选择选项。Docker ManagerView Console

您应使用登录提示重定向到控制台。如果没有,请等待一分钟,以使Vultr完成服务器的部署。

在该登录提示下,输入root作为用户名。实时版本的Alpine Linux 3.9.0(这是您的服务器当前正在运行的版本)不需要超级用户在登录时输入密码。

成功登录到根帐户后,您将看到一条欢迎消息,后跟一个shell提示符,如下所示:

localhost:~# 

要启动Alpine Linux安装程序,请输入以下命令:

# setup-alpine

首先,选择适当的键盘布局。本指南将使用us布局和变体。

设置主机名时,请选择在部署期间为此服务器设置的主机名。如果您严格按照本指南进行操作,则主机名应为docker-manager

两个网络接口应该可用:eth0eth1。如果仅看到eth0,则表明您没有正确配置服务器的专用网络。eth0使用初始化dhcp,并eth1使用在部署过程中为此服务器分配的专用IP地址,网络掩码和网关进行初始化。您可以从服务器的设置界面访问这些详细信息。出现提示时,请勿执行任何手动网络配置。

输入root帐户的新密码,然后选择适合于您选择将这些服务器部署到的位置的时区。

如果要使用HTTP / FTP代理,请输入其URL,否则请不要设置代理URL。

选择一个NTP客户端来管理系统时钟同步。本指南将使用busybox

当询问要使用的软件包存储库镜像时,可以通过输入其编号来明确选择一个。通过输入自动检测并选择最快的一个f;或通过输入手动编辑存储库配置文件e,除非您熟悉Alpine Linux,否则不建议这样做。本指南将使用第一个镜子。

如果计划使用SSH访问服务器或托管基于SSH的文件系统,请选择要使用的SSH服务器。本指南将使用openssh

当提示您使用磁盘时,选择磁盘vda作为sys类型。

现在应该在您的服务器上安装Alpine Linux 3.9.0。对您之前部署的所有其他服务器重复此过程,以确保将正确的值替换为主机名和eth1网络接口。

安装后服务器配置

此时,您的服务器仍在运行Alpine Linux 3.9.0的实时ISO版本。要从SSD安装启动,请访问服务器的设置界面,导航至Custom ISO侧边菜单项,然后单击Remove ISO按钮。这应该重新启动服务器。如果没有,请手动重启。

服务器完成重新引导后,导航回服务器的Web控制台Docker Manager

使用在安装过程中先前设置的密码登录到根帐户。

允许通过取消注释的第三行社区包库/etc/apk/repositories使用vi。您可以以类似方式启用边缘存储库和测试存储库,但是不需要遵循本指南。

通过输入以下shell命令,将服务器的本地软件包索引与您先前选择的远程存储库同步:

# apk update

然后升级过期的软件包:

# apk upgrade

与以前一样,对之前部署的每个服务器重复此配置过程。

在服务器上安装Docker

在安装Docker软件包本身之前,您可能需要创建一个单独的docker用户。您可以使用以下命令执行此操作:

# adduser docker

注意: 一旦安装了Docker软件包,该新用户和添加到新docker组中的所有用户都将具有root特权。请参见Moby Github存储库中的以下问题

由于--privilegeddocker中的存在,添加到“ docker”组的任何人都是根用户。码头工人组中的所有人在所有特权升级策略和系统审核上都有后门。

这不同于能够运行sudo到root的人,他们在这里有策略并对其应用了审核。

如果您想向docker用户授予sudo权限,请先安装该sudo软件包:

# apk add sudo

然后创建一个sudo组:

# addgroup sudo

最后,将docker用户添加到sudo组中:

# adduser docker sudo

现在,您可以按照本指南的第4步完成sudo的配置。

至此,您已经准备好安装Docker软件包。请注意,并不一定要有单独的具有sudo功能的docker用户来安装和配置Docker,但是本指南遵循该约定。

使用以下命令安装Docker软件包:

# apk add docker

然后启用Docker初始化脚本:

# rc-update add docker

最后,启动Docker守护程序:

# rc-service docker start

您可以使用以下命令验证Docker是否正在运行:

# docker info

与上次一样,对开始时部署的每个服务器重复此Docker安装过程。

使用一个管理器节点和一个工作器节点初始化Docker群

处理完所有设置后,您终于可以创建Docker群了。

创建集群并添加管理器节点

导航回到Docker Manager服务器的Web控制台。您将将此服务器配置为集群中的管理器节点。如果选择docker更早创建用户,请使用该帐户而不是超级用户登录。

输入以下命令,但192.0.2.1用为Docker Manager服务器分配的私有(而非公共)IP地址代替:

$ docker swarm init --advertise-addr 192.0.2.1

Docker将显示一个命令,您可以在专用网络中的其他服务器上执行该命令,以将它们作为工作节点添加到该新集群中。保存此命令。

添加工作节点

现在,导航到Docker Worker服务器的Web控制台,docker如果已创建,请使用用户登录。

要将此服务器作为工作节点添加到刚创建的群集中,请执行从群集创建命令的输出中保存的命令。它将类似于以下内容:

$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377

Docker将输出该节点是否能够加入集群。如果在将工作程序节点添加到群集时遇到问题,请仔细检查您的专用网络配置,并参阅此指南进行故障排除。

如果在开始时部署了两个以上的服务器,则可以使用上面的命令将其余的作为工作节点添加到集群中,从而增加应用程序可用的资源量。或者,您可以添加其他管理器节点,但这超出了本指南的范围。

部署带有SSL的Portainer来管理您的Docker群

此时,您的Docker群已准备就绪,可以使用。但是,您可以选择在集群的管理器节点上启动Portainer堆栈。Portainer提供了一个方便的Web界面,用于管理您的群及其中的节点。

现在是时候为您的集群创建防火墙组了。除非您的应用程序特别要求,否则仅公开管理器节点上的端口。在不仔细考虑的情况下公开工作节点上的端口可能会引入漏洞。

导航到防火墙管理界面并创建一个新的防火墙组。您的应用程序应规定要公开的端口,但至少必须9000为Portainer 公开端口。将此防火墙组应用于Docker Manager服务器。

尽管不是必需的,但强烈建议使用SSL保护Portainer。为了本指南的缘故,您将仅使用自签名的OpenSSL证书,但应考虑在生产环境中使用Let's Encrypt

导航到Docker Manager服务器的Web控制台,使用docker用户登录,然后使用以下命令生成自签名的OpenSSL证书:

$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650

创建一个~/portainer-agent-stack.yml具有以下内容的新文件:

version: '3.2'

services:
  agent:
    image: portainer/agent
    environment:
      AGENT_CLUSTER_ADDR: tasks.agent
      CAP_HOST_MANAGEMENT: 1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
      - /:/host
    networks:
      - agent_network
    deploy:
      mode: global

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify --ssl --sslcert /certs/portainer.pem --sslkey /certs/portainer.key
    ports:
      - target: 9000
        published: 9000
        protocol: tcp
        mode: host
    volumes:
      - portainer_data:/data
      - /home/docker/certs:/certs
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay
    attachable: true

volumes:
  portainer_data:

修改此Docker堆栈配置文件以符合您的要求后,您可以部署它:

$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer

要验证Portainer是否正常工作,请在给Docker一两分钟的时间来部署堆栈后执行以下命令:

$ docker ps

您将看到两个带有图像的容器,portainer/portainer:latestportainer/agent:latest验证Portainer是否正确启动。

现在,您可以使用HTTPS Docker Manager在端口上访问服务器的公共IP地址,从而配置和管理Docker群9000



Leave a Comment

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息