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 验证结果

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

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

    2.1.2 创建简单配置文件

    1. cat >/etc/my.cnf <<'EOF'
    2. [mysqld]
    3. character_set_server = utf8mb4
    4. collation_server = utf8mb4_general_ci
    5. init_connect = "SET NAMES 'utf8mb4'"
    6. [mysql]
    7. default-character-set = utf8mb4
    8. EOF

    2.1.2 启动mysql并初始设置

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

    3 初始化appllo数据库

    configdb初始化脚本
    portal初始化脚本

    3.1 configdb数据库

    3.1.1下载脚本并执行:

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

    3.1.2 授权并修改初始数据:

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

    3.1.3 添加config域名解析:

    1. vi /var/named/zq.com.zone
    2. mysql A 10.4.7.11
    3. apollo-config A 10.4.7.10
    4. apollo-admin A 10.4.7.10
    5. apollo-portal A 10.4.7.10
    6. # 重启并验证
    7. systemctl restart named
    8. dig -t A apollo-config.zq.com @10.4.7.11 +short

    3.2 portal数据库

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

    3.2.1 下载并执行

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

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

    都使用apollo用户来管理数据库是为了方便,如果有相关的安全考虑可以给config和portal分别使用不同的数据库账号
    1. mysql -uroot -p123456
    2. > grant INSERT,DELETE,UPDATE,SELECT on ApolloPortalDB.* to "apollo"@"10.4.7.%" identified by "123456";
    3. # 更新部门名
    4. > update ApolloPortalDB.ServerConfig set Value='[{"orgId":"zq01","orgName":"研发部"},{"orgId":"zq02","orgName":"运维部"}]' where Id=2;

    4 部署configservice

    4.1 制作docker镜像

    操作在7.200上完成

    4.1.1 下载程序包

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

    4.1.2 修改连接数据库配置:

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

    4.1.3 创建启动脚本:

    程序中自带的start.sh启动脚本时不适用与K8S运行,因此需要专门下载他们提供的K8S内使用的脚本
    1. # 1.从官网下载启动脚本
    2. cd /data/dockerfile/apollo-configservice/scripts/
    3. wget https://raw.githubusercontent.com/ctripcorp/apollo/1.5.1/scripts/apollo-on-kubernetes/apollo-config-server/scripts/startup-kubernetes.sh
    4. # 2. 添加一行使用主机名的变量
    5. sed -i '5i APOLLO_CONFIG_SERVICE_NAME=$(hostname -i)' startup-kubernetes.sh
    6. # 3.根据需要修改下jvm限制

    4.1.4 编写dockerfile

    dockerfile官方地址
    1. cd ..
    2. cat >Dockerfile <<'EOF'
    3. FROM harbor.zq.com/base/jre8:8u112
    4. ENV VERSION 1.5.1
    5. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
    6. echo "Asia/Shanghai" > /etc/timezone
    7. ADD apollo-configservice-${VERSION}.jar /apollo-configservice/apollo-configservice.jar
    8. ADD config/ /apollo-configservice/config
    9. ADD scripts/ /apollo-configservice/scripts
    10. CMD ["sh","/apollo-configservice/scripts/startup-kubernetes.sh"]
    11. EOF

    4.1.5 构建docker镜像

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

    4.2 编写资源配置清单:

    1. mkdir /data/k8s-yaml/apollo-configservice
    2. cd /data/k8s-yaml/apollo-configservice

    4.2.1 创建config的configmap资源清单

    给configservice创建cm资源的清单的目的是方便修改
    其实里面的内容就是前面修改的application-github.properties文件
    如果确定不会修改,可以不创建此cm,直接写死配置到docker镜像中
    1. cat >cm.yaml <<'EOF'
    2. apiVersion: v1
    3. kind: ConfigMap
    4. metadata:
    5. name: apollo-configservice-cm
    6. namespace: infra
    7. data:
    8. application-github.properties: |
    9. # DataSource
    10. spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloConfigDB?characterEncoding=utf8
    11. spring.datasource.username = apollo
    12. spring.datasource.password = 123456
    13. eureka.service.url = http://apollo-config.zq.com/eureka
    14. app.properties: |
    15. appId=100003171
    16. EOF

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

4.2.2 创建Deployment资源清单

  1. cat >dp.yaml <<'EOF'
  2. kind: Deployment
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: apollo-configservice
  6. namespace: infra
  7. labels:
  8. name: apollo-configservice
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. name: apollo-configservice
  14. template:
  15. metadata:
  16. labels:
  17. app: apollo-configservice
  18. name: apollo-configservice
  19. spec:
  20. volumes:
  21. - name: configmap-volume
  22. configMap:
  23. name: apollo-configservice-cm
  24. containers:
  25. - name: apollo-configservice
  26. image: harbor.zq.com/infra/apollo-configservice:v1.5.1
  27. ports:
  28. - containerPort: 8080
  29. protocol: TCP
  30. volumeMounts:
  31. - name: configmap-volume
  32. mountPath: /apollo-configservice/config
  33. terminationMessagePath: /dev/termination-log
  34. terminationMessagePolicy: File
  35. imagePullPolicy: IfNotPresent
  36. imagePullSecrets:
  37. - name: harbor
  38. restartPolicy: Always
  39. terminationGracePeriodSeconds: 30
  40. securityContext:
  41. runAsUser: 0
  42. schedulerName: default-scheduler
  43. strategy:
  44. type: RollingUpdate
  45. rollingUpdate:
  46. maxUnavailable: 1
  47. maxSurge: 1
  48. revisionHistoryLimit: 7
  49. progressDeadlineSeconds: 600
  50. EOF

4.2.3 创建service资源清单

  1. cat >svc.yaml <<'EOF'
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. name: apollo-configservice
  6. namespace: infra
  7. spec:
  8. ports:
  9. - protocol: TCP
  10. port: 8080
  11. targetPort: 8080
  12. selector:
  13. app: apollo-configservice
  14. EOF

4.2.4 创建ingress资源清单

  1. cat >ingress.yaml <<'EOF'
  2. kind: Ingress
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: apollo-configservice
  6. namespace: infra
  7. spec:
  8. rules:
  9. - host: apollo-config.zq.com
  10. http:
  11. paths:
  12. - path: /
  13. backend:
  14. serviceName: apollo-configservice
  15. servicePort: 8080
  16. EOF

service中不一定必须暴露8080,分配的clusterIP中所有的端口都可以 但ingress中的servicePort一定要与service中暴露的端口匹配

4.3 应用资源配置清单:

4.3.1 任意node执行

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

4.3.2 检查启动情况:

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

K8S(11)配置中心实战-单环境交付apollo三组件 - 图1
K8S(11)配置中心实战-单环境交付apollo三组件 - 图2
K8S(11)配置中心实战-单环境交付apollo三组件 - 图3
需要等到eureka启动以后才可以,接下来使用浏览器访问apollo-config.zq.com
K8S(11)配置中心实战-单环境交付apollo三组件 - 图4

5 部署adminservice

官方地址

5.1 制作docker镜像

操作在7.200上完成

5.1.1 下载程序包

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

官方配置文件端口改为8090的目的是虚拟机部署的时候端口不冲突 但我们用K8S部署,会给他单独的clusterIP,所以不用担心端口重复

5.1.4 编写dockerfile

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

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

5.1.5 构建docker镜像

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

5.2 制作资源配置清单:

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

  1. mkdir /data/k8s-yaml/apollo-adminservice
  2. cd /data/k8s-yaml/apollo-adminservice

5.2.1 创建configmap资源清单

  1. cat >cm.yaml <<'EOF'
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: apollo-adminservice-cm
  6. namespace: infra
  7. data:
  8. application-github.properties: |
  9. # DataSource
  10. spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloConfigDB?characterEncoding=utf8
  11. spring.datasource.username = apollo
  12. spring.datasource.password = 123456
  13. eureka.service.url = http://apollo-config.zq.com/eureka
  14. app.properties: |
  15. appId=100003172
  16. EOF

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

5.2.2 创建Deployment资源清单

  1. cat >dp.yaml <<'EOF'
  2. kind: Deployment
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: apollo-adminservice
  6. namespace: infra
  7. labels:
  8. name: apollo-adminservice
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. name: apollo-adminservice
  14. template:
  15. metadata:
  16. labels:
  17. app: apollo-adminservice
  18. name: apollo-adminservice
  19. spec:
  20. volumes:
  21. - name: configmap-volume
  22. configMap:
  23. name: apollo-adminservice-cm
  24. containers:
  25. - name: apollo-adminservice
  26. image: harbor.zq.com/infra/apollo-adminservice:v1.5.1
  27. ports:
  28. - containerPort: 8080
  29. protocol: TCP
  30. volumeMounts:
  31. - name: configmap-volume
  32. mountPath: /apollo-adminservice/config
  33. terminationMessagePath: /dev/termination-log
  34. terminationMessagePolicy: File
  35. imagePullPolicy: IfNotPresent
  36. imagePullSecrets:
  37. - name: harbor
  38. restartPolicy: Always
  39. terminationGracePeriodSeconds: 30
  40. securityContext:
  41. runAsUser: 0
  42. schedulerName: default-scheduler
  43. strategy:
  44. type: RollingUpdate
  45. rollingUpdate:
  46. maxUnavailable: 1
  47. maxSurge: 1
  48. revisionHistoryLimit: 7
  49. progressDeadlineSeconds: 600
  50. EOF

5.3 应用资源配置清单

5.3.1 任意node执行

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

5.3.2 检查启动情况

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

通过 apollo-config.zq.com 检查是否注册到了eureka:
K8S(11)配置中心实战-单环境交付apollo三组件 - 图5
已经顺利的注册到了注册中心中。

6 部署portal

6.1 制作docker镜像

portal官方地址

6.1.1 下载程序包

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

    6.1.4 制作dockerfile:

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

    6.1.5 构建docker镜像

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

    6.2 编写资源配置清单:

    1. mkdir /data/k8s-yaml/apollo-portal
    2. cd /data/k8s-yaml/apollo-portal

    6.2.1 创建configmap资源清单

    1. cat >cm.yaml <<'EOF'
    2. apiVersion: v1
    3. kind: ConfigMap
    4. metadata:
    5. name: apollo-portal-cm
    6. namespace: infra
    7. data:
    8. application-github.properties: |
    9. # DataSource
    10. spring.datasource.url = jdbc:mysql://mysql.zq.com:3306/ApolloPortalDB?characterEncoding=utf8
    11. spring.datasource.username = apollo
    12. spring.datasource.password = 123456
    13. app.properties: |
    14. appId=100003173
    15. apollo-env.properties: |
    16. dev.meta=http://apollo-config.zq.com
    17. EOF

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

6.2.2 创建Deployment资源清单

  1. cat >dp.yaml <<'EOF'
  2. kind: Deployment
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: apollo-portal
  6. namespace: infra
  7. labels:
  8. name: apollo-portal
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. name: apollo-portal
  14. template:
  15. metadata:
  16. labels:
  17. app: apollo-portal
  18. name: apollo-portal
  19. spec:
  20. volumes:
  21. - name: configmap-volume
  22. configMap:
  23. name: apollo-portal-cm
  24. containers:
  25. - name: apollo-portal
  26. image: harbor.zq.com/infra/apollo-portal:v1.5.1
  27. ports:
  28. - containerPort: 8080
  29. protocol: TCP
  30. volumeMounts:
  31. - name: configmap-volume
  32. mountPath: /apollo-portal/config
  33. terminationMessagePath: /dev/termination-log
  34. terminationMessagePolicy: File
  35. imagePullPolicy: IfNotPresent
  36. imagePullSecrets:
  37. - name: harbor
  38. restartPolicy: Always
  39. terminationGracePeriodSeconds: 30
  40. securityContext:
  41. runAsUser: 0
  42. schedulerName: default-scheduler
  43. strategy:
  44. type: RollingUpdate
  45. rollingUpdate:
  46. maxUnavailable: 1
  47. maxSurge: 1
  48. revisionHistoryLimit: 7
  49. progressDeadlineSeconds: 600
  50. EOF

6.2.3 创建service资源清单

  1. cat >svc.yaml <<'EOF'
  2. kind: Service
  3. apiVersion: v1
  4. metadata:
  5. name: apollo-portal
  6. namespace: infra
  7. spec:
  8. ports:
  9. - protocol: TCP
  10. port: 8080
  11. targetPort: 8080
  12. selector:
  13. app: apollo-portal
  14. EOF

6.2.4 创建ingress资源清单

  1. cat >ingress.yaml <<'EOF'
  2. kind: Ingress
  3. apiVersion: extensions/v1beta1
  4. metadata:
  5. name: apollo-portal
  6. namespace: infra
  7. spec:
  8. rules:
  9. - host: apollo-portal.zq.com
  10. http:
  11. paths:
  12. - path: /
  13. backend:
  14. serviceName: apollo-portal
  15. servicePort: 8080
  16. EOF

6.3 应用资源配置清单

6.3.1 在任意node执行

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

6.3.2 检查启动情况

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

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服务提供者
部门:研发部
为新项目添加配置如下:

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

发布后效果图如下:
K8S(11)配置中心实战-单环境交付apollo三组件 - 图7

7.1.2 重新打包service镜像

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

参数名 参数值
app_name dubbo-demo-service
image_name app/dubbo-demo-service
git_repo https://gitee.com/noah-luo/dubbo-demo-service.git
git_ver apollo
add_tag 200512_0746
mvn_dir ./
target_dir ./dubbo-server/target
mvn_cmd mvn clean package -Dmaven.test.skip=true
base_image base/jre8:8u112
maven 3.6.1

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

—————新内容—————

  1. spec:
  2. containers:
  3. - name: dubbo-demo-service
  4. image: harbor.zq.com/app/dubbo-demo-service:apollo_200512_0746
  5. ports:
  6. - containerPort: 20880
  7. protocol: TCP
  8. env:
  9. - name: JAR_BALL
  10. value: dubbo-server.jar
  11. - name: C_OPTS
  12. value: -Denv=dev -Dapollo.meta=http://apollo-config.zq.com
  1. **应用资源配置清单:**

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

  1. <a name="5ec08d42"></a>
  2. ### 7.2 新建dubbo-web项目配置
  3. <a name="5b7c5187"></a>
  4. #### 7.2.1 在配置中心修改新增项目:
  5. **项目属性:**<br />AppId:dubbo-demo-web<br />应用名称:dubbo服务消费者<br />部门:运维部<br />**为新项目添加配置如下:**
  6. | key | value | 备注 |
  7. | --- | --- | --- |
  8. | dubbo.registry | zookeeper://zk1.zq.com:2181 | 注册中心地址 |
  9. **发布后效果图如下:**<br />
  10. <a name="e4c05384-1"></a>
  11. #### 7.1.2 重新打包service镜像
  12. 还是使用之前的流水线,但是使用分支为apollo的代码进行打包,参数如下:
  13. | 参数名 | 参数值 |
  14. | --- | --- |
  15. | app_name | dubbo-demo-consumer |
  16. | image_name | app/dubbo-demo-consumer |
  17. | git_repo | git@gitee.com:noah-luo/dubbo-demo-web.git |
  18. | git_ver | apollo |
  19. | add_tag | 200512_0801 |
  20. | mvn_dir | ./ |
  21. | target_dir | ./dubbo-client/target |
  22. | mvn_cmd | mvn clean package -Dmaven.test.skip=true |
  23. | base_image | base/jre8:8u112 |
  24. | maven | 3.6.1 |
  25. 构建完成后,修改资源配置清单并应用:
  26. <a name="0ded2449-1"></a>
  27. #### 7.1.3 重新应用资源配置清单
  28. 修改dp.yaml资源配置清单
  29. 1. 将镜像改为刚刚打包的镜像名:
  30. 2. 添加环境变量`C_OPTS`,以便指定配置中心

vim /data/k8s-yaml/dubbo-consumer/dp.yaml

—————原内容—————

  1. spec:
  2. containers:
  3. - name: dubbo-demo-consumer
  4. image: harbor.zq.com/app/dubbo-demo-consumer:master_200506_1430
  5. ports:
  6. - containerPort: 8080
  7. protocol: TCP
  8. - containerPort: 20880
  9. protocol: TCP
  10. env:
  11. - name: JAR_BALL
  12. value: dubbo-client.jar

—————新内容—————

  1. spec:
  2. containers:
  3. - name: dubbo-demo-consumer
  4. image: harbor.zq.com/app/dubbo-demo-consumer:apollo_200512_0801
  5. ports:
  6. - containerPort: 8080
  7. protocol: TCP
  8. - containerPort: 20880
  9. protocol: TCP
  10. env:
  11. - name: JAR_BALL
  12. value: dubbo-client.jar
  13. - name: C_OPTS
  14. value: -Denv=dev -Dapollo.meta=http://apollo-config.zq.com
  1. **应用资源配置清单:**

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

  1. <a name="5fb1f9f9"></a>
  2. ### 7.3 验证结果
  3. <a name="6d24d797"></a>
  4. #### 7.3.1 修改dubbo-monitor资源
  5. 管理机上,修改dubbo-monitor的dp资源的使用的cm资源

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

  1. **任意node节点应用资源**

kubectl apply -f http://k8s-yaml.zq.com/dubbo-monitor/dp.yaml ``` 登录dubbo-monitor查看
访问http://dubbo-monitor.zq.com/
K8S(11)配置中心实战-单环境交付apollo三组件 - 图8
浏览器查看
访问http://dubbo-demo.zq.com/hello?name=lg
image.png
apollo中看实例列表
K8S(11)配置中心实战-单环境交付apollo三组件 - 图10