☁️ 从 SDK 集成到 CSP 云平台部署
☁️ 从 SDK 集成到 CSP 云平台部署
项目背景: 因作为电子云的云管家需要熟悉开发流程,现模拟开发人员,使用平台私有 CSP SDK 开发 Spring Cloud 应用,打包 Docker 镜像,并部署到中国电子云 (CSP) 容器平台,打通 Nacos 注册与外部访问。
一、 环境准备
在开始写代码前,必须统一本地的编译环境,否则会遇到依赖下载慢或版本不兼容问题。
安装 JDK 1.8 & Maven 3.8
- 安装路径: /usr/local/java 和 /usr/local/maven
- 环境变量配置: 修改 /etc/profile
# 配置的 /etc/profile 文件内容
root@harbor250:~/my-csp-app# cat /etc/profile
。。。
# ================== JAVA & MAVEN CONFIG ==================
# 设置 JDK 1.8 为主 JAVA_HOME
export JAVA_HOME=/usr/local/java/jdk8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
# 设置 Maven
export MAVEN_HOME=/usr/local/maven/apache-maven-3.8.8
# 将它们加入系统 PATH (注意 JAVA_HOME 要放在最前面,以覆盖系统自带的 Java 11)
export PATH=${JAVA_HOME}/bin:${MAVEN_HOME}/bin:$PATH
# =========================================================

2. 配置 Maven 阿里云镜像加速
默认 Maven 中央仓库在国外,下载极慢。必须修改 settings.xml 配置国内镜像。
- 配置文件路径: /usr/local/maven/.../conf/settings.xml
- 修改位置: 在 <mirrors> 标签内部添加。
<!-- 阿里云公共仓库加速配置 -->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
第二部分:私有 SDK 的安装与管理
CSP SDK是私有提供的Jar包集合,无法直接从公共仓库下载,必须手动安装到本地Maven仓库 。

1. SDK 目录结构分析
解压 csp-sdk-v5.zip后,发现它是Maven仓库缓存结构(无源码,无根 pom.xml),因此无法直接mvn install。

2. 编写自动化安装脚本
为了批量安装几十个 Jar 包,编写了 auto_install.sh 脚本,自动扫描 .pom 文件并安装。
#!/bin/bash
# 查找当前目录下所有的 .pom 文件
find . -name "*.pom" | while read pomfile; do
# 推测对应的 jar 文件名 (把 .pom 替换为 .jar)
jarfile="${pomfile%.pom}.jar"
echo "正在处理: $pomfile"
if [ -f "$jarfile" ]; then
# 如果有 jar 包,就安装 jar 和 pom
mvn install:install-file -Dfile="$jarfile" -DpomFile="$pomfile" -Dmaven.test.skip=true
else
# 如果只有 pom (通常是父工程),就只安装 pom
mvn install:install-file -Dfile="$pomfile" -DpomFile="$pomfile" -Dpackaging=pom -Dmaven.test.skip=true
fi
done
echo "========================================"
echo " 所有 SDK 组件已安装完成!"
echo "========================================"
3. 执行安装
执行脚本后,观察到 Maven 批量安装日志。

第三部分:Java 应用开发 (Spring Boot + CSP SDK)
1. 创建 Maven 工程
- 项目名: my-csp-app (或 xiuxiantest)
- POM 依赖配置: 核心是引入 spring-cloud-starter-cecloud-csp-gov。
root@harbor250:~/my-csp-app# cat pom.xml
。。。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入 CSP 核心依赖 -->
<!-- 注意:这个 groupId 我是根据目录反推的,通常是 com.cecloud.csp -->
<dependency>
<groupId>com.cecloud.csp</groupId>
<artifactId>spring-cloud-starter-cecloud-csp-gov</artifactId>
<!-- 这里的版本号必须和 auto_install.sh 里安装进去的版本一致 -->
<!-- 刚才 ls 看到了 2021.0.1.0.v5.0 -->
<version>2021.0.1.0.v5.0</version>
</dependency>
</dependencies>
。。。
2. 编写业务代码
创建一个简单的 Controller 用于验证服务存活及网络连通性。
root@harbor250:~/my-csp-app/src/main/java/com/example# cat App.java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Hello CSP! Deployment Successful!";
}
}
3. 应用配置 (bootstrap.yaml)
配置应用名称及 Nacos 注册中心地址(支持环境变量注入)。
root@harbor250:~/my-csp-app/src/main/java/com/example# cat /root//my-csp-app/src/main/resources/bootstrap.yaml
server:
port: 8080
spring:
application:
name: xiuxiantest
cloud:
nacos:
discovery:
server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848}
config:
server-addr: ${NACOS_SERVER_ADDR:127.0.0.1:8848}
4. 本地编译
执行 mvn clean package,生成可运行的 Jar 包。

1. 编写 Dockerfile
遇到的坑: Docker Hub 官方源 (docker.io) 在国内无法访问,导致 FROM openjdk:8-jdk-alpine 超时报错。
解决方案: 修改 Dockerfile 使用华为云/阿里云的代理镜像源。
root@harbor250:~/my-csp-app# cat Dockerfile
# 1. 基础镜像(使用轻量级的 Alpine Linux + JDK 8)
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/openjdk:8-jdk-alpine
# 2. 设置维护者信息(可选)
MAINTAINER DevUser
# 3. 设置时区为上海(防止日志时间差8小时)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
# 4. 把刚才生成的 Jar 包拷贝进容器,重命名为 app.jar
# 注意:这里的路径 target/... 是相对于 Dockerfile 所在的目录
COPY target/my-csp-app-1.0.0.jar /app.jar
# 5. 暴露 8080 端口
EXPOSE 8080
# 6. 启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
2. 解决镜像仓库网络问题
遇到的坑: docker login 报错 Network is unreachable。
原因: /etc/hosts 配置错误,将仓库域名解析到了 IPv6 多播地址。
解决: 修正 hosts 文件,绑定正确的 IPv4 地址。
root@harbor250:~/my-csp-app# cat /etc/hosts
10.255.113.4 testoor.registry.df-region.dfcecloud.com
3. 构建与推送
root@harbor250:~/my-csp-app# docker build -t testoor.registry.df-region.dfcecloud.com/library/my-csp-app:v1 .
root@harbor250:~/my-csp-app# docker images
root@harbor250:~/my-csp-app# docker login --username=zhang testoor.registry.df-region.dfcecloud.com
root@harbor250:~/my-csp-app# docker tag testoor.registry.df-region.dfcecloud.com/library/my-csp-app:v1 testoor.registry.df-region.dfcecloud.com/test/myjava:v1
root@harbor250:~/my-csp-app# docker push testoor.registry.df-region.dfcecloud.com/test/myjava:v1
已经成功推送!

第五部分:云平台应用部署
1、新建应用
CSP-应用发布-新建应用

应用创建完成后-新建部署计划

选择名称、集群、、命名空间、镜像仓库跟版本(此处选择刚才构建的镜像)

选择参数、副本数、资源限制

选择访问方式、端口号

选择完选择保存并部署

2. 部署结果
等待实例状态变为 “运行中 (Running)” 。

在 Pod 内部(kubectl exec 进去后),尝试使用这个命令:

输出Hello CSP! Deployment Successful!,大获全胜!
第六部分:深度故障排查 (Troubleshooting)
这是本次实战中最耗时、也是最有价值的部分。
故障 1:K8s 集群节点震荡 (NotReady)
- 现象: 节点一会儿 Ready 一会儿 NotReady,报错 PLEG is not healthy。
- 根本原因: 云平台镜像模板问题,预装的 Kubelet (v1.22) 与 CRI-O (v1.25) 版本严重不兼容,跨越了 3 个次版本,导致 API 调用超时。
- 解决思路: 必须升级 K8s 组件或重建集群以对齐版本。
故障 2:网页“查看日志”报错 Connection Refused
- 现象: 实例已运行,但网页点击“日志”报错 dial tcp 10.0.11.6:10250: connection refused。
- 原因: Worker 节点的 Kubelet 进程挂掉(因版本不兼容)或者 防火墙 (Firewalld) 拦截了 10250 端口。
- 解决: SSH 登录节点,systemctl restart kubelet 并 systemctl stop firewalld。
故障 3:Pod 无法访问 (Curl Hanging)
- 现象: 在外部机器 curl 节点的 NodePort 卡住不动。
- 原因: 云平台 安全组 (Security Group) 默认未放行自定义的 NodePort (如 30088)。
- 解决: 在云平台 ECS 控制台添加入方向规则,放行 TCP 端口。