# 基于K8S的微服务架构教程

## 流程概述
在本教程中,我们将学习如何基于Kubernetes(K8S)构建一个微服务架构。微服务架构是一种将应用程序拆分为多个小型独立服务的方法,每个服务都运行在自己的进程中,并可以独立部署和扩展。

下表列出了实现基于K8S的微服务架构的主要步骤:

| 步骤 | 描述 |
| --- | --- |
| 1 | 创建一个K8S集群 |
| 2 | 构建Docker镜像并上传到镜像仓库 |
| 3 | 部署微服务到K8S集群 |
| 4 | 安装和配置Ingress控制器 |
| 5 | 配置Ingress资源路由流量到不同的微服务 |

## 步骤详解
### 1. 创建一个K8S集群
首先,我们需要创建一个K8S集群,可以使用minikube来快速搭建一个本地的单节点集群。在终端窗口中执行以下命令:

```bash
minikube start
```

### 2. 构建Docker镜像并上传到镜像仓库
编写一个简单的微服务应用,并将其构建成一个Docker镜像。在应用根目录下创建一个Dockerfile文件,内容如下:

```Dockerfile
FROM node:14

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm install
COPY . .

EXPOSE 3000

CMD ["node", "index.js"]
```

构建并上传Docker镜像到Docker Hub,执行以下命令:

```bash
docker build -t my-service .
docker tag my-service your-docker-username/my-service
docker push your-docker-username/my-service
```

### 3. 部署微服务到K8S集群
创建一个Deployment资源来部署微服务到K8S集群。创建一个名为`my-service-deployment.yaml`的YAML文件,内容如下:

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

在终端执行以下命令部署微服务:

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

### 4. 安装和配置Ingress控制器
安装和配置Ingress控制器来暴露服务给外部流量。可以使用NGINX Ingress Controller。执行以下命令安装Ingress Controller:

```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
```

### 5. 配置Ingress资源路由流量到不同的微服务
创建一个Ingress资源来路由流量到部署的微服务。创建一个名为`ingress.yaml`的YAML文件,内容如下:

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: my-service.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 3000
```

应用Ingress规则到K8S集群:

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

至此,您已经成功搭建了基于K8S的微服务架构。现在可以通过`my-service.com`访问您的微服务应用程序。

通过本教程,您学会了如何基于K8S构建一个简单的微服务架构,祝您早日成为一名优秀的微服务架构师!