💻 Windows服务器K8s学习与SpringBoot部署实战指南

📚 学习路径概览

下表列出了从零开始学习K8s并部署SpringBoot应用的关键阶段及主要任务,帮助你清晰规划学习过程。

阶段 主要任务 预期成果
1. 环境准备 安装Docker Desktop,启用Kubernetes,验证安装 准备好本地K8s开发环境
2. K8s核心概念学习 理解Pod/Deployment/Service等核心概念 掌握K8s基本架构和资源模型
3. SpringBoot应用容器化 创建Dockerfile,构建镜像 将Java应用打包为容器镜像
4. K8s部署实战 创建Deployment/Service/Ingress资源配置 成功部署应用到K8s集群
5. 运维与进阶 应用监控、扩缩容、滚动更新 掌握生产环境基本运维技能

🛠 第一阶段:环境安装与配置

1.1 安装Docker Desktop for Windows

在Windows服务器上安装Docker Desktop是运行Kubernetes的前提。Docker Desktop包含了运行容器所需的所有组件,并提供了内置的Kubernetes支持。

访问Docker官网下载Docker Desktop for Windows安装程序,选择Windows版本对应的安装包。安装完成后,启动Docker Desktop,系统托盘中会出现Docker图标。

1.2 启用Kubernetes功能

打开Docker Desktop设置界面,进入"Kubernetes"选项卡,勾选"Enable Kubernetes"选项,点击"Apply & Restart"按钮。Docker Desktop将自动安装Kubernetes集群所需组件(kubectl、kubelet等)。

1.3 验证安装结果

打开PowerShell或命令提示符,执行以下命令验证安装:

sql 复制代码
kubectl version --client
kubectl cluster-info
kubectl get nodes

如果这些命令都能正常执行并显示信息,说明Kubernetes环境已就绪。

📖 第二阶段:Kubernetes核心概念学习

2.1 理解基本资源对象

  • Pod:Kubernetes的最小部署单元,包含一个或多个容器。
  • Deployment:定义Pod的部署策略,支持滚动更新、回滚等操作。
  • Service:提供统一的访问入口,实现负载均衡和服务发现。
  • Ingress:提供HTTP/HTTPS路由功能,实现基于域名的访问。

2.2 初步实践操作

通过简单命令熟悉kubectl工具的基本使用:

ini 复制代码
# 查看集群状态
kubectl get all

# 创建一个简单的Pod
kubectl run my-nginx --image=nginx:latest --port=80

# 查看Pod状态
kubectl get pods

# 暴露Service
kubectl expose pod my-nginx --type=NodePort --port=80

这些基础操作帮助你建立对Kubernetes资源管理的直观认识。

🚀 第三阶段:SpringBoot应用容器化

3.1 准备SpringBoot项目

创建一个简单的SpringBoot项目,包含一个REST接口用于测试:

kotlin 复制代码
@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello, K8s!";
    }
}

确保项目能正常打包:mvn clean package

3.2 创建Dockerfile

在项目根目录创建Dockerfile,定义容器镜像构建过程:

bash 复制代码
# 使用OpenJDK官方镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 复制JAR文件到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 暴露应用端口
EXPOSE 8080

# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]

3.3 构建和测试镜像

执行以下命令构建Docker镜像并在本地测试:

bash 复制代码
# 构建镜像
docker build -t springboot-k8s-demo:v1 .

# 本地运行测试
docker run -p 8080:8080 springboot-k8s-demo:v1

# 访问测试
curl http://localhost:8080/hello

确保应用在容器中能正常运行后再进行下一步。

⚙️ 第四阶段:Kubernetes部署实战

4.1 创建Deployment配置

创建deployment.yaml文件,定义应用的部署规格:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-demo
spec:
  replicas: 2  # 两个副本实现高可用
  selector:
    matchLabels:
      app: springboot-demo
  template:
    metadata:
      labels:
        app: springboot-demo
    spec:
      containers:
      - name: springboot-app
        image: springboot-k8s-demo:v1  # 本地构建的镜像
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "256Mi"
            cpu: "200m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 5

4.2 创建Service配置

创建service.yaml文件,定义如何访问应用:

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: springboot-demo-service
spec:
  selector:
    app: springboot-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: NodePort  # 在本地环境使用NodePort类型

4.3 部署应用到Kubernetes

执行以下命令部署应用:

csharp 复制代码
# 应用配置
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# 查看部署状态
kubectl get deployments
kubectl get pods
kubectl get services

# 查看Pod详细状态
kubectl describe pod <pod名称>

🔍 第五阶段:应用验证与运维

5.1 访问应用

获取服务访问信息并验证应用部署结果:

bash 复制代码
# 查看服务详情,获取NodePort端口
kubectl get svc springboot-demo-service

# 使用端口转发临时访问
kubectl port-forward svc/springboot-demo-service 8080:80

# 访问测试
curl http://localhost:8080/hello

5.2 基本运维操作

掌握日常运维所需的命令和操作:

bash 复制代码
# 查看应用日志
kubectl logs <pod名称>

# 扩展应用实例数量
kubectl scale deployment springboot-demo --replicas=3

# 更新应用镜像(触发滚动更新)
kubectl set image deployment/springboot-demo springboot-app=springboot-k8s-demo:v2

# 查看更新状态
kubectl rollout status deployment/springboot-demo

# 回滚到上一版本
kubectl rollout undo deployment/springboot-demo

🧩 第六阶段:进阶实战与优化

6.1 配置管理(ConfigMap)

创建configmap.yaml,将应用配置外部化:

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  application.properties: |
    server.port=8080
    logging.level.com.example=INFO

在Deployment中引用ConfigMap:

yaml 复制代码
# 在Deployment的容器规格中添加
volumeMounts:
- name: config-volume
  mountPath: /app/config
volumes:
- name: config-volume
  configMap:
    name: app-config

6.2 使用Ingress实现域名访问

创建ingress.yaml,配置基于域名的访问:

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: springboot-ingress
spec:
  rules:
  - host: demo.k8s.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: springboot-demo-service
            port:
              number: 80

💡 学习建议与最佳实践

  1. 迭代学习:从简单部署开始,逐步增加复杂度。
  2. 充分利用资源:由于你拥有大内存服务器,可以部署更复杂的应用(如微服务架构)进行练习。
  3. 版本控制:将所有配置文件纳入Git版本控制。
  4. 日志收集:考虑部署EFK(Elasticsearch、Fluentd、Kibana)栈进行日志管理。
  5. 监控预警:部署Prometheus + Grafana监控套件,监控应用和集群状态。

🗂 项目结构参考

bash 复制代码
k8s-learning/
├── src/                    # SpringBoot源码
├── Dockerfile             # 镜像构建文件
├── k8s/
│   ├── deployment.yaml    # 部署配置
│   ├── service.yaml       # 服务配置
│   ├── ingress.yaml       # 路由配置
│   └── configmap.yaml     # 配置管理
└── README.md              # 项目说明
相关推荐
FreeCode2 小时前
LangChain1.0智能体开发:MCP
后端·langchain·agent
前端小张同学2 小时前
基础需求就用AI写代码,你会焦虑吗?
java·前端·后端
zyb_1234562 小时前
手把手带你入门 TypeORM —— 面向新手的实战指南
后端
爱吃程序猿的喵2 小时前
Spring Boot 常用注解全面解析:提升开发效率的利器
java·spring boot·后端
zyb_1234562 小时前
NestJS 集成 RabbitMQ(CloudAMQP)实战指南
后端
吴祖贤2 小时前
3.3 Spring AI Advisors API
后端
hzbigdog2 小时前
php的CSV大数据导入导出的通用处理类
大数据·后端·php
WZTTMoon3 小时前
从 “完整对象” 视角看Spring 循环依赖
java·spring boot·后端·spring
间彧3 小时前
如何在CI/CD流水线中自动化实现镜像扫描和推送到Harbor?
后端