国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程

這篇具有很好參考價(jià)值的文章主要介紹了【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程

?? 關(guān)于作者


大家好,我是秋意零。

?? CSDN作者主頁

  • ?? 博客主頁

?? 簡介

  • ?? 普通本科生在讀
  • 在校期間參與眾多計(jì)算機(jī)相關(guān)比賽,如:?? “省賽”、“國賽”,斬獲多項(xiàng)獎(jiǎng)項(xiàng)榮譽(yù)證書
  • ?? 各個(gè)平臺(tái),秋意零/秋意臨 賬號(hào)創(chuàng)作者
  • ?? 云社區(qū) 創(chuàng)建者
點(diǎn)贊、收藏+關(guān)注下次不迷路!

歡迎加入云社區(qū)


一、為什么會(huì)出現(xiàn)容器?

  • 我們來假設(shè)一個(gè)場(chǎng)景,某個(gè)客戶向某個(gè)公司定制了一個(gè)產(chǎn)品,經(jīng)過2個(gè)月的使用這個(gè)產(chǎn)品終于完成了,并且在>自己公司中也是可以安全運(yùn)行的,這個(gè)時(shí)候就需要到客戶哪里交付,需要現(xiàn)場(chǎng)安裝部署。
  • 在安裝部署過程中,需要在客戶哪里準(zhǔn)備好自己產(chǎn)品的運(yùn)行環(huán)境,由于產(chǎn)品比較大,配置環(huán)境是非常浪費(fèi)時(shí)間和精力的,而且這個(gè)過程中或許還會(huì)出現(xiàn)自己公司沒有遇到過的問題。
  • 顯然這種傳統(tǒng)方式,是需要優(yōu)化改進(jìn)的。這個(gè)時(shí)候就出現(xiàn)了容器部署,容器解決了應(yīng)用打包的這個(gè)根本難題

當(dāng)然還要其它應(yīng)用場(chǎng)景,這里只是說明一個(gè)舉例。

二、容器是什么?

緊跟上面的例子:

容器解決了應(yīng)用打包的這個(gè)根本難題

  • 這個(gè)打包包含應(yīng)用環(huán)境和應(yīng)用本身,就是說可以打包自己應(yīng)用和環(huán)境,這就是一個(gè)鏡像,有了這個(gè)鏡像,我們只需要攜帶這個(gè)鏡像到客戶現(xiàn)場(chǎng)運(yùn)行這個(gè)鏡像就行了,這時(shí)運(yùn)行的鏡像就稱為容器。
  • 容器其實(shí)是一種沙盒技術(shù)。顧名思義,沙盒就是能夠像一個(gè)集裝箱一樣,把你的應(yīng)用“裝”起來的技術(shù)。這樣,應(yīng)用與應(yīng)用之間,就因?yàn)?strong>有了邊界而不至于相互干擾;而被裝進(jìn)集裝箱的應(yīng)用,也可以被方便地搬來搬去。

專業(yè)名詞:

  • image: 鏡像包含應(yīng)用和應(yīng)用環(huán)境
  • contaienr: 容器是鏡像的運(yùn)行出來的狀態(tài)
  • registry: 倉庫是存放鏡像的地方

容器本身沒有太大價(jià)值,有價(jià)值的是“容器編排” (相當(dāng)于是說,技術(shù)本身沒有價(jià)值,價(jià)值在于解決實(shí)際問題)

  • 編排主要是容器之間的關(guān)系,也之所以 Kubernetes 項(xiàng)目和CNCF社區(qū) 火的原因之一

這里簡單提一嘴: Kubernetes 可以看作是操作系統(tǒng),而容器就是應(yīng)用程序進(jìn)程

【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程

三、容器“邊界”的實(shí)現(xiàn)手段

3.1、進(jìn)程如何運(yùn)行的?

  • 假如,你要寫一個(gè)計(jì)算加減法的程序,這個(gè)程序需要的輸入來自一個(gè)文件,計(jì)算結(jié)果輸出到另一個(gè)文件
  • 因?yàn)橛?jì)算機(jī)只認(rèn)識(shí)二進(jìn)制 0 和 1,不管用什么語言編寫,都需要將這段代碼編譯成二進(jìn)制文件,這樣計(jì)算機(jī)才能運(yùn)行。
  • 我們知道我們的數(shù)據(jù)(程序)是存放在磁盤當(dāng)中的,運(yùn)行程序時(shí)需要將磁盤數(shù)據(jù)放入內(nèi)存中,這樣CPU、寄存器和內(nèi)存協(xié)作計(jì)算,還有被打開的文件,以及各種各樣的 I/O 設(shè)備在不斷地調(diào)用中修改自己的狀態(tài),這個(gè)程序就運(yùn)行起來了。
  • 一旦“程序”被執(zhí)行起來,它就從磁盤上的二進(jìn)制文件,變成了內(nèi)存中的數(shù)據(jù)、寄存器里的值、堆棧中的指令、被打開的文件,以及各種設(shè)備的狀態(tài)信息的一個(gè)集合。這樣的一個(gè)程序運(yùn)行集合就是我們的今天的主角:進(jìn)程
  • 所以,對(duì)于進(jìn)程來說,它的靜態(tài)表現(xiàn)是程序,存放在磁盤中;動(dòng)態(tài)表現(xiàn)是進(jìn)程,數(shù)據(jù)和狀態(tài)的集合。

3.2、Namespace 與 Docker 邊界

  • 而容器技術(shù)的核心功能,就是通過約束和修改進(jìn)程的動(dòng)態(tài)表現(xiàn),從而為其創(chuàng)造出一個(gè)“邊界”。
  • 對(duì)于 Docker 等大多數(shù) Linux 容器,Cgroups 技術(shù)是用來制造約束的主要手段,而 Namespace 技術(shù)則是用來修改進(jìn)程視圖的主要方法。

可能覺得 Cgroups 和 Namespace 這兩個(gè)概念很抽象,我們一起動(dòng)手實(shí)踐一下,就很容易理解這兩項(xiàng)技術(shù)了。

我們使用 docker run 運(yùn)行一個(gè)鏡像容器,-it 參數(shù)是分配一個(gè)文本輸入/輸出環(huán)境,TTY

[root@master01 ~]# docker run -it busybox /bin/sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sh
    7 root      0:00 ps

可以看到,我們第一個(gè)進(jìn)程號(hào)是 PID=1,并且運(yùn)行的是 /bin/sh 命令,還有一個(gè)就是我們剛才執(zhí)行的 ps 命令
可以看到,我們已經(jīng)被 Docker 隔離在一個(gè)跟宿主機(jī)完全不同的環(huán)境當(dāng)中。

容器的本質(zhì)是一個(gè)進(jìn)程

宿主機(jī)上我們執(zhí)行 ps 命令可以看到,宿主機(jī)上有個(gè)進(jìn)程,這個(gè)進(jìn)程是我們運(yùn)行容器時(shí)所使用的命令,也代表了我們?nèi)萜饕彩且粋€(gè)進(jìn)程表現(xiàn)出來的,所以 容器的本質(zhì)是一個(gè)進(jìn)程

[root@master01 ~]# ps -aux | grep "/bin/sh"
...
root      97285  0.3  0.2 933264 21796 pts/0    Sl+  11:33   0:00 docker run -it busybox /bin/sh
...

為了表現(xiàn)這個(gè)容器是進(jìn)程我們做一個(gè)實(shí)驗(yàn)

  • 首先連接工具開兩個(gè)窗口
  • 一個(gè)運(yùn)行的是 docker run -it busybox /bin/sh 這樣一條命令
  • 另一個(gè)執(zhí)行 ps -aux | grep "/bin/sh" 找到這里的 docker run -it busybox /bin/sh 進(jìn)程,執(zhí)行 kill -9 97285 (這里通過 ps 命令可以看到我的容器 PID 是97285)殺掉這個(gè)進(jìn)程,如圖可以看到 docker run -it busybox /bin/sh 進(jìn)程退出了,說明了 容器的本質(zhì)是一個(gè)進(jìn)程。

【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程

這是怎么做到的呢?

  • 本來,每當(dāng)我們?cè)谒拗鳈C(jī)上運(yùn)行了一個(gè) /bin/sh 程序時(shí),操作系統(tǒng)都會(huì)給它分配一個(gè)進(jìn)程編號(hào),比如 PID=1000。 進(jìn)程編號(hào)具有唯一標(biāo)識(shí),就像員工的工號(hào),所以我們可以看作 /bin/sh 是公司里的第 1000 名員工,而 1 號(hào)員工就是老板,管理全局的人。
  • 現(xiàn)在,我們通過 Docker 把這個(gè) /bin/sh 程序運(yùn)行在一個(gè)容器中。這時(shí),Docker 就會(huì)在這個(gè) 1000 號(hào)員工入職時(shí)給他一個(gè)“障眼法”,讓他永遠(yuǎn)看不到前面的其他 999 個(gè)員工,更看不到老板。這樣,他就會(huì)以為自己第 1 號(hào)員工。

這種機(jī)制,其實(shí)就是對(duì)被隔離應(yīng)用的進(jìn)程空間做了手腳,也就是使用了 Linxu 中的 Namespace 技術(shù)

這種 Namespace 使用方式,其實(shí)是 Linux 創(chuàng)建新進(jìn)程的一個(gè)可選參數(shù),比如:

# 創(chuàng)建一個(gè)新的進(jìn)程,并且返回它的進(jìn)程號(hào) pid
int pid = clone(main_function, stack_size, SIGCHLD, NULL); 

而當(dāng)我們用 clone() 系統(tǒng)調(diào)用創(chuàng)建一個(gè)新進(jìn)程時(shí),就可以在參數(shù)中指定 CLONE_NEWPID 參數(shù)(新PID),比如:

int pid = clone(main_function, stack_size, CLONE_NEWPID | SIGCHLD, NULL); 

這時(shí),新創(chuàng)建的這個(gè)進(jìn)程將會(huì)“看到”一個(gè)全新的進(jìn)程空間,在這個(gè)進(jìn)程空間里,它的 PID 是 1。之所以說“看到”,是因?yàn)檫@只是一個(gè)“障眼法”,在宿主機(jī)真實(shí)的進(jìn)程空間里,這個(gè)進(jìn)程的 PID 還是真實(shí)的數(shù)值,比如 100。

  • 我們還可以多次執(zhí)行上面的 clone() 調(diào)用,這樣就會(huì)創(chuàng)建多個(gè) PID Namespace,而每個(gè) Namespace 里的應(yīng)用進(jìn)程,都會(huì)認(rèn)為自己是當(dāng)前容器里的第 1 號(hào)進(jìn)程
  • 除了我們剛剛用到的 PID Namespace,Linux 操作系統(tǒng)還提供了 Mount、UTS、IPC、Network 和 User 這些 Namespace,用來對(duì)各種不同的進(jìn)程上下文進(jìn)行“障眼法”操作。
  • 比如,Mount Namespace,用于讓被隔離進(jìn)程只看到當(dāng)前 Namespace 里的掛載點(diǎn)信息;Network Namespace,用于讓被隔離進(jìn)程看到當(dāng)前 Namespace 里的網(wǎng)絡(luò)設(shè)備和配置。

這,就是 Linux 容器最基本的實(shí)現(xiàn)原理了

Docker 容器這個(gè)聽起來玄而又玄的概念,實(shí)際上是在創(chuàng)建容器進(jìn)程時(shí),指定了這個(gè)進(jìn)程所需要啟用的一組 Namespace 參數(shù)。這樣,容器就只能“看”到當(dāng)前 Namespace 所限定的資源、文件、設(shè)備、狀態(tài),或者配置。而對(duì)于宿主機(jī)以及其他不相關(guān)的程序,它就完全看不到了。

所以說,容器,其實(shí)是一種特殊的進(jìn)程而已。

總結(jié)

相信大家學(xué)容器時(shí)都看過這個(gè)虛擬機(jī)和容器的對(duì)比圖。
【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程

  • 左邊是虛擬機(jī)的工作原理,其中 Hypervisor 軟件是虛擬機(jī)最重要的部分,它可以實(shí)現(xiàn)模擬出各種硬件,比如:CPU、內(nèi)存、磁盤等,在 Hypervisor 軟件層之上創(chuàng)建 Guest OS 也就是客戶機(jī)操作系統(tǒng),Guest OS 和 Hypervisor 模擬出來的硬件交互 ,這樣用戶應(yīng)用程序就可以運(yùn)行在這個(gè)虛擬機(jī)中,用戶自然看到的就是這個(gè)新的操作系統(tǒng)的文件系統(tǒng)結(jié)構(gòu),這也是虛擬機(jī)也能起到將不同應(yīng)用程序相互隔離的原因。

  • 右邊,則用一個(gè)名為 Docker Engine 的軟件替換了 Hypervisor。這也是為什么,很多人會(huì)把 Docker 項(xiàng)目稱為“輕量級(jí)”虛擬化技術(shù)的原因,實(shí)際上就是把虛擬機(jī)的概念套在了容器上。這樣的說明并不嚴(yán)謹(jǐn),因?yàn)?容器本質(zhì)是運(yùn)行在宿主機(jī)上的進(jìn)程,使用的是 Namespace 技術(shù),通過 Namespace 技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)、磁盤、PID、用戶等隔離

相信你此刻已經(jīng)會(huì)心一笑:容器隔離不過都是“障眼法”罷了。

? 最后


?? 我是秋意臨,歡迎大家一鍵三連、加入云社區(qū)

?? 我們下期再見(⊙o⊙)!?。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-433137.html


參考

參考《深入剖析Kubernetes》作者 張磊文章來源地址http://www.zghlxwxcb.cn/news/detail-433137.html

到了這里,關(guān)于【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 云原生之深入解析如何正確計(jì)算Kubernetes容器CPU使用率

    使用 Prometheus 配置 kubernetes 環(huán)境中 Container 的 CPU 使用率時(shí),會(huì)經(jīng)常遇到 CPU 使用超出 100%,現(xiàn)在來分析一下: container_spec_cpu_period:當(dāng)對(duì)容器進(jìn)行 CPU 限制時(shí),CFS 調(diào)度的時(shí)間窗口,又稱容器 CPU 的時(shí)鐘周期通常是 100000 微秒 container_spec_cpu_quota:是指容器的使用 CPU 時(shí)間周期總量

    2024年02月10日
    瀏覽(36)
  • 【探索 Kubernetes|容器基礎(chǔ)進(jìn)階篇 系列 4】理解現(xiàn)代云原生時(shí)代的引擎

    【探索 Kubernetes|容器基礎(chǔ)進(jìn)階篇 系列 4】理解現(xiàn)代云原生時(shí)代的引擎

    【云原生|探索 Kubernetes-1】容器的本質(zhì)是進(jìn)程 【云原生|探索 Kubernetes-2】容器 Linux Cgroups 限制 【云原生|探索 Kubernetes 系列 3】深入理解容器進(jìn)程的文件系統(tǒng) 大家好,我是秋意零。 ?? CSDN作者主頁 ?? 博客主頁 ?? 簡介 ?? 普通本科生在讀 在校期間參與眾多計(jì)算機(jī)相關(guān)比賽,

    2024年02月08日
    瀏覽(32)
  • 【云原生】Kubernetes臨時(shí)容器

    特性狀態(tài): Kubernetes v1.25 [stable] 本頁面概述了臨時(shí)容器:一種特殊的容器,該容器在現(xiàn)有 Pod 中臨時(shí)運(yùn)行,以便完成用戶發(fā)起的操作,例如故障排查。 你會(huì)使用臨時(shí)容器來檢查服務(wù),而不是用它來構(gòu)建應(yīng)用程序 Pod 是 Kubernetes 應(yīng)用程序的基本構(gòu)建塊。 由于 Pod 是一次性且可替

    2024年02月15日
    瀏覽(56)
  • 【云原生、Kubernetes】Kubernetes核心概念理解

    【云原生、Kubernetes】Kubernetes核心概念理解

    首先我們要掌握 Kubernete 的一些核心概念。 這些核心可以幫助我們更好的理解 Kubernetes 的特性和工作機(jī)制。 首先,Kubernetes 集群中包含2類節(jié)點(diǎn),分別是:master控制節(jié)點(diǎn)和node工作節(jié)點(diǎn)。 master 控制節(jié)點(diǎn) 負(fù)責(zé)管理整個(gè)集群系統(tǒng),可以說它是集群的網(wǎng)關(guān)和中樞,是Kubernetes 的大腦和

    2024年02月13日
    瀏覽(28)
  • 【云原生】Kubernetes容器編排工具

    【云原生】Kubernetes容器編排工具

    目錄 1. K8S介紹 1.1 k8s的由來 下載地址 1.2 docker編排與k8s編排相比 1.3 傳統(tǒng)后端部署與k8s 的對(duì)比 傳統(tǒng)部署 k8s部署? ?2. k8s的集群架構(gòu)與組件 (1) Kube-apiserver (2)Kube-controller-manager? (3)Kube-scheduler?? 2.2?k8s的配置存儲(chǔ)中心 2.3? k8s的Node 組件? ?(1)Kubelet? ?(2)Kube-Proxy?

    2024年02月10日
    瀏覽(23)
  • 【云原生】容器編排工具Kubernetes

    【云原生】容器編排工具Kubernetes

    目錄 一、 K8S介紹 官網(wǎng)地址: 1.1docker編排與k8s編排相比 1.2特性 1.3功能 二、K8S重要組件 2.1核心組件 (1)Kube-apiserver (2)Kube-controller-manager (3)Kube-scheduler (4)Node ①kubelet ②kube-proxy ③docker (5)etcd 2.2Kubernetes工作原理 三、Pod 3.1 Pod控制器 (1)Deployment (2)ReplicaSet (3)

    2024年02月09日
    瀏覽(32)
  • 云原生、容器化、Kubernetes、微服務(wù)

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 云原生(Cloud Native)是一個(gè)開放且社區(qū)驅(qū)動(dòng)的項(xiàng)目,它定義了一組架構(gòu)原則、最佳實(shí)踐和工具集,這些原則、實(shí)踐和工具圍繞業(yè)務(wù)需求和工程實(shí)踐而設(shè)計(jì),可用于開發(fā)人員在構(gòu)建和運(yùn)行分布式系統(tǒng)時(shí)更加順暢地交付可靠的軟件。云原生可以幫助

    2024年02月07日
    瀏覽(26)
  • 【探索 Kubernetes|容器基礎(chǔ)進(jìn)階篇 系列 3】容器進(jìn)程的文件系統(tǒng)

    【探索 Kubernetes|容器基礎(chǔ)進(jìn)階篇 系列 3】容器進(jìn)程的文件系統(tǒng)

    【云原生-深入理解Kubernetes-1】容器的本質(zhì)是進(jìn)程 【云原生-深入理解Kubernetes-2】容器 Linux Cgroups 限制 大家好,我是秋意零。 ?? CSDN作者主頁 ?? 博客主頁 ?? 簡介 ?? 普通本科生在讀 在校期間參與眾多計(jì)算機(jī)相關(guān)比賽,如:?? “省賽”、“國賽” ,斬獲多項(xiàng)獎(jiǎng)項(xiàng)榮譽(yù)證書

    2024年02月09日
    瀏覽(31)
  • 【云原生】kubernetes中容器的資源限制

    【云原生】kubernetes中容器的資源限制

    目錄 1 metrics-server 2 指定內(nèi)存請(qǐng)求和限制 3 指定 CPU 請(qǐng)求和限制 資源限制 在k8s中對(duì)于容器資源限制主要分為以下兩類: 內(nèi)存資源限制: 內(nèi)存 請(qǐng)求 (request)和內(nèi)存 限制 (limit)分配給一個(gè)容器。 我們保障容器擁有它請(qǐng)求數(shù)量的內(nèi)存,但不允許使用超過限制數(shù)量的內(nèi)存。 官網(wǎng)參

    2024年02月14日
    瀏覽(23)
  • 深入刨析容器(二):容器的進(jìn)程

    這章節(jié)主要是從容器的技術(shù)概念入手,說一下容器的基礎(chǔ),有了好的基礎(chǔ)才能更好的理解容器這門技術(shù),先說一下容器和進(jìn)程的關(guān)系,后續(xù)的文章會(huì)說進(jìn)程的隔離與限制資源以及容器的內(nèi)部靈魂,來一點(diǎn)點(diǎn)深入容器,話不多說,那么開始把! 之前的章節(jié)說過容器就是一個(gè)“沙

    2024年02月09日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包