容器技術與應用(第2版)(微課版) 課件 任務3.2 Dker容器資源控制_第1頁
容器技術與應用(第2版)(微課版) 課件 任務3.2 Dker容器資源控制_第2頁
容器技術與應用(第2版)(微課版) 課件 任務3.2 Dker容器資源控制_第3頁
容器技術與應用(第2版)(微課版) 課件 任務3.2 Dker容器資源控制_第4頁
容器技術與應用(第2版)(微課版) 課件 任務3.2 Dker容器資源控制_第5頁
已閱讀5頁,還剩43頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Docker容器技術與應用湖北輕工職業技術學院Docker容器管理項目3項目背景在當今數字化時代,軟件開發與部署面臨諸多挑戰。傳統應用部署方式繁瑣,環境配置復雜且易出現兼容性問題,導致開發、測試和運維效率低下。隨著業務規模的快速擴張,對應用的快速迭代和靈活部署提出了更高要求。“Docker容器管理”旨在解決這些痛點,提升整體開發運維效能。Docker容器管理項目3

容器是Docker的另一個核心概念。對比鏡像而言,鏡像是靜態的只讀文件,容器是鏡像的一個運行實例,容器帶有運行時需要的可寫文件層。本項目主要介紹圍繞容器這一核心概念的具體操作,包括創建容器、啟動容器、終止容器、進入容器內執行操作、刪除容器和通過導入/導出容器來實現容器遷移等。項目三:Docker容器管理目錄任務3.1、認識Docker容器任務3.2、Docker容器資源控制認識Docker容器回顧1、容器的基本概念、特點和實現原理。2、了解鏡像和容器的關系。3、容器的基本操作。知識目標了解控制組(CGroups)的功能。能力目標掌握利用CGoups對資源進行控制的方法。素質目標培養勇于探索、尊重科學的精神。小王編寫完Docker容器基礎操作手冊后,考慮到基礎操作手冊中只包含對容器的基本操作和維護的內容,為了讓同事們更高效地使用容器,小王決定在基礎操作手冊中添加關于對容器資源控制的內容,并通過實例說明。任務3.2Docker容器資源控制任務要求3.2CGroups的含義

在使用

docker

運行容器時,默認的情況下,docker沒有對容器進行硬件資源的限制,當一臺主機上運行幾百個容器,這些容器雖然互相隔離,但是底層卻使用著相同的CPU、內存和磁盤資源。如果不對容器使用的資源進行限制,那么容器之間會互相影響,小的來說會導致容器資源使用不公平;大的來說,可能會導致主機和集群資源耗盡,服務完全不可用。docker作為容器的管理者,自然提供了控制容器資源的功能。正如使用內核的namespace來做容器之間的隔離,docker也是通過內核的cgroups來做容器的資源限制;包括CPU、內存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制。任務3.2Docker容器資源控制相關知識3.2CGroups的含義 CGroups(ControlGroups)是Linux內核提供的一種可以限制單個進程或者多個進程所使用資源的機制,這種機制可以根據需求把一系列系統任務及其子任務整合(或分隔)到按資源劃分等級的不同組內,從而為系統資源管理提供一個統一的框架。可以對CPU、內存和磁盤I/O等資源實現控制,Docker可使用CGroups提供的資源限制功能來完成CPU、內存等部分的資源控制。 CGroups提供了對進程進行分組化管理的功能和接口的基礎結構,內存或磁盤I/O的分配控制等具體的資源管理功能是通過對進程進行分組化管理來實現的。這些具體的資源管理功能稱為CGroups子系統或控制器。任務3.2Docker容器資源控制相關知識3.2CGroups的功能限制資源使用,比如內存使用上限以及文件系統的緩存限制。CGroups可實現對進程組使用的資源總額的限制。例如,使用memory子系統為進程組設定一個內存使用上限,當進程組使用的內存達到限額后再申請內存時。會觸發OOM(OutOfMemory)警告。優先級控制,CPU利用和磁盤IO吞吐。CGrups可實現對進程組的優先級控制。通過分配CPU時間片數量及硬盤i/o、帶寬大小可控制進程的優先級。例如,使用CPU子系統為某個進程組分配特定cpushare。任務3.2Docker容器資源控制相關知識3.2CGroups的功能資源統計,主要目的是為了計費。 CGroups可實現對進程組使用的資源數量的記錄。例如使用cpuacct子系統可記錄某個進程組使用的CPU時間。任務控制,掛起進程,恢復執行進程。 CGroups可實現對進程組的隔離和控制。例如,使用ns子系統對不同的進程線使用不同的namespace,以達到隔離的目的,使用不同的進程組實現各自的進程、網絡文件系統掛載空間,也可使用freezer子系統將進程組暫停和恢復。任務3.2Docker容器資源控制相關知識3.2CGroups的特點(1)控制族群控制族群是一組按照某種標準劃分的進程。CGroups中的資源控制是以控制族群為單位實現的。一個進程可以加入某個控制族群中,也可以從一個進程細移到另一個控制族群。一個進程組的進程可以使用CGroups以控制族群為單位分配資康并受到CGroups以控制族群為單位設定的限制。任務3.2Docker容器資源控制相關知識3.2CGroups的特點(2)層級控制族群可以組織為hierarchical的形式,即一棵控制族群樹。子控制自動繼承父節點的特定屬性,子控制組還可以有自己特定的屬性。(3)子系統一個子系統就是一個資源控制器,如memory子系統是一個內存控的子系統必須附加到一個層級上才能起作用。一個子系統附加到某個層級以后,這個壓罷級上的所有控制族群都受到這個子系統的控制。任務3.2Docker容器資源控制相關知識3.2CGroups主要通過以下9大子系統實現(1)blkio:為每個塊設備設置I/O限制,如磁盤、光盤和USB等設備。(2)cpu:使用調度程序提供對CPU的cgroup任務訪問。(3)cpuacct:自動生成cgroup任務的CPU資源使用報告。(4)cpuset:為cgroup中的任務分配獨立CPU(在多核系統中)和內存節點。(5)devices:允許或拒絕cgroup任務訪問設備。(6)freezer:暫停和恢復cgroup任務。(7)memory:設置每個cgroup任務使用的內存限制,并自動生成內存資源使用報告(8)net_cls:標記每個網絡包以供cgroup任務使用。(9)ns:命名空間子系統。3.2任務3.2Docker容器資源控制相關知識CPU資源配額控制Docker的資源限制和隔離完全基于Linuxcgroups。對CPU資源的限制方式也和cgroups相同。Docker提供的CPU資源限制選項可以在多核系統上限制容器能利用哪些vCPU。而對容器最多能使用的CPU時間有兩種限制方式:一是有多個CPU密集型的容器競爭CPU時,設置各個容器能使用的CPU時間相對比例。二是以絕對的方式設置容器在每個調度周期內最多能使用的CPU時間。任務3.2Docker容器資源控制相關知識3.2CPU資源配額控制查看docker容器真實的內存,可以[root@localhost~]#dockerstats2ec93f94157eCONTAINERIDNAMECPU%MEMUSAGE/LIMITMEM%NETI/OBLOCKI/OPIDS2ec93f94157e redhat 0.00%10.96MiB/7.607GiB0.14%2.91kB/0B3.72MB/120kB1任務3.2Docker容器資源控制相關知識3.2CPU資源配額控制dockerrun命令和CPU限制相關的所有選項如下:其中--cpuset-cpus用于設置容器可以使用的vCPU核。-c,--cpu-shares用于設置多個容器競爭CPU時,各個容器相對能分配到的CPU時間比例。--cpu-period和--cpu-quata用于絕對設置容器能使用CPU時間。--cpuset-mems暫用不上,這里不談。任務3.2Docker容器資源控制相關知識3.2CPU資源配額控制(1)CPU份額控制在創建容器時,利用--cpu-shares參數指定容器所使用的CPU份額值。[root@localhost~]#dockerrun-dit

--cpu-shares100busybox

容器創建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器完整ID>.scope目錄中查看cpu.shares文件,得到CPU份額配置信息。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-3aebaaa3b2c50bb0c6b91e40aece4061c078f45756e958b01e76dcee34badb33.scope/cpu.shares100任務3.2Docker容器資源控制相關知識3.2--cpu-shares的值僅僅表示一個彈性的加權值,不能保證可以獲得1個VCPU或者多少吉赫茲的CPU資源。

默認情況下,每個Docker容器的CPU份額都是1024。CPU份額只有在同時運行多個容器時才能體現其效果,單個容器的份額是沒有意義的。例如,容器A和容器B所占用的CPU份額分別為100和50,表示在CPU進行時間片分配的時候,容器A獲得CPU的時間片的機會是容器B的兩倍,但分配的結果取決于當時主機和其他容器的運行狀態。任務3.2Docker容器資源控制相關知識3.2假設有三個正在運行的容器,這三個容器中的任務都是CPU密集型的。第一個容器的cpu共享權值是1024,其它兩個容器的cpu共享權值是512。第一個容器將得到50%的CPU時間,而其它兩個容器就只能各得到25%的CPU時間了。如果再添加第四個cpu共享值為1024的容器,每個容器得到的CPU時間將重新計算。第一個容器的CPU時間變為33%,其它容器分得的CPU時間分別為16.5%、16.5%、33%。

必須注意的是,這個比例只有在CPU密集型的任務執行時才有用。在四核的系統上,假設有四個單進程的容器,它們都能各自使用一個核的100%CPU時間,不管它們的cpu共享權值是多少。

在多核系統上,CPU時間權值是在所有CPU核上計算的。即使某個容器的CPU時間限制少于100%,它也能使用各個CPU核的100%時間。任務3.2Docker容器資源控制相關知識3.2CGroups只在容器分配的資源緊缺時,也就是說,在需要對容器使用的資源進行限制時,才會生效。因此,無法單純根據某個容器的CPU份額來確定有多少CPU資源分配給它,資源分配結果取決于同時運行的其他容器的CPU分配和容器中進程的運行情況。任務3.2Docker容器資源控制相關知識3.2例如:利用busybox鏡像生成兩個容器,設置第二個容器的CPU使用率是第一個容器的兩倍。#dockerrun-dit--nametest1--cpu-shares100busyboxe65f0cc12e25dac7775b0ffe573c86ef3ed63a07e43ebf2c59895d7da340911f#dockerrun-dit--nametest2--cpu-shares200busybox433d9aace3ffd1c32d7ab548c37b688b13138cb374b3a4146940acb735817555任務3.2Docker容器資源控制相關知識3.2容器創建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器完整ID>.scope目錄中查看cpu.shares文件,得到CPU份額配置信息。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-e65f0cc12e25dac7775b0ffe573c86ef3ed63a07e43ebf2c59895d7da340911f.scope/cpu.shares100#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-433d9aace3ffd1c32d7ab548c37b688b13138cb374b3a4146940acb735817555.scope/cpu.shares200任務3.2Docker容器資源控制相關知識3.2(2)CPU周期控制。--cpu-period和--cpu-quota參數可以控制容器分配的CPU的時鐘周期。①--cpu-period用于指定容器對CPU的使用要在多長時間內做一次重新分配。②--cpu-quota用于指定在這個周期內,最多可以運行容器的時間。和--cpu-shares不同的是,這種配置指定了一個絕對值,且沒有彈性空間,容器對CPU資源的使用絕對不會超過配置的值。--cpu-period和--cpu-quota的單位為微秒;--cpu-period的最小值為1000μs,最大值為1s(10^6μs),默認值為0.1s(100000μs);--cpu-quota的值默認為-1,表示不做控制。任務3.2Docker容器資源控制相關知識3.2例1:如果容器進程需要每秒使用單個CPU的0.2s時間,則可以將cpu-period設置為1000000(1s),將cpu-quota設置為200000(0.2s)。在多核情況下,如果允許容器進程完全占用兩個CPU,則可以將cpu-period設置為100000(即0.1s),即cpu-period的默認值,將cpu-quota設置為200000(0.2s)。[root@localhost~]#dockerrun-dit--cpu-period100000--cpu-quota200000busybox任務3.2Docker容器資源控制相關知識3.2容器創建完成后,可以在/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-<容器的完整ID>.scope目錄中查看cpu.cfs_period_us和cpu.cfs_quota_us文件。#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-1be3b854e1dba63bac9e178af85768b84a5cbf949a76cad05dc4c7073edc8b7.scope/cpu.cfs_period_us100000#cat/sys/fs/cgroup/cpu,cpuacct/system.slice/docker-f1be3b854e1dba63bac9e178af85768b84a5cbf949a76cad05dc4c7073edc8b7.scope/cpu.cfs_quota_us200000任務3.2Docker容器資源控制相關知識3.2例2:假如需要給此容器分配cpu使用率的20%,則參數需要設置為20000,相當于每個周期分配給這個容器0.2s。[root@localhost~]#dockerrun-itd--name=t1--cpu-quota20000busybox任務3.2Docker容器資源控制相關知識3.2(3)CPU內核控制對于多核CPU的服務器,Docker可以使用--cpuset-cpus和--cpuset-mems參數控制容器運行,限定使用哪些CPU內核和內存節點。其對具有NUMA拓撲(具有多CPU、多內存節點)的服務器尤其有用,可以對需要高性能計算的容器進行性能最優的配置。如果服務器只有一個內存節點,則--cpuset-mems的配置基本上不會有明顯效果。簡而言之:--cpuset-cpus可以設置容器可以在哪些CPU核上運行。--cpuset-mems參數表示在NUMA系統上,我們可以設置容器可以使用的內存節點。例如,創建容器名為busybox1的容器,要求創建的容器只能使用0和1兩個內核。[root@localhost~]#dockerrun-dit--namebusybox1--cpuset-cpus0-1busybox任務3.2Docker容器資源控制相關知識3.2(3)CPU內核控制容器創建完成后,可以在/sys/fs/cgroup/cpuset/system.slice/docker-<容器的完整ID>.scope目錄中查看cpuset.cpus文件。#cat/sys/fs/cgroup/cpuset/system.slice/docker-f6b73673874dc3dad060428ad4dedd7500ef66a1ac2175c0249cdf0176ecdac.scope/cpuset.cpus0-1任務3.2Docker容器資源控制相關知識3.2內存配額控制Docker提供的內存限制功能有以下幾點:容器能使用的內存和交換分區大小。容器的核心內存大小。容器虛擬內存的交換行為。容器內存的軟性限制。是否殺死占用過多內存的容器。容器被殺死的優先級一般情況下,達到內存限制的容器過段時間后就會被系統殺死。3.2任務3.2Docker容器資源控制相關知識內存配額控制執行dockerrun命令時能使用的和內存限制相關的所有選項如下。3.2任務3.2Docker容器資源控制相關知識內存配額控制Docker通過如下參數來控制容器的內存使用配額,可以實現控制容器的swap大小、可用內存大小等。(1)--memory-swappiness:用于設置容器的虛擬內存控制行為,參數值為0~100,默認值為60,參數值越小,越傾向于使用物理內存。當參數值為100時,表示盡量使用swap分區;當參數值為0時,表示禁用容器swap功能。(2)--kernel-memory:核心內存限制,參數值最小為4MB。(3)--memory:設置容器使用的最大內存上限,默認單位為byte,可以使用KB、MB或GB等。任務3.2Docker容器資源控制相關知識3.2

(4)--memory-swap:等于內存和swap分區大小的總和,其設置為-1時,表示swap分區的大小是無限的。其默認單位為byte,可以使用KB、MB或GB等。如果--memory-swap的設置值小于--memory的值,則使用默認值,即--memory-swap值的兩倍。

(5)--memory-reservation:啟用彈性的內存共享,當宿主機資源充足時,允許容器盡量多地使用內存,當檢測到內存競爭或者內存不充足時,強制將容器的內存降低到memory-reservation所指定的內存大小。若不設置此選項,有可能出現某些容器長時間占用大量內存的情況,導致性能上的損失。

默認情況下,容器可以使用宿主機上的所有空閑內存。任務3.2Docker容器資源控制相關知識3.2用戶內存限制用戶內存限制就是對容器能使用的內存和交換分區的大小作出限制。使用時要遵循兩條直觀的規則:-m,--memory選項的參數最小為4M。--memory-swap不是交換分區,而是內存加交換分區的總大小,所以--memory-swap必須比-m,--memory大。在這兩條規則下,一般有四種設置方式。(1)不設置如果不設置-m,--memory和--memory-swap,容器默認可以用完宿主機的所有內存和swap分區。不過注意,如果容器占用宿主機的所有內存和swap分區超過一段時間后,會被宿主機系統殺死(如果沒有設置–00m-kill-disable=true的話)。任務3.2Docker容器資源控制相關知識3.2

(2)設置-m,--memory

不設置--memory-swap給-m或--memory設置一個不小于4M的值,假設為a,不設置--memory-swap,或將--memory-swap設置為0。這種情況下,容器能使用的內存大小為a,能使用的交換分區大小也為a。因為Docker默認容器交換分區的大小和內存相同。如果在容器中運行一個一直不停申請內存的程序,你會觀察到該程序最終能占用的內存大小為2a。比如$dockerrun-m1Gubuntu:16.04,該容器能使用的內存大小為1G,能使用的swap分區大小也為1G。容器內的進程能申請到的總內存大小為2G。任務3.2Docker容器資源控制相關知識3.2

(3)設置-m,--memory=a,--memory-swap=b,且b>a

給-m設置一個參數a,給--memory-swap設置一個參數b。a時容器能使用的內存大小,b是容器能使用的內存大小+swap分區大小。所以b必須大于a。b-a即為容器能使用的swap分區大小。比如$dockerrun-m1G--memory-swap3Gubuntu:16.04,該容器能使用的內存大小為1G,能使用的swap分區大小為2G。容器內的進程能申請到的總內存大小為3G。任務3.2Docker容器資源控制相關知識3.2

(4)設置-m,--memory=a,--memory-swap=-1給-m參數設置一個正常值,而給--memory-swap設置成-1。這種情況表示限制容器能使用的內存大小為a,而不限制容器能使用的swap分區大小。這時候,容器內進程能申請到的內存大小為a+宿主機的swap大小。任務3.2Docker容器資源控制相關知識3.2例如,創建容器名為memory1的容器,設置容器使用的最大內存為128MB。[root@localhost~]#dockerrun-tid--namememory1--memory128mbusybox默認情況下,Docker還為容器分配了同樣大小的swap分區,如上面的代碼創建出的容器實際上最多可以使用256MB內存,而不是128MB內存。如果需要自定義swap分區大小,則可以通過聯合使用--memory-swap參數來實現控制。

任務3.2Docker容器資源控制相關知識3.2任務3.2Docker容器資源控制與CPU的CGroups配置類似,Docker容器在目錄/sys/fs/cgroup/memory/system.slice/docker-<容器的完整ID>.scope中創建相應的CGroups配置文件,可通過查看memory.limit_in_bytes和memory.memsw.limit_in_bytes文件提取設置的值。#cat/sys/fs/cgroup/memory/system.slice/docker-8e2e1bd17b56afe4a803ecb161a3eaf52a28e6587fb50245e20f92bf5fa3737e.scope/memory.limit_in_bytes134217728 //128MB=128×1024×1024=134217728Byte#cat/sys/fs/cgroup/memory/system.slice/docker-8e2e1bd17b56afe4a803ecb161a3eaf52a28e6587fb50245e20f92bf5fa3737e.scope/memory.memsw.limit_in_bytes268435456 //256MB=256×1024×1024=268435456byte3.2任務3.2Docker容器資源控制注意:執行上述命令時,如果:出現下述提示信息,則表示主機上默認不啟用CGrcroups來控制swap分區,需修改grub啟動參數。WARNING:Yourkerneldoesnotsupportswaplimitcapabilities,memorylimitedwithoutswap3.2磁盤I/O配額控制Docker通過以下參數實現對磁盤I/O的控制,其中大多數參數必須在有宿主機設備的情況下使用。(1)--device-read-bps:限制設備的讀速度,單位可以是KB/s、MB/s或GB/s。(2)--device-read-iops:限制設備每秒讀I/O的次數。(3)--device-write-bps:限制設備的寫速度,單位可以是KB/s、MB/s或GB/s。(4)--device-write-iops:限制設備每秒寫I/O的次數。任務3.2Docker容器資源控制相關知識3.2(5)--blkio-weight:容器默認磁盤I/O的加權值,有效值為10~100。(6)--blkio-weight-device

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論