K8S的使用

12
0
0
2025-01-14

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  # 外部访问类型

这个文件定义了两部分:

  1. Deployment:告诉K8S运行3个副本的my-web-app,使用你打包的Docker镜像。

  2. 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>