注意:添加节点到集群过程中,请选择手工添加方式,这样可以保证ecs节点不被格式化,如下图:
创建集群的流程,可以参考说明文档。
应用创建可参考文档:点击查看。
1)首先,需要为新加的ecs节点配置污点,目的是确保该节点不会被集群自动调度。参考文档(点击查看)。
2)为环境(应用)配置集群计算资源,实现将应用环境的容器与节点一一对应起来,保证应用环境只会调度到指定的节点上,同时保证节点只会接受指定环境的容器。参考文档:点击查看。
上面4个步骤完成之后,就可以进行应用发布了。应用发布成功之后,可以从完成的发布单记录里,验证下应用是否发布到指定的ecs节点上了。
方案 |
描述 |
优点 |
缺点 |
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