日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker资源控制与TLS加密通信

發布時間:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker资源控制与TLS加密通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Docker資源控制
    • 使用stress工作測試cpu和內存
    • cup周期限制
    • CPU Core 控制
    • cpu配額控制參數的混合使用
    • 內存限額
    • IO限制
    • bps和iops的限制
  • Docker-TLS加密通信
    • 實驗需求
  • 遠程連接docker

Docker資源控制

  • Docker通過Cgroup 來控制容器使用的資源配額,包括CPU、內存、磁盤三大方面,基本覆蓋了常見的資源配額和使用量控制。

  • Cgroup是Control Groups的縮寫,是Lnux內核提供的一種可以限制、記錄、隔離進程組所使用的物理資源(如CPU、內存、磁盤IO等等)的機制,

這些具體的資源管理功能稱為Cgroup子系統,有以下幾大子系統實現:

  • **blkio:**設置限制每個塊設備的輸入輸出控制。例如:磁盤,光盤以及usb等

  • **CPU:**使用調度程序為cgroup任務提供CPU的訪問。

  • **cpuacct:**產生cgroup任務的CPU 資源報告。

  • cpuset:如果是多核心的CPU,這個子系統會為cgroup任務分配單獨的CPU和內存。

  • **devices:**允許或拒絕cgroup任務對設備的訪問。

  • **freezer:**暫停和恢復cgroup任務。

  • memory:設置每個cgroup的內存限制以及產生內存資源報告。

  • **net_cls:**標記每個網絡包以供cgroup方便使用。

  • **ns:**命名空間子系統。

  • **perf_event:**增加了對每個group的監測跟蹤的能力,可以監測屬于某個特定的group的所有線程以及運行在特定CPU上的線程。

    下面開始利用stress壓力測試工具來測試CPU 和內存使用狀況。

使用stress工作測試cpu和內存

使用Dockerfile來創建一個基于Centos的stress的工作鏡像

[root@localhost opt]# mkdir stress [root@localhost opt]# cd stress [root@localhost stress]# vim Dockerfile FROM centos:7 MAINTAINER chen "zhang@kgc.com" RUN yum -y install wget RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN yum install -y stress

運行腳本

[root@localhost stress]# docker build -t centos:stress .

使用下面命令創建容器,命令中–cpu-shares參數不能保證獲得1個VCPU或多個CPU資源,它僅僅是一個彈性加權值

docker run -itd --cpu-shares 100 centos:stress

1:說明:說明:默認情況下,每個Docker容器的CPU份額都是1024。單獨一個容器的份額是沒有意義的。只有在同時運行多個容器時,容器的CPU加權的效果

2:例如,兩個容器AB的CPU份額分別為1000和500,在CPU進行時間片分配的時候,容器A比容器B多一倍的機會獲得CPU的時間片。分配的結果取決于當時主機和其他容器的運行狀態,實際上也無法保證容器A一定能獲得CPU時間片。比如容器A的進程一直是空閑的,那么容器B是可以獲取比容器A更多的CPU時間片的。極端情況下,例如主機上只運行了一個容器,即使它的CPU份額只有50,它也可以獨占整個主機

創建容器

docker run -tid --name cpu512 --cpu-shares 512 centos:stress stress -c 10

stress -c 10:容器產生10個子函數進程

進入容器

docker exec -it 0aa895961d13 bash

輸入top查看我們已經創建了10個進程(1master帶10個進程)

再開一臺終端容器做比較

docker run -tid --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10

進入容器

docker exec -it f5f6dac70fa2 bash

兩臺cpu對比,我們可以看到%CPU份額是另一臺的一半(使用top對比兩個的%CPU,比例是1:2)

cup周期限制

Docker提供了–cpu-period、–cpu-quota兩個參數控制容器可以分配到的CPU時鐘周期。

  • –cpu-period是用來指定容器對CPU的使用要在多長時間內做一次重新分配.
  • --cpu-quota是用來指定在這個周期內,最多可以有多少時間用來跑這個容器。與–cpu-shares 不同的是,這種配置是指定一個絕對值,容器對CPU資源的使用絕對不會超過配置的值。
  • cpu-period和cpu-quota 的單位為微秒(us). cpu-period的最小值為1000微秒,最大值為1秒(10^6 us),默認值為0.1秒(10000 us)cpu-quota的值默認為-1,表示不做控制。cpu-period和cpu-quota參數一般聯合使用。
  • 例如:容器進程需要每1秒使用單個CPU的0.2秒時間,可以將cpu-period設置為1000000 (即1秒),cpu-quota設置為20000(0.2秒)當然,在多核情況下,如果允許容器進程完全占用兩個CPU,則可以將cpu-period 設置為100000(即0.1秒),cpu-quota設置為200000 (0.2)

我么先把前面的容器停止

停止容器 [root@localhost stress]# docker stop f5f6dac70fa2 f5f6dac70fa2 [root@localhost stress]# docker stop b69f01e20458

下面我們配置容器名字為cuptest 資源分配100000秒,cpu配額為200000,針對 centos:stress鏡像

docker run -itd --name cuptest --cpu-period 100000 --cpu-quota 200000 centos:stress

進入容器

[root@localhost stress]# docker exec -it 6078e84e4b6c bash

查看資源分配,cpu配額

[root@6078e84e4b6c /]# cat /sys/fs/cgroup/cpu/cpu.cfs_period_us 100000 [root@6078e84e4b6c /]# cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us 200000

修改內存8G核心數4

CPU Core 控制

對多核CPU的服務,Docker還可以控制容器運行使用哪些CPU內核,即使用–cpuuset-cpus參數。這對具多CPU的服務器尤其有用,可以對需要高性能計算進行性能最優的配置

docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress

ps:以上命令需要宿主機為雙核,表示創建容器只可以用0,1兩內核

進入容器

[root@localhost ~]# docker exec -it 9cdded9c10de bash 查看cpu [root@9cdded9c10de /]# cat /sys/fs/cgroup/cpuset/cpuset.cpus 0-1

下面指令可以看到容器中進程與cpu核心的綁定關系,達到綁定CPU內核的目的

[root@localhost ~]# docker exec c0ffab515796 taskset -c -p 1

壓測測試

[root@localhost ~]# docker exec -it 9cdded9c10de bash [root@9cdded9c10de /]# stress -c 10

cpu配額控制參數的混合使用

通過cpuset-cpus參數指定容器A使用CPU內核0,容器B只是用CPU內核1.
在主機上只有這兩個容器使用對應CPU內核的情況,它們各自占用全部的內核資源,cpu-shares沒有明顯效果。
cpuset-cpus、cpuset-mems參數只在多核、多內存節點上的服務器上有效,并且必須與實際的物理配置匹配。否則也無法達到資源控制的目的。
在系統具有多個CPU內核的情況下,需要通過cpuset-cpus參數為設置容器CPU內核才能方便地進行測試。

[root@localhost ~]# docker run -tid --name cpu3 --cpuset-cpus 1 --cpu-shares 512 centos:stress stress -c 1

進入查看資源

[root@localhost ~]# docker exec -it af8b5f7b10fb bash

在開一臺

[root@localhost ~]# docker run -tid --name cpu4 --cpuset-cpus 3 --cpu-shares 1024 centos:stress stress -c 1

總結:上面的centos:stress鏡像安裝了stress工具,用來測試CPU和內存的負載。通過在兩個容器上分別執行stress -c1命令,會給系統一個隨機負載,產生1個進程。這個進程都反復不停的計算由rand()產生隨機數的平方根,直到資源耗盡。察到宿主機上的CPU使用率,第三個內核的使用率接近100%,并且一批進程的CPU使用率明顯存在2:1的使用比例的對比。

內存限額

與操作系統類似,容器可使用的內存包括兩部分:物理內存和Swap.
Docker通過下面兩組參數來控制容器內存的使用量。
-m或–memory:設置內存的使用限額,例如10OM、1024M.
–memory-swap:設置內存+swap的使甩限額。

執行如下命令允許該容器最多使用20OM的內存和30OM的swap.

[root@localhost ~]# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

–vm 1:啟動1個內存工作線程。
–vm-bvtes 280M:每個線程分配28OM內存。

如果讓工作線程分配的內存超過300M,分配的內存超過限額,stress線程報錯,容器退出。

[root@localhost stress]# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 310M

IO限制

默認情況下,所有容器能平等地讀寫磁盤,可以通過設置–blkio-weight參數來改變容器block lO的優先級。
–blkio-weight與–cpu-shares類似。設置的是相對權重值,默認為500。
在下面的例子中,容器A讀寫磁盤的帶寬是容器B的兩倍。

[root@localhost ~]# docker run -idt --name container_A --blkio-weight 600 centos:stress [root@localhost ~]# docker exec -it f1eff11d5926 bash [root@f1eff11d5926 /]# cat /sys/fs/cgroup/blkio/blkio.weight 600

在建立一個權重為300的

[root@localhost ~]# docker run -idt --name container_B --blkio-weight 300 centos:stress [root@localhost ~]# docker exec -it a9799eb70c64 bash [root@a9799eb70c64 /]# cat /sys/fs/cgroup/blkio/blkio.weight 300

總結600的讀寫更快

bps和iops的限制

  • bps是byte per second,每秒讀寫的數據量。
  • ops是io per second.每秒IO的次數。
    通過以下參數控制客器的bps和iops:
  • -device-read-bps。限制讀某個設備的bps.
  • -device-write-bps,限制寫某個設備的bps.
  • -device-read-iops,限制讀某個設備的iops.
  • -device-write-iops,限制寫某個設備的iops.

面的示例是限制容器寫/dev/sda的速率為5MB/s.

docker run -it --device-write-bps /dev/sda:5MB centos:stress

先容器中不停的讀寫(我們發現寫的很慢)

[root@24ce8fee6b6a /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 204.806 s, 5.2 MB/s

我們不設置限制(發現很快就好了)

[root@localhost ~]# docker run -it centos:stress[root@ef487c7c1cee /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.89416 s, 567 MB/s

Docker-TLS加密通信

安全傳輸層協議(TLS)用于在兩個通信應用程序之間提供保密性和數據完整性。

該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS(TLS Handshake)。

  • 對稱:DES 3DES AES 長度不同 長度越長安全越高,解密速度越慢
  • 非對稱:RSA公鑰,私鑰 ,公鑰:所有人可知(鎖)私鑰 (鑰匙)個人身份信息,不可抵賴。
  • 證書:個人信息,密鑰,有效期
  • ca:證書頒發機構 ca證書

實驗過程;

創建ca密鑰>>創建ca證書

創建服務器私鑰>>簽名密鑰>>使用ca證書與私鑰證書簽名

生成客戶端密鑰>>簽名客戶端>>使用ca證書與客戶簽名證書

實驗需求

使用需要服務2臺服務去,一臺配置證書:一臺實驗對接

centos7:192.168.136.90

centos7:192.168.136.81

設置master主機名

[root@localhost ~]# hostnamectl set-hostname master

配置解析(在另一臺也配上為了名稱對應地址)

[root@ef487c7c1cee /]# vim /etc/hosts 192.168.136.90 master

配置步驟

創建ca密鑰 [root@master ~]# openssl genrsa -aes256 -out ca-key.pem 4096輸入密碼:123123創建ca證書openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem創建服務器私鑰openssl genrsa -out server-key.pem 4096簽名密鑰openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr使用ca證書與私鑰證書簽名,輸入123123openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem生成客戶端密鑰openssl genrsa -out key.pem 4096簽名客戶端openssl req -subj "/CN=client" -new -key key.pem -out client.csr創建配置文件 echo extendedKeyUsage=clientAuth > extfile.cnf簽名證書,輸入123123(需要簽名客戶端,ca證書,ca密鑰) openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf刪除多余文件 [root@localhost ~]# rm -rf ca.srl client.csr server.csr extfile.cnf

配置docker證書

[root@localhost ~]# vim /lib/systemd/system/docker.service 14行加#號 15 ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/server-cert.pem --tlskey=/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

創建證書目錄

[root@localhost ~]# mkdir /tls [root@localhost ~]# mv *.pem /tls/

重啟服務

[root@localhost ~]# systemctl daemon-reload [root@localhost ~]# systemctl restart docker

查看端口

[root@master ~]# netstat -ntap | grep 2376 tcp6 0 0 :::2376 :::* LISTEN 13907/dockerd

本地驗證(查看docker版本)

[root@master tls]# cd /tls/ [root@localhost docker]#docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version

遠程連接docker

開啟客戶端192.168.136.81

服務端復制證書給客戶端

[root@maseter tls]# scp ca.pem root@192.168.136.81:/etc/docker [root@maseter tls]# scp cert.pem root@192.168.136.81:/etc/docker [root@maseter tls]# scp key.pem root@192.168.136.81:/etc/docker

在客戶端查看查看docker版本

[root@localhost docker]# cd /etc/docker/ [root@localhost docker]#docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version

總結

以上是生活随笔為你收集整理的Docker资源控制与TLS加密通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。