Kubernetes stateful set講解以及一個基於postgreSQL的具體例子
Stateful Set是Kubernetes 1.9版本新引入的一個概念,用於管理有狀態的應用。
Kubernetes官方文件:
Manages the deployment and scaling of a set of Pods , and provides guarantees about the ordering and uniqueness of these Pods.
Like a Deployment , a StatefulSet manages Pods that are based on an identical container spec. Unlike a Deployment, a StatefulSet maintains a sticky identity for each of their Pods. These pods are created from the same spec, but are not interchangeable: each has a persistent identifier that it maintains across any rescheduling.
StatefulSet由以下幾個部分組成:
1. 用於定義網路標誌(DNS domain)的Headless Service
2. 用於建立PersistentVolumes的volumeClaimTemplates
3. 定義具體應用的StatefulSet
下面我給出了一個實際應用中的StatefulSet的yaml檔案:
---apiVersion: apps/v1kind: StatefulSetmetadata:name: ads-db-statefulsetlabels:component: adsmodule: dbspec:serviceName: ads-db-servicereplicas: 1selector:matchLabels:component: adsmodule: dbtemplate:metadata:labels:component: adsmodule: dbspec:volumes:- name: initsecret:secretName: ads-db-secretitems:- key: initdb.sqlpath: initdb.sqlcontainers:- name: ads-db-podimage: postgres:9.6ports:- containerPort: 5432name: ads-db-portvolumeMounts:- name: ads-db-volumemountPath: /var/lib/postgresql/data/- name: initmountPath: /docker-entrypoint-initdb.d/env:- name: PGDATAvalueFrom:configMapKeyRef:name: ads-db-configmapkey: pgdata_value- name: POSTGRES_PASSWORDvalueFrom:secretKeyRef:name: ads-db-secretkey: postgres_password_valuevolumeClaimTemplates:- metadata:name: ads-db-volumelabels:component: adsmodule: dbspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1Gi
使用kubectl get statefulset檢視生成的statefulset:
生成的headless service:
生成的pod:
當我把statefulset yaml檔案裡的replicas從1改成3之後,果然觀察到有兩個新的pod正在啟動,並且名稱滿足命名規範<stateful set name >-X。
使用kubectl describe檢視建立的statefulset明細:
statefulSet自動建立的persistentVolumeClaim:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgresql/data/pgdata -l logfile start
使用下面的命令登入到statefulset提供的postgreSQL伺服器上:
1. kubectl run tester -it --rm --image=postgres:9.6 --env="PGCONNECT_TIMEOUT=5" --command -- bash
看到root$之後,說明我們已經連線上pod了。
使用如下命令列連線postgreSQL伺服器:
psql -h ads-db-statefulset-0.ads-db-service -p 5432 -U adsuser -W ads
當然如果不用命令列,也可以使用pgadmin,以圖形化介面連線statefulSet裡的postgreSQL伺服器:
sudo apt install pgadmin3
進行埠轉發,這樣我們可以使用localhost:5432進行連線:
kubectl port-forward ads-db-statefulset-0 5432:5432
也能成功連線:
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2220825/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 通過一個具體的例子,講解 SAP Cloud Platform Integration(CPI) 的使用方法CloudPlatform
- 通過一個具體的例子,講解 SAP BDC 技術的使用步驟試讀版
- SAP Spartacus SplitViewComponent Migration 的一個具體例子View
- 使用 Angular Transfer State 的一個具體例子Angular
- RxJS CombineLatest operator 的一個具體使用例子JS
- Angular Reactive Form 的一個具體使用例子AngularReactORM
- 透過一個具體的例子理解 npm 的 peerDependencyNPM
- Media Query 在 CSS 中使用的一個具體例子CSS
- SAP UI5 使用 Smart Control 的一個具體例子UI
- 一個具體的例子學習Java volatile關鍵字Java
- 用個通俗的例子講一講死鎖
- 關於 Spartacus 伺服器端渲染出現 timeout 的一個具體例子的分析伺服器
- SAP CRM WebClient UI cross component跳轉的一個具體例子WebclientUIROS
- 用一個通俗的例子講清楚APIAPI
- SAP ABAP 寫時拷貝(Copy on Write)策略的一個具體例子
- 使用 ViroReact 開發增強實現應用的一個具體例子React
- 精講Flutter官網的第一個例子Flutter
- 基於 abapGit 和 abaplint 的 ABAP 持續整合的一個例子Git
- kubeCDN:一個基於Kubernetes的自託管CDN
- Set集合的具體子類:HashSet
- 舉個例子講解DTO負責幹啥
- 通過一個例子學習Kubernetes裡的PersistentVolumeClaim的用法AI
- 一個例子體會Kubernetes內容器的高可用性和彈性伸縮
- 使用 SAP UI5 系統測試工具 UIVeri5 的一個具體例子UI
- 微前端(Micro Frontend ) 落地實施的一些具體例子前端
- 使用 Node.js Stream API 減少伺服器端記憶體消耗的一個具體例子Node.jsAPI伺服器記憶體
- SAP SEGW 事物碼裡的 ABAP 型別和 EDM 型別對映的一個具體例子型別
- 一個簡單的例子理解Kubernetes的三種IP地址型別型別
- 一個小例子,給你講透典型的 Go 併發操作Go
- 基於 墨刀 以及Adobe Illustrator兩個軟體的原型設計原型
- 將使用回撥函式作為引數的函式改造為返回 Promise 的一個具體例子函式Promise
- ABAP include structure 的一個具體用法Struct
- 基於 SAP Spartacus 的 SAP 電商雲 SEO 搜尋引擎優化的一個例子優化
- 講一個抓住短視訊本地生活紅利創業的例子創業
- 一個簡單的例子瞭解async跟defer
- 關於 Serverless,以及推薦一個好用的 Naive 解決方案ServerAI
- 基於Kubernetes 構建.NET Core 的技術體系
- 基於Kubernetes v1.24.0的叢集搭建(一)