中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

kubernetes?k8s如何定義一個Pod

發布時間:2022-03-19 08:57:37 來源:億速云 閱讀:186 作者:iii 欄目:開發技術

今天小編給大家分享一下kubernetes k8s如何定義一個Pod的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    什么是Pod?

    pod是kubernetes中最小的單元,由一組、一個或多個容器組成,每個pod中包含了一個pause容器。

    pause容器是pod的父容器,主要負責僵尸進程的回收管理,通過pause容器可以使同一個pod中多個容器共享存儲、網絡、PID、IPC等,同一個Pod中多容器間訪問僅通過localhost就可以通信。

    kubernetes?k8s如何定義一個Pod

    為什么要引入Pod?

    將有強依賴性的容器放在同一個Pod里,例如要求低延遲性,容器A與容器B之間文件上的聯系等,引入Pod的概念是可以提高性能、便于管理。
    從k8s角度說,docker是容器,但是容器卻不只是docker,引入pod可以使容器間工作更協調。

    定義一個Pod:pod.yaml

    下面這個yaml文件可能復制有問題,你也可以使用下面命令生成一個yaml文件作為模板進行修改:

    kubectl create deployment nginx --image=nginx -o yaml --dry-run=client >nginx.yaml
    apiVersion: v1 # 必選,API的版本號
    kind: Pod       # 必選,類型Pod
    metadata:       # 必選,元數據
      name: nginx   # 必選,符合RFC 1035規范的Pod名稱
      # namespace: default # 可選,Pod所在的命名空間,不指定默認為default,可以使用-n 指定namespace 
      labels:       # 可選,標簽選擇器,一般用于過濾和區分Pod
        app: nginx
        role: frontend # 可以寫多個
      annotations:  # 可選,注釋列表,可以寫多個
        app: nginx
    spec:   # 必選,用于定義容器的詳細信息
    #  initContainers: # 初始化容器,在容器啟動之前執行的一些初始化操作
    #  - command:
    #    - sh
    #    - -c
    #    - echo "I am InitContainer for init some configuration"
    #    image: busybox
    #    imagePullPolicy: IfNotPresent
    #    name: init-container
      containers:   # 必選,容器列表
      - name: nginx # 必選,符合RFC 1035規范的容器名稱
        image: nginx:1.15.2    # 必選,容器所用的鏡像的地址
        imagePullPolicy: IfNotPresent     # 可選,鏡像拉取策略, IfNotPresent: 如果宿主機有這個鏡像,那就不需要拉取了. Always: 總是拉取, Never: 不管是否存儲都不拉去
        command: # 可選,容器啟動執行的命令 ENTRYPOINT, arg --> cmd
        - nginx 
        - -g
        - "daemon off;"
        workingDir: /usr/share/nginx/html       # 可選,容器的工作目錄
    #    volumeMounts:   # 可選,存儲卷配置,可以配置多個
    #    - name: webroot # 存儲卷名稱
    #      mountPath: /usr/share/nginx/html # 掛載目錄
    #      readOnly: true        # 只讀
        ports:  # 可選,容器需要暴露的端口號列表
        - name: http    # 端口名稱
          containerPort: 80     # 端口號
          protocol: TCP # 端口協議,默認TCP
        env:    # 可選,環境變量配置列表
        - name: TZ      # 變量名
          value: Asia/Shanghai # 變量的值
        - name: LANG
          value: en_US.utf8
    #    resources:      # 可選,資源限制和資源請求限制
    #      limits:       # 最大限制設置
    #        cpu: 1000m
    #        memory: 1024Mi
    #      requests:     # 啟動所需的資源
    #        cpu: 100m
    #        memory: 512Mi
    #    startupProbe: # 可選,檢測容器內進程是否完成啟動。注意三種檢查方式同時只能使用一種。
    #      httpGet:      # httpGet檢測方式,生產環境建議使用httpGet實現接口級健康檢查,健康檢查由應用程序提供。
    #            path: /api/successStart # 檢查路徑
    #            port: 80
    #    readinessProbe: # 可選,健康檢查。注意三種檢查方式同時只能使用一種。
    #      httpGet:      # httpGet檢測方式,生產環境建議使用httpGet實現接口級健康檢查,健康檢查由應用程序提供。
    #            path: / # 檢查路徑
    #            port: 80        # 監控端口
    #    livenessProbe:  # 可選,健康檢查
          #exec:        # 執行容器命令檢測方式
                #command: 
                #- cat
                #- /health
        #httpGet:       # httpGet檢測方式
        #   path: /_health # 檢查路徑
        #   port: 8080
        #   httpHeaders: # 檢查的請求頭
        #   - name: end-user
        #     value: Jason 
    #      tcpSocket:    # 端口檢測方式
    #            port: 80
    #      initialDelaySeconds: 60       # 初始化時間
    #      timeoutSeconds: 2     # 超時時間
    #      periodSeconds: 5      # 檢測間隔
    #      successThreshold: 1 # 檢查成功為2次表示就緒
    #      failureThreshold: 2 # 檢測失敗1次表示未就緒
    #    lifecycle:
    #      postStart: # 容器創建完成后執行的指令, 可以是exec httpGet TCPSocket
    #        exec:
    #          command:
    #          - sh
    #          - -c
    #          - 'mkdir /data/ '
    #      preStop:
    #        httpGet:      
    #              path: /
    #              port: 80
          #  exec:
          #    command:
          #    - sh
          #    - -c
          #    - sleep 9
      restartPolicy: Always   # 可選,默認為Always,容器故障或者沒有啟動成功,那就自動該容器,Onfailure: 容器以不為0的狀態終止,自動重啟該容器, Never:無論何種狀態,都不會重啟
      #nodeSelector: # 可選,指定Node節點
      #      region: subnet7
    #  imagePullSecrets:     # 可選,拉取鏡像使用的secret,可以配置多個
    #  - name: default-dockercfg-86258
    #  hostNetwork: false    # 可選,是否為主機模式,如是,會占用主機端口
    #  volumes:      # 共享存儲卷列表
    #  - name: webroot # 名稱,與上述對應
    #    emptyDir: {}    # 掛載目錄
    #        hostPath:              # 掛載本機目錄
    #          path: /etc/hosts

    apiserver:定義API的版本號

    kind:創建資源類型,如pod、deployment等

    metadata:元數據,如pod的一些基本信息

    spec:用于定義容器的詳細信息

    執行yaml文件創建Pod:

    kubectl create -f pod.yaml

    完成后查看Pod:

    kubectl get pod

    注意:生產中基本不會直接使用pod進行部署,但是yaml文件大同小異。需要熟悉yaml文件的格式和配置項。

    Pod探針:

    StartupProbe:1.16版本后增加的探針方式,用于判斷容器內應用程序是否已經啟動,如果配置了StartupProbe,就會先禁止其他探測,直到成功,成功后將不在進程探測。

    LivenessProbe:用于探測容器是否運行,如果探測失敗,kubelet會根據配置的重啟策略進行相應的處理。若沒有配置該探針,默認就是success。

    ReadinessProbe:一般用于探測容器內的程序是否健康,它的返回值如果為success,那么代表這個容器已經啟動成功,并且程序已經是可以接受流量的狀態。

    Pod探針檢測方式:

    以上探針均可配置以下方式:

    ExecAction:在容器內執行一個命令,如果返回值為0,則認為容器健康(類似于執行一個命令后,執行echo $?返回值為0代表成功是一樣的)

    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health

    TCPSocketAction:通過TCP連接檢查容器內的端口是否通的,如果是通的則認為容器健康(類似于telnet 127.0.0.1 3306,執行成功的話判斷為容器健康)

    livenessProbe:
      tcpSocket:
        port: 80

    HTTPGetAction:通過應用程序暴露的API地址來檢查程序是否正常,如果狀態碼為200~400之間,則認為容器健康。(生產使用最多)

    livenessProbe:
      httpGet:
        path: /status/health
        port: 80

    探針檢查的幾個參數:

    initialDelaySeconds:初始化時間(比如程序啟動慢,我要多少秒后才會檢查)

    timeoutSeconds:超時時間(1-2秒)

    periodSeconds:檢測間隔,多長時間檢測一次(5秒)

    successThreshold:檢測成功次數,比如檢測成功幾次代表就緒(1-2次)

    failureThreshold:檢測失敗次數,比如檢測失敗幾次代表未就緒(2次)

    重啟策略:timeoutSecondsperiodSecondsfailureThreshold

    我們可以看以下coredns的探針配置:

    # 查看pod名稱
    [root@k8s-master01 ~]# kubectl get deployment -n kube-system
    coredns                   1/1     1            1           5d18h
    
    # 在線編譯coredns的yaml文件
    [root@k8s-master01 ~]# kubectl edit deployment coredns -n kube-system
            livenessProbe:
              failureThreshold: 5
              httpGet:
                path: /health
                port: 8080
                scheme: HTTP
              initialDelaySeconds: 60           
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 5        
    # 上面代表請求8080的/health接口,如果訪問成功則保留容器不會被殺死
            readinessProbe:
              failureThreshold: 3
              httpGet:
                path: /ready
                port: 8181
                scheme: HTTP
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 1         
    # 上面配置代表請求8181的/ready接口成功,說明容器可以正常開始工作了

    Pod退出流程

    Prestop:先去請求eureka接口,把自己的IP地址和端口號,進行下線,eureka從注冊表中該應用的IP地址。然后容器進行sleep 90,kill ‘進程’;(注意90不是確定值,而是根據實際情況進行變化的)

    kubernetes?k8s如何定義一個Pod

    以上就是“kubernetes k8s如何定義一個Pod”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    天峻县| 商丘市| 邵阳县| 根河市| 清涧县| 若尔盖县| 锡林郭勒盟| 苏州市| 循化| 太原市| 象州县| 高淳县| 伊川县| 英山县| 渭南市| 长武县| 秀山| 洱源县| 林周县| 九寨沟县| 华亭县| 盈江县| 开封县| 衢州市| 丰原市| 江达县| 修水县| 朝阳区| 凤庆县| 巴林右旗| 古浪县| 德江县| 张家港市| 平安县| 沈阳市| 盈江县| 黑龙江省| 延川县| 双江| 五河县| 苏州市|