# **DevOps学院K8S集训营项目教学**

## **项目概述**

在本项目中,我们将使用Kubernetes(K8S)来构建和管理一个容器化的应用程序,这个应用程序是DevOps学院的集训营平台。通过这个项目,你将学会如何使用K8S来部署、扩展和管理应用程序,并且了解K8S在DevOps实践中的重要性。

## **项目流程**

以下是本项目的主要步骤,通过这些步骤,你将逐步构建一个完整的K8S集训营平台。

| 步骤 | 描述 |
|------|------------------------------|
| 1 | 部署Kubernetes集群 |
| 2 | 编写应用程序的Docker镜像 |
| 3 | 创建K8S部署和服务yaml文件 |
| 4 | 部署应用程序到K8S集群 |
| 5 | 水平扩展应用程序 |
| 6 | 备份和恢复K8S应用程序 |

## **详细步骤及代码示例**

### **步骤1:部署Kubernetes集群**

在这一步,你需要使用工具如kubeadm、kops或者Minikube来部署一个Kubernetes集群,确保集群正常运行。

```bash
# 安装kubeadm
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
```

### **步骤2:编写应用程序的Docker镜像**

在这一步,你需要编写一个简单的应用程序,并创建Docker镜像以便后续部署到K8S集群中。

```Dockerfile
# Dockerfile
FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
```

### **步骤3:创建K8S部署和服务yaml文件**

编写K8S的部署和服务yaml文件,定义应用程序的部署和服务配置。

```yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-docker-repo/my-app:latest
ports:
- containerPort: 5000

# service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-app-svc
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 5000
type: LoadBalancer
```

### **步骤4:部署应用程序到K8S集群**

使用kubectl命令部署应用程序到K8S集群中。

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

### **步骤5:水平扩展应用程序**

如果需要扩展应用程序的实例数量,可以通过更新部署文件来进行水平扩展。

```bash
kubectl scale deployment my-app --replicas=3
```

### **步骤6:备份和恢复K8S应用程序**

定期备份K8S中的应用程序数据,并确保能够恢复至最近的备份。

```bash
# 备份命令
kubectl get pods -o wide > backups/pods-backup.txt

# 恢复命令
kubectl apply -f backups/pods-backup.txt
```

通过以上步骤,你将完成DevOps学院K8S集训营平台的搭建和管理。希望你能够通过这个项目,更深入地了解Kubernetes在DevOps实践中的应用和重要性。祝你学习顺利!