中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kubernetes中如何實現運行單實例的有狀態服務

發布時間:2021-11-19 11:07:26 來源:億速云 閱讀:109 作者:小新 欄目:云計算

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

目標

  在你的環境中創建一個PV
  創建一個MySQl的Deployment
  在集群中以DNS名稱的方式,將MySQL暴露給其他的pod

開始之前

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

在你的環境中創建磁盤

  在Google Compute Engine,運行:

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

  然后創建一個PV,指向剛剛創建的mysql-disk。下面是一個創建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環境創建磁盤的名稱。如果要在其他環境中創建PV,可以查看Persistent Volumes來獲取詳細信息。
  創建PV:

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

部署MySQL

  你可以通過Kubernetes Deployment的方式來創建一個有狀態服務,然后使用PVC(PersistentVolumeClaim)來連接已經存在的PV。比如,下面的YAML文件描述了一個運行MySQL并使用PVC的Deployment。文件定義了一個mount到/var/lib/mysql的卷,并創建了一個需要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創建的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文件創建了一個服務,允許集群的其他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

  上面的命令在集群中創建了一個新的Pod,該Pod運行了一個mysql客戶端,連接著上面服務的Mysql Server。如果它連接成功,也就說明了這個有狀態的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命令來完成。以下是使用有狀態應用時需要注意的地方:

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

  •   在Deployment的YAML配置文檔中使用strategy: type: Recreate。它會告訴Kubernetes不要使用rolling update。因為Rolling update不會工作,因此不會有多個Pod同時運行。策略Recreate會在使用更新配置創建一個新的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中如何實現運行單實例的有狀態服務”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽江市| 五河县| 盱眙县| 遂溪县| 江津市| 库伦旗| 内江市| 闽清县| 蚌埠市| 改则县| 安福县| 搜索| 青神县| 肇源县| 神农架林区| 鄂尔多斯市| 东乌珠穆沁旗| 天津市| 桐城市| 平潭县| 永州市| 眉山市| 西宁市| 镇康县| 梧州市| 新田县| 当涂县| 昆山市| 包头市| 玛纳斯县| 崇仁县| 山丹县| 云龙县| 会昌县| 时尚| 万源市| 方正县| 定边县| 河北省| 曲阜市| 武强县|