K8S的使用
K8S的使用
1. 你需要准备什么?
一个应用程序:比如一个网站、一个API服务,或者任何你想运行的程序。
容器化工具:比如Docker,用来把你的应用程序打包成容器。
Kubernetes集群:可以是一个本地的测试集群(比如Minikube),也可以是云服务提供的K8S集群(比如Google Kubernetes Engine, AWS EKS等)。
Kubectl:这是K8S的命令行工具,用来和K8S集群交互。
2. 第一步:把你的应用打包成容器
K8S管理的是容器,所以你需要先把你的应用程序打包成容器。最常用的工具是Docker。
举个例子:
假设你有一个用Python写的Web应用,代码在app.py
文件中。你可以创建一个Dockerfile
文件,内容如下:
# 使用Python官方镜像作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制代码到容器中
COPY . .
# 安装依赖
RUN pip install -r requirements.txt
# 暴露端口
EXPOSE 80
# 启动应用
CMD ["python", "app.py"]
然后,运行以下命令来构建Docker镜像:
docker build -t my-web-app:1.0 .
这会把你的应用打包成一个名为my-web-app
的Docker镜像,版本号为1.0
。
3. 第二步:编写K8S配置文件
K8S通过YAML文件来定义如何运行你的应用。你需要创建一个YAML文件,告诉K8S:
运行多少个副本(Pod)。
如何访问你的应用。
需要多少资源(CPU、内存等)。
举个例子:
创建一个文件叫my-web-app.yaml
,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-web-app
spec:
replicas: 3 # 运行3个副本
selector:
matchLabels:
app: my-web-app
template:
metadata:
labels:
app: my-web-app
spec:
containers:
- name: my-web-app
image: my-web-app:1.0 # 使用你刚才打包的Docker镜像
ports:
- containerPort: 80 # 容器暴露的端口
---
apiVersion: v1
kind: Service
metadata:
name: my-web-app-service
spec:
selector:
app: my-web-app
ports:
- protocol: TCP
port: 80 # 外部访问的端口
targetPort: 80 # 容器内部的端口
type: LoadBalancer # 外部访问类型
这个文件定义了两部分:
Deployment:告诉K8S运行3个副本的
my-web-app
,使用你打包的Docker镜像。Service:告诉K8S如何暴露你的应用,让外部可以访问。
4. 第三步:部署到K8S集群
现在你已经有了Docker镜像和K8S配置文件,接下来就是把应用部署到K8S集群中。
4.1 启动K8S集群
如果你还没有K8S集群,可以使用Minikube来创建一个本地测试集群:
minikube start
4.2 使用Kubectl部署应用
运行以下命令来部署你的应用:
kubectl apply -f my-web-app.yaml
K8S会读取这个YAML文件,并按照文件中的定义启动3个Pod(副本),同时创建一个Service来暴露你的应用。
5. 第四步:查看和管理你的应用
部署完成后,你可以使用Kubectl来查看和管理你的应用。
5.1 查看Pod状态
运行以下命令查看Pod的状态:
kubectl get pods
你会看到类似这样的输出:
NAME READY STATUS RESTARTS AGE
my-web-app-5f7b8c6d8b-abcde 1/1 Running 0 1m
my-web-app-5f7b8c6d8b-fghij 1/1 Running 0 1m
my-web-app-5f7b8c6d8b-klmno 1/1 Running 0 1m
这表示你的3个Pod都在正常运行。
5.2 查看Service状态
运行以下命令查看Service的状态:
kubectl get services
你会看到类似这样的输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-web-app-service LoadBalancer 10.96.123.45 <pending> 80:30000/TCP 1m
这表示你的应用已经通过Service暴露出来了。
5.3 访问你的应用
如果你使用的是Minikube,可以运行以下命令获取应用的访问地址:
minikube service my-web-app-service
这会打开浏览器,访问你的Web应用。
6. 第五步:扩展和管理
K8S的强大之处在于它可以自动管理你的应用。比如:
扩展副本数量:如果你需要更多的Pod来处理流量,可以运行:
kubectl scale deployment my-web-app --replicas=5
这会把Pod的数量从3个扩展到5个。
更新应用:如果你更新了代码并打包了新版本的Docker镜像(比如
my-web-app:2.0
),可以修改YAML文件中的image
字段,然后重新运行:kubectl apply -f my-web-app.yaml
K8S会自动滚动更新你的应用。
查看日志:如果某个Pod出了问题,可以查看它的日志:
kubectl logs <pod-name>