深刻剖析Kubernetes學習筆記:容器基礎(05-06)

05 :從進程提及

一、容器自己沒有價值,有價值的是"容器編排"

二、什麼是進程?

一旦"程序"被執行起來,它就從磁盤上的二進制文件,變成node

一、計算機內存中的數據
二、寄存器裏的值
三、堆棧中的指令
四、被打開的文件
五、以及各類設備的狀態信息的一個集合。

像這樣一個程序運行起來後的計算機執行環境的綜合,就是咱們今天的主角:進程docker

三、容器技術的核心功能:

一、就是經過約束和修改進程的動態表現,從而爲其創造出一個"邊界"ubuntu

二、Cgroups 技術是用來製造約束的主要手段bash

三、Namespace 技術則是用來修改進程視圖的主要方法。網絡

四、Linux容器最基本的實現原理了

[root@luoahong ~]# docker run -it busybox /bin/sh
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
57c14dd66db0: Pull complete
Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0
Status: Downloaded newer image for busybox:latest
/ # ps
PID USER TIME COMMAND
1 root 0:00 /bin/sh
6 root 0:00 ps

請幫我啓動一個容器,在容器裏執行 /bin/sh,而且給我分配一個命令行終端跟這個容器交互性能

原本,每當咱們在宿主機上運行了一個 /bin/sh 程序,操做系統都會給他分配一個進程編號,好比PID=100
這個編號是進程的惟一標識,就像員工的工牌同樣,因此PID=100,能夠粗略地理解爲這個/bin/sh是咱們公司裏的第
100號員工,而第1號員工就天然是比爾 · 蓋茨這樣統領全局的人物。ui


而除了咱們剛剛用到的 PID Namespace,Linux操做系統還提供了 Mount、UTS、IPC、
Network 和 User 這些 Namespace用來對各類不一樣的進程上下文進行「障眼法」操做spa

五、容器,實際上是一種特殊的進程而已

其實是在建立容器進程時,指定了這個進程所須要啓用的一組 Namespace 參數。這樣,容器就只能「看」到當前
Namespace 所限定的資源、文件、設備、狀態,或者配置而對於宿主機以及其餘不相關的程序,它就徹底看不到了。操作系統

六、容器和虛擬機的比較


這時,這些進程就會以爲本身是各自 PID Namespace,裏的第 1 號進程,只能看到各自 Mount Namespace裏掛載命令行

用來對各類不一樣的進程上下文進行「障眼法」操做

06 :隔離與限制

Namespace 技術實際上修改了應用進程看待整個計算機"視圖"被操做系統作了限制,只能"看到"某些指定的內容

一、容器相對於虛擬機最大的優點是?

「敏捷」和「高性能」是容器相較於虛擬機最大的優點,也是它可以在 PaaS 這種更細粒度的資源管理平臺上大行其道的重要緣由

優勢:「敏捷」和「高性能」
缺點:隔離的不完全

不能被Namespace 化的資源和對象 好比時間

二、限制

一、Linux Cgroups 的全稱是 Linux Control Group。它最主要的做用,就是限制一個進程組可以使用的資源上限,包括CPU、內存、磁盤、網絡帶寬等等

[root@luoahong container]# pwd
/sys/fs/cgroup/cpu/container
[root@luoahong container]# while : ; do : ; done &
[1] 1447
[root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us 
-1
[root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 
100000
[root@luoahong container]# echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us
[root@luoahong container]# echo 1447 > /sys/fs/cgroup/cpu/container/tasks

二、Linux Cgroups 的設計仍是比較易用的,簡單粗暴地理解呢,它就是一個子系統目錄加上一組資源限制文件的組合

 

docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash

$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us 
100000
$ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us 
20000

三、容器是一個單進程模型

[root@k8s-master ~]# docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash 
root@beac9236771e:/# cd /sys/fs/cgroup/cpu/
root@beac9236771e:/sys/fs/cgroup/cpu# ls
cgroup.clone_children cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat cpuacct.usage notify_on_release
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares cpuacct.stat cpuacct.usage_percpu tasks
root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us 
100000
root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us
20000
root@beac9236771e:/sys/fs/cgroup/cpu# pwd
/sys/fs/cgroup/cpu

$ mount -l | grep tmpfs
none on /tmp type tmpfs (rw,relatime)

[root@k8s-master cpu]# mount -l | grep tmpfs
devtmpfs on /dev type devtmpfs (rw,nosuid,size=1006112k,nr_inodes=251528,mode=755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203192k,mode=700)

這就意味着這個 Docker 容器,只能使用到 20% 的cpu帶寬

相關文章
相關標籤/搜索