欢迎加入王导的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 : 30
- This project is parameterized 
- Add Parameter -> String Parameter - Name : app_name 
 Default Value :
 Description : project name. e.g: dubbo-demo-service
- Add Parameter -> String Parameter - Name : image_name 
 Default Value :
 Description : project docker image name. e.g: app/dubbo-demo-service
- Add Parameter -> String Parameter - Name : git_repo 
 Default Value :
 Description : project git repository. e.g: https://gitee.com/stanleywang/dubbo-demo-service.git
- Add 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_1920
- Add 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/target
- Add 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=true
- Add 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
 4- FROM jeromefromcn/docker-alpine-java-bash 
 MAINTAINER Jerome Jiang
 COPY dubbo-monitor-simple/ /dubbo-monitor-simple/
 CMD /dubbo-monitor-simple/bin/start.sh
- build镜像 - 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上直接操作
 
        