Kubernetes中如何實(shí)現(xiàn)運(yùn)行單實(shí)例的有狀態(tài)服務(wù)

這篇文章將為大家詳細(xì)講解有關(guān)Kubernetes中如何實(shí)現(xiàn)運(yùn)行單實(shí)例的有狀態(tài)服務(wù),小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

10年積累的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有望花免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

目標(biāo)

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

開始之前

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

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

在Google Compute Engine,運(yùn)行:

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

然后創(chuàng)建一個(gè)PV,指向剛剛創(chuàng)建的mysql-disk。下面是一個(gè)創(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來(lái)獲取詳細(xì)信息。
  創(chuàng)建PV:

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

部署MySQL

你可以通過Kubernetes Deployment的方式來(lái)創(chuàng)建一個(gè)有狀態(tài)服務(wù),然后使用PVC(PersistentVolumeClaim)來(lái)連接已經(jīng)存在的PV。比如,下面的YAML文件描述了一個(gè)運(yùn)行MySQL并使用PVC的Deployment。文件定義了一個(gè)mount到/var/lib/mysql的卷,并創(chuàng)建了一個(gè)需要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文件中的內(nèi)容。

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實(shí)例

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

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

上面的命令在集群中創(chuàng)建了一個(gè)新的Pod,該P(yáng)od運(yùn)行了一個(gè)mysql客戶端,連接著上面服務(wù)的Mysql Server。如果它連接成功,也就說(shuō)明了這個(gè)有狀態(tài)的MySQL數(shù)據(jù)庫(kù)成功啟動(dòng)和運(yùn)行了。

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命令來(lái)完成。以下是使用有狀態(tài)應(yīng)用時(shí)需要注意的地方:

  • 不要擴(kuò)容該應(yīng)用。該應(yīng)用只針對(duì)單例應(yīng)用。下面的PV只能映射給一個(gè)Pod。對(duì)于集群的有狀態(tài)應(yīng)用,請(qǐng)查看StatefulSet文檔。

  • 在Deployment的YAML配置文檔中使用strategy: type: Recreate。它會(huì)告訴Kubernetes不要使用rolling update。因?yàn)镽olling update不會(huì)工作,因此不會(huì)有多個(gè)Pod同時(shí)運(yùn)行。策略Recreate會(huì)在使用更新配置創(chuàng)建一個(gè)新的Pod時(shí)刪除之前的Pod。

刪除Deployment

通過名稱來(lái)刪除Deployment對(duì)象:

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

另外,如果你使用的是GCE disk,還需要?jiǎng)h除對(duì)應(yīng)的disk:

gcloud compute disks delete mysql-disk

關(guān)于“Kubernetes中如何實(shí)現(xiàn)運(yùn)行單實(shí)例的有狀態(tài)服務(wù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

網(wǎng)站欄目:Kubernetes中如何實(shí)現(xiàn)運(yùn)行單實(shí)例的有狀態(tài)服務(wù)
本文URL:http://bm7419.com/article14/gijdge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)網(wǎng)站制作、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司