亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

docker中stateful控制器怎么用

發布時間:2021-11-19 11:43:17 來源:億速云 閱讀:115 作者:小新 欄目:開發技術

這篇文章主要介紹了docker中stateful控制器怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

    在應用程序中,可以分為有狀態應用和無狀態應用。

    無狀態的應用更關注于群體,任何一個成員都可以被取代。

    對有狀態的應用是關注個體。

    像我們前面用deployment控制器管理的nginx、myapp等都屬于無狀態應用。

    像mysqlredis,zookeeper等都屬于有狀態應用,他們有的還有主從之分、先后順序之分。

    statefulset控制器能實現有狀態應用的管理,但實現起來也是非常麻煩的。需要把我們運維管理的過程寫入腳本并注入到statefulset中才能使用。雖然互聯網上有人做好了stateful的腳本,但是還是建議大家不要輕易的把redis、mysql等這樣有狀態的應用遷移到k8s上。

    在k8s中,statefulset主要管理一下特效的應用:

        a)、每一個Pod穩定且有唯一的網絡標識符;

        b)、穩定且持久的存儲設備;

        c)、要求有序、平滑的部署和擴展;

        d)、要求有序、平滑的終止和刪除;

        e)、有序的滾動更新,應該先更新從節點,再更新主節點;

     statefulset由三個組件組成:

        a) headless service(無頭的服務,即沒名字);

        b)statefulset控制器

        c)volumeClaimTemplate(存儲卷申請模板,因為每個pod要有專用存儲卷,而不能共用存儲卷)

[root@master ~]# kubectl explain sts   #stateful的簡稱
[root@master stateful]# cat stateful-demo.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  labels:
    app: myapp-svc
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myapp
spec:
  serviceName: myapp-svc
  replicas: 2
  selector:
    matchLabels:
      app: myapp-pod
  template:
    metadata:
      labels:
        app: myapp-pod
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myappdata
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: #存儲卷申請模板,可以為每個pod定義volume;可以為pod所在的名稱空間自動創建pvc。
  - metadata:
      name: myappdata
    spec:
      accessModes: ["ReadWriteOnce"]
      #storageClassName: "gluster-dynamic"
      resources:
        requests:
          storage: 5Gi #2G的pvc
[root@master stateful]# kubectl apply -f stateful-demo.yaml 
service/myapp-svc unchanged
statefulset.apps/myapp created
[root@master stateful]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
myapp-svc    ClusterIP   None            <none>        80/TCP              12m

    看到myapp-svc是無頭服務。

[root@master stateful]# kubectl get sts
NAME      DESIRED   CURRENT   AGE
myapp     2         2         6m
[root@master stateful]# kubectl get pvc
NAME                STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myappdata-myapp-0   Bound     pv002     2Gi        RWO                           3s
myappdata-myapp-1   Bound     pv003     1Gi        RWO,RWX                       1s
[root@master stateful]# kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                       STORAGECLASS   REASON    AGE
pv001     1Gi        RWO,RWX        Retain           Available                                                        1d
pv002     2Gi        RWO            Retain           Bound       default/myappdata-myapp-0                            1d
pv003     1Gi        RWO,RWX        Retain           Bound       default/myappdata-myapp-1                            1d
pv004     1Gi        RWO,RWX        Retain           Bound       default/mypvc                                        1d
pv005     1Gi        RWO,RWX        Retain           Available
[root@master stateful]# kubectl get pods
NAME                             READY     STATUS             RESTARTS   AGE
myapp-0                          1/1       Running            0          4m
myapp-1                          1/1       Running            0          4m
[root@master stateful]# kubectl delete -f stateful-demo.yaml 
service "myapp-svc" deleted
statefulset.apps "myapp" deleted

    上面刪除會使pod和service刪除,但是pvc是不會刪除,所以還能恢復。

[root@master stateful]# kubectl exec -it myapp-0 -- /bin/sh
/ # nslookup myapp-0.myapp-svc.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve
Name:      myapp-0.myapp-svc.default.svc.cluster.local
Address 1: 10.244.1.110 myapp-0.myapp-svc.default.svc.cluster.local
/ # 
/ # 
/ # nslookup myapp-1.myapp-svc.default.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve
Name:      myapp-1.myapp-svc.default.svc.cluster.local
Address 1: 10.244.2.97 myapp-1.myapp-svc.default.svc.cluster.local

     myapp-0.myapp-svc.default.svc.cluster.local

    格式為:pod_name.service_name.namespace.svc.cluster.local   

    下面擴展myapp pod為5個:

[root@master stateful]# kubectl scale sts myapp --replicas=5
statefulset.apps/myapp scaled
[root@master stateful]# kubectl get pods
NAME                             READY     STATUS             RESTARTS   AGE
client                           0/1       Error              0          17d
myapp-0                          1/1       Running            0          37m
myapp-1                          1/1       Running            0          37m
myapp-2                          1/1       Running            0          46s
myapp-3                          1/1       Running            0          43s
myapp-4                          0/1       Pending            0          41s
[root@master stateful]# kubectl get pvc
NAME                STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myappdata-myapp-0   Bound     pv002     2Gi        RWO                           52m
myappdata-myapp-1   Bound     pv003     1Gi        RWO,RWX                       52m
myappdata-myapp-2   Bound     pv005     1Gi        RWO,RWX                       2m
myappdata-myapp-3   Bound     pv001     1Gi        RWO,RWX                       2m
myappdata-myapp-4   Pending                                                      2m

    另外也可以用patch打補丁的方法來進行擴容和縮容:

[root@master stateful]# kubectl patch sts myapp -p '{"spec":{"replicas":2
statefulset.apps/myapp patched

    下面我們再來介紹一下滾動更新。

[root@master stateful]# kubectl explain sts.spec.updateStrategy.rollingUpdate

    假設有4個pod(pod0,pod1,pod2,pod3),如果設置partition為5,那么說明大于等于5的pod更新,我們四個Pod就都不更新;如果partition為4,那么說明大于等于4的pod更新,即pod3更新,其他pod都不更新;如果partiton為3,那么說明大于等于3的pod更新,那么就是pod2和pod3更新,其他pod都不更新。

[root@master stateful]# kubectl patch sts myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":4}}}}'
statefulset.apps/myapp patched
[root@master stateful]# kubectl describe sts myapp
Update Strategy:    RollingUpdate
Partition:        4

    下面把myapp升級為v2版本

[root@master stateful]# kubectl set image sts/myapp myapp=ikubernetes/myapp:v2
statefulset.apps/myapp image updated
[root@master ~]# kubectl get sts -o wide
NAME      DESIRED   CURRENT   AGE       CONTAINERS   IMAGES
myapp     2         2         1h        myapp        ikubernetes/myapp:v2
[root@master ~]# kubectl get pods myapp-4 -o yaml
 containerStatuses:
  - containerID: docker://898714f2e5bf4f642e2a908e7da67eebf6d3074c89bbd0d798d191a2061a3115
    image: ikubernetes/myapp:v2

    可以看到pod myapp-4使用的模板版本是v2了。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“docker中stateful控制器怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

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

AI

名山县| 绥江县| 交城县| 江川县| 南宫市| 合作市| 凤翔县| 齐河县| 沙湾县| 乾安县| 宾川县| 五台县| 浦城县| 高要市| 腾冲县| 吴旗县| 玛沁县| 二手房| 迁安市| 兴安盟| 东丰县| 泊头市| 安新县| 承德县| 天祝| 云和县| 神农架林区| 沙田区| 牟定县| 楚雄市| 闸北区| 泾阳县| 永和县| 贞丰县| 山东| 柳州市| 东城区| 株洲市| 手游| 额尔古纳市| 拉萨市|