在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

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

在CentOS 7上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群,从而促进扩展,高可用性和扩展性。

通过iPXE安装Rancher OS

通过iPXE安装Rancher OS

Rancher OS是围绕Docker构建的非常轻量级的Linux发行版。操作系统本身的重量约为20MB。本教程将帮助您入门和运行

两种Docker图形化管理工具:DockerUI和Shipyard

两种Docker图形化管理工具:DockerUI和Shipyard

借助Vultr Docker应用程序,您可以轻松地在Vultr服务器实例上部署Docker。同时,您可以方便地进行Docker管理任务

在Ubuntu 18.04上安装Docker CE

在Ubuntu 18.04上安装Docker CE

简介Docker是一个应用程序,可让我们部署作为容器运行的程序。它是用流行的Go编程语言编写的

在RancherOS上安装Rancher Server

在RancherOS上安装Rancher Server

概述RancherOS是一个非常轻量级的操作系统(仅约60 MB),它以PID 0作为运行系统服务的方式运行系统Docker守护程序。

在CoreOS上,设置您自己的Docker注册表

在CoreOS上,设置您自己的Docker注册表

我们都知道并喜欢Docker,这是一个在多台机器上创建,管理和分发应用程序容器的平台。Docker Inc.提供服务

在Debian 9上安装Docker CE

在Debian 9上安装Docker CE

使用其他系统?简介Docker是一个允许在虚拟容器内部署软件的应用程序。它写在G

在Ubuntu 14.04上安全地部署和管理LXC容器

在Ubuntu 14.04上安全地部署和管理LXC容器

LXC容器(Linux容器)是Linux中的一种操作系统功能,可用于在单个主机上运行多个隔离的Linux系统。塞斯

如何使用Docker:创建第一个Docker容器

如何使用Docker:创建第一个Docker容器

本教程介绍了Docker入门的基础知识。我假设您已经安装了Docker。本教程中的步骤将适用于

使用Docker部署Node.js应用程序

使用Docker部署Node.js应用程序

本文将向您展示如何在Docker容器中部署Node应用程序。注意:本教程假定您已安装Docker并已阅读

Docker的负载均衡

Docker的负载均衡

在运行Web应用程序时,通常希望充分利用资源,而不必转换软件以使用多线程处理程序。

在CentOS 7上安装Rancher

在CentOS 7上安装Rancher

使用其他系统?简介Rancher是一个用于运行容器和构建私有容器服务的开源平台。牧场主是基地

CentOS 7上的Kubernetes入门

CentOS 7上的Kubernetes入门

Kubernetes是Google开发的开放源代码平台,用于跨服务器集群管理容器化应用程序。它以十年为基础

在Debian 9上使用Docker Swarm(CE)进行粘性会话

在Debian 9上使用Docker Swarm(CE)进行粘性会话

使用其他系统?简介Docker Swarm将您的单个服务器转变为计算机集群。便于扩展,高可用性和

如何在CentOS 7上安装Harbor

如何在CentOS 7上安装Harbor

Harbor是一个开放源代码的企业级注册服务器,用于存储和分发Docker映像。Harbor扩展了开源Docker Distribution b

在CentOS 7上使用Kubeadm部署Kubernetes

在CentOS 7上使用Kubeadm部署Kubernetes

概述本文旨在帮助您立即建立Kubernetes集群并使用kubeadm运行。本指南将在以下位置部署两台服务器

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

使用Docker在CentOS 7上开始使用SQL Server 2017(MS-SQL)

前提条件Docker引擎1.8+。至少4GB的磁盘空间。至少4GB的RAM。步骤1.安装Docker为了安装SQL-Server,Docker mus

在Ubuntu 14.04上安装Docker

在Ubuntu 14.04上安装Docker

使用其他系统?Docker是一个允许部署作为容器运行的程序的应用程序。它是用流行的Go程序编写的

使用Docker-compose部署PHP应用程序

使用Docker-compose部署PHP应用程序

PHP应用程序通常由Web服务器,关系数据库系统和语言解释器本身组成。在本教程中,我们将继续学习

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 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。