服务部署-Docker,Swarm,Portainer篇
docker——》swarm——》portainer
服务器 IP | hostName | 节点 |
---|---|---|
172.22.88.111 | app01 | swarm mananger 管理节点 |
172.22.88.112 | app02 | work node 普通节点 |
一、安装Docker
1、安装docker
# 1、安装docker依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 2、设置docker安装源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 3、安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
# 4、加入开机自启
sudo systemctl enable docker
2、关闭SElinux
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
# 1、查看当前SELinux的应用模式
getenforce
# 2、查看SELinux状态,enabled为开启状态
/usr/sbin/sestatus -v
# 3、将SELINUX=enforcing改为SELINUX=disabled
vi /etc/selinux/config
# 4、使配置文件生效
systemctl daemon-reload
# 5、重启docker
systemctl restart docker
二、Swarm安装和集群创建
1、关闭防火墙或添加白名单
关闭防火墙(2选1)
# 1、关闭防火墙
systemctl stop firewalld.service
# 2、禁止开机自启
systemctl disable firewalld.service
# 添加白名单
sudo firewall-cmd --permanent --zone=trusted --add-source= 其他work节点IP
# 如果未关闭防火墙,则开放端口
2、修改docker监听端口
Swarm是通过监听2375端口进行通信的。所有主机节点docker需要开启2375监听,docker版本不同,配置方式不一样。
# 修改配置
vim /lib/systemd/system/docker.service
在ExecStart修改为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd:// --default-ulimit nofile=1024000 --default-ulimit memlock=-1 --default-ulimit core=-1 --containerd=/run/containerd/containerd.sock --insecure-registry 私库地址
# 使配置文件生效
systemctl daemon-reload
# 重启docker
systemctl restart docker
3、swarm安装及初始化
# 镜像拉取(有私有仓库则修改地址)
docker pull swarm
# 初始化swarm(创建swarm集群,生成唯一token)
docker swarm init --advertise-addr 管理节点的IP
其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系
# 执行后会输出包含其它节点如何加入集群的命令
Swarm initialized: current node (chr59ufheiq7ryc9992rk7v1m) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-12e1xjr67o7jo3d199tm451gqzp6ngq1k2nf1kle7k5oxhbgh5-dy6mrdjh1ohw36vrvpxn9mqk4 172.40.1.29:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# 其他节点加入集群
docker swarm join --token SWMTKN-1-12e1xjr67o7jo3d199tm451gqzp6ngq1k2nf1kle7k5oxhbgh5-dy6mrdjh1ohw36vrvpxn9mqk4 172.40.1.29:2377
4、增加并切换用户角色组
# 增加用户组
sudo groupadd docker
# 将当前登录用户添加到用户组中
sudo gpasswd -a $USER docker
# 切换当前用户的登录群组
newgrp docker
三、安装portainer
1、创建portainer-stack.yml文件(私有仓库注意镜像地址,3及以上版本,多节点管理,高可用)
version: '3'
services:
portainer:
image: portainer/portainer
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/data/portainer:/data"
deploy:
placement:
constraints: [node.role == manager] # 控制管理界面部署在manager上
replicas: 1
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.2"
memory: 200M
labels: [svc=portainer]
ports:
- 9000:9000
当前data的挂载目录为 /data/portainer,进行创建
2、启动portainer服务
docker stack deploy -c portainer-stack.yml portainer
Stack:从体系结构上来讲,Stack 位于 Docker 应用层级的最顶端。Stack 基于服务进行构建,而服务又基于容器
3、访问portainer并修改密码(xxx为集群的任意一台ip,swarm会自动做负载均衡)
访问http://ip:port
设置用户名,密码