教程

辅助升级篇

适用于 SuperMap iManager for Kubernetes 和 GIS 云套件 10.1.0 之前的版本为升级到当前最新版本需要进行的手动操作说明。

升级包支持的最低版本为 10.1.0 版本,10.1.0 之前的版本想要通过升级包升级到当前最新版本,首先需要通过之前的升级方式升级到 10.1.0 版本。然后按照此说明进行必要的操作。操作执行完成之后再参考使用升级包进行升级操作。

注意事项

  1. 此辅助说明要求操作用户具备通过 kubectl 操作 Kubernetes 集群的能力以及访问 Docker 的能力。
  2. 辅助说明操作过程中的 当前目录 指的是包含和本说明一同解压的所有文件的目录。
  3. 说明中使用的命令直接粘贴可能会导致格式不正确,请对比行号保证格式正确。

数据库迁移

从 MySQL 数据库迁移到 PostgreSQL 数据库

以下操作如果无特殊说明,均在 当前目录 操作

10.1.0 之前的 keycloak 使用 MySQL 数据库存储数据,10.1.0 之后的版本使用 PostgreSQL 数据库存储,在使用升级包升级之前,需要把数据从 MySQL 数据库迁移到 PostgreSQL 数据库。

参数说明

参数 说明
<namespace> SuperMap iManager for Kubernetes 和 GIS 云套件所在命名空间
<Kubernetes public ip> 升级包所在主机可以访问产品的 ip,比如 http://172.16.120.139:31100 可以访问产品页面,那么 <Kubernetes public ip> 就应该是 172.16.120.139
  1. 检查 Keycloak 使用的数据库,输入以下命令,查看是否有 keycloak-postgresql 服务,如果没有,则进行下一步,否则不用进行

    kubectl -n <namespace> get svc | grep keycloak-postgresql
  2. 准备镜像。从阿里云拉取以下镜像,如果是内网环境,需要从阿里云拉取,通过 docker save 保存成文件传输到内网通过 docker load 还原,再通过 docker tag 修改镜像仓库名再 push 到内网镜像仓库,下面使用到镜像的地方需要手动替换成内网镜像仓库地址。

    docker pull registry.cn-beijing.aliyuncs.com/supermap/postgres:10
    docker pull registry.cn-chengdu.aliyuncs.com/supermap/pgloader:ccl.3.6.3
  3. 应用编排,创建 keycloak-postgresql(使用非阿里云镜像仓库需要修改编排中的镜像仓库地址)。等待创建的 keycloak-postgresql Pod 启动成功,可以通过日志查看

    kubectl -n <namespace> apply -f data_migration/keycloak-postgresql-single.yaml
  4. 迁移数据到 PostgreSQL

    SuperMap iManager for Kubernetes 使用以下命令获取导出端口

    mysql_port=$(kubectl -n <namespace> get svc imanager-mysql-for-export --output="jsonpath={.spec.ports[0].nodePort}");

    GIS 云套件使用以下命令获取导出端口

    mysql_port=$(kubectl -n <namespace> get svc keycloak-mysql-for-export --output="jsonpath={.spec.ports[0].nodePort}");

    开始迁移

    postgresql_port=$(kubectl -n <namespace> get svc keycloak-postgresql-for-import --output="jsonpath={.spec.ports[0].nodePort}");
    docker run -it --rm registry.cn-chengdu.aliyuncs.com/supermap/pgloader:ccl.3.6.3 \
     pgloader \
     mysql://supermap:supermap@<Kubernetes public ip>:$mysql_port/keycloak \
     postgresql://supermap:supermap@<Kubernetes public ip>:$postgresql_port/keycloak
     
    docker run -it --rm \
     --entrypoint bash \
     -v $(pwd)/data_migration/:/root/data_migration \
     registry.cn-beijing.aliyuncs.com/supermap/postgres:10 \
     -c "export PGPASSWORD=supermap; psql -h <Kubernetes public ip> -p 30507 -U supermap keycloak < /root/data_migration/transtar.sql"
  5. 清理服务

    kubectl -n <namespace> delete svc keycloak-mysql-for-export keycloak-postgresql-for-import imanager-mysql-for-export

GIS 云套件

以下部分为 GIS 云套件特有操作

参数说明:<giscloudsuite namespace> 是 GIS 云套件所在命名空间

  1. 伸缩 StatefulSet consul-server 副本数为 3

    kubectl scale -<giscloudsuite namespace> --replicas=3 statefulset/consul-server
  2. 暴露 Service keycloak

    注意:以下操作如操作不当,会导致升级后无法访问,请核对后进行操作

    1. 确认 keycloak 的协议和端口

    访问 GIS 云套件页面,点击服务管理,此时应该跳转到登录页面。如果没有跳转,执行退出登录操作。

    查看登录页面请求地址,记录登录地址的协议和端口。例如请求地址是: https://172.16.120.139:32221 ,此时的协议是 https 协议,使用的端口是 32221

    1. 删除 Service keycloak 和 keycloak-external
    kubectl -n <giscloudsuite namespace> delete svc keycloak keycloak-external
    1. 替换下面占位符,重新创建 Service keycloak。

    如果使用 https 协议,<target port> 替换为 8443,否则替换成 8080

    <access port> 是 keycloak 访问的端口,如上面示例中的 32221

    cat <<EOF | kubectl -n <giscloudsuite namespace> apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        type: icloud-native
        kind: icloud-native-dev
      name: keycloak
    spec:
      type: NodePort
      ports:
      - name: http
        port: <target port>
        targetPort: <target port>
        NodePort: <access port>
      selector:
        app: keycloak
    EOF