91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet

發布時間:2021-12-16 11:00:31 來源:億速云 閱讀:788 作者:柒染 欄目:云計算

本篇文章為大家展示了如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

pod控制器分類:
1、ReplicationController
2、ReplicaSet
3、Deployment
4、StatefulSet
5、DaemonSet
6、Job,Cronjob
7、HPA
pod控制器:一般包括3部分
1、標簽選擇器
2、期望的副本數(DaemonSet控制器不需要)
3、pod模板
deploy控制器構建于rs控制器之上,新特性包括:
1、事件和狀態查看
2、回滾
3、版本記錄
4、暫停和啟動
5、支持兩種自動更新方案
Recreate刪除重建
RollingUpdate回滾升級(默認方式)

創建deploy
$ kubectl run --help
$ kubectl run nginx --image=nginx --port=80 --replicas=2        #用命令直接創建
$ kubectl run nginx --image=nginx --port=80 --dry-run -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80

創建deploy控制器時會自動創建rs控制器,二者具有相同的標簽選擇器
$ kubectl get deploy
nginx                    1/1     1            1           7s
$ kubectl get rs

修改pod副本數的方式
1、kubectl edit deploy nginx
2、kubectl scale deploy nginx --replicas=5
3、修改yaml文件

升級pod鏡像的方法:
1、直接修改yaml
2、kubectl edit deploy nginx
3、kubectl set image deploy/nginx nginx=nginx:1.9 --record        #升級并記錄,可實現回滾,推薦使用該方法

滾動升級是deployment pod升級時的默認策略,也可以修改默認值
用命令kubectl edit deploy nginx可以查看默認值

  replicas: 3
  selector:
    matchLabels:
      run: nginx
  minReadySeconds: 5       #默認看不到,需要手工添加
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate

默認情況下,當6個pod副本需要升級時:Kubernetes 將終止1個實例(625%=1.5個實例,向下舍去=1),創建3個新實例(625%=1.5個實例,向上舍入=2,加1個實例來彌補1個終止實例=3個實例),此時總共運行8個副本。一旦新的pod就緒,它將從舊的副本集中終止另外2個實例,以便將部署恢復到所需的副本數,然后重復這個過程,直到部署完成為止。
minReadySeconds:Kubernetes在等待設置的時間后才進行升級
maxSurge:升級過程中最多可以比原先設置多出的POD數量
maxUnavaible:升級過程中最多有多少個POD處于無法提供服務的狀態

滾動升級相關命令
$ kubectl set image deploy/nginx nginx=nginx:1.7.9 --record
$ kubectl set image deploy/nginx nginx=nginx --record
$ kubectl rollout status deploy nginx        #查看升級狀態
$ kubectl rollout pause deployment nginx        #升級暫停
$ kubectl rollout resume deployment nginx       #恢復升級
$ kubectl describe deploy nginx         #查看升級詳情
$ kubectl rollout history deploy/nginx        #查看升級歷史
deployment.extensions/nginx
REVISION  CHANGE-CAUSE
4         kubectl set image deploy/nginx nginx=nginx:1.7.9 --record=true
5         kubectl set image deploy/nginx nginx=nginx --record=true
$ kubectl rollout history deployment nginx --revision=5
$ kubectl rollout undo deployment/nginx --to-revision=4          #回滾到指定版本
$ kubectl rollout undo deployment nginx-deploy        #回滾到前一個版本

顯式指定滾動升級參數

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      run: nginx
    minReadySeconds: 5      
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80

DaemonSet用于在每個Kubernetes節點中將守護進程的副本作為后臺進程運行,說白了就是在每個節點部署一個Pod副本,當節點加入到Kubernetes集群中,Pod會被自動調度到該節點上運行。
每個節點有一個ds pod,新加入的節點也會自動生成一個ds pod
ds pod不受調度策略控制
使用DaemonSe場景:
1、集群存儲守護程序,如glusterd、ceph要部署在每個節點上以提供持久性存儲;
2、節點監視守護進程,如Prometheus監控集群,可以在每個節點上運行一個node-exporter進程來收集監控節點的信息;
3、日志收集守護程序,如fluentd或logstash,在每個節點上運行以收集容器的日志
示例:

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: nginx-ds
  labels:
    k8s-app: nginx
spec:
  template:
    metadata:
      labels:
        k8s-app: nginx
    spec:
      containers:
      - image: nginx:1.7.9
        name: nginx
        ports:
        - name: http
          containerPort: 80

無狀態服務(Stateless Service):所有pod只需要共享一個持久存儲,并不需要每個pod一個持久存儲,并且多個實例對于同一個請求響應的結果是完全一致的
有狀態服務(Stateful Service):每個pod都需要一個獨立的持久存儲,對于這種類型的資源,我們一般是通過創建一個Headless Service類型的服務來暴露服務,將clusterIP設置為None就是一個無頭的服務。
1、有狀態服務一般使用pvc模板和存儲類為每個pod自動生成一對pv和pvc來實現持久化存儲。
2、也可以手動創建pv,然后和利用StatefulSet中的volumeClaimTemplates自動生成的pvc進行配對。

手動創建pv用于StatefulSet
1、創建兩個pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001        #第二個是pv002
  labels:
    release: stable
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /tmp/data

2、先創建無頭服務

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
    role: stateful

3、創建StatefulSet pod使用pv

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"        #使用上面創建的無頭服務
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
        role: stateful
    spec:
      containers:
      - name: nginx
        image: cnych/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

volumeClaimTemplates會根據其對應的pv自動生成pvc并自動配對,數量由replicas: 2決定。

使用pvc模板和存儲類自動生成pv和pvc
1、創建存儲類

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: course-nfs-storage
provisioner: fuseim.pri/ifs

2、先創建無頭服務

apiVersion: v1
kind: Service
metadata:
  name: nfs-web
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
    role: stateful

3、使用存儲類創建StatefulSet pod

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: nfs-web
spec:
  serviceName: "nfs-web"         #使用上面創建的無頭服務
  replicas: 2
  template:
    metadata:
      labels:
        app: nfs-web
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
      annotations:
        volume.beta.kubernetes.io/storage-class: course-nfs-storage
    spec:
      accessModes: [ "ReadWriteOnce" ]
            #storageClassName: course-nfs-storage        使用存儲類
      resources:
        requests:
          storage: 1Gi

會自動生成兩對pv和pvc

上述內容就是如何解析k8s中pod控制器的Deployment、DaemonSet、StatefulSet,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

武邑县| 寿宁县| 阳西县| 子长县| 石家庄市| 淮南市| 商都县| 景东| 绵阳市| 周口市| 陵水| 桂阳县| 常熟市| 兴仁县| 慈溪市| 株洲县| 洪洞县| 临邑县| 玉林市| 山东| 德兴市| 茶陵县| 镇平县| 鲁甸县| 阿拉善左旗| 辽阳市| 南汇区| 寿宁县| 准格尔旗| 博客| 秦皇岛市| 白河县| 广灵县| 腾冲县| 万安县| 阳曲县| 罗定市| 陈巴尔虎旗| 昌平区| 称多县| 辽宁省|