集群搭建

257 阅读6分钟

1.服务器准备

(1)服务器规划

本地搭建测试时,以下各个节点配置为最低配置,本机内存推荐配置24GB以上。

名字 | IP | 内存 | 说明
---|---|---|---
hcf_node1 | 192.168.199.132 | 4G | 节点1服务器
hcf_node2 | 192.168.199.133 | 4G | 节点2服务器
hcf_rep | 192.168.199.134 | 4G | 资源服务器(私有仓库、配置中心、Git仓库)
hcf_images | 182.254.179.** | 2G | 能访问公网的服务器或电脑,用于构建镜像,这里直接用了腾讯云服务器

(2)基础设置

  • 修改主机名(仅用于标识,可忽略)
    默认的主机名是localhost,修改三台服务器的主机名
    hostnamectl set-hostname hcf-node1
    hostnamectl set-hostname hcf-node2
    hostnamectl set-hostname hcf-rep
    
    # 重启服务器
    reboot
    
  • 关闭selinux
    # 修改SELINUX的值为disabled
    vi /etc/selinux/config
    
    # 重启服务器
    reboot
    

(3)确定工作目录

  • 安装包目录
    新建/hcf目录并赋权,后面系统部署相关的安装包全部放在/app目录下即可。
    mkdir /hcf
    chmod -R 777 /hcf
    
  • 工作目录
    使用df -h命令查看存储区域挂载情况,项目实践过程中,服务器大多都是100G系统盘另外挂载一块较大的存储区域,在此块较大的存储盘上创建工作目录,用于存放HCF相关介质以及作为docker工作目录。
    # 本地测试建在/下即可
    # 创建docker工作目录
    mkdir -p /app/docker
    # 创建存储部署介质的目录
    mkdir /app/hcf
    chmod -R 777 /app
    
    如果误将工作目录建到了系统盘上,因系统盘一般较小,后面有可能存储空间不够 例如该台服务器,有一块200GB的存储空间挂载到了/sdb目录下,则应该新建/sdb/app/docker目录作为docker工作目录,新建/sdb/app/hcf目录用于存储系统部署介质。

2.离线安装Docker

(1)上传一键安装脚本(内网安装)

  • 将《1.docker_install.zip》上传/hcf目录下
  • 解压
unzip 1.docker_install.zip
rm -rf 1.docker_install.zip

(2)执行安装脚本

cd 1.docker_install
sh install.sh

(3)在线安装Docker(内网忽略此步)

  • 配置docker开机启动(在线安装)
systemctl enable docker.service
systemctl restart docker.service

3.添加docker配置文件

在hcf_node1、hcf_node2、hcf_rep三台服务器添加配置文件。
Docker Engine V1.12 之后版本,用户可以创建daemon.json文件对Docker Engine进行配置和调整。

打开 /etc/docker 目录(目录不存在则创建该目录)
编辑 daemon.json 文件(文件不存在则创建该文件)

// 配置docker工作目录为/app/docker(1.(3)确定的工作目录,默认工作目录为/var/lib/docker)
// 配置私有仓库地址,还未搭建私有仓库,所以这里随便写一个ip:port即可
// 配置阿里云镜像加速地址(如果服务器在内网中,则没有必要配置此项)

{
    "data-root":"/app/docker",
    "insecure-registries":["127.0.0.1:5000"],
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn", "https://9cpn8tt6.mirror.aliyuncs.com"]
}

重启docker

systemctl restart docker.service

4.配置防火墙

请不要直接暴力关闭防火墙

# 设置防火墙开机启动并启动防火墙
systemctl enable firewalld
systemctl start firewalld

# 在两台节点服务器执行以下语句(集群网络入口)
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=433/tcp

# 在hcf_node1服务器执行以下语句(rancher的管理端口)
firewall-cmd --permanent --zone=public --add-port=9043/tcp
firewall-cmd --permanent --zone=public --add-port=9080/tcp
firewall-cmd --permanent --zone=public --add-port=15672/tcp

# 在hcf_rep服务器执行以下语句(apollo的管理端口、apollo数据库端口)
firewall-cmd --permanent --zone=public --add-port=8170/tcp
firewall-cmd --permanent --zone=public --add-port=8180/tcp
firewall-cmd --permanent --zone=public --add-port=8190/tcp
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --permanent --zone=public --add-port=8081/tcp
firewall-cmd --permanent --zone=public --add-port=10080/tcp

# 一般节点服务器间的网络需要完全打通,如果一定有防火墙限制,则在两台节点服务器执行以下语句
firewall-cmd --permanent --zone=public --add-port=2376/tcp
firewall-cmd --permanent --zone=public --add-port=2379/tcp
firewall-cmd --permanent --zone=public --add-port=2380/tcp
firewall-cmd --permanent --zone=public --add-port=8472/udp
firewall-cmd --permanent --zone=public --add-port=4789/udp
firewall-cmd --permanent --zone=public --add-port=9099/tcp
firewall-cmd --permanent --zone=public --add-port=6783/tcp
firewall-cmd --permanent --zone=public --add-port=6783-6784/udp
firewall-cmd --permanent --zone=public --add-port=6443/tcp
firewall-cmd --permanent --zone=public --add-port=10250-10252/tcp
firewall-cmd --permanent --zone=public --add-port=10254/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/tcp
firewall-cmd --permanent --zone=public --add-port=30000-32767/udp

# 重启防火墙
firewall-cmd --reload

5.创建用户并授权

docker命令会使用Unix socket与Docker引擎进行通信,而只有root用户和docker组的用户才可以访问Docker引擎的Unix socket。
出于安全考虑,项目上不会直接使用root用户,所以需要创建用户并加入docker用户组。

#创建用户组
groupadd docker

#新增hcf用户并指定到docker用户组
useradd hcf -g docker
usermod -aG wheel hcf

#设置hcf用户的密码
passwd hcf

#重启服务器
reboot

后面应该全部使用hcf用户进行操作


6.离线安装nexus3

(1)导出nexus3镜像(可忽略)

hcf_images腾讯云服务器执行以下命令将nexus3镜像保存为可以导入的压缩包:

docker pull sonatype/nexus3
docker save sonatype/nexus3 | gzip -c > nexus.tar.gz

(2)导入nexus3镜像

将【2.软件镜像/nexus.tar.gz】上传至hcf_rep服务器的/hcf目录下,执行命令:

docker load --input nexus.tar.gz

(3)运行nexus

在hcf_rep服务器执行以下命令启动nexus

# 创建目录存储nexus数据
mkdir -p /app/docker_volume/nexus-data
sudo chmod -R 777 nexus-data
# 运行nexus
docker run --restart=unless-stopped -d -p 5001:5001 -p 8081:8081 -v /app/docker_volume/nexus-data:/nexus-data --name nexus --privileged=true sonatype/nexus3

7.配置nexus(创建docker私有仓库)

(1)登录nexus控制台

  • 浏览器访问 hcf_rep服务器IP:8081
  • 在hcf_rep服务器查看/app/docker_volume/nexus-data/admin.password文件,获取admin用户的密码进行登录
  • 登录后修改密码,设置允许匿名拉取镜像

(2)创建私有仓库

  • Create repository
  • 选择docker(hosted)
  • 填写基本信息
    注意HTTP必须填入5001端口,因为启动这个容器时映射的就是这个端口
  • 点击Create repository
  • 取消docker tocken
  • 检查nexus配置是否正确

(3)配置私有仓库

以上我们已经创建好了私有仓库,地址是:hcf_rep服务器IP:5001

  • 配置私有仓库地址
    编辑hcf_node1、hcf_node2两台节点服务器的/etc/docker/daemon.json文件,配置私有仓库地址,之前我们是随便填了一个。
  • 重启docker
    sudo systemctl restart docker.service
    

(4)测试私有仓库

将【2.软件镜像/busybox.tar.gz】上传至hcf_node1服务器的/app/hcf目录下,将hcf_node1服务器中的busybox镜像上传到私有仓库中。

cd /app/hcf/

# 导入busybox镜像
docker load --input busybox.tar.gz

# 查看本地镜像
docker image ls

# 重命名这个镜像
docker tag busybox:latest 192.168.8.152:5001/hcf/busybox:latest

#登录到镜像仓库
docker login 192.168.8.152:5001

#上传
docker push 192.168.8.152:5001/hcf/busybox:latest