本文主要是在我的上一篇文章--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)。
实例
在项目目录下创建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