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

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

新聞中心

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

運行一個單實例有狀態(tài)應(yīng)用

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

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

教程目標(biāo) 

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

在開始之前

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

    要獲知版本信息,請輸入 ?kubectl version?。

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

部署 MySQL 

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

注意:在配置的 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:       

訪問 MySQL 實例 

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

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

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

此命令在集群內(nèi)創(chuàng)建一個新的 Pod 并運行 MySQL 客戶端,并通過 Service 連接到服務(wù)器。 如果連接成功,你就知道有狀態(tài)的 MySQL 數(shù)據(jù)庫正處于運行狀態(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 中鏡像或其他部分同往常一樣可以通過 ?kubectl apply? 命令更新。 以下是特定于有狀態(tài)應(yīng)用的一些注意事項:

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

刪除 Deployment 

通過名稱刪除部署的對象:

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

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


分享名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes運行一個單實例有狀態(tài)應(yīng)用
分享網(wǎng)址:http://m.5511xx.com/article/cdoodcp.html