一、背景
最近使用rancher2.5.5部署Redis主从复制时,发现Rancher会产生很多iptables规则,导致Redis主从复制功能在部署Rancher的机器上无法使用,因为我对Rancher和K8s的理解仅限于网络架构和使用,对底层没有深入的了解。这种网络冲突问题短期内无法解决;
所以我用protainer代替rancher管理docker的模式。这个portainer比较轻,在施工过程中花了几个小时学习。现在我们来谈谈整个过程,尽量给大家一些参考。
二、操作步骤- 安装Portiner
- 管理节点
- 部署容器
安装Portiner的方法有很多,但我总是喜欢用最简单的方法来完成我需要做的事情,所以我会用docker来构建它。
3.1 部署docker部署docker的方法非常简单,只需执行简单的操作容器命令,如下所示。
docker run -d \-p 9000:9000 \-p 8000:8000 \--restart always \-v /var/run/docker.sock:/var/run/docker.sock \-v /opt/docker/portainer-ce/data:/data \--name portainer-ce portainer/portainer-ce
命令反映了物理机器的8000端口和9000端口到容器中的8000端口和9000端口,并反映了宿主机的docker通信文件/var/run/docker.sock
此外,为了持续部署,目录也映射到容器中。/opt/docker/portainer-ce/data
映射到容器中/data
命令执行完成后,返回结果信息如下图所示
从上图可以看出,docker容器已经成功运行。接下来,我需要验证服务是否正常运行。使用浏览器访问URLhttp://127.0.0.1:9000/
地址,结果如下所示
Portainer系统可以在上图中访问, 说明系统安装成功。
3.2 节点初始化现在我需要设置管理员的帐户密码。在这里,在我简单地填写密码并确认密码后,单击Create user
按钮可以创建管理员账户。
管理员账户设置完成后,需要初始化,如下图所示
上图中有三个选项,我选择使用Portainer管理本地docker程序,点击Connect
初始化操作可以通过按钮完成。
初始化操作完成后,即可进入Portainer的工作界面,如下图所示
在上图中,我们可以看到Portainer系统中已经有了一个local
我们可以点击本地节点进入节点管理,如下图所示
Portainer系统可以在上图中列出local
节点的 Stack、集装箱信息、镜像信息、磁盘信息、网络信息等,这里我随意点击Containers
如下图所示,可以看到容器列表
本地docker现在可以控制了,但我对此并不满意,我需要控制其他机器。
4.1 开始添加节点Portainer系统中有一个endpoints
菜单中可以添加多个节点,如下图所示
从上图可以看出,已经有一个了local
列表上方有一个节点Add endpoint
按钮,点击按钮到添加节点的详细信息页面,如下图所示
在上图中可以看到五个选项。在这里,我选择最简单的方法使用它们Docker API
进行控制。
这种方法需要在节点的docker启动程序中添加参数,所以我需要先登录到节点服务器。ssh登录服务器的命令如下所示
ssh root@xxx.xxx.xxx.xxx
命令执行后,返回如下图所示
在上图中可以看到已经进入节点的服务器,然后需要编辑docker启动的配置文件,命令如下所示
vim /usr/lib/systemd/system/docker.service
执行命令后,可以在vim编辑界面上修改配置,如下图所示
将远程访问代码添加到docker的启动命令行中,代码如下所示
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
复制代码 /usr/bin/dockerd
程序后面如下图所示
在保存配置文件后,需要重启docker服务,重启docker的命令如下所示
systemctl daemon-reload && systemctl restart docker
重启docker后,一切正常就完成了
4.3 验证端口状态查看docker的配置信息,命令如下所示
docker info
命令执行后,返回的信息如下图所示
从上图可以看出,docker给出了warning的警告提示,告诉我打开远程访问会有安全风险,这里暂时忽略了,但这个提示确实打开了远程访问的功能
此外,可以通过打开端口来验证打开是否成功。命令如下所示
netstat -ntl
命令执行后,将返回当前主机的端口开放,如下图所示
可以在上图中看到2375
端口已成功开启, 说明节点本身打开docker是可以的;
但是Portainer通过ip访问这个节点时,要考虑网络中的防火墙是否会屏蔽这个端口,这里可以使用nmap
工具检测节点的端口是否可以访问。现在我回到Portainer系统的命令终端,用nmap工具检测。命令如下所示
nmap -p 2375 xxx.xxx.xxx.xxx
命令执行后,2375是否打开将返回。执行结果如下图所示
节点可以在上图中看到2375
端口是打开的,可以连接。
然后回到浏览器窗口,如下图所示
在上图所示的网页中,通过URL填写节点的IP地址和端口,然后单击Add endpodint
按钮可以添加节点,添加成功会有相应的提示,如下图所示
如上图所示,Portainer系统提示添加节点已成功,节点列表可见此节点。
五、部署容器添加节点完成后,我将在远程节点中部署我的容器;
5.1 部署单个容器回到Portainer主页,在主页上可以看到刚刚添加的节点信息,如下图所示
在上图中选择刚刚添加的节点,然后进入容器菜单选项,您可以看到该节点的容器列表,如下图所示
上图所示页面列表上方有一个Add container
点击此按钮后,将调整到添加容器详细信息页面
在上图所示的页面中,需要填写docker镜像地址。在这里,我随意选择了nginx镜像,并将主机的8888端口映射到容器的80端口。提交这些信息后,portainer系统会告诉您容器运行是否成功,如下图所示
在上图中,我们可以看到容器已经成功运行,并跳转到容器列表中。接下来,我们可以访问该节点对应的8888端口,以验证该服务是否可用。打开浏览器,然后在地址栏中填写URLhttp://xxx.xxx.xxx.xxx:8888/
,访问后返回的结果如下图所示
可以在上图中看到nginx
服务已成功运行;
Portainer系统除了在容器列表页面上部署容器外,还支持使用docker-compose进行部署,在Portainer系统中称为stacks
,在菜单栏中选择此项,可以输入docker-compose服务列表,如下图所示
列表上方有一个Add stack
点击此按钮添加按钮docker-compose
服务,如下图所示
在上图所示的页面中,我将被要求填写docker-compose信息。在这里,我准备了Redis服务docker-compose
配置代码如下所示
version: '3.5'services: redis: image: "redis:latest" container_name: redis_test command: redis-server ports: - "16379:16379"
填写页面后,提交Portainer的Portainer将部署在相应的节点docker-compose
服务,如下图所示
部署成功后,您可以在stacks列表中看到刚刚部署的服务。您还可以点击列表中的服务名称,输入详细信息页面进行查看和修改,如下图所示
在上图中,您可以看到该服务的具体操作容器,也可以终止或删除该容器。
这篇文章也是对Portainer的初步探索,更详细的还需要你孜孜不倦的探索。