+++
date = "2018-06-05T12:30:05+08:00"
title = "rstrt部署文档"
categories = ["doc"]
tags = ["docker"]
toc = true
+++
rstrt 部署文档
开发环境
开发环境采用docker-compose 对服务进行编排(网络使用host模式),测试环境使用k8s 对服务进行编排实现水平扩容
jenkins 部署 集成maven SonarQube
1.下载安装包
wget http://mirrors.jenkins.io/war/latest/jenkins.war -P /data/src/
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz -P /data/src/
2.解压jenkins和maven到 /data/app 目录下
3. sh /data/bin/start-jenkins.sh 运行jenkins启动脚本
cat /data/bin/start-jenkins.sh
#!/bin/bash
export JENKINS_HOME=/data/jenkins_home/ //设定jenkinhome
export MAVEN_HOME=/data/app/maven
export PATH=$PATH:$MAVEN_HOME/bin //传入maven 环境变量
nohup java -jar /data/app/jenkins/jenkins.war --httpPort=58080 >> /data/logs/jenkins.log & //指定启动参数 日志统一输出到jenkins.log
// 默认数据存放在JENKINS_HOME下 浏览器打开 <ip>:<port> 按照提示安装
3.SonarQube 部署
git clone https://github.com/Hello-Nemo/docker-SonarQube.git /data/app/SonarQube
cd /data/app/SonarQube && docker-compose up -d // 进入到SonarQube 并使用docker-compose 运行SonarQube 账号密码配置对应在docker-compose.yml 里面
4.maven 配置
1./data/app/maven/conf/settings.xml maven配置文件中添加如下配置
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:postgresql://192.168.110.36:5432/sonar?useUnicode=true&characterEncoding=utf8</sonar.jdbc.url>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
<sonar.host.url>http://192.168.110.36:9001</sonar.host.url>
</properties>
</profile>
2.Jenkins编译项目时添加参数mvn sonar:sonar 执行完编译后会推送数据到sonar
3.访问sonar url 查看项目情况 http://192.168.110.36:9001
jenkin 设置说明
1.git配置拉去dev 分支
2.设置poll scm H/2 * * * * 每两分钟拉去一次
3.新增服务
Jenkins 新建job 更改 git地址 分支为dev
jenkins 服务器新建文件夹 mkdir /data/jenkins_home/docker/{services} services对应服务名 jenkins的任务名
开发服务 vim /data/app/docker-compose-app.yml 新增{services} 更改service名字 和服务映射的端口
{services}:
image: harbor.youngblog.cc/rtst-office/{services}:5
ports:
- "17461:17461"
environment:
JAVA_OPTS: "-Xms512m -Xmx1024m"
network_mode: host
4.执行jenkins 构建 第一次可能不会成功 可以再构建一次
elk部署
cd /data/app/docker-elk
vim elasticsearch/config/elasticsearch.yml //es 配置文件按照自己的实际情况修改
docker-compose up -d //启动elk
cat docker-compose.yml //docker-compose 文件解释
services: //固定写法 下面包含服务的编排信息
elasticsearch: //elasticsearch服务
build: //获取镜像方式为 通过dockerfile build 也直接直接写镜像
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes: //docker 挂载 卷
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
ports: //docker隐射端口
- "9200:9200"
- "9300:9300"
environment: //java_ops 设置
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
network_mode: "host" //docker网络模式
...... //其他服务同上
fastdfs 部署
1.cd /data/app/fastdfs/ && docker pull qbanxiaoli/fastdfs
docker-compose up -d //部署
2.测试
docker exec -it fastdfs bash //进入容器
echo "Hello FastDFS!">1.html
fdfs_test /etc/fdfs/client.conf upload 1.html
获取到返回数值
3.docker-compose 文件解释
version: '3.0'
services:
fastdfs:
build: .
image: qbanxiaoli/fastdfs
restart: always
container_name: fastdfs
ports: //暴露端口
- "80:80"
- "22122:22122"
- "23000:23000"
environment:
# nginx服务端口,默认8080端口,可修改
- WEB_PORT=80
# tracker_server服务端口,默认22122端口,可修改
- FDFS_PORT=22122
# fastdht服务端口,默认11411端口,可修改
- FDHT_PORT=11411
# docker所在主机的IP地址,默认使用eth0网卡的地址
- IP=192.168.110.232
volumes:
# 将本地目录映射到docker容器内的fastdfs数据存储目录,将fastdfs文件存储到主机上,以免每次重建docker容器,之前存储的文件就丢失了。
- ./data:/var/local
# 使docker具有root权限以读写主机上的目录
privileged: true
# 网络模式为host,可不暴露端口,即直接使用主机的网络接口
network_mode: "host"
kafka 部署
cd /data/app/kafka && docker-compose pull //进入应用目录并下载镜像
docker-compose up -d
docker-compose 常用命令
说明:
xxx.yml 为docker-compose 的编排文件 默认为docker-compose.yml 当有多个时 使用-f 指定配置文件
{service} 为服务名 如gateway-service,notice-center等 可以对单个service进行操作 不接service 则是所有
docker-compose -f xxx.yml pull // 下载compose文件中的docker镜像
docker-compose -f xxx.yml up // 运行一组docker 服务 前台运行 ctrl + c 停止
docker-compose -f xxx.yml up -d // 运行一组docker 服务 后台运行
docker-compose -f xxx.yml down // 彻底删除一组docker服务
docker-compose -f xxx.yml ps //查看改组服务的进程 同docker ps
docker-compose -f xxx.yml logs -f {service} //查看日志 接service 则查看该服务的日志 不接参数 则查看所有
docker-compose -f xxx.yml logs --tail=300 -f {service} //同上 从最后300行开始查看
docker-compose -f xxx.yml stop/restart/start {service} //停止 重启 启动 某个服务 不接参数则代表所有
docker-compose -f xxx.yml up -d --force-recreate --no-deps {service} //更新一个服务 重建 并不对依赖镜像进行操作
测试环境
k8s 环境部署
k8s 采用ansible 部署 cd /etc/ansible
vim .hosts //更具自己情况修改对应配置
ansible-playbook 90.setup.yml 执行集群安装 也可分步执行 01-06.*yml
应用转docker
参考:https://github.com/kubernetes/kompose.git
kompose convert -f docker-compose.yml 将docker-compose.yml 转换成 k8s 部署文件
harbor仓库
参考:https://github.com/goharbor/harbor.git
下载离线包 更改harbor.cfg 后直接执行 install.sh
mysql部署
参考:https://blog.youngblog.cc/db/mysql1/
配置文件未做优化 只更改打印慢日志
long_query_time = 1
slow_query_log = 1
slow_query_log_file=/data/mysql/logs/slow-log/slow_log
mongodb部署
mongo 二进制文件直接运行 配置 文件
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.12.tgz -P /data/src
cat /data/app/mongodb/mongod.conf
systemLog:
destination: file
path: "/data/app/mongodb/mongod.log"
logAppend: true
storage:
dbPath: /data/app/mongodb/db
journal:
enabled: true
directoryPerDB: true
processManagement:
fork: true
net:
bindIp: 0.0.0.0
port: 27017
#replication:
# replSetName: rs01
security:
#authorization: disabled
authorization: enabled
k8s 常用命令
备注: 所有命令默认获取namespace 为default 下面的资源 可以试用参数 --namespace=kube-system 获取k8s 的系统资源 如: kubectl get --namespace=kube-system service
所有命令都加入自动补全 按两次tab键 即可
kubectl get pod //获取pod
kubectl get service //获取service
kubectl get node //获取k8s 集群的node
kubectl get deployment //获取部署任务
kubectl logs --tail=300 -f config-server-79b476995b-j7849 //查看pod 日志 --tail=300 查看最后300行 -f 持续输出
kubectl describe pod redis-7789ddc446-2m88 //查看redis pod 的详细信息 如果改pod 不能正常创建 该命令非常有用
kubectl cluster-info //获取集群信息
kubectl create -f dir/file //根据文件创建 对应的服务 可以接文件创建文件编写的服务 接文件夹则创建改文件夹下所有的服务
kubectl delete -f dir/file //删除 对应服务
kubectl run test --rm -it --image=alpine /bin/sh //创建一个容器 并进入容器 sh
//创建k8s 的一个字典 此处创建为登录harbor的字典 用于拉去私有仓库的镜像
kubectl create secret docker-registry regcred --docker-server=harbor.youngblog.cc --docker-username=admin --docker-password=Harbor12345 --docker-email=younglinuxer@gmail.com
新增应用
1.jenkins 新增任务 更改git 仓库 分支等 job_name == service_name
2.测试服务器(192.168.110.232)新增对应服务的文件
cd /data/app/kubernetes/deployment
cp base_service-deployment.yaml {services}-deployment.yaml
vim {services}-deployment.yaml 将base_service 改为{services} 端口对应servics 的端口
3.jenkins 服务器新建文件夹 mkdir /data/jenkins_home/docker/{services} services对应服务名 jenkins的任务名
3.jenkins 执行构建 构建成功后 kubectl get pod 查看是否有该服务