# K8S实战案例:部署一个简单的Web应用

## 流程概述
以下是部署一个简单的Web应用到Kubernetes集群的步骤:

| 步骤 | 描述 |
|------|----------------------------|
| 1 | 创建一个Docker镜像 |
| 2 | 将Docker镜像推送到Docker仓库 |
| 3 | 创建一个Deployment对象 |
| 4 | 创建一个Service对象 |

## 具体步骤

### 步骤1:创建一个Docker镜像

首先,我们需要编写一个简单的Web应用,并创建一个Dockerfile将其打包成镜像。

```Dockerfile
# 使用Node.js官方镜像作为基础镜像
FROM node:12

# 设置工作目录
WORKDIR /app

# 复制应用代码到工作目录
COPY package.json package-lock.json /app/
COPY src /app/src/

# 安装依赖
RUN npm install

# 暴露端口
EXPOSE 3000

# 运行应用
CMD ["node", "src/app.js"]
```

### 步骤2:将Docker镜像推送到Docker仓库

在将Docker镜像推送到Docker仓库之前,确保已经安装了Docker,并登录到Docker仓库。

```bash
# 构建Docker镜像
docker build -t my-web-app .

# 标记Docker镜像
docker tag my-web-app username/my-web-app

# 推送Docker镜像
docker push username/my-web-app
```

### 步骤3:创建一个Deployment对象

使用kubectl创建一个Deployment对象来部署应用到Kubernetes集群。

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

```bash
# 创建Deployment对象
kubectl apply -f deployment.yaml
```

### 步骤4:创建一个Service对象

最后,创建一个Service对象将外部流量引导到部署的应用。

```yaml
apiVersion: v1
kind: Service
metadata:
name: my-web-app
spec:
selector:
app: my-web-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: NodePort
```

```bash
# 创建Service对象
kubectl apply -f service.yaml
```

通过以上步骤,我们成功部署了一个简单的Web应用到Kubernetes集群中。希望这个实战案例能帮助你更好地理解Kubernetes的基本概念和操作方法。如果你有任何疑问,欢迎随时向我提问!