日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)kubernetes教程:Kubernetes運(yùn)行一個(gè)單實(shí)例有狀態(tài)應(yīng)用

運(yùn)行一個(gè)單實(shí)例有狀態(tài)應(yīng)用

本文介紹在 Kubernetes 中如何使用 PersistentVolume 和 Deployment 運(yùn)行一個(gè)單實(shí)例有狀態(tài)應(yīng)用。該應(yīng)用是 MySQL.

創(chuàng)新互聯(lián)公司不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對(duì)營(yíng)銷、技術(shù)、服務(wù)都有自己獨(dú)特見解,公司采取“創(chuàng)意+綜合+營(yíng)銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時(shí),也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來(lái)將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級(jí),滿足企業(yè)一站式全網(wǎng)營(yíng)銷推廣需求,讓再小的品牌網(wǎng)站制作也能產(chǎn)生價(jià)值!

教程目標(biāo) 

  • 在你的環(huán)境中創(chuàng)建一個(gè)引用磁盤的 PersistentVolume
  • 創(chuàng)建一個(gè) MySQL Deployment.
  • 在集群內(nèi)以一個(gè)已知的 DNS 名稱將 MySQL 暴露給其他 Pod

在開始之前

  • 你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
    • Katacoda
    • 玩轉(zhuǎn) Kubernetes

    要獲知版本信息,請(qǐng)輸入 ?kubectl version?。

  • 你需要有一個(gè)帶有默認(rèn) ?StorageClass?的 動(dòng)態(tài) ?PersistentVolume ?供應(yīng)程序, 或者自己靜態(tài)的提供 ?PersistentVolume ?來(lái)滿足這里使用的 ?PersistentVolumeClaim?。

部署 MySQL 

你可以通過(guò)創(chuàng)建一個(gè) Kubernetes Deployment 并使用 PersistentVolumeClaim 將其連接到 某已有的 PV 卷來(lái)運(yùn)行一個(gè)有狀態(tài)的應(yīng)用。 例如,這里的 YAML 描述的是一個(gè)運(yùn)行 MySQL 的 Deployment,其中引用了 PVC 申領(lǐng)。 文件為 /var/lib/mysql 定義了加載卷,并創(chuàng)建了一個(gè) PVC 申領(lǐng),尋找一個(gè) 20G 大小的卷。 該申領(lǐng)可以通過(guò)現(xiàn)有的滿足需求的卷來(lái)滿足,也可以通過(guò)動(dòng)態(tài)供應(yīng)卷的機(jī)制來(lái)滿足。

注意:在配置的 YAML 文件中定義密碼的做法是不安全的。

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  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
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  1. 部署 YAML 文件中定義的 PV 和 PVC:
  2. kubectl apply -f https://K8S.io/examples/application/mysql/mysql-pv.yaml
    
  3. 部署 YAML 文件中定義的 Deployment:
    kubectl apply -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml
    
  4. 展示 Deployment 相關(guān)信息:
    kubectl describe deployment mysql
    

    輸出類似于:

    Name:                 mysql
    Namespace:            default
    CreationTimestamp:    Tue, 01 Nov 2016 11:18:45 -0700
    Labels:               app=mysql
    Annotations:          deployment.kubernetes.io/revision=1
    Selector:             app=mysql
    Replicas:             1 desired | 1 updated | 1 total | 0 available | 1 unavailable
    StrategyType:         Recreate
    MinReadySeconds:      0
    Pod Template:
      Labels:       app=mysql
      Containers:
       mysql:
        Image:      mysql:5.6
        Port:       3306/TCP
        Environment:
          MYSQL_ROOT_PASSWORD:      password
        Mounts:
          /var/lib/mysql from mysql-persistent-storage (rw)
      Volumes:
       mysql-persistent-storage:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  mysql-pv-claim
        ReadOnly:   false
        Conditions:
          Type          Status  Reason
          ----          ------  ------
          Available     False   MinimumReplicasUnavailable
          Progressing   True    ReplicaSetUpdated
          OldReplicaSets:       
          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
  5. 列舉出 Deployment 創(chuàng)建的 pods:
    kubectl get pods -l app=mysql
    

    輸出類似于:

    NAME                   READY     STATUS    RESTARTS   AGE
    mysql-63082529-2z3ki   1/1       Running   0          3m
  6. 查看 PersistentVolumeClaim:
    kubectl describe pvc mysql-pv-claim
    

    輸出類似于:

    Name:         mysql-pv-claim
    Namespace:    default
    StorageClass:
    Status:       Bound
    Volume:       mysql-pv-volume
    Labels:       
    Annotations:    pv.kubernetes.io/bind-completed=yes
                    pv.kubernetes.io/bound-by-controller=yes
    Capacity:     20Gi
    Access Modes: RWO
    Events:       

訪問(wèn) MySQL 實(shí)例 

前面 YAML 文件中創(chuàng)建了一個(gè)允許集群內(nèi)其他 Pod 訪問(wèn)的數(shù)據(jù)庫(kù)服務(wù)。該服務(wù)中選項(xiàng) ?clusterIP: None? 讓服務(wù) DNS 名稱直接解析為 Pod 的 IP 地址。 當(dāng)在一個(gè)服務(wù)下只有一個(gè) Pod 并且不打算增加 Pod 的數(shù)量這是最好的.

運(yùn)行 MySQL 客戶端以連接到服務(wù)器:

kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword

此命令在集群內(nèi)創(chuàng)建一個(gè)新的 Pod 并運(yùn)行 MySQL 客戶端,并通過(guò) Service 連接到服務(wù)器。 如果連接成功,你就知道有狀態(tài)的 MySQL 數(shù)據(jù)庫(kù)正處于運(yùn)行狀態(tài)。

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 中鏡像或其他部分同往常一樣可以通過(guò) ?kubectl apply? 命令更新。 以下是特定于有狀態(tài)應(yīng)用的一些注意事項(xiàng):

  • 不要對(duì)應(yīng)用進(jìn)行規(guī)模擴(kuò)縮。這里的設(shè)置僅適用于單實(shí)例應(yīng)用。下層的 PersistentVolume 僅只能掛載到一個(gè) Pod 上。
  • 在 Deployment 的 YAML 文件中使用 ?strategy:? ?type: Recreate?。 該選項(xiàng)指示 Kubernetes 不 使用滾動(dòng)升級(jí)。滾動(dòng)升級(jí)無(wú)法工作,因?yàn)檫@里一次不能 運(yùn)行多個(gè) Pod。在使用更新的配置文件創(chuàng)建新的 Pod 前,?Recreate ?策略將 保證先停止第一個(gè) Pod。

刪除 Deployment 

通過(guò)名稱刪除部署的對(duì)象:

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

如果通過(guò)手動(dòng)的方式供應(yīng) PersistentVolume, 那么也需要手動(dòng)刪除它以釋放下層資源。 如果是用動(dòng)態(tài)供應(yīng)方式創(chuàng)建的 PersistentVolume,在刪除 PersistentVolumeClaim 后 PersistentVolume 將被自動(dòng)刪除。 一些存儲(chǔ)服務(wù)(比如 EBS 和 PD)也會(huì)在 PersistentVolume 被刪除時(shí)自動(dòng)回收下層資源。


本文名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes運(yùn)行一個(gè)單實(shí)例有狀態(tài)應(yīng)用
標(biāo)題路徑:http://www.5511xx.com/article/cdoodcp.html