<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] 參考:[https://blog.csdn.net/u011142688/article/details/80372552](https://blog.csdn.net/u011142688/article/details/80372552) Kubernetes中有各種各樣的組件,對于容器來說Kubernetes最小的單元是由Pod進行組成的,但是我們在使用過程中經常會使用到Deployment來部署我們的應用,其中究竟區別在哪里,我們今天就來一同探索 ## 什么是pod pod是kubernetes里的一個基本概念,可能我們從一開始接觸kubernetes的時候就開始接觸pod,并被灌輸pod是kubernetes里最小的不可分割的工作單元,這里再從多容器的角度對其進行一些基本闡釋. 簡言之,pod是kubernetes可以部署和管理的最小單元,換言之也就是說如果你想要運行一個容器,你先要為這個容器創建一個pod.同時,一個pod也可以包含多個容器,之所以多個容器包含在一個pod里,前面講到過的初始容器為普通應用容器準備環境是一種使用場景,往往由于業務上的緊密耦合,一組容器也需要放在同一個pod里. ## kubernetes為什么使用pod作為最小單元,而不是container 直接部署一個容器看起來更簡單,但是這里也有更好的原因為什么在容器基礎上抽象一層.容器是一個存在的實體,并指向一個具體的事物.這個具體的事物可能是一個docker容器,但也可能是一個rtk容器,或者一個Virtlet管理的虛擬機.它們有不同的要求. 更深層的原因是為了管理容器,kubernetes需要更多的信息,比如重啟策略,它定義了容器終止后要采取的策略;或者是一個可用性探針,從應用程序的角度去探測是否一個進程還存活著. 基于這些原因,kubernetes架構師決定使用一個新的實體,也就是pod,而不是重載容器的信息添加更多屬性,用來在邏輯上包裝一個或者多個容器的管理所需要的信息 ## kubernetes為什么允許一個pod里有多個容器 pod里的容器運行在一個邏輯上的"主機"上,它們使用相同的網絡名稱空間(也就是說,同一pod里的容器使用相同的ip和相同的端口段區間)和相同的IPC名稱空間.它們也可以共享存儲卷.這些特性使它們可以更有效的通信.并且pod可以使你把緊密耦合的應用容器作為一個單元來管理. 因此一個應用如果需要多個運行在同一主機上的容器時,為什么為把它們放在同一個容器里呢?首先,這樣何故違反了一個容器只負責一個應用的原則.這點非常重要,如果我們把多個應用放在同一個容器里,這將使解決問題變得非常麻煩因為它們的日志記錄混合在了一起,并且它們的生命周期也很難管理.因此一個應用使用多個容器將更簡單,更透明,并且使應用依賴解偶.并且粒度更小的容器更便于不同的開發團隊共享和復用. ## Pod最小的單元 Pod封裝了一個或多個應用程序的容器(比如nginx等),存儲資源,唯一的網絡IP以及管理容器的一些選項 Pod標示的是一個部署單元,可以理解為Kubernetes中的應用程序的單個實例,它可能由單個容器組成,也可能由少量緊密耦合并共享資源的容器組成。 >如果多個容器在同一Pod下他們公用一個IP所以不能出現重復的端口號,比如在一個Pod下運行兩個nginx就會有一個容器異常,一個Pod下的多個容器可以使用localhost來訪問對方端口 因為Pod是最小的單元如果在Pod中容器出現異常終止了是不會重啟,在實際使用場景下基本不會直接使用Pod而是使用Deployment部署自己的應用 示例: 編寫文件 app-pod.yaml: ``` vim app-pod.yaml ``` ``` apiVersion: v1 kind: Pod metadata: name: app-pod.yaml labels: app: myapp spec: containers: - name: myapp-container image: ubuntu.18.04 command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] ``` 啟動容器:· ``` > kubectl create -f app-pod.yaml.yaml > kubectl get pod NAME READY STATUS RESTARTS AGE app-pod.yaml 1/1 Running 0 8s ``` 可以在web頁面中查看到具體的pod(UI上稱為容器組),查看日志可以看到 ![](http://pic.w-blog.cn/kubernetes/43.png) ### 可以在一個Pod下運行多個容器(注意不要端口沖突) ``` > vim nginx-mysql-pod.yaml apiVersion: v1 # api版本 kind: Pod # 組件類型 metadata: name: nginx-mysql-pod labels: # 標簽 app: nginx-mysql spec: containers: - name: nginx # 名稱 image: nginx # image地址 - name: mysql image: mysql env: # 環境變量 - name: MYSQL_ROOT_PASSWORD value: mysql > kubectl create -f nginx-mysql-pod.yaml > kubectl get pod NAME READY STATUS RESTARTS AGE nginx-mysql-pod 2/2 Running 0 1m ``` 在ui中就可以看到一個Pod下運行著兩個容器 ![](http://pic.w-blog.cn/kubernetes/44.png) 通過運行命令可以進入到那個容器的終端,這里選擇mysql容器, 這里系統沒有curl這里安裝好了curl訪問本地80端口,能訪問到nginx容器的內容(這里證明了在一個Pod下的網絡是共享的) ## Deployment部署 在早期版本使用Replication Controller對Pod副本數量進行管理,在**新的版本中官方推薦使用Deployment來代替RC,Deployment**相對RC有這些好處 * **Deployment擁有更加靈活強大的升級、回滾功能,并且支持滾動更新** * **使用Deployment升級Pod只需要定義Pod的最終狀態**,k8s會為你執行必要的操作(RC要自己定義如何操作) 不管是RC還是Deployment解決的主要問題是,每個Pod都運行給定應用程序的單個實例。如果您想水平擴展應用程序(例如,運行多個同樣的實例),則應該使用多個Pod。這里帶來的Pod管理成本 ``` > vim nginx-deployment.yaml apiVersion: extensions/v1beta1 # K8S對應的API版本 kind: Deployment # 對應的類型 metadata: name: nginx-deployment labels: name: nginx-deployment spec: replicas: 1 # 鏡像副本數量 template: metadata: labels: # 容器的標簽 可和service關聯 app: nginx spec: containers: - name: nginx # 容器名和鏡像 image: nginx imagePullPolicy: Always > kubectl create -f nginx-deployment.yaml > kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-68fcbc9696-tr5fm 1/1 Running 0 6s nginx-mysql-pod 2/2 Running 0 15m > kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 1 1 1 1 2m ``` 擴容 ``` > kubectl scale deployment nginx-deployment --replicas=3 > kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-68fcbc9696-9r4p8 1/1 Running 0 22s nginx-deployment-68fcbc9696-lkff2 1/1 Running 0 22s nginx-deployment-68fcbc9696-tr5fm 1/1 Running 0 5m nginx-mysql-pod 2/2 Running 0 21m ``` 恢復一個 ``` > kubectl scale deployment nginx-deployment --replicas=1 > kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-68fcbc9696-tr5fm 1/1 Running 0 6m nginx-mysql-pod 2/2 Running 0 21m ``` 最關鍵的功能就是可以彈性擴容根據CPU的占用率(需要結合資源限制一同使用),后面會進行實際演示 ``` > kubectl autoscale deployment nginx-deployment --min=2 --max=10 --cpu-percent=80 ``` Deployment回保障你的容器的運行狀態,如果刪除Pod,Deployment會立即重啟一個 ``` > kubectl delete pod nginx-deployment-68fcbc9696-tr5fm pod "nginx-deployment-68fcbc9696-tr5fm" deleted > kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deployment-68fcbc9696-ndfzj 1/1 Running 0 12s nginx-mysql-pod 2/2 Running 0 32m ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看