先电PASS手册

版权声明:@抛物线 https://blog.csdn.net/qq_28513801/article/details/83512159

云计算开发服务平台用户手册

版本:先电 Cloud-paas-v2.2
发布日期:2018年2月5日

南京第五十五所技术开发有限公司

版本修订说明
修订版本 修订时间 修订说明
Cloud-paas-v1.2 2014年3月7日 云计算开发服务平台用户手册
Cloud-paas-v1.3 2015年11月8日 新增框架说明,增加框架结构图
Cloud-paas-v1.3.1 2016年1月18日 修订GRE网络下的PaaS平台搭建
Cloud-paas-v1.4 2016年4月12日 软件包修改mongodb和ActiveMQ安装脚本
Cloud-paas-v2.0 2016年12月15日 升级Docker作为服务平台底层
Cloud-paas-v2.1 2017年4月21日 Jenkins结合gogs实现持续化集成
Cloud-paas-v2.2 2018年2月5日 Docker升级、Rancher升级、RancherHA、新增数据卷、网络、监控、负载均衡案例

目 录
1、环境说明 5
1.1、系统简介 5
1.1.1、Docker简介 5
1.1.2、Docker平台组成 6
1.2、设备说明 8
1.2.1、软件版本说明 8
1.2.2、网络说明 8
1.2.3、基础环境配置 9
2、服务安装 12
2.1、安装Docker服务 12
2.2、部署Docker 仓库 12
2.2.1、上传仓库部署使用的镜像。 12
2.2.2、启动仓库容器服务 12
2.2.3、设置仓库地址 13
2.3、部署Rancher-Server服务 13
2.3.1、上传rancher-server镜像 13
2.3.2、启动rancher-server服务 14
2.3.3、通过网页访问,查看效果 15
2.3.4、设置Rancher服务对接的仓库地址。 15
3、应用模板部署 19
3.1、Gogs应用部署 19
3.2、Elasticsearch 2.x应用部署 21
3.3、Prometheus应用部署 22
4、Rancher-Server的HA部署 26
4.1、Server1节点部署Rancher-Server 26
4.2、Server2节点部署Rancher-Server服务 30
4.3、配置HA管理 31
4.4、添加client节点 32
5、容器数据卷共享 34
5.1、容器与主机之间映射共享卷 34
5.2、三个容器之间使用共享卷 34
6、自定义docker0网络 35
6.1、移除原有docker0网络 35
6.2、自定义新网络 36
6.3、使用新网络部署应用 37
7、Dockerfile构建容器镜像 37
7.1、上传资源到系统 37
7.2、编写Dockerfile文件 38
7.3、构建镜像 38
7.4、查询镜像 39
7.5、启动镜像 39
7.6、网页访问10.0.3.139:32770查看效果 40
7.7、进入容器获取登录密码再登录。 40
8、Docker容器实现Nginx的负载均衡 41
8.1、上传实验镜像 41
8.2、在宿主机创建发布目录 41
8.3、创建Tomcat1容器 42
8.4、创建Tomcat2容器 42
8.5、创建nginx容器 43
8.6、负载均衡配置 44
8.7、查看实现效果 46

1、环境说明
1.1、系统简介
1.1.1、Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
1)dockerClient客户端
2)Docker Daemon守护进程
3)Docker Image镜像
4)DockerContainer容器
Docker引擎Docker Engine是C/S架构,主要有以下部件组成:
服务器(Docker daemon):后台运行的Docker daemon进程。Daemon进程用于管理Docker对象,包括镜像(images)、容器(containers)、网络(networks)、数据卷(data volumes)。
REST接口:同daemon交互的REST API接口。
客户端(Docker client):命令行(CLI)交互客户端。客户端使用REST API接口同Docker daemon进行访问。Docker服务的架构图如图1-1所示。

图1-1 Docker服务的架构图
1.1.2、Docker平台组成

图1-2 Docker服务组成图
运行一个Docker服务,组成包括Docker daemon服务器、Docker Client客户端、Docker Image镜像、Docker Registry库、Docker Contrainer容器,如图1-2所示。
(1)Docker镜像:
是一个只读模板,用于创建Docker容器,由Dockerfile文本描述镜像的内容。镜像定义类似“面对对象的类”,从一个基础镜像(Base Image)开始。构建一个镜像实际就是安装、配置和运行的过程,Docker镜像基于UnionFS把以上过程进行分层(Layer)存储,这样更新镜像可以只更新变化的层。Docker的描述文件为Dockerfile,Dockerfile是一个文本文件,基本指令包括:
FROM:定义基础镜像。
MAINTAINER :作者或维护者。
RUN:运行linux 命令。
ADD:增加文件或目录。
EVN:定义环境变量。
CMD:运行进程。
(2)Docker容器:
是一个镜像的运行实例。容器有镜像创建,运行过程例如:
运行ubuntu操作系统镜像,-I 前台交互模型,运行命令为/bin/bash
$ docker run -i -t ubuntu /bin/bash
拉(pull)镜像,Docker Engine 检查ubuntu 镜像是否存在,如果本地已经存在,使用该镜像创建容器,如果不存在,Docker Engine从镜像库拉镜像。
使用该镜像创建新容器。
分配文件系统,挂载一个读写层,在读写从加载镜像。
分配网络/网桥接口,创建一个网络接口,让容器和主机通信。
从可用的IP池选择IP地址,分配给容器。
执行命令/bin/bash。
捕获和提供执行结果。
(3)Docker 仓库:
Docker仓库是Docker镜像库。Docker Registry也是一个容器。Docker Hub是Docker公司提供的互联网公共镜像仓库。可以构建自己本地的镜像仓库,国内有些公司也构建了镜像仓库。包括阿里云、新浪等。Docker 集群服务:Docker集群服务运行承租的Docker节点一起工作。目前支持swarm模式。
一个 Docker Registry 节点中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
一般而言,一个仓库包含的是同一个软件的不同版本的镜像,而标签则用于对应于软件的的不同版本。可以通过 <仓库名>:<标签> 的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
以 Ubuntu 镜像 为例,ubuntu 是仓库的名字,其内包含有不同的版本标签,如,14.04, 16.04。可以通过 ubuntu:14.04,或者 ubuntu:16.04 来具体指定所需哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为 ubuntu:latest。

1.2、设备说明
1.2.1、软件版本说明
安装运行环境系统要求为Centos7, 内核版本不低于3.10
Docker版本不低于1.12.6
Rancher-Server版本1.6.5
1.2.2、网络说明
安装PaaS的VM的网络IP采用IaaS的外部IP,IP设置成静态IP。网络架构如下:
节点角色 主机名 内存 硬盘 Ip
仓库节点 server 4G 40G 10.0.3.137
Server节点 server 4G 40G 10.0.3.137
Client client 4G 40G 10.0.3.138
设备名:

  1. Server节点
    主要作为系统的运行指令的发送节点
    server:10.0.3.137
  2. Client节点
    主要为服务运行的节点,可以使用一个或者多个均可
    client:10.0.3.138
  3. Registry节点
    主要作为系统所有的运行的镜像仓库节点
    registry:10.0.3.137
    1.2.3、基础环境配置
    本次实验环境采用server+client两个节点部署,client节点可以根据需求自主扩展。下面的基础环境1-4步骤在两个节点均要设置,不能遗漏。
    1.关闭selinux

vi /etc/sysconfig/selinux

SELINUX=disabled

getenforce

Disabled
2.关闭防火墙

systemctl stop firewalld.service

3.删除iptables防火墙规则

iptables –F

iptables –X

iptables –Z

/usr/sbin/iptables-save

4.修改系统内核
打开内核转发功能。
编辑配置文件/etc/sysctl.conf,将以下内容添加:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
修改完成后使用命令生效。

sysctl –p

5.修改主机名、配置域名解析
server节点:
#hostnamectl set-hostname server
#bash

vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.3.137 server
10.0.3.138 client

ping client

PING client (10.0.3.138) 56(84) bytes of data.
64 bytes from client (10.0.3.138): icmp_seq=1 ttl=64 time=1.02 ms
64 bytes from client (10.0.3.138): icmp_seq=2 ttl=64 time=0.400 ms
client节点:

hostnamectl set-hostname client

bash

vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.3.137 server
10.0.3.138 client

ping server

PING server (10.0.3.137) 56(84) bytes of data.
64 bytes from server (10.0.3.137): icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from server (10.0.3.137): icmp_seq=2 ttl=64 time=0.327 ms
6.配置yum源
将我们的XianDian-PaaS-v2.2.iso通过CRT上传到系统中,然后挂载到/mnt,拷贝出mnt里面所有的文件夹到/opt上。

mount -o loop XianDian-PaaS-v2.2.iso /mnt

cp -rvf * /opt

mv /etc/yum.repos.d/* /media/

vi /etc/yum.repos.d/docker.repo

[docker]
name=docker
baseurl=file:///opt/docker
gpgcheck=0
enabled=1
7.安装vsftpd服务

yum install -y vsftpd

vi /etc/vsftpd/vsftpd.conf

anon_root=/opt //添加这行,设置共享目录。

systemctl restart vsftpd

systemctl enable vsftpd

vi /etc/yum.repos.d/docker.repo

[docker]
name=docker
baseurl=ftp://10.0.3.137/docker //这个源是指向我们的docker的yum源
gpgcheck=0

yum clean all

yum list

能看到列表即表示yum源配置成功
Client节点yum源配置同Server节点一样。
2、服务安装
2.1、安装Docker服务
所有节点安装docker环境

yum install -y docker

systemctl restart docker

systemctl enable docker

2.2、部署Docker 仓库
2.2.1、上传仓库部署使用的镜像。

ll

-rw-r–r-- 1 root root 33918976 Oct 17 10:20 registry_latest.tar

docker load -i registry_latest.tar

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/registry latest c9bd19d022f6 15 months ago 33.27 MB
2.2.2、启动仓库容器服务

docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest

20a07207bf28256d13fbc53cf2a1d978a4827bf8f360b32a8106d996f024c001

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20a07207bf28 docker.io/registry:latest “/entrypoint.sh /etc/” 8 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry
2.2.3、设置仓库地址

vi /etc/sysconfig/docker //添加下面两行

ADD_REGISTRY=’–add-registry 10.0.3.137:5000’
INSECURE_REGISTRY=’–insecure-registry 10.0.3.137:5000’

systemctl daemon-reload

systemctl restart docker

docker info

注意:两个节点都要添加仓库地址。

docker images

docker tag c9bd19d022f6 10.0.3.137:5000/registry:latest

docker push 10.0.3.137:5000/registry:latest

至此仓库就建立好了,我们需要将所有镜像全部推送到仓库中,提供给其他节点使用。
2.3、部署Rancher-Server服务
2.3.1、上传rancher-server镜像

ll

-rw-r–r-- 1 root root 1000050176 Jan 29 06:23 rancher_server_v1.6.5.tar

docker load -i rancher-server_v1.6.5.tar

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
f89070da7581 3 weeks ago 984.9 MB
10.0.3.137:5000/registry latest c9bd19d022f6 15 months ago 33.27 MB
docker.io/registry latest c9bd19d022f6 15 months ago 33.27 MB

docker tag f89070da7581 10.0.3.137:5000/rancher/server:v1.6.5

docker push 10.0.3.137:5000/rancher/server:v1.6.5

2.3.2、启动rancher-server服务

docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:v1.6.5;

2ff52cf39d6f2637ac300e7d430dc828fba99cef4ec118793e91e9d680a16509

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2ff52cf39d6f rancher/server:v1.6.5 “/usr/bin/entry /usr/” 18 seconds ago Up 6 seconds 3306/tcp, 0.0.0.0:8080->8080/tcp modest_turing
20a07207bf28 docker.io/registry:latest “/entrypoint.sh /etc/” 39 minutes ago Up 38 minutes 0.0.0.0:5000->5000/tcp registry

2.3.3、通过网页访问
Rancher-server的访问地址是:serverIP:8080,访问结果如图2-1所示。

图2-1访问rancher-server服务
2.3.4、Rancher服务设置。
1.选择ADMIN-Access Controller,选择LOCAL进行认证设置,如图1-1、图1-2所示。

图1-1 Access Controller设置

图2-2 认证设置
2.选择ADMIN-Settings,下拉到最下面,找到Advanced Settings,如图2-3、图2-4所示。

图2-3 Settings设置

图2-4 Advanced Settings设置
3.打开Advanced Settings,下拉到最后设置仓库地址,如图2-5所示。

图2-5 仓库设置
4.选择右下方的语言,可以进行中文切换,如图2-6所示。

图2-6 中文切换
5.选择Default-环境管理,点击添加环境,选择Cattle环境模板,环境名称自定义,如图2-7、图2-8、图2-9所示。

图2-7 环境管理

图2-8 添加环境

图2-9 添加环境
6.查看建立的环境状态,Active状态为正常,如图2-10所示。

图2-10 添加环境成功
7.切换到新建的环境,如图2-11所示。

图2-11 切换环境
8.添加环境内的主机
添加主机之前要确保仓库中有agent服务的相关镜像,没有的话需要提前传到私有仓库中,clinet节点配置好私有仓库地址即可直接拉取。

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/rancher/server v1.6.5 f89070da7581 2 days ago 984.9 MB
10.0.3.137:5000/rancher/scheduler v0.8.2 690ef14a99b7 6 months ago 241.9 MB
10.0.3.137:5000/rancher/agent v1.2.5 ef5fea38dbe6 7 months ago 237.1 MB
10.0.3.137:5000/rancher/network-manager v0.7.4 787fc137ac53 7 months ago 248.8 MB
10.0.3.137:5000/rancher/metadata v0.9.2 d46f30a656e0 7 months ago 251.5 MB
10.0.3.137:5000/rancher/net v0.11.3 9495baae8faf 7 months ago 267.3 MB
10.0.3.137:5000/rancher/dns v0.15.1 af5509fe436b 8 months ago 239.8 MB
10.0.3.137:5000/rancher/healthcheck v0.3.1 10710b438de7 9 months ago 383.9 MB
10.0.3.137:5000/rancher/net holder 665d9f6e8cc1 10 months ago 267.2 MB
10.0.3.137:5000/registry latest c9bd19d022f6 15 months ago 33.27 MB
docker.io/registry latest c9bd19d022f6 15 months ago 33.27 MB
上传镜像到私有仓库完成后,点击添加主机,如图2-12所示。

图2-12 添加主机
9.设置client节点的ip,并点击复制到粘贴板到client节点执行,如图2-13所示。

图2-13 设置ip
10.切换到应用-基础环境,等待基础设施应用自动部署成功,如图是基础设施应用部署成功的效果,如图2-14所示。

图2-14 基础环境部署成功
3、应用模板部署
3.1、Gogs应用部署
3.1.1、点击应用商店,在搜索框中输入Go,查找Gogs应用服务,如图3-1所示。

图3-1 查找Gogs应用
3.1.2、查看Gogs的查看详情,选择默认模板版本v0.11.34,如图3-2所示。

图3-2 Gogs版本
3.1.3、自定义应用名称,设置端口,选择不被占用的端口,设置Mysql的密码,如图3-3所示。

图3-3 服务配置
3.1.4、下来Gogs部署设置,点击最下方的预览,查看具体的服务配置,如图3-4所示。

图3-4 Gogs的rancher-compose
3.1.5、点击预览下面的启动按钮,进行Gogs服务自动化部署,部署完成后点击应用,查看Gogs服务部署结果,如图3-5所示。

图3-5 Gogs服务部署成功
3.1.6、点击Gogs服务的访问端口8080,进行初始化设置,数据库的ip是对应db容器的ip,设置完生效后重新访问Gogs服务的8080端口,查看效果如图3-6、图3-7所示。

图3-6 Gogs初始化设置

图3-7 访问Gogs服务
3.2、Elasticsearch 2.x应用部署
3.2.1、上传镜像

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.138:5000/elasticsearch 2.4.3-alpine
10.0.3.138:5000/rancher/elasticsearch-conf v0.5.0 3d2a05b62289 21 months ago 20.46 MB
10.0.3.138:5000/rancher/kopf v0.4.0 f3e805a34ebd 2 years ago 182 MB
3.2.2、在应用商店查找Elasticsearch 2.x,如图3-8所示。

图3-8 查找Elasticsearch 2.x
3.2.3、配置Elasticsearch 2.x服务,如图3-9所示。

图3-9 配置Elasticsearch 2.x
3.2.4、启动自动化部署,如图3-10所示。

图3-10 自动化部署
3.2.5、通过网页访问Elasticsearch 2.x服务,端口是80,如图3-11所示。

图3-11 访问Elasticsearch 2.x
3.2.6、查看集群的各节点详情,如图3-12所示。

图3-12 节点详情
3.3、Prometheus应用部署
3.3.1、镜像上传

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/google/cadvisor latest 75f88e3ec333 7 weeks ago 62.18 MB
10.0.3.137:5000/prom/node-exporter latest ff5ecdcfc4a2 7 weeks ago 22.8 MB
10.0.3.137:5000/infinityworks/graf-db 11 2c4fd7c7333a 9 months ago 4.531 MB
10.0.3.137:5000/prom/prometheus v1.6.0 c351d5f42485 9 months ago 75.29 MB
10.0.3.137:5000/infinityworks/prom-conf 19 ece6596a4ee7 9 months ago 3.985 MB
10.0.3.137:5000/grafana/grafana 4.2.0 8c4ef64b4ad1 10 months ago 277.9 MB
10.0.3.137:5000/infinityworks/prometheus-rancher-exporter v0.22.52 43b3ae5364ea 12 months ago 23.72 MB
3.3.2、应用商店查找Prometheus应用服务,如图3-13所示。

图3-13 查找Prometheus应用服务
3.3.3、Prometheus应用服务配置,然后启动自动化部署,如图3-14所示。

图3-15 Prometheus应用自动化部署
3.3.4、通过9090端口访问Prometheus应用,如图3-16所示。

图3-16 访问Prometheus应用
3.3.5、通过Prometheus应用查看go_memstats_heap_objects数据,如图3-17所示。

图3-17 数据展示
3.3.6、通过3000端口访问Grafana应用服务,如图3-18所示。

图3-18 访问Grafana应用
3.3.7、点击Sign up注册用户,输入Email地址注册,如图3-19所示。

图3-19 Grafana注册邮箱
3.3.8、设置用户名和密码,然后自动重新登录,如图3-20所示。

图3-20 Grafana注册用户
3.3.9、进入Grafana应用服务主页面,监控容器状态,如图3-21所示。

图3-21监控容器状态
4、Rancher-Server的HA部署
这里我们要是实现Rancher-Server的HA部署,需要两台server节点和一台client,仓库可以使用上节部署的私有仓库,具体网络分配如下。
节点 Ip 角色 功能
Server1 10.0.3.137 Rancher-server1 Rancher-server、仓库、haproxy、数据库服务
Server2 10.0.3.138 Rancher-server2 Server服务
Client 10.0.3.139 Rancher-agent 代理

4.1、Server1节点部署Rancher-Server
4.1.1、安装Docker服务

yum install -y docker

systemctl restart docker

systemctl enable docker

4.1.2、添加私有仓库

ADD_REGISTRY=’–add-registry 10.0.3.137:5000’
INSECURE_REGISTRY=’–insecure-registry 10.0.3.137:5000’

systemctl daemon-reload

systemctl restart docker

4.1.3、安装、配置数据服务

yum install -y mariadb mariadb-server

systemctl enable mariadb

systemctl restart mariadb

mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables…
… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
… Success!

Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
… Success!

By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

  • Dropping test database…
    … Success!
  • Removing privileges on test database…
    … Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
4.1.4、创建公用数据库

mysql -uroot -p000000

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.56-MariaDB MariaDB Server

Copyright © 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS cattle COLLATE = ‘utf8_general_ci’ CHARACTER SET = ‘utf8’;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> GRANT ALL ON cattle.* TO ‘cattle’@’%’ IDENTIFIED BY ‘cattle’;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL ON cattle.* TO ‘cattle’@‘localhost’ IDENTIFIED BY ‘cattle’;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
4.1.5、启动server节点的Rancher-server服务
#docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 10.0.3.137:5000/rancher/server:v1.6.5 --db-host 10.0.3.138 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 10.0.3.137
启动完成之后通过网页访问,如图4-1所示。

图4-1 访问Rancher-Server服务
点击ADMIN-High Availability,查看高可用主机,如图4-2所示。

图4-2 高可用主机
4.2、Server2节点部署Rancher-Server服务
4.2.1、安装Docker服务

yum install -y docker

systemctl restart docker

systemctl enable docker

4.2.2、配置私有仓库

vi /etc/sysconfig/docker

ADD_REGISTRY=’–add-registry 10.0.3.137:5000’
INSECURE_REGISTRY=’–insecure-registry 10.0.3.137:5000’

systemctl daemon-reload

systemctl restart docker

4.2.3、启动server2节点Rancher-server服务

docker run -d --restart=unless-stopped -p 8080:8080 -p 9345:9345 10.0.3.137:5000/rancher/server:v1.6.5 --db-host 10.0.3.138 --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle --advertise-address 10.0.3.138

启动完成之后通过网页访问,如图4-3所示。

图4-3访问Rancher-Server服务
点击ADMIN-High Availability,查看高可用主机,如图4-4所示。

图4-4 高可用主机
4.3、配置HA管理
haproxy服务最好安装在单独节点,这里资源紧张,所以我们就直接部署在server2节点上。
4.3.1、安装haproxy服务

yum install -y haproxy

4.3.2、重写haproxy.cfg文件
[root@server1]# vi /etc/haproxy/haproxy.cfg
global
maxconn 4096
ssl-server-verify none

defaults
mode http
balance roundrobin
option redispatch
option forwardfor

timeout connect 5s
timeout queue 5s
timeout client 36000s
timeout server 36000s

frontend http-in
mode tcp
#bind *:443 ssl crt /etc/haproxy/certificate.pem
bind *:80 //监听的端口
default_backend rancher_servers

acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend rancher_servers if is_websocket

backend rancher_servers
server websrv1 10.0.3.137:8080 weight 1 maxconn 1024 //Rancher server IP:Port
server websrv2 10.0.3.138:8080 weight 1 maxconn 1024 //Rancher server IP:Port
4.3.3、启动haproxy服务管理,访问server2:80,结果如图4-5所示。
[root@server1 v2.2]# haproxy -f /etc/haproxy/haproxy.cfg &
[1] 30956

图4-5 访问haproxy服务
4.3.4、测试高可用性
首先停止server1节点的Rancher-server容器,然后访问server2:80,如图4-6所示。

docker stop d749f1bfacd9

图4-6 访问haproxy服务
这里可以发现,即使我们两个server节点中的其中一个节点down掉,只要我们的haproxy正常运行,我们还是可以正常访问rancher-server服务的。
4.4、添加client节点
4.4.1、点击添加主机,如图4-7所示。

图4-7 添加主机
4.4.2、选择Custom,添加client节点的ip,复制黏贴键到client节点运行,如图4-8所示。

图4-8 设置ip
4.4.3 client节点正常运行,如图4-9所示。

图4-9 添加主机成功
5、容器数据卷共享
5.1、容器与主机之间映射共享卷
5.1.1、创建共享卷
mkdir /root/html
cd /root/html
echo “I am your host volume HTML.” > /root/html/index.html
5.1.2、启动web容器
docker run -itd --name web -p 81:80 -v /root/html:/usr/share/nginx/html 10.0.3.137:5000/nginx:latest
5.1.3、网页访问效果,如图5-1所示。

图5-1网页访问效果
5.2、三个容器之间使用共享卷
5.2.1、启动web1容器
docker run -itd --name web1 -p 81:80 -v /usr/share/nginx/html 10.0.3.137:5000/nginx:latest
5.2.2、启动web2容器,连接web1共享卷
docker run -itd --volumes-from web1 --name web2 -p 82:80 10.0.3.137:5000/nginx:latest
5.2.3、启动web3容器,连接web1共享卷
docker run -itd --volumes-from web1 --name web3 -p 83:80 10.0.3.137:5000/nginx:latest
5.2.4、修改web1共享卷内容
docker exec -it web1 /bin/bash
echo “Welcome,I am web1.” > /usr/share/nginx/html/index.html
5.2.5、网页访问web1,效果如图5-2所示

图5-2网页访问web1
5.2.6、网页访问web2,如图5-3所示

图5-3 网页访问web2
5.2.7、网页访问web3,如图5-4所示

图5-4网页访问web3
6、自定义docker0网络
6.1、移除原有docker0网络
6.1.1、安装btctl命令

yum install -y bridge-utils

6.1.2、查询网桥信息

brctl show

bridge name bridge id STP enabled interfaces
docker0 8000.024292c9c6e7 no
6.1.3、关闭docker服务

systemctl stop docker

6.1.4、停止docker0网桥
#sudo ip link set dev docker0 down
6.1.5、删除docker0网桥
#sudo brctl delbr docker0
6.1.6查询所有网桥信息

brctl show

bridge name bridge id STP enabled interfaces
6.2、自定义新网络
6.2.1、创建新网桥bridge0

sudo brctl addbr bridge0

6.2.2查询创建的bridge0

brctl show

bridge name bridge id STP enabled interfaces
bridge0 8000.000000000000 no
6.2.3、设置新网桥的网络段地址

sudo ip addr add 192.168.5.1/24 dev bridge0

6.2.4、启动bridge0网桥

sudo ip link set dev bridge0 up

6.2.5、查询bridge0网桥信息

ifconfig bridge0

bridge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.5.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::583e:86ff:fe9b:5254 prefixlen 64 scopeid 0x20
ether 5a:3e:86:9b:52:54 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 648 (648.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6.2.6、添加新网桥到配置文件

vi /etc/sysconfig/docker

OPTIONS=’-b=bridge0’
6.2.7、加载配置文件,重启docker服务

systemctl daemon-reload

systemctl restart docker

6.3、使用新网络部署应用
6.3.1、创建一个nginx容器

docker run -itd 10.0.3.137:5000/nginx:latest

6.3.2、查看容器的状态

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89ac3183748a 10.0.3.137:5000/nginx:latest “nginx -g 'daemon off” 49 seconds ago Up 43 seconds 80/tcp tender_bardeen
6.3.3、查看容器的bridge

docker inspect -f {{.NetworkSettings.Networks.bridge}} 89ac3183748a

{ [] [] 71395d9b6fd02c4bd49973e63de3296b62f76adeacf737bbcf27fa310a353cc7 ad19393d4b4aaf205121dbd1952ed5b585f6f31320b62597c4ba35f05ea8e07a 192.168.5.1 192.168.5.2 24 0 02:42:c0:a8:05:02}

7、Dockerfile构建容器镜像
7.1、上传资源到系统

pwd

/opt/web
[root@localhost web]# ll
[root@server web]# ll
total 146832
-rw-r–r-- 1 root root 7453955 Jan 31 03:00 apache-tomcat-7.0.56.zip
-rw-r–r-- 1 root root 589 Feb 2 00:58 Dockerfile
-rw-r–r-- 1 root root 74292096 Jan 31 04:30 jenkins.war
-rw-r–r-- 1 root root 67 Feb 2 00:48 local.repo
-rw-r–r-- 1 root root 68597387 Feb 2 00:37 yum.tar
说明:这次主要是做一个容器化Tomcat发布站点,发布内容是Jenkins工具。Dockerfile是我们要构建镜像的基础文件,yum.tar是yum源软件包,local.repo是yum源文件,这里根据自己的实际需求自行修改。
7.2、编写Dockerfile文件

vi Dockerfile

FROM 10.0.3.138:5000/centos:latest
MAINTAINER Xiandian
RUN rm -fv /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/
ADD yum.tar /opt/
RUN yum clean all
RUN yum install -y java unzip
ENV LC_ALL en_US.UTF-8
ADD apache-tomcat-7.0.56.zip /root/apache-tomcat-7.0.56.zip
RUN unzip /root/apache-tomcat-7.0.56.zip -d /root/
EXPOSE 8081
RUN chmod u+x /root/apache-tomcat-7.0.56/bin/*
ADD jenkins.war /root/apache-tomcat-7.0.56/webapps/ROOT.war
ENV CATALINA_HOME /root/apache-tomcat-7.0.56
CMD ${CATALINA_HOME}/bin/catalina.sh run
7.3、构建镜像

docker build -t web:v1.0 .

Sending build context to Docker daemon 60.07 MB
Step 1 : FROM 10.0.3.137:5000/centos:latest
Trying to pull repository 10.0.3.137:5000/centos …
latest: Pulling from 10.0.3.137:5000/centos
af4b0a2388c6: Pull complete
Digest: sha256:7e94d6055269edb455bcfb637292573117e4a8341e9b9abbc09b17d8aafe8fbe
—> ff426288ea90
Step 2 : MAINTAINER Xiandian
。。。。。
Step 13 : ADD jenkins.war /root/apache-tomcat-7.0.56/webapps/ROOT.war
—> 86f12bcb34e5
Removing intermediate container 7c3e4b171027
Step 14 : ENV CATALINA_HOME /root/apache-tomcat-7.0.56
—> Running in 583cce60f1b6
—> 9356da9a6cc0
Removing intermediate container 583cce60f1b6
Step 15 : CMD ${CATALINA_HOME}/bin/catalina.sh run
—> Running in fc5e797276b2
—> 1884a340e0cd
Removing intermediate container fc5e797276b2
Successfully built 1884a340e0cd
7.4、查询镜像

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
web v1.0 929a538a8b44 About a minute ago 520.7 MB
10.0.3.137:5000/centos latest ff426288ea90 3 weeks ago 207.2 MB
7.5、启动镜像

docker run -itdP web:v1.0

ccfb7f2f7e10e361d761fb78816b871d8dc8f8964669b05ab6034ab829cc341

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac2df200990b web:v1.0 “/bin/sh -c '${CATALI” 35 seconds ago Up 27 seconds 0.0.0.0:32770->8081/tcp jovial_northcutt
7.6、网页访问效果
查看10.0.3.139:32770,查看我们启动得容器,如图7-1所示。

图7-1 访问jenkins
7.7、进入容器获取登录密码再登录
7.7.1、进入容器查找密码

docker exec -it ac2df200990b /bin/sh

sh-4.2# cat /root/.jenkins/secrets/initialAdminPassword
fe1a16527f704ffa9190695e32f9ceb8
7.7.2、输入密码,登录jenkins服务,如图7-2所示。

图7-2 登录jenkins
7.7.3、选择Install suggested plugins,然后continue,设置用户名和密码,设置完以后点击Save and Finish如图7-3所示。

图7-3 设置用户
7.7.4、设置完用户名之后,进入Getting Started设置,点击Started using Jenkins,如图7-4所示。

图7-4 设置完成
7.7.5、基本的设置完成以后,我们就可以正常使用Jinkens服务了,如图7-5所示。

图7-5 Jenkins主页
8、Docker容器实现Nginx的负载均衡
8.1、上传实验镜像

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
10.0.3.137:5000/tomcat latest a92c139758db 8 days ago 557.4 MB
10.0.3.137:5000/nginx latest 3f8a4339aadd 5 weeks ago 108.5 MB
8.2、在宿主机创建发布目录
创建www1、www2目录,并写一个默认欢迎页面。

cd /

mkdir www1 www2

cd www1

cat index.jsp

Tomcat1 <% out.println("this is Tomcat1"); %> # cd www2 # cat index.jsp Tomcat2 <% out.println("this is Tomcat2"); %> 8.3、创建Tomcat1容器 8.3.1、启动Tomcat1容器 # docker run -ti -d -P -h tomcat1 -v /root/www1:/usr/local/tomcat/webapps/ROOT 10.0.3.137:5000/tomcat:latest /bin/bash 8.3.2、查询Tomcat1容器 # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 610c47554b61 tomcat:latest "/bin/bash" 13 hours ago Up 13 hours 0.0.0.0:32768->8080/tcp jovial_leakey 8.3.3、进入tomcat1容器,启动web服务,访问如图8-1所示。 # docker exec -it 610c47554b61 /bin/bash root@tomcat1:/usr/local/tomcat# cd bin/ root@tomcat1:/usr/local/tomcat/bin# startup.sh

图8-1 web1站点
8.4、创建Tomcat2容器
8.4.1、启动tomcat2容器

docker run -ti -d -h tomcat2 -P -v /root/www2:/usr/local/tomcat/webapps/ROOT 10.0.3.137:5000/tomcat:latest /bin/bash

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dafb7bbc5160 tomcat:latest “/bin/bash” 13 hours ago Up 13 hours 0.0.0.0:32769->8080/tcp distracted_galileo
610c47554b61 tomcat:latest “/bin/bash” 13 hours ago Up 13 hours 0.0.0.0:32768->8080/tcp jovial_leakey
8.4.2、进入tomcat2容器,启动web服务,访问结果如图8-2所示。

docker exec -it dafb7bbc5160 /bin/bash

root@tomcat2:/usr/local/tomcat# bin/startup.sh

图8-2 web2站点
8.5、创建nginx容器
创建nginx容器的时候注意端口80是不是被占用,如果被占用可以选择使用其他端口。

docker run -itd -p 80:80 --name nginx nginx:latest /bin/bash

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dafb7bbc5160 docker.io/tomcat:latest “/bin/bash” 13 hours ago Up 13 hours 0.0.0.0:32769->8080/tcp distracted_galileo
610c47554b61 docker.io/tomcat:latest “/bin/bash” 14 hours ago Up 14 hours 0.0.0.0:32768->8080/tcp jovial_leakey
b595781ab635 docker.io/nginx:latest “/bin/bash” 14 hours ago Up 38 minutes 0.0.0.0:80->80/tcp nginx

docker exec -it b595781ab635 /bin/bash

/usr/sbin/nginx

8.6、负载均衡配置
8.6.1、在宿主机新建一个nginx.conf文件

vi nginx.conf

user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

#gzip  on;


include /etc/nginx/conf.d/*.conf;

//这个是定义Tomcat服务的负载均衡
upstream wei {

server 10.0.3.139:32768;

server 10.0.3.139:32769;

}
server {
listen 80;
server_name 10.0.3.139;//宿主机ip

#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

//这个是调用Tomcat服务的负载均衡
location / {
proxy_pass http://wei;
}
}
}

docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b595781ab635 docker.io/nginx:latest “/bin/bash” 14 hours ago Up 45 minutes 0.0.0.0:80->80/tcp nginx

ll

-rw-r–r-- 1 root root 922 Feb 1 00:43 nginx.conf
8.6.2、将nginx.conf配置拷贝到nginx容器中

docker cp /root/nginx.conf b595781ab635:/etc/nginx/nginx.conf

8.6.3、重启nginx容器,nginx服务。

docker restart b595781ab635

docker exec -it b595781ab635 /bin/bash

/usr/sbin/nginx

8.7、查看实现效果
8.7.1、查询haproxy容器的输出

for i in seq 1 3;do curl 10.0.3.139;done

Tomcat1 this is Tomcat1
</body>
Tomcat2 this is Tomcat2
</body>
Tomcat1 this is Tomcat1
</body>
8.7.2、网页访问nginx的haproxy代理,如图8-3、8-4所示

图8-3 访问nginx代理

图8-4 访问nginx代理
通过访问的结果可以看出,我们访问nginx代理站点,能够访问Tomcat1和Tomcat2的服务,实现的负载均衡的效果。

猜你喜欢

转载自blog.csdn.net/qq_28513801/article/details/83512159
今日推荐