k8s配置中心实战-多环境交付apollo三组件

目录

1.环境准备工作

先删除infra名称空间中部署的apollo服务

kubectl delete -f http://k8s-yaml.zq.com/apollo-configservice/dp.yaml
kubectl delete -f http://k8s-yaml.zq.com/apollo-adminservice/dp.yaml
kubectl delete -f http://k8s-yaml.zq.com/apollo-portal/dp.yaml

要进行分环境,需要将现有实验环境进行拆分

  1. portal服务,可以各个环境共用,只部署一套
  2. adminservice和configservice必须要分开每个环境一套
  3. zk和namespace也要区分环境

1.1 zk环境拆分

zk拆分最简单,只需要在dns那里修改解析规则即可:

同时添加好apollo、dubbo两个环境的域名解析

vi /var/named/zq.com.zone
zk-test A 10.4.7.11
zk-prod A 10.4.7.12
apollo-testconfig A 10.4.7.10
apollo-prodconfig A 10.4.7.10
dubbo-testdemo A 10.4.7.10
dubbo-proddemo A 10.4.7.10 # 重启服务
systemctl restart named.service

1.2 namespace分环境

分别创建test 和prod两个名称空间

kubectl create ns test
kubectl create ns prod

给新名称空间创建secret授权

kubectl create secret docker-registry harbor \
--docker-server=harbor.zq.com \
--docker-username=harbor \
--docker-password=Harbor12345 \
-n test kubectl create secret docker-registry harbor \
--docker-server=harbor.zq.com \
--docker-username=harbor \
--docker-password=Harbor12345 \
-n prod

1.3 数据库拆分

因实验资源有限,故使用分库的形式模拟分环境

1.3.1 修改初始化脚本并导入

数据库再7.11上哦

分别创建ApolloConfigTestDB和ApolloConfigProdDB

# 复制为新sql
cp apolloconfig.sql apolloconfigTest.sql
cp apolloconfig.sql apolloconfigProd.sql # 替换关键字
sed -i 's#ApolloConfigDB#ApolloConfigTestDB#g' apolloconfigTest.sql
sed -i 's#ApolloConfigDB#ApolloConfigProdDB#g' apolloconfigProd.sql # 导入数据库
mysql -uroot -p123456 < apolloconfigTest.sql
mysql -uroot -p123456 < apolloconfigProd.sql

1.3.2 修改数据库中eureka地址

这里用到了两个新的域名,域名解析已经在添加zk域名那里一起加了

mysql -uroot -p123456

# 1.修改eureka注册中心配置
> update ApolloConfigProdDB.ServerConfig set ServerConfig.Value="http://apollo-prodconfig.zq.com/eureka" where ServerConfig.Key="eureka.service.url";
> update ApolloConfigTestDB.ServerConfig set ServerConfig.Value="http://apollo-testconfig.zq.com/eureka" where ServerConfig.Key="eureka.service.url"; # 2.在portl库中增加支持fat环境和pro环境
> update ApolloPortalDB.ServerConfig set Value='fat,pro' where Id=1; # 3.授权数据库访问用户
> grant INSERT,DELETE,UPDATE,SELECT on ApolloConfigProdDB.* to "apollo"@"10.4.7.%";
> grant INSERT,DELETE,UPDATE,SELECT on ApolloConfigTestDB.* to "apollo"@"10.4.7.%";

1.4 变动原有资源配置启动

1.4.1 修改portal的cm资源配置清单

7.200运维机操作,增加两个新环境的支持

cd /data/k8s-yaml/apollo-portal/
sed -i '$a\ fat.meta=http://apollo-testconfig.zq.com' cm.yaml
sed -i '$a\ pro.meta=http://apollo-prodconfig.zq.com' cm.yaml # 查看结果
apollo-portal]# tail -4 cm.yaml
apollo-env.properties: |
dev.meta=http://apollo-config.zq.com
fat.meta=http://apollo-testconfig.zq.com
pro.meta=http://apollo-prodconfig.zq.com

1.4.2 任意节点应用修改

kubectl apply -f http://k8s-yaml.zq.com/apollo-portal/cm.yaml

2 部署新环境的APOLLO服务

7.200运维机操作,

2.1 先创建出所需目录和文件

cd /data/k8s-yaml
mkdir -p test/{apollo-adminservice,apollo-configservice,dubbo-demo-server,dubbo-demo-consumer}
mkdir -p prod/{apollo-adminservice,apollo-configservice,dubbo-demo-server,dubbo-demo-consumer} # 查看结果
k8s-yaml]# ll {test,prod}
prod:
total 0
drwxr-xr-x 2 root root 6 May 13 22:50 apollo-adminservice
drwxr-xr-x 2 root root 6 May 13 22:50 apollo-configservice
drwxr-xr-x 2 root root 6 May 13 22:50 dubbo-demo-consumer
drwxr-xr-x 2 root root 6 May 13 22:50 dubbo-demo-server test:
total 0
drwxr-xr-x 2 root root 6 May 13 22:50 apollo-adminservice
drwxr-xr-x 2 root root 6 May 13 22:50 apollo-configservice
drwxr-xr-x 2 root root 6 May 13 22:50 dubbo-demo-consumer
drwxr-xr-x 2 root root 6 May 13 22:50 dubbo-demo-server

将之前的资源配置清单cp到对应环境的目录中,便于修改:

cp /data/k8s-yaml/apollo-configservice/* ./test/apollo-configservice/
cp /data/k8s-yaml/apollo-configservice/* ./prod/apollo-configservice/ cp /data/k8s-yaml/apollo-adminservice/* ./test/apollo-adminservice/
cp /data/k8s-yaml/apollo-adminservice/* ./prod/apollo-adminservice/

2.2 部署test环境的configservice

2.2.1 修改configmap资源清单

要修改ns,数据库库名,eureka地址

cd /data/k8s-yaml/test/apollo-configservice/
sed -ri 's#(namespace:) infra#\1 test#g' cm.yaml
sed -i 's#ApolloConfigDB#ApolloConfigTestDB#g' cm.yaml
sed -i 's#apollo-config.zq.com#apollo-testconfig.zq.com#g' cm.yaml

2.2.2 修改dp,ns,inress资源清单

# 1.dp只需要修改namesapce空间
sed -ri 's#(namespace:) infra#\1 test#g' dp.yaml # 2.svc同样只需要修改namespace
sed -ri 's#(namespace:) infra#\1 test#g' svc.yaml # 3.ingress需要修改namespace和域名
sed -ri 's#(namespace:) infra#\1 test#g' ingress.yaml
sed -i 's#apollo-config.zq.com#apollo-testconfig.zq.com#g' ingress.yaml

2.2.3 应用资源配置

任意节点应用配置

kubectl apply -f http://k8s-yaml.zq.com/test/apollo-configservice/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/apollo-configservice/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/apollo-configservice/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/apollo-configservice/ingress.yaml

浏览器检查

浏览器输入http://apollo-testconfig.zq.com,查看测试环境的apollo注册中心是否已有服务注册

服务已经注册进来了

2.3 部署test环境的adminservice

2.3.1 修改configmap资源清单

要修改ns,数据库库名,eureka地址

cd /data/k8s-yaml/test/apollo-adminservice/
sed -ri 's#(namespace:) infra#\1 test#g' cm.yaml
sed -i 's#ApolloConfigDB#ApolloConfigTestDB#g' cm.yaml
sed -i 's#apollo-config.zq.com#apollo-testconfig.zq.com#g' cm.yaml

2.3.2 修改dp资源清单

# 1.dp只需要修改namesapce空间
sed -ri 's#(namespace:) infra#\1 test#g' dp.yaml

2.3.3 应用资源配置清单

kubectl apply -f http://k8s-yaml.zq.com/test/apollo-adminservice/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/apollo-adminservice/dp.yaml

浏览器检查:

浏览器输入http://apollo-testconfig.zq.com,查看测试环境的apollo注册中心是否已有adminservice服务注册

2.4 部署prod环境的configservice

套路基本上都是一样使用的

2.4.1 修改configmap资源清单

要修改ns,数据库库名,eureka地址

cd /data/k8s-yaml/prod/apollo-configservice/
sed -ri 's#(namespace:) infra#\1 prod#g' cm.yaml
sed -i 's#ApolloConfigDB#ApolloConfigProdDB#g' cm.yaml
sed -i 's#apollo-config.zq.com#apollo-prodconfig.zq.com#g' cm.yaml

2.4.2 修改dp,ns,inress资源清单

# 1.dp只需要修改namesapce空间
sed -ri 's#(namespace:) infra#\1 prod#g' dp.yaml # 2.svc同样只需要修改namespace
sed -ri 's#(namespace:) infra#\1 prod#g' svc.yaml # 3.ingress需要修改namespace和域名
sed -ri 's#(namespace:) infra#\1 prod#g' ingress.yaml
sed -i 's#apollo-config.zq.com#apollo-prodconfig.zq.com#g' ingress.yaml

2.4.3 应用资源配置

任意节点应用配置

kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-configservice/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-configservice/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-configservice/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-configservice/ingress.yaml

浏览器检查

浏览器输入http://apollo-prodconfig.zq.com,查看测试环境的apollo注册中心是否已有服务注册

服务已经注册进来了

2.5 部署prod环境的adminservice

2.5.1 修改configmap资源清单

要修改ns,数据库库名,eureka地址

cd /data/k8s-yaml/prod/apollo-adminservice/
sed -ri 's#(namespace:) infra#\1 prod#g' cm.yaml
sed -i 's#ApolloConfigDB#ApolloConfigProdDB#g' cm.yaml
sed -i 's#apollo-config.zq.com#apollo-prodconfig.zq.com#g' cm.yaml

2.5.2 修改dp资源清单

# 1.dp只需要修改namesapce空间
sed -ri 's#(namespace:) infra#\1 prod#g' dp.yaml

2.5.3 应用资源配置清单

kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-adminservice/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/apollo-adminservice/dp.yaml

浏览器检查:

浏览器输入http://apollo-prodconfig.zq.com,查看测试环境的apollo注册中心是否已有adminservice服务注册

2.6 启动portal服务

两个服务都已经注册进来了后,删除portal数据库中存储的关于之前项目的配置,再来启动portal项目

2.6.1 清理数据库

mysql -uroot -p123456
> use ApolloPortalDB;
> truncate table App;
> truncate table AppNamespace;

2.6.2 启动portal

kubectl apply -f http://k8s-yaml.zq.com/apollo-portal/cm.yaml
kubectl apply -f http://k8s-yaml.zq.com/apollo-portal/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/apollo-portal/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/apollo-portal/ingress.yaml

2.6.3 验证部署结果

打开http://apollo-portal.zq.com,创建两个项目如下:

AppId 应用名称 部门
dubbo-demo-service dubbo服务提供者 研发部
dubbo-demo-web dubbo服务消费者 运维部

项目创建成功后,能看到左侧环境列表中有FATPRO,表示正确

2.6.4 添加test环境的配置

dubbo-demo-service

key value 备注
dubbo.registry zookeeper://zk-test.zq.com:2181 注册中心地址
dubbo.port 20880 dubbo服务监听端口

dubbo-demo-web

key value 备注
dubbo.registry zookeeper://zk-test.zq.com:2181 注册中心地址

2.6.5 添加prod环境的配置

dubbo-demo-service

key value 备注
dubbo.registry zookeeper://zk-prod.zq.com:2181 注册中心地址
dubbo.port 20880 dubbo服务监听端口

dubbo-demo-web

key value 备注
dubbo.registry zookeeper://zk-prod.zq.com:2181 注册中心地址

3 分环境交付dubbo服务

3.1 交付test环境dubbo服务

cd /data/k8s-yaml/
cp ./dubbo-server/* ./test/dubbo-demo-server/
cp ./dubbo-consumer/* ./test/dubbo-demo-consumer/

3.1.1 修改server资源配置清单

只修改dp的ns配置和apollo配置

cd /data/k8s-yaml/test/dubbo-demo-server
sed -ri 's#(namespace:) app#\1 test#g' dp.yaml
sed -i 's#Denv=dev#Denv=fat#g' dp.yaml
sed -i 's#apollo-config.zq.com#apollo-testconfig.zq.com#g' dp.yaml

任意node应用资源清单:

kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-server/dp.yaml

3.1.2 修改consumer资源配置清单

修改资源清单

cd /data/k8s-yaml/test/dubbo-demo-consumer
# 1.修改dp中的ns配置和apollo配置
sed -ri 's#(namespace:) app#\1 test#g' dp.yaml
sed -i 's#Denv=dev#Denv=fat#g' dp.yaml
sed -i 's#apollo-config.zq.com#apollo-testconfig.zq.com#g' dp.yaml # 2.修改svc中的ns配置
sed -ri 's#(namespace:) app#\1 test#g' svc.yaml # 3.修改ingress中的ns配置和域名
sed -ri 's#(namespace:) app#\1 test#g' ingress.yaml
sed -i 's#dubbo-demo.zq.com#dubbo-testdemo.zq.com#g' ingress.yaml

添加域名解析

由于最开始已经统一做了域名解析,这里就不单独添加了

如果没有添加域名解析的话,需要去添加dubbo-testdemo.zq.com的解析

任意node应用资源清单:

kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-consumer/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-consumer/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-consumer/ingress.yaml

3.2 交付prod环境dubbo服务

cd /data/k8s-yaml/
cp ./dubbo-server/* ./prod/dubbo-demo-server/
cp ./dubbo-consumer/* ./prod/dubbo-demo-consumer/

3.2.1 修改server资源配置清单

只修改dp的ns配置和apollo配置

cd /data/k8s-yaml/prod/dubbo-demo-server
sed -ri 's#(namespace:) app#\1 prod#g' dp.yaml
sed -i 's#Denv=dev#Denv=pro#g' dp.yaml
sed -i 's#apollo-config.zq.com#apollo-prodconfig.zq.com#g' dp.yaml

任意node应用资源清单:

kubectl apply -f http://k8s-yaml.zq.com/prod/dubbo-demo-server/dp.yaml

3.2.2 修改consumer资源配置清单

修改资源清单

cd /data/k8s-yaml/prod/dubbo-demo-consumer
# 1.修改dp中的ns配置和apollo配置
sed -ri 's#(namespace:) app#\1 prod#g' dp.yaml
sed -i 's#Denv=dev#Denv=pro#g' dp.yaml
sed -i 's#apollo-config.zq.com#apollo-prodconfig.zq.com#g' dp.yaml # 2.修改svc中的ns配置
sed -ri 's#(namespace:) app#\1 prod#g' svc.yaml # 3.修改ingress中的ns配置和域名
sed -ri 's#(namespace:) app#\1 prod#g' ingress.yaml
sed -i 's#dubbo-demo.zq.com#dubbo-proddemo.zq.com#g' ingress.yaml

添加域名解析

由于最开始已经统一做了域名解析,这里就不单独添加了

如果没有添加域名解析的话,需要去添加dubbo-proddemo.zq.com的解析

任意node应用资源清单:

kubectl apply -f http://k8s-yaml.zq.com/prod/dubbo-demo-consumer/dp.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/dubbo-demo-consumer/svc.yaml
kubectl apply -f http://k8s-yaml.zq.com/prod/dubbo-demo-consumer/ingress.yaml

3.3 关于dp中的apollo域名

  1. dp.yaml中配置的-Dapollo.meta=http://apollo-testconfig.zq.com
  2. 其实可以直接使用-Dapollo.meta=http://apollo-configservice:8080
  3. 也直接使用svc资源名称调用,这样还可以少走一次外网解析,相当于走内网
  4. 因为不同环境的apollo名称空间都不一样,而svc只在当前namespace中生效

4 验证并模拟发布

4.1 验证访问两个环境

分别访问以下域名,看是否可以出来网页内容

test:http://dubbo-testdemo.zq.com/hello?name=noah

prod:http://dubbo-proddemo.zq.com/hello?name=noah

4.2 模拟发版:

任意修改码云上的dubbo-demo-web项目的say方法返回内容

路径dubbo-client/src/main/java/com/od/dubbotest/action/HelloAction.java

4.2.1 用jenkins构建新镜像

参数如下:

参数名 参数值
app_name dubbo-demo-consumer
image_name app/dubbo-demo-consumer
git_repo git@gitee.com:noah-luo/dubbo-demo-web.git
git_ver apollo
add_tag 200513_1808
mvn_dir ./
target_dir ./dubbo-client/target
mvn_cmd mvn clean package -Dmaven.test.skip=true
base_image base/jre8:8u112
maven 3.6.1

4.2.2 发布test环境

构建成功,然后我们在测试环境发布此版本镜像

修改测试环境的dp.yaml

cd /data/k8s-yaml/test/dubbo-demo-consumer
sed -ri 's#(dubbo-demo-consumer:apollo).*#\1_200513_1808#g' dp.yaml

应用修改后的资源配置清单:

kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-consumer/dp.yaml

访问http://dubbo-testdemo.zq.com/hello?name=noah看是否有我们更改的内容

4.2.3 发布prod环境

镜像在测试环境测试没有问题后,直接使用该镜像发布生产环境,不在重新打包,避免发生错误

同样修改prod环境的dp.yaml,并且应用该资源配置清单

cd /data/k8s-yaml/prod/dubbo-demo-server
sed -ri 's#(dubbo-demo-consumer:apollo).*#\1_200513_1808#g' dp.yaml

应用修改后的资源配置清单:

kubectl apply -f http://k8s-yaml.zq.com/test/dubbo-demo-consumer/dp.yaml

已经上线到生产环境,这样一套完整的分环境使用apollo配置中心发布流程已经可以使用了,并且真正做到了一次构建,多平台使用。

K8S(12)配置中心实战-多环境交付apollo三组件的更多相关文章

  1. K8S(11)配置中心实战-单环境交付apollo三组件

    k8s配置中心实战-交付apollo三组件 目录 k8s配置中心实战-交付apollo三组件 1 apollo简单说明 1.1 apollo最简架构图: 1.2 apollo组件部署关系 2 为app ...

  2. K8S(10)配置中心实战-configmap资源

    k8s配置中心实战-configmap资源 目录 k8s配置中心实战-configmap资源 0 configmap前置说明 0.1.1 configmap和secret 0.1.2 怎么使用conf ...

  3. kubernetes实战-配置中心(二)交付apollo配置中心到k8s

    apollo官网:官方地址 apollo架构图: apollo需要使用数据库,这里使用mysql,注意版本需要在5.6以上: 本次环境mysql部署在10.4.7.11上,使用mariadb:10.1 ...

  4. SpringCloud配置中心实战

    SpringCloud配置中心实战 1.统一配置中心(Config) 1.1 Spring项目配置加载顺序 1.2 配置规则详解 1.3 Git仓库配置 1.3.1 使用占位符 1.3.2 模式匹配 ...

  5. zookeeper配置中心实战--solrcloud zookeeper配置中心原理及源码分析

    程序的发展,需要引入集中配置: 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境.分集群管理配 ...

  6. ASP.Net Core 中使用Zookeeper搭建分布式环境中的配置中心系列一:使用Zookeeper.Net组件演示基本的操作

    前言:马上要过年了,祝大家新年快乐!在过年回家前分享一篇关于Zookeeper的文章,我们都知道现在微服务盛行,大数据.分布式系统中经常会使用到Zookeeper,它是微服务.分布式系统中必不可少的分 ...

  7. 微服务配置中心实战:Spring + MyBatis + Druid + Nacos

    在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring ...

  8. 【Nacos】Springboot整合Nacos配置中心(二) 多环境配置

    本篇随笔接上一篇文章:Springboot整合Nacos配置中心(一),主要记录Nacos多环境的配置的方法 Nacos多环境的配置 方法一: 1.在项目中的bootstrap.yaml文件中配置激活 ...

  9. 配置中心的设计-nacos vs apollo

    简介 前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos. 和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理.分环境 ...

随机推荐

  1. ctfhub技能树—RCE—过滤cat

    打开靶机 查看页面信息 构造payload 127.0.0.1 || ls 题目提示过滤了cat,但我还是想试试 果然不行 网页访问没有结果,应该和上题一样被注释了,使用和同样的方法进行解题 利用命令 ...

  2. 渗透测试中期--漏洞复现--MS08_067

    靶机:Win2k3    10.10.10.130 攻击机:BT5      10.10.10.128 一:nmap 查看WinK3是否开放端口3389 开放3389方法:我的电脑->属性-&g ...

  3. linux静态库

    库文件可以理解为别人写好的现成的代码,但是看不见源码,只提供程序入口.库又分为动态库和静态库,静态库是在编译的时候将库编译进可执行程序中,运行时不再依赖库文件,而动态库是在运行时加载,运行时需要依赖库 ...

  4. 【UltraISO】中文破解版

    下载链接:https://cn.ultraiso.net/uiso9_cn.exe简体中文版专用:   注册名:Guanjiu    注册码:A06C-83A7-701D-6CFC多国语言版专用:   ...

  5. RSA2对于所有商户都是单独一对一的,并且只支持开发平台密钥管理和沙箱

    蚂蚁金服开发者社区 https://openclub.alipay.com/club/history/read/1495 RSA 和 RSA2 签名算法区别 - 支付宝开放平台 https://ope ...

  6. tee MultiWriter creates a writer that duplicates its writes to all the // provided writers, similar to the Unix tee(1) command.

    https://zh.wikipedia.org/wiki/Tee 在计算机科学中,tee是一个常见的指令,它能够将某个指令的标准输出,导向.存入某个档案中.许多不同的命令行界面(Shell)都提供这 ...

  7. High Performance Networking in Google Chrome 进程间通讯(IPC) 多进程资源加载

    小结: 1. 小文件存储于一个文件中: 在内部,磁盘缓存(disk cache)实现了它自己的一组数据结构, 它们被存储在一个单独的缓存目录里.其中有索引文件(在浏览器启动时加载到内存中),数据文件( ...

  8. 安装、登入centos7

    系统CentOS7.4 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso 虚 ...

  9. 小步前进之WCF简介

    WCF 前言 什么是WCF? 契约 合约 前言 在 .NET Framework2.0 以及前版本中,微软发展了 Web Service..NET Remoting 等通信支持. 如果要进行通信,对于 ...

  10. 高性能Web框架

    不管 Web 前端架构运行机制还是 Web 后端架构中,网络是必不可少的且占分量很重.用户通过网络访问 Web 服务器,Web 后端架构中各种服务之间通过网络来进行通信和协作,网络是现代 Web 应用 ...