k8s容器云架构之dubbo微服务— K8S(11)配置中心实战-单环境交付apollo三组件

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264k8s配置中心实战-交付apollo三组件

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

目录

  • k8s配置中心实战-交付apollo三组件
  • 1 apollo简单说明
  • 1.1 apollo最简架构图:
  • 1.2 apollo组件部署关系
  • 2 为appllo准备数据库
  • 2.1 下载安装mysql
  • 2.1.1 yum安装mysql
  • 2.1.2 创建简单配置文件
  • 2.1.2 启动mysql并初始设置
  • 3 初始化appllo数据库
  • 3.1 configdb数据库
  • 3.1.1下载脚本并执行:
  • 3.1.2 授权并修改初始数据:
  • 3.1.3 添加config域名解析:
  • 3.2 portal数据库
  • 3.2.1 下载并执行
  • 3.2.2 授权用户并更新初始数据
  • 4 部署configservice
  • 4.1 制作docker镜像
  • 4.1.1 下载程序包
  • 4.1.2 修改连接数据库配置:
  • 4.1.3 创建启动脚本:
  • 4.1.4 编写dockerfile
  • 4.1.5 构建docker镜像
  • 4.2 编写资源配置清单:
  • 4.2.1 创建config的configmap资源清单
  • 4.2.2 创建Deployment资源清单
  • 4.2.3 创建service资源清单
  • 4.2.4 创建ingress资源清单
  • 4.3 应用资源配置清单:
  • 4.3.1 任意node执行
  • 4.3.2 检查启动情况:
  • 5 部署adminservice
  • 5.1 制作docker镜像
  • 5.1.1 下载程序包
  • 5.1.2 修改连接数据库配置:
  • 5.1.3 创建启动脚本:
  • 5.1.4 编写dockerfile
  • 5.1.5 构建docker镜像
  • 5.2 制作资源配置清单:
  • 5.2.1 创建configmap资源清单
  • 5.2.2 创建Deployment资源清单
  • 5.3 应用资源配置清单
  • 5.3.1 任意node执行
  • 5.3.2 检查启动情况
  • 6 部署portal
  • 6.1 制作docker镜像
  • 6.1.1 下载程序包
  • 6.1.2 修改配置文件
  • 6.1.3 创建启动脚本
  • 6.1.4 制作dockerfile:
  • 6.1.5 构建docker镜像
  • 6.2 编写资源配置清单:
  • 6.2.1 创建configmap资源清单
  • 6.2.2 创建Deployment资源清单
  • 6.2.3 创建service资源清单
  • 6.2.4 创建ingress资源清单
  • 6.3 应用资源配置清单
  • 6.3.1 在任意node执行
  • 6.3.2 检查启动情况
  • 6.3.3 网页验证
  • 7 配置服务使用apollo配置中心
  • 7.1 新建dubbo-service项目配置
  • 7.1.1 在配置中心修改新增项目:
  • 7.1.2 重新打包service镜像
  • 7.1.3 重新应用资源配置清单
  • 7.2 新建dubbo-web项目配置
  • 7.2.1 在配置中心修改新增项目:
  • 7.1.2 重新打包service镜像
  • 7.1.3 重新应用资源配置清单
  • 7.3 验证结果
  • 7.3.1 修改dubbo-monitor资源

1 apollo简单说明

官方地址

概念请参考:

1.1 apollo最简架构图:

image.png

1.2 apollo组件部署关系

  1. configservice自带eureka注册中心、配置写入configDB数据库、优先部署、为client提供服务
  2. adminservice向eureka注册服务、与configservice共用数据库、为portal提供服务
  3. configservice和adminservice组成一套环境、多个环境就得部署多套config和admin
  4. portal是web端、各环境共用、只需部署一套、有自己单独的数据库

2 为appllo准备数据库

apollo需要使用数据库,如果是mysql,需要版本在5.6以上:

本次环境mysql部署在10.4.7.11上,使用mysql5.7,为测试简单起见,各环境数据库使用同一个,不做隔离

2.1 下载安装mysql

2.1.1 yum安装mysql

rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum -y install yum-utils
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum install mysql-server -y

2.1.2 创建简单配置文件

cat >/etc/my.cnf <<'EOF'
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
init_connect = "SET NAMES 'utf8mb4'"
[mysql]
default-character-set = utf8mb4
EOF

2.1.2 启动mysql并初始设置

systemctl start  mysqld
systemctl enable mysqld
mysql -u root -p`grep password /var/log/messages|awk '{print $NF}'`
# 修改密码
> set global validate_password_policy=0;
> set global validate_password_length=1;
> set password=password('123456');
> flush privileges;
# 检查字符集:需要四个都是utf8mb4
> \s

3 初始化appllo数据库

configdb初始化脚本

portal初始化脚本

3.1 configdb数据库

3.1.1下载脚本并执行:

wget -O apolloconfig.sql https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/configdb/V1.0.0__initialization.sql 
# 导入sql文件
mysql -uroot -p123456 < apolloconfig.sql
# 检查是否导入成功
mysql -uroot -p123456 -e "show databases;"|grep ApolloConfigDB

3.1.2 授权并修改初始数据:

mysql -uroot -p123456
> grant INSERT,DELETE,UPDATE,SELECT on ApolloConfigDB.* to 'apollo'@'10.4.7.%'  identified by "123456";
# 修改数据
> use ApolloConfigDB
> update ServerConfig set Value='http://apollo-config.zq.com/eureka' where Id=1;

3.1.3 添加config域名解析:

vi /var/named/zq.com.zone
mysql       A    10.4.7.11
apollo-config   A    10.4.7.10
apollo-admin    A    10.4.7.10
apollo-portal   A    10.4.7.10
# 重启并验证
systemctl restart named
dig -t A apollo-config.zq.com @10.4.7.11 +short

3.2 portal数据库

由于portal使用的是另一个portaldb,我们需要在数据库中新建portdb,并初始化

3.2.1 下载并执行

wget -O apollo-portal.sql https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/db/migration/portaldb/V1.0.0__initialization.sql
# 导入sql文件
mysql -uroot -p123456 < apollo-portal.sql
# 检查是否导入成功
mysql -uroot -p123456 -e "show databases;"|grep ApolloPortalDB

3.2.2 授权用户并更新初始数据

都使用apollo用户来管理数据库是为了方便,如果有相关的安全考虑可以给config和portal分别使用不同的数据库账号

mysql -uroot -p123456
> grant INSERT,DELETE,UPDATE,SELECT on ApolloPortalDB.* to "apollo"@"10.4.7.%" identified by "123456";
# 更新部门名
> update ApolloPortalDB.ServerConfig set Value='[{"orgId":"zq01","orgName":"研发部"},{"orgId":"zq02","orgName":"运维部"}]' where Id=2;

4 部署configservice

4.1 制作docker镜像

操作在7.200上完成

4.1.1 下载程序包

wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-configservice-1.5.1-github.zip
mkdir /data/dockerfile/apollo-configservice
unzip -o apollo-configservice-1.5.1-github.zip -d /data/dockerfile/apollo-configservice/

4.1.2 修改连接数据库配置:

cd /data/dockerfile/apollo-configservice/config
# 修改数据库连接地址
sed -i 's#fill-in-the-correct-server#mysql.zq.com#g' application-github.properties
# 修改数据库连接用户和密码
sed -i 's#FillInCorrectUser#apollo#g'     application-github.properties
sed -i 's#FillInCorrectPassword#123456#g' application-github.properties
# 查看结果
config]# egrep -v "^#|$^" application-github.properties
spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = apollo
spring.datasource.password = 123456

4.1.3 创建启动脚本:

程序中自带的start.sh启动脚本时不适用与K8S运行,因此需要专门下载他们提供的K8S内使用的脚本

# 1.从官网下载启动脚本
cd /data/dockerfile/apollo-configservice/scripts/
wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-config-server/scripts/startup-kubernetes.sh
# 2. 添加一行使用主机名的变量
sed -i '5i APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)' startup-kubernetes.sh
# 3.根据需要修改下jvm限制

4.1.4 编写dockerfile

dockerfile官方地址

cd ..
cat >Dockerfile <<'EOF'
FROM harbor.zq.com/base/jre8:8u112
ENV VERSION 1.5.1
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    echo "Asia/Shanghai" > /etc/timezone
ADD apollo-configservice-${VERSION}.jar /apollo-configservice/apollo-configservice.jar
ADD config/  /apollo-configservice/config
ADD scripts/ /apollo-configservice/scripts
CMD ["sh","/apollo-configservice/scripts/startup-kubernetes.sh"]
EOF

4.1.5 构建docker镜像

docker build . -t harbor.zq.com/infra/apollo-configservice:v1.5.1
docker push       harbor.zq.com/infra/apollo-configservice:v1.5.1

4.2 编写资源配置清单:

mkdir /data/k8s-yaml/apollo-configservice
cd /data/k8s-yaml/apollo-configservice

4.2.1 创建config的configmap资源清单

给configservice创建cm资源的清单的目的是方便修改

其实里面的内容就是前面修改的application-github.properties文件

如果确定不会修改,可以不创建此cm,直接写死配置到docker镜像中

cat >cm.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-configservice-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloConfigDB?characterEncoding=utf8
    spring.datasource.username = apollo
    spring.datasource.password = 123456
    eureka.service.url = http://apollo-config.zq.com/eureka
  app.properties: |
    appId=100003171
EOF

在同一个configmap资源中,可以添加多个配置文件,上述配置就有两个,分别是:

application-github.propertiesapp.properties

4.2.2 创建Deployment资源清单

cat >dp.yaml <<'EOF'
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: apollo-configservice
  namespace: infra
  labels: 
    name: apollo-configservice
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: apollo-configservice
  template:
    metadata:
      labels: 
        app: apollo-configservice 
        name: apollo-configservice
    spec:
      volumes:
      - name: configmap-volume
        configMap:
          name: apollo-configservice-cm
      containers:
      - name: apollo-configservice
        image: harbor.zq.com/infra/apollo-configservice:v1.5.1
        ports:
        - containerPort: 8080
          protocol: TCP
        volumeMounts:
        - name: configmap-volume
          mountPath: /apollo-configservice/config
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

4.2.3 创建service资源清单

cat >svc.yaml <<'EOF'
kind: Service
apiVersion: v1
metadata: 
  name: apollo-configservice
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: apollo-configservice
EOF

4.2.4 创建ingress资源清单

cat >ingress.yaml <<'EOF'
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: apollo-configservice
  namespace: infra
spec:
  rules:
  - host: apollo-config.zq.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: apollo-configservice
          servicePort: 8080
EOF

service中不一定必须暴露8080,分配的clusterIP中所有的端口都可以

但ingress中的servicePort一定要与service中暴露的端口匹配

4.3 应用资源配置清单:

4.3.1 任意node执行

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

4.3.2 检查启动情况:

kubectl -n infra get pod|grep apollo-config
# 检查命令
kubectl -n infra logs apollo-configservice-64fc749978-9nz5h --tail=4

image.png

需要等到eureka启动以后才可以,接下来使用浏览器访问apollo-config.zq.com

5 部署adminservice

官方地址

5.1 制作docker镜像

操作在7.200上完成

5.1.1 下载程序包

wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-adminservice-1.5.1-github.zip
mkdir /data/dockerfile/apollo-adminservice
unzip -o apollo-adminservice-1.5.1-github.zip -d /data/dockerfile/apollo-adminservice/

5.1.2 修改连接数据库配置:

由于使用了configmap资源将配置文件挂载出来了,所以不在修改配置文件,如需修改配置文件,请参考部署apollo-configservice时候的修改方法:

5.1.3 创建启动脚本:

程序中自带的start.sh启动脚本时不适用与K8S运行,因此需要专门下载他们提供的K8S内使用的脚本

# 1.从官网下载启动脚本
cd /data/dockerfile/apollo-adminservice/scripts/
wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-admin-server/scripts/startup-kubernetes.sh
# 2. 添加一行使用主机名的变量
sed -i '5i APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)' startup-kubernetes.sh
# 3.修改端口为8080
sed -i 's#8090#8080#g' startup-kubernetes.sh

官方配置文件端口改为8090的目的是虚拟机部署的时候端口不冲突

但我们用K8S部署,会给他单独的clusterIP,所以不用担心端口重复

5.1.4 编写dockerfile

cd ..
cat >Dockerfile <<'EOF'
FROM stanleyws/jre8:8u112
ENV VERSION 1.5.1
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    echo "Asia/Shanghai" > /etc/timezone
ADD apollo-adminservice-${VERSION}.jar /apollo-adminservice/apollo-adminservice.jar
ADD config/ /apollo-adminservice/config
ADD scripts/ /apollo-adminservice/scripts
CMD ["/bin/bash","/apollo-adminservice/scripts/startup-kubernetes.sh"]
EOF

由于要使用cm配置资源,因此就不改config中的配置了

5.1.5 构建docker镜像

docker build . -t harbor.zq.com/infra/apollo-adminservice:v1.5.1
docker push       harbor.zq.com/infra/apollo-adminservice:v1.5.1

5.2 制作资源配置清单:

adminservice向注册中心注册服务,不直接对外提供服务,因此不需要暴露端口,只需要cm资源和dp资源

mkdir /data/k8s-yaml/apollo-adminservice
cd /data/k8s-yaml/apollo-adminservice

5.2.1 创建configmap资源清单

cat >cm.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-adminservice-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloConfigDB?characterEncoding=utf8
    spring.datasource.username = apollo
    spring.datasource.password = 123456
    eureka.service.url = http://apollo-config.zq.com/eureka
  app.properties: |
    appId=100003172
EOF

注意每个服务的appId都不会一样哦

5.2.2 创建Deployment资源清单

cat >dp.yaml <<'EOF'
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: apollo-adminservice
  namespace: infra
  labels: 
    name: apollo-adminservice
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: apollo-adminservice
  template:
    metadata:
      labels: 
        app: apollo-adminservice 
        name: apollo-adminservice
    spec:
      volumes:
      - name: configmap-volume
        configMap:
          name: apollo-adminservice-cm
      containers:
      - name: apollo-adminservice
        image: harbor.zq.com/infra/apollo-adminservice:v1.5.1
        ports:
        - containerPort: 8080
          protocol: TCP
        volumeMounts:
        - name: configmap-volume
          mountPath: /apollo-adminservice/config
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

5.3 应用资源配置清单

5.3.1 任意node执行

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

5.3.2 检查启动情况

~]# kubectl -n infra get pod|grep apollo-admin
apollo-adminservice-6cd4fcfdc8-2drnq    1/1     Running   0          9s
# 检查命令
kubectl -n infra logs apollo-configservice-6cd4fcfdc8-2drnq --tail=4

通过 apollo-config.zq.com 检查是否注册到了eureka:

已经顺利的注册到了注册中心中。

6 部署portal

6.1 制作docker镜像

portal官方地址

6.1.1 下载程序包

wget https://github.com/ctripcorp/apollo/releases/download/v1.5.1/apollo-portal-1.5.1-github.zip
mkdir /data/dockerfile/apollo-portal
unzip -o apollo-portal-1.5.1-github.zip -d /data/dockerfile/apollo-portal/

6.1.2 修改配置文件

由于使用concigmap资源,故不在这里修改

注意如果要修改的话,要分别修改两个文件

  1. apollo-env.properties修改数据库配置
  2. apollo-env.properties修改支持的环境列表

6.1.3 创建启动脚本

脚本官方地址

# 1.从官网下载启动脚本
cd /data/dockerfile/apollo-portal/scripts/
wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-portal-server/scripts/startup-kubernetes.sh
# 2. 添加一行使用主机名的变量
sed -i '5i APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)' startup-kubernetes.sh
# 3.修改端口为8080
sed -i 's#8070#8080#g' startup-kubernetes.sh

6.1.4 制作dockerfile:

cd /data/dockerfile/apollo-portal/
cat >Dockerfile <<'EOF'
FROM stanleyws/jre8:8u112
ENV VERSION 1.5.1
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    echo "Asia/Shanghai" > /etc/timezone
ADD apollo-portal-${VERSION}.jar /apollo-portal/apollo-portal.jar
ADD config/ /apollo-portal/config
ADD scripts/ /apollo-portal/scripts
CMD ["/bin/bash","/apollo-portal/scripts/startup-kubernetes.sh"]
EOF

6.1.5 构建docker镜像

docker build . -t harbor.zq.com/infra/apollo-portal:v1.5.1
docker push       harbor.zq.com/infra/apollo-portal:v1.5.1

6.2 编写资源配置清单:

mkdir /data/k8s-yaml/apollo-portal
cd /data/k8s-yaml/apollo-portal

6.2.1 创建configmap资源清单

cat >cm.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
  name: apollo-portal-cm
  namespace: infra
data:
  application-github.properties: |
    # DataSource
    spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloPortalDB?characterEncoding=utf8
    spring.datasource.username = apollo
    spring.datasource.password = 123456
  app.properties: |
    appId=100003173
  apollo-env.properties: |
    dev.meta=http://apollo-config.zq.com
EOF

这里暂时只管理一个环境,等跑通了以后,再演示多环境问题

6.2.2 创建Deployment资源清单

cat >dp.yaml <<'EOF'
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: apollo-portal
  namespace: infra
  labels: 
    name: apollo-portal
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: apollo-portal
  template:
    metadata:
      labels: 
        app: apollo-portal 
        name: apollo-portal
    spec:
      volumes:
      - name: configmap-volume
        configMap:
          name: apollo-portal-cm
      containers:
      - name: apollo-portal
        image: harbor.zq.com/infra/apollo-portal:v1.5.1
        ports:
        - containerPort: 8080
          protocol: TCP
        volumeMounts:
        - name: configmap-volume
          mountPath: /apollo-portal/config
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext: 
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600
EOF

6.2.3 创建service资源清单

cat >svc.yaml <<'EOF'
kind: Service
apiVersion: v1
metadata: 
  name: apollo-portal
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
  selector: 
    app: apollo-portal
EOF

6.2.4 创建ingress资源清单

cat >ingress.yaml <<'EOF'
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: apollo-portal
  namespace: infra
spec:
  rules:
  - host: apollo-portal.zq.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: apollo-portal
          servicePort: 8080
EOF

6.3 应用资源配置清单

6.3.1 在任意node执行

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

6.3.2 检查启动情况

6.3.3 网页验证

由于前面已经一起添加了域名解析,因此portal创建好后不需要在添加域名解析,直接浏览器登录验证

网页:apollo-portal.zq.com

默认用户名:apollo

默认密码:admin

登录成功后,立马修改密码为apollo123

到此,apollo的三个组件都已经交付到k8s里了。

7 配置服务使用apollo配置中心

使用配置中心,需要开发对代码进行调整,将一些配置,通过变量的形式配置到apollo中,服务通过配置中心来获取具体的配置

7.1 新建dubbo-service项目配置

7.1.1 在配置中心修改新增项目:

项目属性:

AppId:dubbo-demo-service

应用名称:dubbo服务提供者

部门:研发部

为新项目添加配置如下:

image.png

发布后效果图如下:

7.1.2 重新打包service镜像

还是使用之前的流水线,但是使用分支为apollo的代码进行打包,参数如下:

image.png

7.1.3 重新应用资源配置清单

修改dp.yaml资源配置清单

  1. 将镜像改为刚刚打包的镜像名:
  2. 添加环境变量C_OPTS,以便指定配置中心
vim /data/k8s-yaml/dubbo-server/dp.yaml
#----------原内容----------
    spec:
      containers:
      - name: dubbo-demo-service
        image: harbor.zq.com/app/dubbo-demo-service:master_200509_0800
        ports:
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-server.jar
#----------新内容----------
    spec:
      containers:
      - name: dubbo-demo-service
        image: harbor.zq.com/app/dubbo-demo-service:apollo_200512_0746
        ports:
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-server.jar
        - name: C_OPTS
          value: -Denv=dev -Dapollo.meta=http://apollo-config.zq.com

应用资源配置清单:

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

7.2 新建dubbo-web项目配置

7.2.1 在配置中心修改新增项目:

项目属性:

AppId:dubbo-demo-web

应用名称:dubbo服务消费者

部门:运维部

为新项目添加配置如下:

image.png

发布后效果图如下:

7.1.2 重新打包service镜像

还是使用之前的流水线,但是使用分支为apollo的代码进行打包,参数如下:

image.png

构建完成后,修改资源配置清单并应用:

7.1.3 重新应用资源配置清单

修改dp.yaml资源配置清单

  1. 将镜像改为刚刚打包的镜像名:
  2. 添加环境变量C_OPTS,以便指定配置中心
vim /data/k8s-yaml/dubbo-consumer/dp.yaml
#----------原内容----------
    spec:
      containers:
      - name: dubbo-demo-consumer
        image: harbor.zq.com/app/dubbo-demo-consumer:master_200506_1430
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-client.jar
#----------新内容----------
    spec:
      containers:
      - name: dubbo-demo-consumer
        image: harbor.zq.com/app/dubbo-demo-consumer:apollo_200512_0801
        ports:
        - containerPort: 8080
          protocol: TCP
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-client.jar
        - name: C_OPTS
          value: -Denv=dev -Dapollo.meta=http://apollo-config.zq.com

应用资源配置清单:

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

7.3 验证结果

7.3.1 修改dubbo-monitor资源

管理机上,修改dubbo-monitor的dp资源的使用的cm资源

set -i 's#dubbo-monitor-cm-pro#dubbo-monitor-cm#g' /data/k8s-yaml/dubbo-monitor/dp-cm.yaml

任意node节点应用资源

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp.yaml

登录dubbo-monitor查看

访问http://dubbo-monitor.zq.com/

浏览器查看

访问http://dubbo-demo.zq.com/hello?name=lg

apollo中看实例列表

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
运维 Kubernetes Cloud Native
智联招聘 × 阿里云 ACK One:云端弹性算力颠覆传统 IDC 架构,打造春招技术新范式
在 2025 年春季招聘季的激战中,智联招聘凭借阿里云 ACK One 注册集群与弹性 ACS 算力的深度融合,成功突破传统 IDC 机房的算力瓶颈,以云上弹性架构支撑千万级用户的高并发访问,实现招聘服务效率与稳定性的双重跃升。
|
7月前
|
Kubernetes 调度 异构计算
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
|
7月前
|
数据采集 消息中间件 Kubernetes
容器化爬虫部署:基于K8s的任务调度与自动扩缩容设计
随着业务复杂度提升,传统定时任务和手工扩缩容难以满足高并发与实时性需求。本文对比两种基于 Kubernetes 的爬虫调度与扩缩容方案:CronJob+HPA 和 KEDA。从调度灵活性、扩缩容粒度、实现难度等维度分析,并提供 YAML+Python 示例。方案 A(CronJob+HPA)适合固定定时任务,配置简单;方案 B(KEDA)支持事件驱动,适合高并发与异步触发场景。根据实际需求可混合使用,优化资源利用与效率。
236 4
|
8月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
655 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
306 1
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
11月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
929 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
11月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
3179 36
微服务架构解析:跨越传统架构的技术革命

相关产品

  • 容器服务Kubernetes版