## 为什么K8S不需要Spring Cloud

### 流程

| 步骤 | 操作 |
| --- | --- |
| 1 | 创建一个Spring Boot应用程序 |
| 2 | 容器化Spring Boot应用程序 |
| 3 | 部署容器到Kubernetes集群 |
| 4 | 通过Kubernetes服务暴露应用程序 |

### 操作步骤及代码示例

#### 步骤一:创建一个Spring Boot应用程序

首先,我们需要创建一个简单的Spring Boot应用程序。我们可以使用Spring Initializr来快速初始化一个Spring Boot项目。

```java
@SpringBootApplication
@RestController
public class DemoApplication {

@GetMapping("/")
public String hello() {
return "Hello, World!";
}

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}
```

#### 步骤二:容器化Spring Boot应用程序

我们需要将Spring Boot应用程序容器化,以便能够在Kubernetes集群中部署。

Dockerfile示例:

```Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar", "/app.jar"]
```

构建Docker镜像:

```bash
docker build -t demo .
```

#### 步骤三:部署容器到Kubernetes集群

我们需要使用Kubernetes来部署我们的应用程序。首先,我们需要创建一个Deployment和一个Service来部署我们的容器。

Deployment示例:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
selector:
matchLabels:
app: demo
replicas: 3
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: demo
ports:
- containerPort: 8080
```

创建Deployment:

```bash
kubectl apply -f demo-deployment.yaml
```

Service示例:

```yaml
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
```

创建Service:

```bash
kubectl apply -f demo-service.yaml
```

#### 步骤四:通过Kubernetes服务暴露应用程序

现在我们的应用程序已经部署到Kubernetes集群上了,我们可以通过访问Service的外部IP来访问我们的应用程序。

查看Service的外部IP:

```bash
kubectl get svc demo-service
```

访问应用程序:

```bash
curl http://<外部IP>
```

通过以上步骤,我们成功地将一个Spring Boot应用程序部署到了Kubernetes集群上,实现了应用程序的容器化和自动化部署。相比于使用Spring Cloud,Kubernetes提供了更强大的容器编排和管理能力,更适合于微服务架构的部署和管理。因此,Kubernetes不需要依赖Spring Cloud来实现应用程序的部署和运行。