<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      02-k8s各應(yīng)用管理器與pod介紹

      前言:Deployment的發(fā)展

      雖然ReplicaSet可以確保在任何給定時(shí)間運(yùn)行的Pod副本達(dá)到指定的數(shù)量,但是Deployment(部署)是一個(gè)更高級(jí)的概念,它管理ReplicaSet并為Pod和ReplicaSet提供聲明性更新以及許多其他有用的功能,所以建議在實(shí)際使用中,采用Deployment代替ReplicaSet。

      如果在Deployment對(duì)象中描述了所需的狀態(tài),Deployment控制器就會(huì)以可控制的速率將實(shí)際狀態(tài)更改為期望狀態(tài)。也可以在Deployment中創(chuàng)建新的ReplicaSet,或者刪除現(xiàn)有的Deployment并使用新的Deployment部署所用的資源。


      一、無狀態(tài)應(yīng)用管理器Deployment

      deployment用于部署無狀態(tài)的服務(wù),是k8s中最常用的控制器。管理對(duì)象為pod。

      一般用于管理維護(hù)企業(yè)內(nèi)部無狀態(tài)的微服務(wù),比如configserver、zuul、springboot。

      deployment可以管理多個(gè)副本的Pod實(shí)現(xiàn)無縫遷移、自動(dòng)擴(kuò)容縮容、自動(dòng)災(zāi)難恢復(fù)、一鍵回滾等功能。

      Deployment管理器基礎(chǔ)操作

      創(chuàng)建Deployment

      方式1:手動(dòng)創(chuàng)建

      kubectl create deployment {deployment-name} --image=nginx

      方式2:以yaml格式或json格式創(chuàng)建Deployment

      kubectl create -f test-nginx.yaml

      查詢deployment狀態(tài)

      查看指定deployment的詳細(xì)信息

      kubectl describe deployment {deployment-name} -n

      kubectl get deployments -o wide

      解析:-o wide 查看全部詳情

      導(dǎo)出deployment配置

      導(dǎo)出已創(chuàng)建的deployment配置文件至指定路徑:

      kubectl get deployments test-nginx -o yaml >/data1/k8s-app/deploy/test-nginx.yaml

      查看指定某一pod下的日志

      kubectl logs {pod-name} -n

      修改deployment配置

      修改某個(gè)指定deployment配置

      kubectl edit deployment {deployment-name} -n

      kubectl apply -f xxx.yaml -n

      kubectl replace -f xxx.yaml -n


      版本升級(jí)操作:

      手動(dòng)改鏡像并記錄:

      kubectl set image deploy {deployment-name} -n {namespace-name} XXX=xx(版本信息) --record

      解析:
      --record 表示記錄本次修改

      查看部署歷史:

      kubectl rollout history deploy {deployment-name} -n

      更新多次,需要查看某次更新的詳細(xì)信息:

      kubectl rollout history deploy {deployment-name} -n {namespace-name} --revision=3

      解析:
      --revision 指定版本號(hào)

      回滾到上一個(gè)版本:

      kubectl rollout undo deploy {deployment-name} -n

      回滾到指定版本:

      kubectl rollout undo deploy {deployment-name} -n {namespace-name} --to-revision=2

      解析:
      --to-revision=2 表示回滾到更新的第2個(gè)版本


      擴(kuò)容與縮容

      動(dòng)態(tài)調(diào)整Pod的副本數(shù):

      kubectl scale deploy {deployment-name} -n {namespace-name} --replicas=5

      解析:
      --replicas=5 將原有副本數(shù)修改為5,若原有為2個(gè),將擴(kuò)容3個(gè)副本;若原有為10個(gè),將縮容

      注意:這里的擴(kuò)容縮容,不會(huì)修改原有rs

      Deployment更新的暫停與恢復(fù)(用set 修改多處更新)

      暫停Deployment更新

      kubectl rollout pause deploy {deployment-name} -n

      set修改deployment資源

      kubectl set image ......

      kubectl set resources deploy {deployment-name} -c {container-name}(指定容器) --limits=cpu=200m,memory=128Mi --requests=cpu=10m,memory=16Mi

      恢復(fù)Deployment更新:

      kubectl rollout resume {deployment-name} -n

      注意:恢復(fù)更新的Deployment創(chuàng)建了一個(gè)新的RS(復(fù)制集)

      注意事項(xiàng):
      可修改yaml格式來更新Deployment,其中在spec下的幾個(gè)參數(shù)配置解析為:

      • replicas: 4 表示副本數(shù),4為4個(gè)副本
      • revisionHistoryLimit:設(shè)置保留RS舊的revision的個(gè)數(shù),設(shè)置為0的話,不保留歷史數(shù)據(jù);
      • minReadySeconds:可選參數(shù),指定新創(chuàng)建的Pod在沒有任何容器崩潰的情況下視為Ready最小的秒數(shù),默認(rèn)為0,即一旦被創(chuàng)建就視為可用。
      關(guān)于滾動(dòng)更新的策略參數(shù)解析:

      strategy.type:更新deployment的方式,默認(rèn)是RollingUpdate;

      • RollingUpdate表示滾動(dòng)更新,可以指定maxSurge和maxUnavailable
      • maxUnavailable:指定在回滾或更新時(shí)最大不可用的Pod的數(shù)量,可選字段,默認(rèn)25%,可以設(shè)置成數(shù)字或百分比,如果該值為0,那么maxSurge就不能0
      • maxSurge:可以超過期望值的最大Pod數(shù),可選字段,默認(rèn)為25%,可以設(shè)置成數(shù)字或百分比,如果該值為0,那么maxUnavailable不能為0
      • Recreate:重建,先刪除舊的Pod,在創(chuàng)建新的Pod

      示例:

      # kubectl get deploy nginx -oyaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        annotations:
          deployment.kubernetes.io/revision: "12"
          kubernetes.io/change-cause: kubectl set image deploy nginx nginx=nginx:1.15.3
            --record=true
        creationTimestamp: "2020-09-19T02:41:11Z"
        generation: 19
        labels:
          app: nginx
        name: nginx
        namespace: default
      spec:
        progressDeadlineSeconds: 600
        replicas: 2
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: nginx
        strategy:
          rollingUpdate:
            maxSurge: 25%
            maxUnavailable: 25%
          type: RollingUpdate
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: nginx
          spec:
            containers:
            - image: nginx:1.15.3
              imagePullPolicy: IfNotPresent
              name: nginx
              resources:
                limits:
                  cpu: 200m
                  memory: 128Mi
                requests:
                  cpu: 10m
                  memory: 16Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            terminationGracePeriodSeconds: 30
      

      二、有狀態(tài)應(yīng)用管理StatefulSet

      StatefulSet(有狀態(tài)集,縮寫為sts)主要用于管理有狀態(tài)應(yīng)用程序的工作負(fù)載API對(duì)象。常用于部署有狀態(tài)的且需要有序啟動(dòng)的應(yīng)用程序。

      和Deployment類似,一個(gè)StatefulSet也同樣管理著基于相同容器規(guī)范的Pod。不同的是,StatefulSet為每個(gè)Pod維護(hù)了一個(gè)粘性標(biāo)識(shí)。這些Pod是根據(jù)相同的規(guī)范創(chuàng)建的,但是不可互換,每個(gè)Pod都有一個(gè)持久的標(biāo)識(shí)符,在重新調(diào)度時(shí)也會(huì)保留,一般格式為StatefulSetName-Number。比如定義一個(gè)名字是Redis-Sentinel的StatefulSet,指定創(chuàng)建三個(gè)Pod,那么創(chuàng)建出來的Pod名字就為Redis-Sentinel-0、Redis-Sentinel-1、Redis-Sentinel-2。

      StatefulSet創(chuàng)建的Pod一般使用Headless Service(無頭服務(wù))負(fù)責(zé)Pod的網(wǎng)絡(luò)身份和通信,需要提前創(chuàng)建此服務(wù)。和普通的Service的區(qū)別在于Headless Service沒有ClusterIP,它使用的是Endpoint進(jìn)行互相通信。在刪除一個(gè)StatefulSet時(shí),不保證對(duì)Pod的終止,要在StatefulSet中實(shí)現(xiàn)Pod的有序和正常終止,可以在刪除之前將StatefulSet的副本縮減為0。

      Headless一般格式為:
      statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
      

      解析:

      • statefulSetName 為StatefulSet的名字;
      • 0..N-1 為Pod所在的序號(hào),從0開始到N-1;
      • serviceName 為Headless Service的名字,創(chuàng)建StatefulSet時(shí),必須指定Headless Service名稱;
      • namespace 為服務(wù)所在的命名空間;
      • .cluster.local 為Cluster Domain(集群域)。
      StatefulSet注意事項(xiàng):

      一般StatefulSet用于有以下一個(gè)或者多個(gè)需求的應(yīng)用程序:

      • 需要穩(wěn)定的獨(dú)一無二的網(wǎng)絡(luò)標(biāo)識(shí)符。
      • 需要持久化數(shù)據(jù)。
      • 需要有序的、優(yōu)雅的部署和擴(kuò)展。
      • 需要有序的自動(dòng)滾動(dòng)更新。
      • 如果應(yīng)用程序不需要任何穩(wěn)定的標(biāo)識(shí)符或者有序的部署、刪除或者擴(kuò)展,應(yīng)該使用無狀態(tài)的控制器部署應(yīng)用程序,比如Deployment或者ReplicaSet。

      StatefulSet是Kubernetes 1.9版本之前的beta資源,在1.5版本之前的任何Kubernetes版本都沒有。
      Pod所用的存儲(chǔ)必須由PersistentVolume Provisioner(持久化卷配置器)根據(jù)請(qǐng)求配置StorageClass,或者由管理員預(yù)先配置,當(dāng)然也可以不配置存儲(chǔ)。
      為了確保數(shù)據(jù)安全,刪除和縮放StatefulSet不會(huì)刪除與StatefulSet關(guān)聯(lián)的卷,可以手動(dòng)選擇性地刪除PVC和PV(參考PV和PVC節(jié))。

      Deployment管理器基礎(chǔ)操作

      定義一個(gè)StatefulSet資源yaml文件

      定義一個(gè)簡(jiǎn)單的StatefulSet的示例如下:

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        labels:
          app: nginx
      spec:
        ports:
        - port: 80
          name: web
        clusterIP: None
        selector:
          app: nginx
      ---
      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: web
      spec:
        serviceName: "nginx"
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
                name: web
      

      注意:
      此示例沒有添加存儲(chǔ)配置

      其中:

      • kind: Service 定義了一個(gè)名字為Nginx的Headless Service,創(chuàng)建的Service格式為nginx-0.nginx.default.svc.cluster.local,其他的類似,因?yàn)闆]有指定Namespace(命名空間),所以默認(rèn)部署在default。
      • kind: StatefulSet 定義了一個(gè)名字為web的StatefulSet,replicas表示部署Pod的副本數(shù)。
      • 在StatefulSet中必須設(shè)置Pod選擇器(.spec.selector)用來匹配其標(biāo)簽(.spec.template.metadata.labels)。在1.8版本之前,如果未配置該字段(.spec.selector),將被設(shè)置為默認(rèn)值,在1.8版本之后,如果未指定匹配Pod Selector,則會(huì)導(dǎo)致StatefulSet創(chuàng)建錯(cuò)誤。
      • 當(dāng)StatefulSet控制器創(chuàng)建Pod時(shí),它會(huì)添加一個(gè)標(biāo)簽statefulset.kubernetes.io/pod-name,該標(biāo)簽的值為Pod的名稱,用于匹配Service。
      查看更新過程

      kubuctl rollout status sts {statefulset-name} -n

      過濾查看pod配置中某一信息

      kubectl get pod {pod-name} -n {namespace-name} -oyaml | grep image

      kubectl get po -l app=nginx -w
      -w 參數(shù)表示動(dòng)態(tài)查看pod的更新過程

      在pod的配置中,updateStrategy 表示更新策略,其中若type: RollingUpdate 表示滾動(dòng)更新,修改pod配置后會(huì)根據(jù)創(chuàng)建順序更新,配置為:

      updateStrategy:
          rollingUpdate:
            partition: 0
          type: RollingUpdate
      
      解析:
      	partition: 0 表示分段更新,0表示小于0的pod不更新(即更新所有pod);其中數(shù)字表示更新的分段(pod)數(shù);舉例:若StatefulSet的pod數(shù)有5個(gè),現(xiàn)在partition: 2;那么pod2前面的pod不會(huì)更新(pod0、pod1),更新的pod為pod2、pod3、pod4。多用于灰度發(fā)布(先讓指定pod更新,在更新其它pod)
      

      若type: OnDelete 表示只有刪除pod時(shí),才會(huì)更新修改的配置,且配置應(yīng)為:

      updateStrategy:
          type: RollingUpdate
      
      StatefulSet的刪除

      一般情況,刪除sts時(shí),pod會(huì)被重建

      涉及概念:級(jí)聯(lián)刪除與非級(jí)聯(lián)刪除

      • 級(jí)聯(lián)刪除:刪除StatefulSet時(shí)同時(shí)刪除pod,若不指定,默認(rèn)為級(jí)聯(lián)刪除
      • 非級(jí)聯(lián)刪除:刪除StatefulSet時(shí)不刪除pod,但刪除sts后,pod變成“孤兒”,此時(shí)刪除pod不會(huì)被重建

      設(shè)置級(jí)聯(lián)刪除或非級(jí)聯(lián)刪除
      非級(jí)聯(lián)刪除:

      kubectl delete sts {statefulset-name} -n {namespace-name} --cascade=false


      三、守護(hù)進(jìn)程服務(wù)DaemonSet

      DaemonSet 是守護(hù)進(jìn)程集,縮寫為ds,在所有節(jié)點(diǎn)或者是匹配條件的節(jié)點(diǎn)(通過打標(biāo)簽形式)上都部署一個(gè)Pod。

      使用DaemonSet的場(chǎng)景
      • 運(yùn)行集群存儲(chǔ)的daemon,比如ceph或者glusterd
      • 節(jié)點(diǎn)的CNI網(wǎng)絡(luò)插件,calico
      • 節(jié)點(diǎn)日志的收集:fluentd或者是filebeat
      • 節(jié)點(diǎn)的監(jiān)控:node exporter
      • 服務(wù)暴露:部署一個(gè)ingress-nginx
      創(chuàng)建DaemonSet

      kubectl create -f nginx-ds.yaml

      示例:

      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        labels:
          app: nginx
        name: nginx
      spec:
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: nginx
        updateStrategy:
          rollingUpdate:
            maxUnavailable: 1
          type: RollingUpdate	  
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: nginx
          spec:
            containers:
            - image: nginx:1.15.2
              imagePullPolicy: IfNotPresent
              name: nginx
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
            dnsPolicy: ClusterFirst
            restartPolicy: Always
            schedulerName: default-scheduler
            securityContext: {}
            terminationGracePeriodSeconds: 30
      
      設(shè)置匹配條件的node部署pod

      方法1命令部署:

      kubectl label nodeXX(節(jié)點(diǎn)名稱) nodeXX(節(jié)點(diǎn)名稱-多個(gè)節(jié)點(diǎn)) ... ds=true

      查看標(biāo)簽

      kubectl get node --show-labels

      方法2修改yaml文件:(注意,若replace YAML文件,會(huì)更新配置)

      在spec下,添加

      ......
      	  nodeSelector: 
      	    ds: "ture"
      ......
      

      另外,若需要添加或刪除ds節(jié)點(diǎn),需進(jìn)行l(wèi)abel添加或刪除即可

      DaemonSet更新配置
      ......
        updateStrategy:
          rollingUpdate:
            maxUnavailable: 1    ###最大不可用范圍,建議設(shè)為1
      ......
      

      注意:在DaemonSet的生產(chǎn)環(huán)境中,建議更新策略采用OnDelete,避免影響所有節(jié)點(diǎn)上的pod,可用幾個(gè)不重要的pod做測(cè)試用

      ......
        updateStrategy:
          type: RollingUpdate	
      ......
      

      四、Label與Selector

      Label:對(duì)k8s中各種資源進(jìn)行分類、分組,添加一個(gè)具有特別屬性的一個(gè)標(biāo)簽。

      Selector:通過一個(gè)過濾的語法進(jìn)行查找到對(duì)應(yīng)標(biāo)簽的資源

      刪除label

      kubectl label node {node-name} app- -n

      修改label

      kubectl label pod {pod-name} app=xx(新名稱) -n {namespace-name} --overwrite

      查看所有ns下符合條件的標(biāo)簽

      kubectl get svc -A --show-labels

      kubectl get pod -A --show-labels

      kubectl get node -A --show-labels

      根據(jù)需求查看匹配條件的多種標(biāo)簽表達(dá)示例:

      所有ns下,標(biāo)簽包含metrics-server和kubernetes-dashboad的pod

      kubectl get po -A -l 'k8s-app in (metrics-server, kubernetes-dashboad)'

      標(biāo)簽為nginx,但不包含v1版本的pod

      kubectl get po -l version!=v1,app=nginx

      所有ns下,標(biāo)簽為nginx,但不包含v1版本的pod

      kubectl get po -A -l version!=v1,'app02 in (nginx,busybox)'

      未完待續(xù)。。。。

      posted @ 2021-11-20 21:42  校鋮先森  閱讀(226)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美人与禽2o2o性论交| 中文字幕国产日韩精品| 久久国内精品自在自线91| 野花韩国高清电影| 精品午夜福利在线视在亚洲| 宜宾市| 久久免费观看午夜成人网站 | 国产午夜亚洲精品不卡网站| 水富县| 国产成人精品一区二三区| 亚洲一区二区偷拍精品| 亚洲精品无码高潮喷水在线| 一级女性全黄久久片免费| 亚洲av永久无码精品漫画| 国产精品久线在线观看| 91网站在线看| 国产91特黄特色A级毛片| 久久99精品久久久大学生| 在线播放国产精品三级网| 亚洲国产精品久久久久婷婷老年 | 亚洲综合久久一区二区三区| 精品国产精品午夜福利| 老熟女熟妇一区二区三区| 久久精品一区二区东京热| 婷婷五月综合丁香在线| 宾馆人妻4P互换视频| 国产欧美在线观看不卡| 无码AV中文字幕久久专区| 亚洲激情一区二区三区视频| 亚洲爆乳少妇无码激情| 蜜臀精品一区二区三区四区| 国产乱码精品一区二三区| 亚洲天堂男人影院| 欧美午夜成人片在线观看| 久久精品国产99国产精品严洲| 中文字幕人妻无码一区二区三区| 精品国际久久久久999波多野| 亚洲成人av在线资源| 国产免费午夜福利在线播放| 成人无号精品一区二区三区| 性一交一乱一乱一视频|