Docker之Docker Swarm介绍

Docker Swarm概述

1.将多台安装docker的机器组成一个集群,共同对外提供服务,对集群中的docker容器进行管理;
2.docker-compose:更多是单机(同一台机器)环境下管理多个docker容器;  

Docker Swarm 架构

架构流程图

在这里插入图片描述

1.Docker Swarm 将多台机器组成集群(Cluster),其中包含主节点(Manager Node)和子节点(Worker Node);
2.客户端(Docker Client)通过Rest API去调用请求到主节点;
	主节点会做相关的健康检查,服务发现,以及通过相关的策略去进行分发到集群中的机器;
3.同样对于集群中的节点,如果主节点(Manage Node)挂掉,其他的节点通过投票的形式(Raft协议)进行选举新的主节点;

Docker Swarm 搭建案例

案例概述

1.我们在这里通过vagrant+virtualbox同时创建三台centos的虚拟机机器
  其中Manager Node模拟docker swarm中的主节点(Manager Node)
  	 Workdor01-Node和Workor02-Node模拟docker swarm的子节点;
2.通过我们虚拟出来的三台机器,我们进行Docker Swarm的讲解说明;  

Vagrant 和VirtualBox 安装

1.之前已经有讲解过,这里我们不再进行赘述,可以参考下面的地址

https://blog.csdn.net/u014636209/article/details/103052261

创建Vagrantfile文件

boxes = [
    {
        :name => "manager-node",
        :eth1 => "192.168.8.11",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "worker01-node",
        :eth1 => "192.168.8.12",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "worker02-node",
        :eth1 => "192.168.8.13",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure(2) do |config|

  config.vm.box = "centos/7"
  
   boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
		  v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
		  v.customize ["modifyvm", :id, "--name", opts[:name]]
        end

        config.vm.network :public_network, ip: opts[:eth1]
      end
  end

end
 :mem => "1024",   1G的内存
 :cpu => "1"			 1核的CPU

启动三台服务器

备注

1.将上面的Vagrantfile放到我自己自定义的用于测试Docker Swarm的文件夹
  /Users/gaoxinfu/docker/docker-swarm 下
localhost:docker-swarm gaoxinfu$ pwd
/Users/gaoxinfu/docker/docker-swarm
localhost:docker-swarm gaoxinfu$ ls -la
total 8
drwxr-xr-x  4 gaoxinfu  staff   128 12 21 14:32 .
drwxr-xr-x  6 gaoxinfu  staff   192 12 20 11:42 ..
-rw-r--r--@ 1 gaoxinfu  staff  1064 11 27 07:50 Vagrantfile
localhost:docker-swarm gaoxinfu$ 

查看当前的Vagrantfile的状态

localhost:docker-swarm gaoxinfu$ vagrant status
Current machine states:

manager-node              not created (virtualbox)
worker01-node             not created (virtualbox)
worker02-node             not created (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

启动

localhost:docker-swarm gaoxinfu$ vagrant up
Bringing machine 'manager-node' up with 'virtualbox' provider...
Bringing machine 'worker01-node' up with 'virtualbox' provider...
Bringing machine 'worker02-node' up with 'virtualbox' provider...
==> manager-node: Importing base box 'centos/7'...
==> manager-node: Matching MAC address for NAT networking...
==> manager-node: Setting the name of the VM: docker-swarm_manager-node_1576909998395_66790
==> manager-node: Clearing any previously set network interfaces...
==> manager-node: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: 雷雳1
3) en2: 雷雳2
4) bridge0
5) p2p0
6) awdl0
7) llw0
8) en5: AX88179 USB 3.0 to Gigabit Ethernet
==> manager-node: When choosing an interface, it is usually the one that is
==> manager-node: being used to connect to the internet.
    manager-node: Which interface should the network bridge to? 1
==> manager-node: Preparing network interfaces based on configuration...
    manager-node: Adapter 1: nat
    manager-node: Adapter 2: bridged
==> manager-node: Forwarding ports...
    manager-node: 22 (guest) => 2222 (host) (adapter 1)
==> manager-node: Running 'pre-boot' VM customizations...
==> manager-node: Booting VM...
==> manager-node: Waiting for machine to boot. This may take a few minutes...
    manager-node: SSH address: 127.0.0.1:2222
    manager-node: SSH username: vagrant
    manager-node: SSH auth method: private key
    manager-node: 
    manager-node: Vagrant insecure key detected. Vagrant will automatically replace
    manager-node: this with a newly generated keypair for better security.
    manager-node: 
    manager-node: Inserting generated public key within guest...
    manager-node: Removing insecure key from the guest if it's present...
    manager-node: Key inserted! Disconnecting and reconnecting using new SSH key...
==> manager-node: Machine booted and ready!
==> manager-node: Checking for guest additions in VM...
    manager-node: No guest additions were detected on the base box for this VM! Guest
    manager-node: additions are required for forwarded ports, shared folders, host only
    manager-node: networking, and more. If SSH fails on this machine, please install
    manager-node: the guest additions and repackage the box to continue.
    manager-node: 
    manager-node: This is not an error message; everything may continue to work properly,
    manager-node: in which case you may ignore this message.
==> manager-node: Setting hostname...
==> manager-node: Configuring and enabling network interfaces...
==> manager-node: Rsyncing folder: /Users/gaoxinfu/docker/docker-swarm/ => /vagrant
==> worker01-node: Importing base box 'centos/7'...
==> worker01-node: Matching MAC address for NAT networking...
==> worker01-node: Setting the name of the VM: docker-swarm_worker01-node_1576910043338_99726
==> worker01-node: Fixed port collision for 22 => 2222. Now on port 2200.
==> worker01-node: Clearing any previously set network interfaces...
==> worker01-node: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: 雷雳1
3) en2: 雷雳2
4) bridge0
5) p2p0
6) awdl0
7) llw0
8) en5: AX88179 USB 3.0 to Gigabit Ethernet
==> worker01-node: When choosing an interface, it is usually the one that is
==> worker01-node: being used to connect to the internet.
    worker01-node: Which interface should the network bridge to? 1
==> worker01-node: Preparing network interfaces based on configuration...
    worker01-node: Adapter 1: nat
    worker01-node: Adapter 2: bridged
==> worker01-node: Forwarding ports...
    worker01-node: 22 (guest) => 2200 (host) (adapter 1)
==> worker01-node: Running 'pre-boot' VM customizations...
==> worker01-node: Booting VM...
==> worker01-node: Waiting for machine to boot. This may take a few minutes...
    worker01-node: SSH address: 127.0.0.1:2200
    worker01-node: SSH username: vagrant
    worker01-node: SSH auth method: private key
    worker01-node: 
    worker01-node: Vagrant insecure key detected. Vagrant will automatically replace
    worker01-node: this with a newly generated keypair for better security.
    worker01-node: 
    worker01-node: Inserting generated public key within guest...
    worker01-node: Removing insecure key from the guest if it's present...
    worker01-node: Key inserted! Disconnecting and reconnecting using new SSH key...
==> worker01-node: Machine booted and ready!
==> worker01-node: Checking for guest additions in VM...
    worker01-node: No guest additions were detected on the base box for this VM! Guest
    worker01-node: additions are required for forwarded ports, shared folders, host only
    worker01-node: networking, and more. If SSH fails on this machine, please install
    worker01-node: the guest additions and repackage the box to continue.
    worker01-node: 
    worker01-node: This is not an error message; everything may continue to work properly,
    worker01-node: in which case you may ignore this message.
==> worker01-node: Setting hostname...
==> worker01-node: Configuring and enabling network interfaces...
==> worker01-node: Rsyncing folder: /Users/gaoxinfu/docker/docker-swarm/ => /vagrant
==> worker02-node: Importing base box 'centos/7'...
==> worker02-node: Matching MAC address for NAT networking...
==> worker02-node: Setting the name of the VM: docker-swarm_worker02-node_1576910281058_54747
==> worker02-node: Fixed port collision for 22 => 2222. Now on port 2201.
==> worker02-node: Clearing any previously set network interfaces...
==> worker02-node: Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: 雷雳1
3) en2: 雷雳2
4) bridge0
5) p2p0
6) awdl0
7) llw0
8) en5: AX88179 USB 3.0 to Gigabit Ethernet
==> worker02-node: When choosing an interface, it is usually the one that is
==> worker02-node: being used to connect to the internet.
    worker02-node: Which interface should the network bridge to? 1
==> worker02-node: Preparing network interfaces based on configuration...
    worker02-node: Adapter 1: nat
    worker02-node: Adapter 2: bridged
==> worker02-node: Forwarding ports...
    worker02-node: 22 (guest) => 2201 (host) (adapter 1)
==> worker02-node: Running 'pre-boot' VM customizations...
==> worker02-node: Booting VM...
==> worker02-node: Waiting for machine to boot. This may take a few minutes...
    worker02-node: SSH address: 127.0.0.1:2201
    worker02-node: SSH username: vagrant
    worker02-node: SSH auth method: private key
    worker02-node: 
    worker02-node: Vagrant insecure key detected. Vagrant will automatically replace
    worker02-node: this with a newly generated keypair for better security.
    worker02-node: 
    worker02-node: Inserting generated public key within guest...
    worker02-node: Removing insecure key from the guest if it's present...
    worker02-node: Key inserted! Disconnecting and reconnecting using new SSH key...
==> worker02-node: Machine booted and ready!
==> worker02-node: Checking for guest additions in VM...
    worker02-node: No guest additions were detected on the base box for this VM! Guest
    worker02-node: additions are required for forwarded ports, shared folders, host only
    worker02-node: networking, and more. If SSH fails on this machine, please install
    worker02-node: the guest additions and repackage the box to continue.
    worker02-node: 
    worker02-node: This is not an error message; everything may continue to work properly,
    worker02-node: in which case you may ignore this message.
==> worker02-node: Setting hostname...
==> worker02-node: Configuring and enabling network interfaces...
==> worker02-node: Rsyncing folder: /Users/gaoxinfu/docker/docker-swarm/ => /vagrant

查看三台服务器的配置

连接三台服务器

localhost:docker-swarm gaoxinfu$ vagrant ssh manager-node
[vagrant@manager-node ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:8a:fe:e6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 85006sec preferred_lft 85006sec
    inet6 fe80::5054:ff:fe8a:fee6/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:58:39:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.11/24 brd 192.168.8.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe58:39a8/64 scope link 
       valid_lft forever preferred_lft forever
[vagrant@manager-node ~]$ sudo -i
[root@manager-node ~]# vi /etc/ssh/ssh_config 

#       $OpenBSD: ssh_config,v 1.30 2016/02/20 23:06:23 sobrado Exp $

# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

# Host *
#   ForwardAgent no
#   ForwardX11 no
#   RhostsRSAAuthentication no
#   RSAAuthentication yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/identity
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Protocol 2
#   Cipher 3des
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h
#
# Uncomment this if you want to use .local domain
# Host *.local
#   CheckHostIP no


Host *
        GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
        ForwardX11Trusted yes
# Send locale-related environment variables
        SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
        SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
        SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
        SendEnv XMODIFIERS  

允许通过密码可以进行SFTP连接

1.将上面的配置项目
  #   PasswordAuthentication yes
  改为如下:
  PasswordAuthentication yes

执行下面的命令上面修改的配置生效

[root@manager-node ~]# systemctl restart sshd
[root@manager-node ~]# 

修改root用户名的密码

[root@localhost ~]# passwd 
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
1.这里,我将root的密码修改为了root

开始连接—>问题:TODO

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


The client has disconnected from the server.  Reason:
Unable to authenticate using any of the configured authentication methods. 

发布了261 篇原创文章 · 获赞 37 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/u014636209/article/details/103647272