久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Kubernetes中如何實現運行單實例的有狀態(tài)服務

159次閱讀
沒有評論

共計 4137 個字符,預計需要花費 11 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關 Kubernetes 中如何實現運行單實例的有狀態(tài)服務,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

目標

在你的環(huán)境中創(chuàng)建一個 PV
創(chuàng)建一個 MySQl 的 Deployment
在集群中以 DNS 名稱的方式,將 MySQL 暴露給其他的 pod

開始之前

你需要一個 Kubernetes 集群,一個可以連接到集群的 kubectl 命令行工具。如果你沒有集群,你可以使用 Minikube 來創(chuàng)建。
我們會創(chuàng)建一個 PV(PersistentVolume)用于數據存儲。點擊這里來查看 PV 支持的類型,該指導會使用 GCEPersistentDisk 來演示,但其實任何的 PV 類型都可以正常工作。GCEPersistentDisk 只能在 Google Compute Engine(GCE)上工作。

在你的環(huán)境中創(chuàng)建磁盤

在 Google Compute Engine,運行:

gcloud compute disks create --size=20GB mysql-disk

然后創(chuàng)建一個 PV,指向剛剛創(chuàng)建的 mysql-disk。下面是一個創(chuàng)建 PV 的配置文件,指向上面提到的 GCE 磁盤:

apiVersion: v1
kind: PersistentVolume
metadata:
 name: mysql-pv
spec:
 capacity:
 storage: 20Gi
 accessModes:
 - ReadWriteOnce
 gcePersistentDisk:
 pdName: mysql-disk
 fsType: ext4

注意 pdName: mysql-disk 這一行匹配上面 GCE 環(huán)境創(chuàng)建磁盤的名稱。如果要在其他環(huán)境中創(chuàng)建 PV,可以查看 Persistent Volumes 來獲取詳細信息。
創(chuàng)建 PV:

kubectl create -f https://k8s.io/docs/tasks/run-application/gce-volume.yaml

部署 MySQL

你可以通過 Kubernetes Deployment 的方式來創(chuàng)建一個有狀態(tài)服務,然后使用 PVC(PersistentVolumeClaim)來連接已經存在的 PV。比如,下面的 YAML 文件描述了一個運行 MySQL 并使用 PVC 的 Deployment。文件定義了一個 mount 到 /var/lib/mysql 的卷,并創(chuàng)建了一個需要 20G 卷大小的 PVC。
注意:密碼定義在 YAML 配置文件中,這是不安全的。查看 Kubernetes Secrets 獲取更安全的方案。

apiVersion: v1
kind: Service
metadata:
 name: mysql
spec:
 ports:
 - port: 3306
 selector:
 app: mysql
 clusterIP: None
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
 name: mysql-pv-claim
spec:
 accessModes:
 - ReadWriteOnce
 resources:
 requests:
 storage: 20Gi
apiVersion: apps/v1beta1
kind: Deployment
metadata:
 name: mysql
spec:
 strategy:
 type: Recreate
 template:
 metadata:
 labels:
 app: mysql
 spec:
 containers:
 - image: mysql:5.6
 name: mysql
 env:
 # Use secret in real usage
 - name: MYSQL_ROOT_PASSWORD
 value: password
 ports:
 - containerPort: 3306
 name: mysql
 volumeMounts:
 - name: mysql-persistent-storage
 mountPath: /var/lib/mysql
 volumes:
 - name: mysql-persistent-storage
 persistentVolumeClaim:
 claimName: mysql-pv-claim

1. 部署 YAML 文件中的內容。

kubectl create -f https://k8s.io/docs/tasks/run-application/mysql-deployment.yaml

2. 顯示 Deployment 的信息。

kubectl describe deployment mysql
 Name: mysql
 Namespace: default
 CreationTimestamp: Tue, 01 Nov 2016 11:18:45 -0700
 Labels: app=mysql
 Selector: app=mysql
 Replicas: 1 updated | 1 total | 0 available | 1 unavailable
 StrategyType: Recreate
 MinReadySeconds: 0
 OldReplicaSets:  none 
 NewReplicaSet: mysql-63082529 (1/1 replicas created)
 Events:
 FirstSeen LastSeen Count From SubobjectPath Type Reason Message
 --------- -------- ----- ---- ------------- -------- ------ -------
 33s 33s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set mysql-63082529 to 1

3. 顯示 Deployment 創(chuàng)建的 pod。

kubectl get pods -l app=mysql
 NAME READY STATUS RESTARTS AGE
 mysql-63082529-2z3ki 1/1 Running 0 3m

4. 檢查 PV。

 kubectl describe pv mysql-pv
 Name: mysql-pv
 Labels:  none 
 Status: Bound
 Claim: default/mysql-pv-claim
 Reclaim Policy: Retain
 Access Modes: RWO
 Capacity: 20Gi
 Message: 
 Source:
 Type: GCEPersistentDisk (a Persistent Disk resource in Google Compute Engine)
 PDName: mysql-disk
 FSType: ext4
 Partition: 0
 ReadOnly: false
 No events.

5. 檢查 PVC。

 kubectl describe pvc mysql-pv-claim
 Name: mysql-pv-claim
 Namespace: default
 Status: Bound
 Volume: mysql-pv
 Labels:  none 
 Capacity: 20Gi
 Access Modes: RWO
 No events.

訪問 MySQL 實例

前面的 YAML 文件創(chuàng)建了一個服務,允許集群的其他 Pod 可以訪問數據庫。服務選項 clusterIP:None 使得服務的 DNS 名直接解析為 Pod 的 IP 地址。當你的服務只有一個 Pod,并且你不打算增加 Pod 的數量時,這是一種最佳的使用方式。
運行一個 Mysql 客戶端來連接 Mysql 服務:

kubectl run -it --rm --image=mysql:5.6 mysql-client -- mysql -h  pod-ip  -ppassword

上面的命令在集群中創(chuàng)建了一個新的 Pod,該 Pod 運行了一個 mysql 客戶端,連接著上面服務的 Mysql Server。如果它連接成功,也就說明了這個有狀態(tài)的 MySQL 數據庫成功啟動和運行了。

Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: false
If you don t see a command prompt, try pressing enter.
mysql

更新

更新 Deployment 的鏡像或者其他部分,同樣可以照例使用 kubectl apply 命令來完成。以下是使用有狀態(tài)應用時需要注意的地方:

不要擴容該應用。該應用只針對單例應用。下面的 PV 只能映射給一個 Pod。對于集群的有狀態(tài)應用,請查看 StatefulSet 文檔。

在 Deployment 的 YAML 配置文檔中使用 strategy: type: Recreate。它會告訴 Kubernetes 不要使用 rolling update。因為 Rolling update 不會工作,因此不會有多個 Pod 同時運行。策略 Recreate 會在使用更新配置創(chuàng)建一個新的 Pod 時刪除之前的 Pod。

刪除 Deployment

通過名稱來刪除 Deployment 對象:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv

另外,如果你使用的是 GCE disk,還需要刪除對應的 disk:

gcloud compute disks delete mysql-disk

關于“Kubernetes 中如何實現運行單實例的有狀態(tài)服務”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計4137字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 永州市| 镇宁| 马鞍山市| 泸水县| 珠海市| 定安县| 大港区| 平安县| 南丰县| 万盛区| 平远县| 余干县| 股票| 阳信县| 赤城县| 镇雄县| 安泽县| 吴川市| 绿春县| 永和县| 河曲县| 林甸县| 沂南县| 商城县| 高安市| 荔浦县| 兴安县| 浮梁县| 会同县| 龙泉市| 南昌市| 河北省| 思南县| 耒阳市| 平顶山市| 二连浩特市| 皋兰县| 莱阳市| 南和县| 阳东县| 尼木县|