欢迎加入王导的VIP学习qq群:==>932194668<==
基础架构
主机名 | 角色 | ip |
---|---|---|
HDSS7-11.host.com | k8s代理节点1,zk1 | 10.4.7.11 |
HDSS7-12.host.com | k8s代理节点2,zk2 | 10.4.7.12 |
HDSS7-21.host.com | k8s运算节点1,zk3 | 10.4.7.21 |
HDSS7-22.host.com | k8s运算节点2,jenkins | 10.4.7.22 |
HDSS7-200.host.com | k8s运维节点(docker仓库) | 10.4.7.200 |
部署zookeeper
安装jdk1.8(3台zk角色主机)
1 | [root@hdss7-11 src]# ls -l|grep jdk |
安装zookeeper(3台zk角色主机)
zk下载地址
zookeeper
解压、配置
1 | [root@hdss7-11 src]# ls -l|grep zoo |
注意:各节点zk配置相同。
myid
HDSS7-11.host.com
上:
1 | 1 |
HDSS7-12.host.com
上:
1 | 2 |
HDSS7-21.host.com
上:
1 | 3 |
做dns解析
HDSS7-11.host.com
上
1 | zk1 60 IN A 10.4.7.11 |
依次启动
1 | [root@hdss7-11 opt]# /opt/zookeeper/bin/zkServer.sh start |
部署jenkins
准备镜像
在运维主机下载官网上的稳定版(这里下载2.164.1)
1 | [root@hdss7-200 ~]# docker pull jenkins/jenkins:2.164.1 |
自定义Dockerfile
在运维主机HDSS7-200.host.com
上编辑自定义dockerfile
1 | FROM harbor.od.com/public/jenkins:v2.164.1 |
这个Dockerfile里我们主要做了以下几件事
- 设置容器用户为root
- 设置容器内的时区
- 将ssh私钥加入(使用git拉代码时要用到,配对的公钥应配置在gitlab中)
- 加入了登录自建harbor仓库的config文件
- 修改了ssh客户端的
- 安装一个docker的客户端
生成ssh密钥对:
1 | [root@hdss7-200 ~]# ssh-keygen -t rsa -b 2048 -C "stanley.wang.m@qq.com" -N "" -f /root/.ssh/id_rsa |
1 | { |
1 | #!/bin/sh |
制作自定义镜像
1 | [root@hdss7-200 jenkins]# ls -l |
准备共享存储
运维主机,以及所有运算节点上:
1 | # yum install nfs-utils -y |
- 配置NFS服务
运维主机HDSS7-200.host.com
上:
1 | /data/nfs-volume 10.4.7.0/24(rw,no_root_squash) |
- 启动NFS服务
运维主机HDSS7-200.host.com
上:
1 | [root@hdss7-200 ~]# mkdir -p /data/nfs-volume |
准备资源配置清单
运维主机HDSS7-200.host.com
上:
1 | [root@hdss7-200 k8s-yaml]# mkdir /data/k8s-yaml/jenkins && mkdir /data/nfs-volume/jenkins_home && cd /data/k8s-yaml/jenkins |
vi deployment.yaml
1 | kind: Deployment |
vi svc.yaml
1 | kind: Service |
vi ingress.yaml
1 | kind: Ingress |
应用资源配置清单
任意一个k8s运算节点上
1 | [root@hdss7-21 ~]# kubectl create namespace infra |
解析域名
HDSS7-11.host.com
上
1 | jenkins 60 IN A 10.4.7.10 |
浏览器访问
页面配置jenkins
初始化密码
1 | [root@hdss7-200 secrets]# cat initialAdminPassword |
安装插件
设置用户
完成安装
使用admin登录
安装Blue Ocean插件
- Manage Jenkins
- Manage Plugins
- Available
- Blue Ocean
调整安全选项
- Manage Jenkins
- Configure Global Security
- Allow anonymous read access
配置New job
create new jobs
Enter an item name
dubbo-demo
Pipeline -> OK
Discard old builds
Days to keep builds : 3
Max # of builds to keep : 30This project is parameterized
Add Parameter -> String Parameter
Name : app_name
Default Value :
Description : project name. e.g: dubbo-demo-serviceAdd Parameter -> String Parameter
Name : image_name
Default Value :
Description : project docker image name. e.g: app/dubbo-demo-serviceAdd Parameter -> String Parameter
Name : git_repo
Default Value :
Description : project git repository. e.g: https://gitee.com/stanleywang/dubbo-demo-service.gitAdd Parameter -> String Parameter
Name : git_ver
Default Value :
Description : git commit id of the project.Add Parameter -> String Parameter
Name : add_tag
Default Value :
Description : project docker image tag, date_timestamp recommended. e.g: 190117_1920Add Parameter -> String Parameter
Name : mvn_dir
Default Value : ./
Description : project maven directory. e.g: ./Add Parameter -> String Parameter
Name : target_dir
Default Value : ./target
Description : the relative path of target file such as .jar or .war package. e.g: ./dubbo-server/targetAdd Parameter -> String Parameter
Name : mvn_cmd
Default Value : mvn clean package -Dmaven.test.skip=true
Description : maven command. e.g: mvn clean package -e -q -Dmaven.test.skip=trueAdd Parameter -> Choice Parameter
Name : base_image
Default Value :- base/jre7:7u80
- base/jre8:8u112
Description : project base image list in harbor.od.com.
Add Parameter -> Choice Parameter
Name : maven
Default Value :- 3.6.0-8u181
- 3.2.5-6u025
- 2.2.1-6u025
Description : different maven edition.
Pipeline Script
1 | pipeline { |
最后的准备工作
检查jenkins容器里的docker客户端
进入jenkins的docker容器里,检查docker客户端是否可用。
1 | [root@hdss7-22 ~]# docker exec -ti 52e250789b78 bash |
检查jenkins容器里的SSH key
进入jenkins的docker容器里,检查ssh连接git仓库,确认是否能拉到代码。
1 | [root@hdss7-22 ~]# docker exec -ti 52e250789b78 bash |
部署maven软件
maven官方下载地址
在运维主机HDSS7-200.host.com
上二进制部署,这里部署maven-3.6.0版
1 | [root@hdss7-22 src]# ls -l |
设置国内镜像源
1 | <mirror> |
其他版本略
制作dubbo微服务的底包镜像
运维主机HDSS7-200.host.com
上
- 自定义Dockerfile
1 | FROM stanleyws/jre8:8u112 |
vi config.yml
1 | \--\- |
1 | wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O jmx_javaagent-0.3.1.jar |
vi entrypoint.sh (不要忘了给执行权限)
1 | #!/bin/sh |
- 制作dubbo服务docker底包
1 | [root@hdss7-200 jre8]# ls -l |
注意:jre7底包制作类似,这里略
交付dubbo微服务至kubernetes集群
dubbo服务提供者(dubbo-demo-service)
通过jenkins进行一次CI
打开jenkins页面,使用admin登录,准备构建dubbo-demo
项目
点Build with Parameters
依次填入/选择:
app_name
dubbo-demo-service
image_name
app/dubbo-demo-service
git_repo
git_ver
master
add_tag
190117_1920
mvn_dir
/
target_dir
./dubbo-server/target
mvn_cmd
mvn clean package -Dmaven.test.skip=true
base_image
base/jre8:8u112
maven
3.6.0-8u181
点击Build
进行构建,等待构建完成。
test $? -eq 0 && 成功,进行下一步 || 失败,排错直到成功
检查harbor仓库内镜像
准备k8s资源配置清单
运维主机HDSS7-200.host.com
上,准备资源配置清单:
1 | kind: Deployment |
应用资源配置清单
在任意一台k8s运算节点执行:
1 | [root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/dubbo-demo-service/deployment.yaml |
检查docker运行情况及zk里的信息
1 | [root@hdss7-11 ~]# /opt/zookeeper/bin/zkCli.sh -server localhost |
dubbo-monitor工具
准备docker镜像
下载源码
下载到运维主机HDSS7-200.host.com
上
1 | [root@hdss7-200 src]# ls -l|grep dubbo-monitor |
修改配置
1 | dubbo.registry.address=zookeeper://zk1.od.com:2181?backup=zk2.od.com:2181,zk3.od.com:2181 |
制作镜像
准备环境
1
2
3
4[root@hdss7-200 src]# mkdir /data/dockerfile/dubbo-monitor
[root@hdss7-200 src]# cp -a dubbo-monitor/* /data/dockerfile/dubbo-monitor/
[root@hdss7-200 src]# cd /data/dockerfile/dubbo-monitor/
[root@hdss7-200 dubbo-monitor]# sed -r -i -e '/^nohup/{p;:a;N;$!ba;d}' ./dubbo-monitor-simple/bin/start.sh && sed -r -i -e "s%^nohup(.*)%exec \1%" ./dubbo-monitor-simple/bin/start.sh准备Dockerfile
/data/dockerfile/dubbo-monitor/Dockerfile 1
2
3
4FROM jeromefromcn/docker-alpine-java-bash
MAINTAINER Jerome Jiang
COPY dubbo-monitor-simple/ /dubbo-monitor-simple/
CMD /dubbo-monitor-simple/bin/start.shbuild镜像
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35[root@hdss7-200 dubbo-monitor]# docker build . -t harbor.od.com/infra/dubbo-monitor:latest
Sending build context to Docker daemon 26.21 MB
Step 1 : FROM harbor.od.com/base/jre7:7u80
---> dbba4641da57
Step 2 : MAINTAINER Stanley Wang
---> Running in 8851a3c55d4b
---> 6266a6f15dc5
Removing intermediate container 8851a3c55d4b
Step 3 : COPY dubbo-monitor-simple/ /opt/dubbo-monitor/
---> f4e0a9067c5c
Removing intermediate container f1038ecb1055
Step 4 : WORKDIR /opt/dubbo-monitor
---> Running in 4056339d1b5a
---> e496e2d3079e
Removing intermediate container 4056339d1b5a
Step 5 : CMD /opt/dubbo-monitor/bin/start.sh
---> Running in c33b8fb98326
---> 97e40c179bbe
Removing intermediate container c33b8fb98326
Successfully built 97e40c179bbe
[root@hdss7-200 dubbo-monitor]# docker push harbor.od.com/infra/dubbo-monitor:latest
The push refers to a repository [harbor.od.com/infra/dubbo-monitor]
750135a87545: Pushed
0b2b753b122e: Pushed
5b1f1b5295ff: Pushed
d54f1d9d76d3: Pushed
8d51c20d6553: Pushed
106b765202e9: Pushed
c6698ca565d0: Pushed
50ecb880731d: Pushed
fddd8887b725: Pushed
42052a19230c: Pushed
8d4d1ab5ff74: Pushed
190107_1930: digest: sha256:73007a37a55ecd5fd72bc5b36d2ab0bb639c96b32b7879984d5cdbc759778790 size: 2617
解析域名
在DNS主机HDSS7-11.host.com
上:
1 | dubbo-monitor IN A 60 10.9.7.10 |
准备k8s资源配置清单
运维主机HDSS7-200.host.com
上
vi /data/k8s-yaml/dubbo-monitor/deployment.yaml
1 | kind: Deployment |
vi /data/k8s-yaml/dubbo-monitor/svc.yaml
1 | kind: Service |
vi /data/k8s-yaml/dubbo-monitor/ingress.yaml
1 | kind: Ingress |
应用资源配置清单
在任意一台k8s运算节点执行:
1 | [root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/dubbo-monitor/deployment.yaml |
浏览器访问
dubbo服务消费者(dubbo-demo-consumer)
通过jenkins进行一次CI
打开jenkins页面,使用admin登录,准备构建dubbo-demo
项目
点Build with Parameters
依次填入/选择:
app_name
dubbo-demo-consumer
image_name
app/dubbo-demo-consumer
git_repo
git@gitee.com:stanleywang/dubbo-demo-web.git
git_ver
master
add_tag
190117_1950
mvn_dir
/
target_dir
./dubbo-client/target
mvn_cmd
mvn clean package -Dmaven.test.skip=true
base_image
base/jre8:8u112
maven
3.6.0-8u181
点击Build
进行构建,等待构建完成。
test $? -eq 0 && 成功,进行下一步 || 失败,排错直到成功
检查harbor仓库内镜像
解析域名
在DNS主机HDSS7-11.host.com
上:
1 | demo IN A 60 10.9.7.10 |
准备k8s资源配置清单
运维主机HDSS7-200.host.com
上,准备资源配置清单
vi /data/k8s-yaml/dubbo-demo-consumer/deployment.yaml
1 | kind: Deployment |
vi /data/k8s-yaml/dubbo-demo-consumer/svc.yaml
1 | kind: Service |
vi /data/k8s-yaml/dubbo-demo-consumer/ingress.yaml
1 | kind: Ingress |
应用资源配置清单
在任意一台k8s运算节点执行:
1 | [root@hdss7-21 ~]# kubectl apply -f http://k8s-yaml.od.com/dubbo-demo-consumer/deployment.yaml |
检查docker运行情况及dubbo-monitor
浏览器访问
http://demo.od.com/hello?name=wangdao
实战维护dubbo微服务集群
更新(rolling update)
- 修改代码提git(发版)
- 使用jenkins进行CI
- 修改并应用k8s资源配置清单
或者在k8s的dashboard上直接操作
扩容(scaling)
- k8s的dashboard上直接操作