本文通过Docker + Gitlab + Gitlab CI实现容器的自动化部署。
环境如下:
ip | role | domain |
---|---|---|
192.168.1.51 | prod manager | none |
192.168.1.52 | prod worker1 | none |
192.168.1.53 | prod worker2 | none |
~ | ~ | ~ |
192.168.1.54 | dev manager | none |
192.168.1.55 | dns/dev worker1 | none |
192.168.1.56 | dev worker2 | none |
~ | ~ | ~ |
192.168.1.57 | gitlab server | gitlab.lzxlinux.cn |
192.168.1.59 | harbor server | harbor.lzxlinux.cn |
注意:为了方便后面实验,建议自定义的域名不要与外部域名冲突,否则在连接外网情况下容易解析错误。
环境准备
- 全部进行准备工作:
# systemctl stop firewalld && systemctl disable firewalld
# setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
# yum install -y epel-release vim lrzsz net-tools gcc rsync wget unzip curl git bash-completion && yum update -y && source /etc/profile
- 全部安装docker:
# curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
# yum makecache fast
# yum install -y docker-ce
# systemctl start docker && systemctl enable docker
提高docker pull速度
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
# systemctl restart docker
- 全部配置登录harbor:
# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=harbor.lzxlinux.cn
# systemctl daemon-reload && systemctl restart docker.service
- 全部配置dns:
# vim /etc/resolv.conf #增加一行,且放在公网dns前面
nameserver 192.168.1.55 #该ip为dns容器所在主机ip
nameserver 223.5.5.5
- 所有节点注册runner:
不只是manager节点需要注册runner,其余节点(包括harbor服务器)也需要注册runner,gitlab服务器不需要注册runner。
runner是shell类型,下面以192.1681.1.54注册runner为例。
# echo '54.153.54.194 packages.gitlab.com' >> /etc/hosts
# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# yum install -y gitlab-ci-multi-runner
# gitlab-ci-multi-runner status
gitlab-runner: Service is running!
# usermod -aG docker gitlab-runner
# systemctl restart docker
# gitlab-ci-multi-runner restart
# mkdir -p /etc/gitlab/ssl
# scp root@gitlab.lzxlinux.cn:/etc/gitlab/ssl/gitlab.lzxlinux.cn.crt /etc/gitlab/ssl
# gitlab-ci-multi-runner register \
--tls-ca-file=/etc/gitlab/ssl/gitlab.lzxlinux.cn.crt \
--url "https://gitlab.lzxlinux.cn/" \
--registration-token "4kr9ZmLMWasYxqB2tSzQ" \
--name "dev-runner" \
--tag-list "dev" \
--run-untagged="false" \
--locked="false" \
--executor "shell"
# gitlab-ci-multi-runner list
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
dev-runner Executor=shell Token=uD6SbCHWc-AKp94eprRF URL=https://gitlab.lzxlinux.cn/
搭建Swarm集群
生产环境和测试环境各搭建一个swarm集群。
生产环境的swarm集群成员包括192.168.1.51、192.168.1.52、192.168.1.53,其中192.168.1.51为manager;
测试环境的swarm集群成员包括192.168.1.54、192.168.1.55、192.168.1.56,其中192.168.1.54为manager。
Flask项目部署
Flask实现Ansible和Ansible-Playbook的配置+部署系统,同时带有简单的服务器管理系统和认证系统。
下面分别在两个manager节点部署这个flask项目,该项目包含两个服务:mysql和flask-ansible。
在192.168.1.54这个manager节点部署演示,192.168.1.51上部署与之一致。
- 创建新的群组及项目:
新建一个群组Flask
,同时新建一个项目flask-ansible
,
- 创建secret:
# echo '123456789' > mysql_password
# docker secret create -l mysql_root_password password mysql_password
# rm -f mysql_password
- 克隆项目:
# cd /software
# mkdir flask && cd flask
# git -c http.sslVerify=false clone https://gitlab.lzxlinux.cn/flask/flask-ansible.git
- 修改代码:
# vim flask-ansible/config.yml
mysql:
host: db
port: 3306
username: lzxlinux
password: lzxlinuxpwd
database: devops
# vim flask-ansible/app.py #增加ip及端口
if __name__ == '__main__':
app.run(
host='0.0.0.0',
port=5000
)
# vim flask-ansible/Flask-Ansible.sql #修改账号及密码
insert into user (username,password) values ('lzxlinux', md5('lzxlinuxpwd'));
- 构建
flas