本文轉自Rancher Labs
介紹PostgreSQL和Pgweb
PostgreSQL是一款以可靠性和性能為人所熟知的開源資料庫,它在很多行業和應用程式中都有應用,尤其是web開發人員的最愛,從node.js到Django再到Rails和Spring,所有主流web框架均原生支持PostgreSQL,所以其適應性在整個互聯網的網站后臺系統中是相當廣泛的,
與任何資料庫一樣,開發人員需要工具來使用它們,Pgweb是一個開源的、基于web的PostgreSQL客戶端,它有一個非常簡潔的界面,讓你可以連接到任何PostgreSQL實體來瀏覽資料表,運行查詢和匯出資料,對于輕量級的資料庫作業來說,它比pgAdmin等應用程式更加輕量級和方便,
在安全方面,向互聯網開放資料庫埠是一個糟糕的想法,需要快速訪問除錯運行在Kubernetes集群上的生產資料庫的開發人員可以通過多種方式設定Pgweb來保證資料庫的安全,并保持其安全態勢,例如,將Pgweb部署到與資料庫相同的集群中,并將其公開暴露,同時保持資料庫埠只能在網路內部訪問,將Pgweb放在Oauth2代理后面,以獲得額外的一層認證,然后就可以從任何地方超級簡單和超級安全地訪問資料庫了,
Pgweb可以在Linux、macOS或Windows上本地運行,但我們今天要探討的是將它部署到你的Kubernetes集群中,在這篇文章中,我們將把Pgweb鏡像作為一個pod部署到我們的集群中,使用Kubernetes服務暴露它,部署PostgreSQL并暴露它(但只在集群內以獲得最大的安全性),然后連接到資料庫,最后,我們將通過Rancher作為作業負載重新部署一切,看看Rancher讓你的應用程式啟動和運行變得多么容易,

前期準備
要完成本文的教程指南,你需要提前準備以下東西:
-
Rancher deployment(你可以查看官網的快速指南了解如何啟動并運行Rancher:https://www.rancher.cn/quick-start/)
-
由Rancher管理的Kubernetes集群(根據這一檔案匯入或配置一個集群:https://rancher2.docs.rancher.cn/docs/cluster-provisioning/_index)
部署Pgweb
創建一個名為pgweb.yaml的新檔案,將以下內容粘貼進去,然后應用該檔案來部署你的pod和服務,
apiVersion: v1
kind: Pod
metadata:
labels:
run: pgweb
name: pgweb
spec:
containers:
- image: sosedoff/pgweb
name: pgweb
ports:
- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
labels:
run: pgweb
name: pgweb-svc
spec:
ports:
- port: 8081
targetPort: 8081
protocol: TCP
type: NodePort
selector:
run: pgweb
kubectl apply -f pgweb.yaml
pod/pgweb created
service/pgweb-svc created
然后獲取服務資訊,找到正在使用的節點埠;在本文中,它是31338,你的可能會有所不同,但一般會在30000-32767范圍內,
kubectl get svc pgweb-svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
pgweb-svc NodePort 10.96.47.248 <none> 8081:31338/TCP 9s
現在在瀏覽器中進入一個該埠上的節點的公共IP,找到你的公關IP以及根據你的設定打開必要的防火墻埠,如果一切順利,你將會看到Pgweb登錄頁面,

如果你在訪問節點埠時遇到問題,埠轉發(port forwarding)在緊要關頭也能發揮作用,
現在我們需要一個資料庫來訪問,
使用示例資料部署PostgreSQL
與Pgweb類似,我們將使用一個YAML manifest在Kubernetes中部署PostgreSQL,這個稍微有些困難,我們將保留默認的ClusterIP服務型別,因為我們不希望從集群外部訪問資料庫,否則,我們所有為了保障安全的設定都是白搭,
我們正在使用的鏡像是一個標準的PostgreSQL鏡像,但是已經預載了樣本國家的資料:
https://hub.docker.com/r/ghusta/postgres-world-db
復制以下內容到postgres.yaml中并應用該manifest:
apiVersion: v1
kind: Pod
metadata:
labels:
run: postgres
name: postgres
spec:
containers:
- image: ghusta/postgres-world-db
name: postgres
ports:
- containerPort: 5432
---
apiVersion: v1
kind: Service
metadata:
labels:
run: postgres
name: postgres-svc
spec:
ports:
- port: 5432
targetPort: 5432
protocol: TCP
selector:
run: postgres
kubectl apply -f postgres.yaml
pod/postgres created
service/postgres-svc created
通過集群DNS連接到資料庫
現在回到我們的Pgweb登錄頁面,用以下資訊登錄:
-
Host:postgres-svc.default.svc.cluster.local
-
用戶名:world
-
密碼:world123
-
資料庫:world-db
-
SSL模式:Disable
現在你已經連接到資料庫,點擊左側表格中的“city”:

請注意我們所使用的host名稱,這是Kubernetes的內部DNS在作業,允許你通過名字而不是pod IP連接到服務,第一部分是服務名稱,我們在postgres.yaml檔案中定義了它,第二部分是你的服務所部署的命名空間——本例中為default,接下來,svc明確說明我們使用的是服務名稱(你也可以通過名稱指定pod),最后,cluster.local是集群的默認DNS名,這種架構可以輕松地將pod連接在一起,并利用服務如何優雅地處理副本和隔離離線的pod,
回到Pgweb,點擊頂部的 "Query",嘗試查詢資料庫中的New Zealand,
SELECT * FROM city WHERE country_code like 'NZL'
或者查詢擁有超過80年歷史的城市:
SELECT * FROM country WHERE life_expectancy > 80
你可以花費盡可能多的時間來查看資料,就好像你是一個開發人員正在為一個連接到這個資料庫的應用程式排除故障一樣,當你準備好繼續時,從你的集群中洗掉資源,以便進行下一步:
kubectl delete -f pgweb.yaml
kubectl delete -f postgres.yaml
使用Rancher重新部署
現在我們將重新部署相同的配置,不過這一次我們將使用Rancher來部署作業負載而不是Kubernetes manifest檔案,
-
在【Global】視圖中,打開你要部署作業負載的專案(如果你沒有創建其他專案,默認專案也可以),
-
我們可以匯入YAML檔案,但這一次我們試試全程使用GUI來構建我們的配置,點擊【Deploy】
-
將其命名為
pgweb,并設定Docker鏡像為sosedoff/pgweb, -
點擊【Add Port】,將其命名為
pgweb-svc并設定容器埠為8080 -
點擊【Launch】,Rancher將把你的Pod部署到集群中
-
現在對PostgreSQL pod重復以上步驟,起一個合適的名字并使用
ghusta/postgres-world-db作為鏡像,容器埠為5432,并將服務型別更改為Cluster IP, -
在該頁面上列出你的作業負載,你將看到分配給Pgweb集群的節點埠,使用該埠訪問Pgweb登錄頁面,并使用同一憑據登錄,
-
回到你的terminal,運行
kubectl get pods和kubectl get svc以查看Rancher部署的pod和服務,
結 論
在本文中,我們已經了解了Web開發人員的首選資料庫PostgreSQL和Pgweb客戶端,我們首先使用manifest檔案手動將其部署到我們的Kubernetes集群,然后使用Rancher重新部署,兩相比較,我們可以看到Rancher能夠消除部署和編輯應用程式pods所涉及的一些開銷,希望你可以從部署這些資源中獲得經驗,在設定其他應用程式在多個 pod 之間進行通信(如 WordPress 或自定義 Web 應用程式)的程序中利用這些經驗進一步實踐,
在你的集群公共IP上訪問Pgweb和連接資料庫,這與通過Kubernetes manifest檔案部署兩者時的作業原理是一樣的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71963.html
標籤:其他
上一篇:無編程經驗想學python跟辦公相關的東西,有沒有有經驗的人指導一下
下一篇:python初學者之面向物件求解
