文档中心 > 商家经营工具-开发指引

独立部署应用容器化迁移

更新时间:2023/04/26 访问次数:4544

迁移步骤


1.创建集群,请选择手工添加节点到集群

注意:添加节点到集群过程中,请选择手工添加方式,这样可以保证ecs节点不被格式化,如下图:


image.png


创建集群的流程,可以参考说明文档

 

2.创建聚石塔应用(应用创建完成之后,切记不要发布应用)

应用创建可参考文档:点击查看


3.为独立部署应用分配资源策略

1)首先,需要为新加的ecs节点配置污点,目的是确保该节点不会被集群自动调度。参考文档(点击查看)。

2)为环境(应用)配置集群计算资源,实现将应用环境的容器与节点一一对应起来,保证应用环境只会调度到指定的节点上,同时保证节点只会接受指定环境的容器。参考文档:点击查看

 

4.应用发布

上面4个步骤完成之后,就可以进行应用发布了。应用发布成功之后,可以从完成的发布单记录里,验证下应用是否发布到指定的ecs节点上了。


image.png

 

5.独立部署应用网络服务方案


方案

描述

优点

缺点

NodePort Service

通过聚石塔页面创建nodeport类型k8s service,集群外部通过Node节点(ECS)的IP:节点端口访问

可以通过指定的ecs ip 方式提供网络服务

1)port的指定范围有限制:30000-32767范围之间

2)服务依赖方需要配合修改相对应的端口

ingress

通过聚石塔页面配置k8s ingress,提供域名方式提供网络服务

根据域名配置不同的转发规则,应用扩缩容ecs、ecs机器替换等操作,对服务依赖方都没有感知

需要服务依赖方配合修改成通过域名方式访问

特定的ecs ip + port

通过指定的ecs ip + port方式提供服务

服务依赖方不需要做任何修改

1)目前聚石塔侧产品上还不支持,需要开发

2)通过容器方式发布服务之前,需要将老的服务做停服处理,原因:ecs上服务端口不能重复,容器服务和老服务都使用的同一个ip + port


通过特定的hostIp hostPort访问服务:

创建聚石塔应用环境时,可以通过yaml文件配置containerPort、hostPort参数方式实现。


apiVersion: apps/v1
kind: Deployment
# metadata下只支持设置labels和annotations
# 不支持namespace和name
metadata:
 labels:
   k1: v1
 annotations:
     k1: v1
# spc不支持paused和replicas,其他均支持
# 支持的字段如下 selector,minReadySeconds,template,progressDeadlineSeconds,revisionHistoryLimit,strategy
spec:
  # 支持matchLabels 和 matchExpressions
  selector:
    matchLabels:
      test: hangyu
  template:
    # podTemplate.metadata 只支持设置labels和annotations
    metadata:
      labels:
        test: hangyu
    # 支持设置affinity,initContainers,containers,volumes,nodeSelector,terminationGracePeriodSeconds
    # 支持设置activeDeadlineSeconds,hostAliases,imagePullSecrets,serviceAccountName
    spec:
      containers:
        - env:
            - name: JAVA_OPT
              value: >-
                -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m
                -XX:MaxMetaspaceSize=128m -Duser.timezone=Asia/Shanghai
            - name: SPRINGBOOT_OPT
              value: >-
                --management.info.build.mode=full
                --spring.profiles.active=production --logging.path=/acs/log
                --logging.file=/acs/log/application.log
            - name: PRESHELL
            - name: POSTSHELL
            - name: MAIN_PORT
              value: '8080'
            - name: MANAGEMENT_PORT
              value: '8081'
          image: 'registry-vpc.cn-zhangjiakou.aliyuncs.com/jstopen/springboot2:1.0.0'
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8081
              scheme: HTTP
          name: jck-app-hangyu-10078
          ports:
            - containerPort: 8080
              name: main-port
              protocol: TCP
              hostPort: 8080
            - containerPort: 8081
              name: management-port
              protocol: TCP
              hostPort: 8081
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8081
              scheme: HTTP
          resources:
            limits:
              cpu: '1'
              memory: 1000Mi
          volumeMounts:
            - mountPath: /acs/data
              name: jck-v-wedf
            - mountPath: /acs/log
              name: jck-v-wedg
      volumes:
        - emptyDir: {}
          name: jck-v-wedf
        - emptyDir: {}
          name: jck-v-wedg


 

FAQ

关于此文档暂时还没有FAQ
返回
顶部