# 基于世界500强的K8S实战

## 概述

Kubernetes(K8S)是一个开源的容器编排引擎,为容器化的应用提供自动化部署、扩展和管理的工具。在本次实战中,我们将利用K8S来搭建一个企业级的微服务架构,模拟世界500强企业的场景。

## 实战流程

下表展示了本次实战的步骤:

| 步骤 | 操作 |
| ------ | ------ |
| 1 | 准备Kubernetes集群 |
| 2 | 创建Deployment |
| 3 | 水平扩展应用 |
| 4 | 使用Service暴露应用 |
| 5 | 应用更新和回滚 |
| 6 | 使用Ingress实现多域名访问 |

### 步骤一:准备Kubernetes集群

首先,需要搭建一个Kubernetes集群。可以使用Minikube进行本地快速搭建,也可以选择云厂商提供的Kubernetes集群服务如GKE(Google Kubernetes Engine)、EKS(Amazon Elastic Kubernetes Service)等。

### 步骤二:创建Deployment

首先,编写一个Deployment的YAML文件,用于定义部署应用的配置。如下所示:

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

然后,使用kubectl命令创建该Deployment:

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

### 步骤三:水平扩展应用

如果需要进行应用的水平扩展,可以直接更新Deployment的replicas字段,或者使用Horizontal Pod Autoscaler(HPA)来自动扩展。以下是使用HPA的示例:

```yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80
```

### 步骤四:使用Service暴露应用

为了让外部能够访问应用,需要创建一个Service。以下是Service的YAML示例:

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

然后,使用kubectl命令创建该Service:

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

### 步骤五:应用更新和回滚

当需要更新应用时,可以直接更新Deployment的image字段,并使用kubectl apply命令进行部署。如果需要回滚到之前的版本,可以使用kubectl rollout undo命令。

### 步骤六:使用Ingress实现多域名访问

如果需要实现多个域名访问不同的服务,可以使用Ingress资源。以下是Ingress的YAML示例:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: myapp1.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
- host: myapp2.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-other-app-service
port:
number: 80
```

然后,使用kubectl命令创建该Ingress:

```bash
kubectl apply -f ingress.yaml
```

通过以上步骤,我们完成了基于世界500强的K8S实战的演练,希望这些内容对你有所帮助。如果有任何问题,欢迎随时与我联系。祝你学习进步!