更新时间:2025-03-27 gmt 08:00

编写iac脚本-j9九游会登录

iac目录规划

iac脚本开发规范请参考,本实践中,iac包结构规划如下:

表1 iac spec包结构说明

位置

描述

iacspec

iac压缩包

└── global/

全局默认的iac描述,包含完整文件结构。

│ └── meta.yaml

变更策略描述

└── specs/

环境特定的iac描述,结构与global相同,但仅包含与global有差异的文件。

│ └── cn_green_cbu_default/

研发联调环境,命名采用站点级cloud map的名称,可以在环境管理界面查看可选的站点级cloud map名称列表。

│ └── demoorgidlogin/

微服务demoorgidlogin。

│ └── config/

demoorgidlogin的配置目录。

│ └── aiops_sidecar_param.json

接入aiops服务的配置文件。

│ └── config_records.yaml

demoorgidlogin的业务配置项。

│ └── config_schema.yaml

声明demoorgidlogin的业务配置项属性,敏感业务配置项需要声明,非敏感配置项可以不声明。

│ └── envs.yaml

用于配置和管理demoorgidlogin的环境变量。

│ └── hosts.yaml

配置主机域名映射。

│ └── resources.yaml

demoorgidlogin的资源列表。

│ └── values.yaml

定义demoorgidlogin的资源列表中使用的变量。

│ └── demoserviceaservice/

微服务demoserviceaservice

│ └── config/

servicea的配置目录。

│ └── aiops_sidecar_param.json

接入aiops服务的配置文件。

│ └── config_records.yaml

servicea的业务配置项。

│ └── config_schema.yaml

声明servicea的业务配置项属性,敏感业务配置项需要声明,非敏感配置项可以不声明。

│ └── envs.yaml

用于配置和管理servicea的环境变量。

│ └── hosts.yaml

配置主机域名映射。

│ └── resources.yaml

servicea的资源列表。

│ └── values.yaml

定义servicea的资源列表中使用的变量。

│ └── demoservicebservice/

微服务demoservicebservice。

│ └── config/

serviceb的配置目录。

│ └── aiops_sidecar_param.json

接入aiops服务的配置文件。

│ └── config_records.yaml

serviceb的业务配置项。

│ └── config_schema.yaml

声明serviceb的业务配置项属性,敏感业务配置项需要声明,非敏感配置项可以不声明。

│ └── envs.yaml

用于配置和管理serviceb的环境变量。

│ └── hosts.yaml

配置主机域名映射。

│ └── resources.yaml

serviceb的资源列表。

│ └── values.yaml

定义serviceb的资源列表中使用的变量。

└── package.json

包描述文件。

对接slb的准备工作

在appstage运维中心创建slb实例配置slb节点信息,并在slb中创建监听。在本实践中详细操作如下:

  1. 创建slb实例。
    1. 登录。
    2. 在快捷入口选择“运维中心”,进入运维中心。
    3. 在顶部导航栏选择服务。
    4. 单击,选择微服务开发 > 负载均衡
    5. 选择左侧导航栏的“实例管理”
    6. 在实例列表页面,单击创建实例
    7. “选择电子流”窗口中,选择以下任一方式:
      • 运维操作记录选择“关联电子流”,并选择要关联的电子流,单击“提交”
      • 运维操作记录选择“紧急问题处理”,并填写紧急原因,单击“提交”
    8. 在创建实例页面,配置相关参数,参数说明如表2所示。
      表2 基本信息参数说明

      参数

      说明

      实例名称

      实例的名称,本实践中实例名称为jamestest。

      字符长度0~50,可以由字母、数字、下划线、短横线、点组成,不能包含特殊字符。容器部署的实例名称开头只能是字母,结尾只能是字母或数字。

      可用模式

      选择可用模式。

      自管理模式:采用自己的节点,将公有云ecs作为slb主机,slb主机由业务申请、维护,手动挂载elb。

      slb版本

      选择slb版本。

      部署规格

      选择部署规格,支持2c8g、4c16g、8c32g、16c64g、32c128g。

      单az节点数

      每个az部署的节点个数。

      注册中心

      选择一个注册中心,即cloud map,将实例注册到注册中心。

      部署区域

      以实际自管理区域为准,与注册中心无关。

      部署az

      以实际自管理区域为准,与注册中心无关。

    9. 在弹出的对话框中单击“确定”,提交创建实例申请。

      在实例列表中会生成一条实例记录,实例状态为running

  2. 配置slb节点信息。
    自管理模式的slb实例需要配置节点信息。
    1. 在实例列表中单击实例名称,进入实例详情页面。
    2. 选择“slb节点信息”页签,单击“编辑”
    3. 单击“新增节点”,配置ip和主机名。

      ip为slb所部署的服务器的私网地址。

      在appstage运维中心主机管理服务中,选择云服务器管理 > 弹性云服务器,查看ip地址和主机名称。

    4. 单击“保存”
  3. 创建监听。
    1. 选择左侧导航栏的“监听管理”,单击“创建监听”
    2. “选择电子流”窗口中,选择以下任一方式:
      • 运维操作记录选择“关联电子流”,并选择要关联的电子流,单击“提交”
      • 运维操作记录选择“紧急问题处理”,并填写紧急原因,单击“提交”
    3. 配置监听基本信息,关联slb实例,具体配置请参见表3,单击“下一步”
      表3 创建监听参数说明

      参数

      说明

      监听名称(英文)

      slb监听的英文名称。本实践中监听名称为jamestest_listener。

      长度<=50,不能包含-in-字符,不能以in-开头,不能以.conf结尾,不能包含特殊字符。

      监听名称(中文)

      slb监听的中文名称。

      注册中心

      选择监听关联的实例所在的注册中心。

      所属服务

      监听所属的服务。

      关联slb实例

      选择slb实例,仅能关联同一注册中心下的slb实例。

    4. 在创建后端服务器集群、健康检查、配置监听、配置转发策略、动态路由规则页面,依次单击“下一步”

      此处只需要配置监听基本信息并绑定slb实例,健康检查及转发策略等其他信息在软件包部署完成后再进行配置。

    5. 查看总览,单击“保存”

编写iac脚本

  1. 在global目录下的meta.yaml中描述servicea、serviceb以及demoorgidlogin间的变更流程以及变更策略。并行变更demoserviceaservice、demoservicebservice及demoorgidlogin。
    type: wisecloud::environment
    applypipeline: environment-deploy
    pipelines:
      - name: environment-deploy
        action: serial
        tasks:
          - name: apply-microservices
            action: parallel
            tasks:
              - name: apply-demoservicea
                action: apply
                component:
                  name: demoserviceaservice
              - name: apply-demoserviceb
                action: apply
                component:
                  name: demoservicebservice
              - name: apply-demoorgidlogin
                action: apply
                component:
                  name: demoorgidlogin
  2. 在specs目录下的config配置目录中,增加如下内容:
    • demoorgidlogin
      • aiops_sidecar_param.json:
        {
          "iacconfigname" : "demoorgidloginservicelog",
          "configitems" : [
            {
              "logspacename" : "springclouddemo",
              "accessconfigname" : "demoorgidlogin_run_log_1677484473569",
              "accessconfigdetail" : {
                "logpath" : "/opt/huawei/logs/demoorgidlogin/run",
                "logmode" : "multi_line",
                "multilineconfig" : {
                  "pattern" : "^\\[[0-9]{4}-[0-9]{2}-[0-9]{2}"
                }
              }
            },
            {
              "logspacename" : "springclouddemo",
              "accessconfigname" : "demoorgidlogin_debug_log_1677484428961",
              "accessconfigdetail" : {
                "logpath" : "/opt/huawei/logs/demoorgidlogin/debug",
                "logmode" : "multi_line",
                "multilineconfig" : {
                  "pattern" : "^\\[[0-9]{4}-[0-9]{2}-[0-9]{2}"
                }
              }
            }
          ]
        }
      • 在config_records.yaml配置微服务的业务配置项。
        #sts
        sts.server.domain: 10.202.251.196:8080  #sts(acms)接入地址
        sts.config.path: /opt/huawei/certs/jamesservice22a/demoorgidlogin/demoorgidlogin.ini   #sts(acms)微服务证书路径,iac3.0会将证书放在固定路径下,格式为/opt/huawei/certs/服务名/微服务名/微服务名.ini
        #redis
        #注意:在华为云购买redis必须与服务部署的后端集群在同一个子网,否则网络不通无法访问
        spring.redis.host: 172.16.0.189   #redis访问地址
        spring.redis.port: 6379  #redis访问端口
        spring.redis.password: microservice/jamesservice22a/demoorgidlogin/spring.redis.password/default  #redis访问密码,属于敏感配置项,已被sts(acms)纳管,配置路径为:microservice/服务名/微服务名/敏感配置项名称/敏感配置项标签
        #orgid
        org.url: http://org-app.huawei.com:8080  #orgid后端访问地址
        org.web-url: https://orgid-beta.xxx.huawei.com   #orgid前端访问地址
        org.app.cookie-domain: huawei.com   #cookie域名
        org.app.jwt-key: microservice/jamesservice22a/demoorgidlogin/org.app.jwt-key/default  #使用redis储存token的密钥,属于敏感配置项,已被sts(acms)纳管,配置路径为:microservice/服务名/微服务名/敏感配置项名称/敏感配置项标签
        org.app.ent-point-url: http://org-app.huawei.com:8080                                 #登录或登出后页面重定向地址
        org.app.protocol-login.oauth.clientid: fd9f15082b80a6b6c3940c996df9b917f246936244caaee8e4a9ed3404c89364  #orgid登录时所需的客户端id,需要在orgid申请应用获得
        org.app.protocol-login.oauth.clientsecret: microservice/jamesservice22a/demoorgidlogin/org.app.protocol-login.oauth.clientsecret/default  #orgid登录时所需的客户端密钥,需要在orgid申请应用获得,属于敏感配置项,已被sts(acms)纳管,配置路径为:microservice/服务名/微服务名/敏感配置项名称/敏感配置项标签
        demo.login.url: http://org-app.huawei.com:8080/login                           #demo的登录地址
        #cloud map
        nuwa.cloudmap.serveraddr: http://10.202.252.191:8081                           #cloud map访问地址
        nuwa.cloudmap.namespacename: cn_green_cbu_default_9190086000001322775_default  #cloud map访问命名空间
        nuwa.cloudmap.version: 1.0.0.100                                               #微服务版本号
        nuwa.cloudmap.clustername: default                                             #当前注册到cloud map集群名
        nuwa.cloudmap.provider.cluster: default                                        #提供服务的其他同样被注册到cloud map的微服务集群名
      • 在config_schema.yaml中声明微服务的敏感业务配置项。
        type: object
        properties:
          spring.redis.password:                       #声明spring.redis.password为敏感业务配置项。
            format: sensitive
          org.app.protocol-login.oauth.clientsecret:   #声明org.app.protocol-login.oauth.clientsecret为敏感业务配置项。
            format: sensitive
      • 在envs.yaml文件中定义环境变量。
        - name: nuwa_cloudmap_serveraddr
          value: 'http://10.202.252.191:8081'
      • 在hosts.yaml中配置主机域名映射。
        - hostname: org-app.huawei.com    #对接orgid,orgid服务的域名解析
          ip: 172.16.0.57                 #orgid服务的ip
    • demoserviceaservice和demoservicebservice,此处以demoserviceaservice为例:
      • aiops_sidecar_param.json:
        {
          "iacconfigname" : "demoserviceaservicelog",
          "configitems" : [
            {
              "logspacename" : "springclouddemo",
              "accessconfigname" : "demoserviceaservice_run_log_1677484473569",
              "accessconfigdetail" : {
                "logpath" : "/opt/huawei/logs/demoserviceaservice/run",
                "logmode" : "multi_line",
                "multilineconfig" : {
                  "pattern" : "^\\[[0-9]{4}-[0-9]{2}-[0-9]{2}"
                }
              }
            },
            {
              "logspacename" : "springclouddemo",
              "accessconfigname" : "demoserviceaservice_debug_log_1677484428961",
              "accessconfigdetail" : {
                "logpath" : "/opt/huawei/logs/demoserviceaservice/debug",
                "logmode" : "multi_line",
                "multilineconfig" : {
                  "pattern" : "^\\[[0-9]{4}-[0-9]{2}-[0-9]{2}"
                }
              }
            }
          ]
        }
      • 在config_records.yaml配置微服务的业务配置项。
        #sts
        sts.server.domain: 10.202.251.196:8080     #sts接入地址
        sts.config.path: /opt/huawei/certs/jamesservice22a/demoserviceaservice/demoserviceaservice.ini   #sts微服务证书路径,iac3.0会将证书放在固定路径下,格式为/opt/huawei/certs/服务名/微服务名/微服务名.ini
        #cloud map
        nuwa.cloudmap.serveraddr: http://10.202.252.191:8081   #cloud map访问地址
        nuwa.cloudmap.namespacename: cn_green_cbu_default_9190086000001322775_default    #cloud map访问命名空间
        nuwa.cloudmap.version: 1.0.0.100          #微服务版本号
        nuwa.cloudmap.clustername: default        #当前注册到cloud map集群名
        nuwa.cloudmap.provider.cluster: default   #提供服务的其他同样被注册到cloud map的微服务集群名
        #wisedba
        wisedba.appname: jamesservice22a           #在appstage中创建的服务名称
        wisedba.groupkey: gauss-springclouddemo2   #wisedba纳管的数据库实例名称
        wisedba.dbname: springclouddemoa           #数据库名称(数据库实例中的schema名称)
        demo.login.url: http://org-app.huawei.com:8080/login     #demo登录地址
        demo.login.enable: true                                  #是否开启demo登录功能
        demo.service-url.demoorgidlogin: http://demoorgidlogin   #demo登录功能的微服务访问地址
      • 在config_schema.yaml中声明微服务的敏感业务配置项。
        type: object
      • 在envs.yaml文件中定义环境变量。
        - name: nuwa_cloudmap_serveraddr
          value: 'http://10.202.252.191:8081'
      • 在hosts.yaml中配置主机host,即本地域名和ip的映射。
        - hostname: localhost.huawei.com
          ip: 127.0.0.1
  3. 在resources.yaml中定义资源。
    微服务下所有的资源描述都存放于resources.yaml中,此处以demoorgidlogin微服务为例,本实践中资源定义如下:
    - name: demoorgidlogin                                     #cluster name: 2 <= len <= 16
      type: wisecloud::microservice::nuwacontainer
      properties:
        microservicename: demoorgidlogin                       #sts证书中服务的名称
        clustername:                                           #微服务集群名
          $ref: 'values.yaml#/values/network/slb/cluster_name'
        replicas:                                              #pod副本数
          $ref: 'values.yaml#/values/microservice/replicas'
        terminationgraceperiodseconds: 30                      #优雅下线宽限期
        network:                                               #网络配置
          slbenable:                                           #是否启用slb
            $ref: 'values.yaml#/values/network/slbenable'
        bindslb:                                               #slb配置
          - port:                                              #微服务在slb上暴露的端口
              $ref: 'values.yaml#/values/network/slb/port'
            graystatus:
              $ref: 'values.yaml#/values/network/slb/graystatus'
            weight: 1                                          #微服务在slb上负载的权重
            maxfails: 3                                        #微服务调用的失败次数
            timeout: 2                                         #微服务调用转发的超时时间
            instancename:                                      #slb的实例名称
              $ref: 'values.yaml#/values/network/slb/server_name'
            listenergroupname:                                 #slb实例关联的监听名称
              $ref: 'values.yaml#/values/network/slb/server_name'
            targetgroup:                                       #微服务注册到slb上的后端服务器组名
              name:                                            #用于创建routerule
                $ref: 'values.yaml#/values/network/slb/cluster_name' 
              loadbalancer:                                    #在routes配置的情况下,loadbalancer也属于必选,不配置routes的话,loadbalancer则是可选,loadbalancer当前仅支持配置roundrobin(加权轮询)且不支持修改为其它策略,如果需修改可登录slb管理台修改
              strategy: roundrobin
              protocol: https
        volumes:                                               #挂载信息
          - name: log_volume
            size: 4gi
            type: local
          - name: data_volume
            size: 4gi
            type: local
        containers:                                            #容器配置 
          - image:                                             #镜像地址
              $ref: 'values.yaml#/values/container/image'
            flavor:                                            #主容器cpu&memory的规格
              $ref: 'values.yaml#/values/container/flavor'
            stsenable: true                                    #启用sts
            ports:                                             #在cloud map注册中心注册的端口
              $ref: 'values.yaml#/values/container/ports'
            livenessprobe:                                     #服务存活探测
              exec:                                            #命令行检查方式
                command: [ "echo", "hello" ]
            readinessprobe:                                    #是否就绪探测
              exec:                                            #命令行检查方式
                command: [ "echo", "hello" ]
            prestopconfig:                                     #优雅退出处理
              execcommand: [ "echo", "hello" ]
            envs:                                              #配置环境变量
              $ref: 'config/envs.yaml#'
            hostaliases:                                       #配置hosts
              $ref: 'config/hosts.yaml#'
        configs:                                               #配置项的根字段
          private:                                             #private为业务配置项
            schema:                                            #声明敏感业务配置项
              $ref: 'config/config_schema.yaml#'                  
            records:                                           #业务配置项
              $ref: 'config/config_records.yaml#'
  4. 在微服务的values.yaml中定义微服务的资源参数值,此处以demoserviceaservice为例。
    values:
      microservice:
        replicas: 1
      network:
        slbenable: true
        slb:
          port: 8081                              #微服务在slb上暴露的端口,demoserviceaservice为8081
          instance_name: jamestest                #slb的实例名称
          server_name: jamestest_listener         #slb实例关联的监听名称
          cluster_name: springclouddemoa-cluster  #当前微服务注册到slb时的集群名称,可以自定义
          graystatus: 1
      container:
        image: swr.cn-north-5.myhuaweicloud.com/appartswisedev/demoservicea:snapshot_version
        ports:
          - 6792
        flavor: 0.5c1g
      sidecars:
        aiopslog:
          version: 3.3.0.100
          flavor: 0.1c500m
  5. 修改包描述文件package.json。
    {
      "type": "iacspec",                       #代码包类型,支持iacspec和iacpatch两种格式,本实践中为iacspec
      "name": "service/1181355389389103104",   #代码包名称,格式:service/{service-id}
      "version": "snapshot_version"            #代码包版本号
    }

相关文档

网站地图