Flask+Gunicorn+Kubernetes搭建高性能服务框架

本文主要是在我的上一篇文章--Flask+Gunicorn+Docker搭建高性能服务框架的基础上,使用Kubernetes进行微服务管理。

Kubernetes简介

Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。 它支持一系列容器工具, 包括Docker等。
Kubernetes通常用来实现微服务架构,因为它本身以及它的生态组件都是为了实现微服务而设计的。

Kubernetes基本组件介绍

Kubernetes在设计结构上定义了一系列的构建模块,其目的是为了提供一个可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计概念为松耦合和可扩展的,这样可以使之满足多种不同的工作负载。

Pod

Kubernetes的基本调度单元称为“pod”。通过该种抽象类别可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用同一端口,而避免了发生冲突的问题。 Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。

Services

Kubernetes服务本质是一组协同工作的pod,类同多层架构应用中的一层。构成服务的pod组通过标签选择器来定义。Kubernetes通过给服务分配静态IP地址和域名来提供服务发现机制,并且以轮循调度的方式将流量负载均衡到能与选择器匹配的pod的IP地址的网络连接上(即使是故障导致pod从一台机器移动到另一台机器)。 默认情况下,服务任务会暴露在集群中(例如,多个后端pod可能被分组成一个服务,前端pod的请求在它们之间负载平衡);除此以外,服务任务也可以暴露在集群外部(例如,从客户端访问前端pod)。

image.png

实例

在项目目录下创建test.yaml,来做Kubernetes的配置。

apiVersion: v1
kind: Service
metadata:
  name: tomliu-flaskhp-service
spec:
  selector:
    app: tomliu-flaskhp
  ports:
  - protocol: "TCP"
    port: 5000 --端口配置
    targetPort: 5000
  type: LoadBalancer

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomliu-flaskhp
spec:
  selector:
    matchLabels:
      app: tomliu-flaskhp
  replicas: 1
  template:
    metadata:
      labels:
        app: tomliu-flaskhp
    spec:
      containers:
      - name: tomliu-flaskhp
        image: tomliu-flaskhp:latest
        imagePullPolicy: Never  --不从远程拉取
        volumeMounts: --映射docker中的项目目录
        - mountPath: /microservice
          name: test-volume
        ports:
        - containerPort: 5000
      volumes:
       - name: test-volume --名字要与volumeMounts中一致
         hostPath:
           path: /Users/liutom/PycharmProjects/tt/mygithub--此处为你主机的本地目录
           type: Directory

volumes的配置,是为了把Kubernetes的应用程序日志导出到/Users/liutom/PycharmProjects/tt/mygithub/logs中,方便查看。如果没有配置volumes,pod上运行的应用程序日志,是无法被直接查看的。

在项目目录下,运行命令kubectl apply -f test.yaml

192:mygithub liutom$ kubectl apply -f test.yaml
service/tomliu-flaskhp-service created
deployment.apps/tomliu-flaskhp created
192:mygithub liutom$ kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
tomliu-flaskhp-68c5b55bcd-t6gng   1/1     Running   0          3s

可以看到应用正常启动~
本项目完整代码,见我的github,https://github.com/tomliu112/flask-docker-hp

你可能感兴趣的:(Flask+Gunicorn+Kubernetes搭建高性能服务框架)