本文主要是在我的上一篇文章--Flask+Gunicorn+Docker搭建高性能服務(wù)框架的基礎(chǔ)上,使用Kubernetes進行微服務(wù)管理。
Kubernetes簡介
Kubernetes(常簡稱為K8s)是用于自動部署、擴展和管理“容器化(containerized)應(yīng)用程序”的開源系統(tǒng)。該系統(tǒng)由Google設(shè)計并捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。
它旨在提供“跨主機集群的自動部署、擴展以及運行應(yīng)用程序容器的平臺”。 它支持一系列容器工具, 包括Docker等。
Kubernetes通常用來實現(xiàn)微服務(wù)架構(gòu),因為它本身以及它的生態(tài)組件都是為了實現(xiàn)微服務(wù)而設(shè)計的。
Kubernetes基本組件介紹
Kubernetes在設(shè)計結(jié)構(gòu)上定義了一系列的構(gòu)建模塊,其目的是為了提供一個可以共同提供部署、維護和擴展應(yīng)用程序的機制。組成Kubernetes的組件設(shè)計概念為松耦合和可擴展的,這樣可以使之滿足多種不同的工作負(fù)載。
Pod
Kubernetes的基本調(diào)度單元稱為“pod”。通過該種抽象類別可以把更高級別的抽象內(nèi)容增加到容器化組件。一個pod一般包含一個或多個容器,這樣可以保證它們一直位于主機上,并且可以共享資源。Kubernetes中的每個pod都被分配一個唯一的(在集群內(nèi)的)IP地址這樣就可以允許應(yīng)用程序使用同一端口,而避免了發(fā)生沖突的問題。 Pod可以定義一個卷,例如本地磁盤目錄或網(wǎng)絡(luò)磁盤,并將其暴露在pod中的一個容器之中。
Services
Kubernetes服務(wù)本質(zhì)是一組協(xié)同工作的pod,類同多層架構(gòu)應(yīng)用中的一層。構(gòu)成服務(wù)的pod組通過標(biāo)簽選擇器來定義。Kubernetes通過給服務(wù)分配靜態(tài)IP地址和域名來提供服務(wù)發(fā)現(xiàn)機制,并且以輪循調(diào)度的方式將流量負(fù)載均衡到能與選擇器匹配的pod的IP地址的網(wǎng)絡(luò)連接上(即使是故障導(dǎo)致pod從一臺機器移動到另一臺機器)。 默認(rèn)情況下,服務(wù)任務(wù)會暴露在集群中(例如,多個后端pod可能被分組成一個服務(wù),前端pod的請求在它們之間負(fù)載平衡);除此以外,服務(wù)任務(wù)也可以暴露在集群外部(例如,從客戶端訪問前端pod)。

實例
在項目目錄下創(chuàng)建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的應(yīng)用程序日志導(dǎo)出到/Users/liutom/PycharmProjects/tt/mygithub/logs中,方便查看。如果沒有配置volumes,pod上運行的應(yīng)用程序日志,是無法被直接查看的。
在項目目錄下,運行命令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
可以看到應(yīng)用正常啟動~
本項目完整代碼,見我的github,https://github.com/tomliu112/flask-docker-hp