真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Kubernetespod里的pause-amd64容器有什么用

這篇文章主要介紹“Kubernetes pod里的pause-amd64容器有什么用”,在日常操作中,相信很多人在Kubernetes pod里的pause-amd64容器有什么用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Kubernetes pod里的pause-amd64容器有什么用”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)主營江城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),江城h5重慶小程序開發(fā)搭建,江城網(wǎng)站營銷推廣歡迎江城等地區(qū)企業(yè)咨詢

Kubernetes pod里的pause-amd64容器有什么用

docker ps的命令返回的結(jié)果:

[root@k8s-minion1 kubernetes]# docker ps |grep pause
c3026adee957        gcr.io/google_containers/pause-amd64:3.0           "/pause"                 22 minutes ago      Up 22 minutes                           k8s_POD.d8dbe16c_redis-master-343230949-04glm_default_ce3f60a9-095d-11e7-914b-0a77ecd65f3e_66c108d5
202df18d636e        gcr.io/google_containers/pause-amd64:3.0           "/pause"                 24 hours ago        Up 24 hours                             k8s_POD.d8dbe16c_kube-proxy-js0z0_kube-system_2866cfc2-0891-11e7-914b-0a77ecd65f3e_c8e1a667
072d3414d33a        gcr.io/google_containers/pause-amd64:3.0           "/pause"                 24 hours ago        Up 24 hours                             k8s_POD.d8dbe16c_kube-flannel-ds-tsps5_default_2866e3fb-0891-11e7-914b-0a77ecd65f3e_be4b719e
[root@k8s-minion1 kubernetes]#

Kubernetes的官網(wǎng)解釋:

it's part of the infrastructure. This container is started first in all Pods to setup the network for the Pod.

意思是:pause-amd64是Kubernetes基礎(chǔ)設(shè)施的一部分,Kubernetes管理的所有pod里,pause-amd64容器是第一個啟動的,用于實現(xiàn)Kubernetes集群里pod之間的網(wǎng)絡(luò)通訊。

對這個特殊容器感興趣的朋友,可以閱讀其源代碼:
https://github.com/kubernetes/kubernetes/tree/master/build/pause

我們查看這個pause-amd64鏡像的dockerfile,發(fā)現(xiàn)實現(xiàn)很簡單,基于一個空白鏡像開始:

FROM scratch
ARG ARCH
ADD bin/pause-${ARCH} /pause
ENTRYPOINT ["/pause"]

ARG指令用于指定在執(zhí)行docker build命令時傳遞進去的參數(shù)。

這個pause container是用C語言寫的:

Kubernetes pod里的pause-amd64容器有什么用

https://www.ianlewis.org/en/almighty-pause-container

在運行的Kubernetes node上運行docker ps,能發(fā)現(xiàn)這些pause container:

Kubernetes pod里的pause-amd64容器有什么用

pause container作為pod里其他所有container的parent container,主要有兩個職責:

  1. 是pod里其他容器共享Linux namespace的基礎(chǔ)

  2. 扮演PID 1的角色,負責處理僵尸進程

這兩點我會逐一細說。在Linux里,當父進程fork一個新進程時,子進程會從父進程繼承namespace。目前Linux實現(xiàn)了六種類型的namespace,每一個namespace是包裝了一些全局系統(tǒng)資源的抽象集合,這一抽象集合使得在進程的命名空間中可以看到全局系統(tǒng)資源。命名空間的一個總體目標是支持輕量級虛擬化工具container的實現(xiàn),container機制本身對外提供一組進程,這組進程自己會認為它們就是系統(tǒng)唯一存在的進程。

在Linux里,父進程fork的子進程會繼承父進程的命名空間。與這種行為相反的一個系統(tǒng)命令就是unshare:

Kubernetes pod里的pause-amd64容器有什么用

再來聊聊pause容器如何處理僵尸進程的。

Pause容器內(nèi)其實就運行了一個非常簡單的進程,其邏輯可以從前面提到的Pause github倉庫上找到:

static void sigdown(int signo) {
  psignal(signo, "Shutting down, got signal");  exit(0);
}static void sigreap(int signo) {  while (waitpid(-1, NULL, WNOHANG) > 0);
}int main() {  if (getpid() != 1)    /* Not an error because pause sees use outside of infra containers. */
    fprintf(stderr, "Warning: pause should be the first process\n");  if (sigaction(SIGINT, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)    return 1;  if (sigaction(SIGTERM, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)    return 2;  if (sigaction(SIGCHLD, &(struct sigaction){.sa_handler = sigreap,
                                             .sa_flags = SA_NOCLDSTOP},                NULL) < 0)    return 3;  for (;;)
    pause();  fprintf(stderr, "Error: infinite loop terminated\n");  return 42;
}

這個c語言實現(xiàn)的進程,核心代碼就28行:

Kubernetes pod里的pause-amd64容器有什么用

其中第24行里一個無限循環(huán)for(;;), 至此大家能看出來pause容器名稱的由來了吧?

這個無限循環(huán)里執(zhí)行的是一個系統(tǒng)調(diào)用pause,

Kubernetes pod里的pause-amd64容器有什么用

因此pause容器大部分時間都在沉睡,等待有信號將其喚醒。

接收什么信號呢?

一旦收到SIGCHLD信號,pause進程就執(zhí)行注冊的sigreap函數(shù)。

Kubernetes pod里的pause-amd64容器有什么用

看下SIGCHLD信號的幫助:

Kubernetes pod里的pause-amd64容器有什么用

SIGCHLD,在一個進程正常終止或者停止時,將SIGCHLD信號發(fā)送給其父進程,按系統(tǒng)默認將忽略此信號,如果父進程希望被告知其子系統(tǒng)的這種狀態(tài),則應(yīng)捕捉此信號。

pause進程注冊的信號處理函數(shù)sigreap里,調(diào)用另一個系統(tǒng)調(diào)用waitpid來獲得子進程終止的原因。

Kubernetes pod里的pause-amd64容器有什么用

到此,關(guān)于“Kubernetes pod里的pause-amd64容器有什么用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
本文名稱:Kubernetespod里的pause-amd64容器有什么用
當前鏈接:http://weahome.cn/article/gdgeed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部