### K8S运维经验

Kubernetes(K8S)是一个开源的容器编排引擎,可以帮助开发者快速构建、部署和管理容器化的应用程序。在使用K8S进行运维时,我们需要遵循一定的流程来确保系统的稳定性和可靠性。下面我将为你详细介绍K8S运维经验的步骤以及每个步骤需要做什么。

#### 运维流程

| 步骤 | 操作 |
|------|----------------------------|
| 1 | 创建 Deployment |
| 2 | 扩展 Deployment |
| 3 | 更新 Deployment |
| 4 | 通过 Service 暴露应用服务 |
| 5 | 定义 Ingress 路由 |
| 6 | 监控和日志管理 |

#### 步骤一:创建 Deployment

创建一个Deployment来管理应用的容器实例。

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

- **apiVersion**: 引入apps/v1版本的API
- **kind**: 定义资源类型为Deployment
- **metadata**: 定义资源的名称
- **spec**: 指定Deployment的规格,包括副本数、选择器、容器模板等

#### 步骤二:扩展 Deployment

扩展Deployment中的副本数,以增加应用的容量。

```bash
kubectl scale deployment myapp --replicas=5
```

通过kubectl scale命令来扩展Deployment中的副本数。

#### 步骤三:更新 Deployment

更新Deployment中的镜像版本或其他配置。

```bash
kubectl set image deployment/myapp myapp=nginx:1.17
```

使用kubectl set image命令来更新Deployment中的镜像版本。

#### 步骤四:通过 Service 暴露应用服务

创建一个Service来暴露Deployment中的应用服务。

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

定义一个Service资源,并将其指向对应的Deployment。

#### 步骤五:定义 Ingress 路由

配置Ingress来实现对应用的流量路由控制。

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

定义一个Ingress资源,并指定将域名myapp.example.com的流量转发到myapp-service服务。

#### 步骤六:监控和日志管理

通过Prometheus、Grafana等工具进行监控,通过EFK(Elasticsearch、Fluentd、Kibana)进行日志管理。

以上就是K8S运维经验的一般流程和每个步骤的操作方法。希望这些内容对你有所帮助,祝你在K8S的运维过程中顺利!