微服务开发框架升级

请按以下顺序依次进行升级部署,请不要随意调整升级顺序。升级后可能数据库结构会发生改变,故不能进行版本回退。文档升级命令中的RELEASE NAME是在基于分步安装文档之上编写的,若你在安装时指定了其他RELEASE NAME,请以你安装时指定的RELEASE NAME为准。一键部署安装的请执行helm list命令查看RELEASE NAME。

添加Choerodon Chart仓库

  1. helm repo add c7n https://openchart.choerodon.com.cn/choerodon/c7n/
  2. helm repo update

升级register server

  • 升级服务

    1. helm upgrade register-server c7n/go-register-server \
    2. -f <(helm get values register-server) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl $(kubectl get svc register-server -o jsonpath="{.spec.clusterIP}" -n choerodon-devops-prod):8000/eureka/apps
    • 出现以下类似信息即为成功升级

      1. {
      2. "name": "go-register-server",
      3. "instance": [
      4. {
      5. "instanceId": "192.168.3.19:go-register-server:8000",
      6. "hostName": "192.168.3.19",
      7. "app": "go-register-server",
      8. "ipAddr": "192.168.3.19",
      9. "status": "UP",
      10. "overriddenstatus": "UNKNOWN",
      11. "port": {
      12. "@enabled": true,
      13. "$": 8000
      14. },
      15. "securePort": {
      16. "@enabled": false,
      17. "$": 443
      18. },
      19. "countryId": 8,
      20. "dataCenterInfo": {
      21. "name": "MyOwn",
      22. "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo"
      23. },
      24. "leaseInfo": {
      25. "renewalIntervalInSecs": 10,
      26. "durationInSecs": 90,
      27. "registrationTimestamp": 1528201698,
      28. "lastRenewalTimestamp": 1528201698,
      29. "evictionTimestamp": 0,
      30. "serviceUpTimestamp": 1528201698
      31. },
      32. "metadata": {
      33. "VERSION": "0.9.0"
      34. },
      35. "homePageUrl": "http://192.168.3.19:8000/",
      36. "statusPageUrl": "http://192.168.3.19:8000/info",
      37. "healthCheckUrl": "http://192.168.3.19:8000/health",
      38. "vipAddress": "go-register-server",
      39. "secureVipAddress": "go-register-server",
      40. "isCoordinatingDiscoveryServer": true,
      41. "lastUpdatedTimestamp": 1528201698,
      42. "lastDirtyTimestamp": 1528201698,
      43. "actionType": "ADDED"
      44. }
      45. ]
      46. }

升级config server

  • 升级服务

    1. helm upgrade config-server c7n/config-server \
    2. -f <(helm get values config-server) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=config-server -o jsonpath="{.items[0].status.podIP}"):8011/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

升级manager service

  • 升级服务

    1. helm upgrade manager-service c7n/manager-service \
    2. -f <(helm get values manager-service) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=manager-service -o jsonpath="{.items[0].status.podIP}"):8964/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

升级iam service

  • 升级服务

    1. helm upgrade iam-service c7n/iam-service \
    2. -f <(helm get values iam-service) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=iam-service -o jsonpath="{.items[0].status.podIP}"):8031/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

部署notify service

原event store service由notify service和asgard service进行取代,请部署这两个服务。具体详情请查看这里

  • 创建数据库

    1. CREATE USER IF NOT EXISTS 'choerodon'@'%' IDENTIFIED BY "password";
    2. CREATE DATABASE IF NOT EXISTS notify_service DEFAULT CHARACTER SET utf8;
    3. GRANT ALL PRIVILEGES ON notify_service.* TO choerodon@'%';
    4. FLUSH PRIVILEGES;
  • 部署服务

    1. helm install c7n/notify-service \
    2. --set preJob.preConfig.mysql.host=choerodon-mysql \
    3. --set preJob.preConfig.mysql.port=3306 \
    4. --set preJob.preConfig.mysql.database=manager_service \
    5. --set preJob.preConfig.mysql.username=choerodon \
    6. --set preJob.preConfig.mysql.password=password \
    7. --set preJob.preInitDB.mysql.host=choerodon-mysql \
    8. --set preJob.preInitDB.mysql.port=3306 \
    9. --set preJob.preInitDB.mysql.database=notify_service \
    10. --set preJob.preInitDB.mysql.username=choerodon \
    11. --set preJob.preInitDB.mysql.password=password \
    12. --set env.open.SPRING_DATASOURCE_URL="jdbc:mysql://choerodon-mysql:3306/notify_service?useUnicode=true&characterEncoding=utf-8&useSSL=false" \
    13. --set env.open.SPRING_DATASOURCE_USERNAME=choerodon \
    14. --set env.open.SPRING_DATASOURCE_PASSWORD=password \
    15. --set env.open.EUREKA_CLIENT_SERVICEURL_DEFAULTZONE="http://register-server.choerodon-devops-prod:8000/eureka/" \
    16. --set env.open.SPRING_CLOUD_CONFIG_ENABLED=true \
    17. --set env.open.SPRING_CLOUD_CONFIG_URI="http://config-server.choerodon-devops-prod:8010/" \
    18. --set env.open.CHOERODON_EVENT_CONSUMER_KAFKA_BOOTSTRAP_SERVERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    19. --set env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    20. --set env.open.SPRING_KAFKA_BOOTSTRAP_SERVERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    21. --set env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES="zookeeper-0.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181\,zookeeper-1.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181\,zookeeper-2.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181" \
    22. --name notify-service \
    23. --version=0.9.0 --namespace=choerodon-devops-prod
    参数名含义
    preJob.preConfig.mysql{}初始化配置所需manager_service数据库信息
    preJob.preInitDB.mysql{}初始化数据库所需数据库信息
    env.open.SPRING_DATASOURCE_URL数据库链接地址
    env.open.SPRING_DATASOURCE_USERNAME数据库用户名
    env.open.SPRING_DATASOURCE_PASSWORD数据库密码
    env.open.SPRING_CLOUD_CONFIG_ENABLED启用配置中心
    env.open.SPRING_CLOUD_CONFIG_URI配置中心地址
    env.open.EUREKA_CLIENT_SERVICEURL_DEFAULTZONE注册服务地址
    env.open.SPRING_KAFKA_BOOTSTRAP_SERVERSkafk地址
    env.open.CHOERODON_EVENT_CONSUMER_KAFKA_BOOTSTRAP_SERVERSkafk地址
    env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERSkafk地址
    env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODESzookeeper地址
  • 验证部署

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=notify-service -o jsonpath="{.items[0].status.podIP}"):18086/health | jq -r .status
    • 出现以下类似信息即为成功部署

      1. UP

部署asgard service

  • 创建数据库

    1. CREATE USER IF NOT EXISTS 'choerodon'@'%' IDENTIFIED BY "password";
    2. CREATE DATABASE IF NOT EXISTS asgard_service DEFAULT CHARACTER SET utf8;
    3. GRANT ALL PRIVILEGES ON asgard_service.* TO choerodon@'%';
    4. FLUSH PRIVILEGES;
  • 部署服务

    1. helm install c7n/asgard-service \
    2. --set preJob.preConfig.mysql.host=choerodon-mysql \
    3. --set preJob.preConfig.mysql.port=3306 \
    4. --set preJob.preConfig.mysql.database=manager_service \
    5. --set preJob.preConfig.mysql.username=choerodon \
    6. --set preJob.preConfig.mysql.password=password \
    7. --set preJob.preInitDB.mysql.host=choerodon-mysql \
    8. --set preJob.preInitDB.mysql.port=3306 \
    9. --set preJob.preInitDB.mysql.database=asgard_service \
    10. --set preJob.preInitDB.mysql.username=choerodon \
    11. --set preJob.preInitDB.mysql.password=password \
    12. --set env.open.SPRING_DATASOURCE_URL="jdbc:mysql://choerodon-mysql:3306/asgard_service?useUnicode=true&characterEncoding=utf-8&useSSL=false" \
    13. --set env.open.SPRING_DATASOURCE_USERNAME=choerodon \
    14. --set env.open.SPRING_DATASOURCE_PASSWORD=password \
    15. --set env.open.EUREKA_CLIENT_SERVICEURL_DEFAULTZONE="http://register-server.choerodon-devops-prod:8000/eureka/" \
    16. --set env.open.SPRING_CLOUD_CONFIG_ENABLED=true \
    17. --set env.open.SPRING_CLOUD_CONFIG_URI="http://config-server.choerodon-devops-prod:8010/" \
    18. --set env.open.CHOERODON_EVENT_CONSUMER_KAFKA_BOOTSTRAP_SERVERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    19. --set env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    20. --set env.open.SPRING_KAFKA_BOOTSTRAP_SERVERS="kafka-0.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-1.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092\,kafka-2.kafka-headless.choerodon-devops-prod.svc.cluster.local:9092" \
    21. --set env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODES="zookeeper-0.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181\,zookeeper-1.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181\,zookeeper-2.zookeeper-headless.choerodon-devops-prod.svc.cluster.local:2181" \
    22. --name asgard-service \
    23. --version=0.9.0 --namespace=choerodon-devops-prod
    参数名含义
    preJob.preConfig.mysql{}初始化配置所需manager_service数据库信息
    preJob.preInitDB.mysql{}初始化数据库所需数据库信息
    env.open.SPRING_DATASOURCE_URL数据库链接地址
    env.open.SPRING_DATASOURCE_USERNAME数据库用户名
    env.open.SPRING_DATASOURCE_PASSWORD数据库密码
    env.open.SPRING_CLOUD_CONFIG_ENABLED启用配置中心
    env.open.SPRING_CLOUD_CONFIG_URI配置中心地址
    env.open.EUREKA_CLIENT_SERVICEURL_DEFAULTZONE注册服务地址
    env.open.SPRING_KAFKA_BOOTSTRAP_SERVERSkafk地址
    env.open.CHOERODON_EVENT_CONSUMER_KAFKA_BOOTSTRAP_SERVERSkafk地址
    env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERSkafk地址
    env.open.SPRING_CLOUD_STREAM_KAFKA_BINDER_ZK_NODESzookeeper地址
  • 验证部署

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=asgard-service -o jsonpath="{.items[0].status.podIP}"):18081/health | jq -r .status
    • 出现以下类似信息即为成功部署

      1. UP

升级api gateway

  • 升级服务

    1. helm upgrade api-gateway c7n/api-gateway \
    2. -f <(helm get values api-gateway) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=api-gateway -o jsonpath="{.items[0].status.podIP}"):8081/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

升级gateway helper

  • 升级服务

    1. helm upgrade gateway-helper c7n/gateway-helper \
    2. -f <(helm get values gateway-helper) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=gateway-helper -o jsonpath="{.items[0].status.podIP}"):9181/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

升级oauth server

  • 升级服务

    1. helm upgrade oauth-server c7n/oauth-server \
    2. -f <(helm get values oauth-server) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=oauth-server -o jsonpath="{.items[0].status.podIP}"):8021/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

升级file service

  • 升级服务

    1. helm upgrade file-service c7n/file-service \
    2. -f <(helm get values file-service) \
    3. --version=0.9.0
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=file-service -o jsonpath="{.items[0].status.podIP}"):9091/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

DevOps服务升级

升级devops service

  • 创建CRD

    • 在任意master节点新建C7NHelmRelease.yaml文件,粘贴以下信息:

      1. apiVersion: apiextensions.k8s.io/v1beta1
      2. kind: CustomResourceDefinition
      3. metadata:
      4. name: c7nhelmreleases.choerodon.io
      5. spec:
      6. group: choerodon.io
      7. names:
      8. kind: C7NHelmRelease
      9. listKind: C7NHelmReleaseList
      10. plural: c7nhelmreleases
      11. singular: c7nhelmrelease
      12. scope: Namespaced
      13. version: v1alpha1
    • 执行以下命令进行部署:

      1. kubectl apply -f C7NHelmRelease.yaml
  • 确认Gitlab开启SSH协议

  • 升级服务

    1. helm upgrade devops-service c7n/devops-service \
    2. -f <(helm get values devops-service) \
    3. --set env.open.AGENT_VERSION="0.9.6" \
    4. --set env.open.TEMPLATE_VERSION_MICROSERVICE="0.9.0" \
    5. --set env.open.TEMPLATE_VERSION_MICROSERVICEFRONT="0.9.0" \
    6. --set env.open.TEMPLATE_VERSION_JAVALIB="0.9.0" \
    7. --set env.open.SERVICES_GITLAB_SSHURL="gitlab.example.choerodon.io" \
    8. --set env.open.SECURITY_IGNORED="/ci\,/webhook\,/v2/api-docs\,/agent/**\,/ws/**\,/webhook/**" \
    9. --set env.open.SERVICES_GATEWAY_URL=http://api.example.choerodon.io \
    10. --version=0.9.3
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=devops-service -o jsonpath="{.items[0].status.podIP}"):8061/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP
  • 升级之后,请用平台 admin 用户去调用 swagger-ui 里面devops-service平滑升级接口,用于给0.9版本以前的应用增加 GitOps ,扫回部署信息。

    1. 接口地址:http://api.example.choerodon.io/manager/swagger-ui.html
    2. devops-service > devops-check-controler > 平滑升级接口:
    3. version: 填写0.9
    4. 调用完之后可以查看devops-servicedevops-check-log表里面的log字段查看平滑升级信息

升级gitlab service

  • 升级服务

    1. helm upgrade gitlab-service c7n/gitlab-service \
    2. -f <(helm get values gitlab-service) \
    3. --version=0.9.1
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=gitlab-service -o jsonpath="{.items[0].status.podIP}"):8071/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

敏捷管理升级

为保持Choerodon平台组件版本一致性,敏捷管理服务跳过0.7版本号,与其他服务组件版本号保持一致。

  • 升级服务

    1. helm upgrade agile-service c7n/agile-service \
    2. -f <(helm get values agile-service) \
    3. --version=0.9.1
  • 验证升级

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=agile-service -o jsonpath="{.items[0].status.podIP}"):8379/health | jq -r .status
    • 出现以下类似信息即为成功升级

      1. UP

测试管理升级

  • 升级服务

    1. helm upgrade test-manager-service c7n/test-manager-service \
    2. -f <(helm get values test-manager-service) \
    3. --version=0.9.2
  • 验证部署

    • 验证命令

      1. curl -s $(kubectl get po -n choerodon-devops-prod -l choerodon.io/release=test-manager-service -o jsonpath="{.items[0].status.podIP}"):8094/health | jq -r .status
    • 出现以下类似信息即为成功部署

      1. UP

知识管理升级

  • 升级XWiki

    XWiki-0.9.0版本需要依赖Choerodon微服务框架的0.9.0版本功能,在升级XWiki之前,请确保Choerodon微服务框架已经升级到0.9.0版本。

    1. 下载Choerodon-wiki0.8.0升级到0.9.0的升级包Choerodon-wiki-0.9.0-update.rar ,下载地址为地址
    2. 在XWiki的卷目录下的/data/data
      • 编辑xwiki.properties文件,修改 oidc.endpoint.userinfo=http://localhost:8080/iam/v1/users/self
      • 并在下一行添加一个参数 oidc.endpoint.logout=http://localhost:8080/oauth/logout
      • 注意:域名需要修改为Choerodon平台网关的域名地址。
    3. 在XWiki的卷目录 /data/data/extension/repository 下,将下载到的升级包中的 repository-0.9.0-update 目录下的内容复制进去。
    4. 使用admin用户进入系统设置: 设置–Content–导入
      • 上传升级包中的 Choerodon-wiki-0.9.0-update.xar
      • 点击上传成功的包,在右侧包内容下选择 给已有文档添加一个新的版本,并点击导入,等待导入完成。
    5. 在浏览器地址栏中访问路径 /bin/view/ConfluenceTest
      • 注:此时页面可能会错乱,是正常情况,下一步会修复。
      • 点击页面右上角的更多,在弹出框中选择删除。
      • 进入到删除页面,勾选Affect children, 并确认删除。
    6. 重启XWiki。
  • 升级服务

    1. helm upgrade wiki-service c7n/wiki-service \
    2. -f <(helm get values wiki-service) \
    3. --version=0.9.1
  • 更新旧数据

    1. 打开Choerodon平台的swagger-ui界面,url为http://localhost:8080/manager/swagger-ui.html
    2. 选择wiki:wiki-service,打开wiki-scanning-controller,使用更新wiki系统主页接口。
    3. 点击Try it out!之后,wiki系统就会将已经存在的空间首页替换为0.9.0版本最新的内容。

整合前端升级

  • 升级服务

    前端添加了PRO_FILE_SERVER用于指定文件存储服务Minio的地址,注意替换为真实的地址

    1. helm upgrade choerodon-front c7n/choerodon-front \
    2. -f <(helm get values choerodon-front) \
    3. --set env.open.PRO_FILE_SERVER="http://minio.example.choerodon.io" \
    4. --version=0.9.1
  • 验证升级

    • 验证命令

      1. curl $(kubectl get svc choerodon-front -o jsonpath="{.spec.clusterIP}" -n choerodon-devops-prod)
    • 出现以下类似信息即为成功升级

      1. <!DOCTYPE html><html><head><meta http-equiv="Content-type"content="text/html; charset=utf-8"><title>Choerodon</title><link rel="shortcut icon"href="favicon.ico"></head><body><div id="app"></div><script type="text/javascript"src="app/vendor_19e4b950.js"></script><script type="text/javascript"src="app/main_19e4b950.js"></script></body></html>
  • 在访问搭建好的Choerodon的api,api.example.choerodon.io/manager/swagger-ui.html,选择iam_service -> client-controller -> 创建client

    • 认证请使用用户名:admin,密码:admin
    • 提交以下数据,注意正式搭建时请替换以下值为真实值

      1. {
      2. "accessTokenValidity": 60,
      3. "additionalInformation": "",
      4. "authorizedGrantTypes": "implicit,client_credentials,authorization_code,refresh_token",
      5. "autoApprove": "default",
      6. "name": "choerodon",
      7. "objectVersionNumber": 0,
      8. "organizationId": 1,
      9. "refreshTokenValidity": 60,
      10. "resourceIds": "default",
      11. "scope": "default",
      12. "secret": "secret",
      13. "webServerRedirectUri": "http://choerodon.example.choerodon.io"
      14. }