摘要:在一個(gè)所包含的中,的執(zhí)行是同步的。這意味著,將會(huì)阻塞管理模塊發(fā)送的其他操作指令,如果被阻塞,接下來(lái)的管理操作命令包括健康檢查都會(huì)被阻塞,直到完成。只會(huì)影響本,不會(huì)對(duì)其他造成影響。的錯(cuò)誤或者無(wú)反應(yīng)被當(dāng)做是失敗,參數(shù)以傳統(tǒng)請(qǐng)求的方式傳遞。
翻譯自:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/con...
概述本文主要描述下在kubernetes的node節(jié)點(diǎn)中,kubelet管理container涉及到的environment。我們可以通過(guò)kubernetes cluster api來(lái)創(chuàng)建&管理container,那么kubernetes container environment則為集群中的container添加一些屬性來(lái)描述一些集群信息。
集群 可以通過(guò)這些 集群信息 來(lái)感知所創(chuàng)建的應(yīng)用。此外,kubernetes container environment提供了一些“hook”,container可將這些hook作為可選功能來(lái)使用,就好比傳統(tǒng)系統(tǒng)中來(lái)處理系統(tǒng)信號(hào)一樣,這些hook的設(shè)計(jì)初衷是為了能夠在kubernetes中更加簡(jiǎn)單方便的創(chuàng)建穩(wěn)定可擴(kuò)展的應(yīng)用。
另一個(gè)關(guān)于container environment的重要部分是關(guān)于 container內(nèi)部使用的“文件系統(tǒng)”。在kubernetes中,這個(gè)”文件系統(tǒng)“是一個(gè)image和多個(gè)volume的集合。
接下來(lái)的內(nèi)容會(huì)聊聊 提供給container使用的 ”集群信息“ 、container和管理模塊交互時(shí)使用的 hook 以及 對(duì)應(yīng)的生命周期。
容器信息(Cluster Information)在container的environment中可分為兩類,一類是描述container本身信息,另一類描述了系統(tǒng)中其他對(duì)象的信息。
container 信息(Container Information)目前在container中,一個(gè)比較有用的environment是描述這個(gè)container所屬pod的”pod name“。container的hostname被設(shè)置為這個(gè) ”pod name“,可以通過(guò)hostname命令 或者 libc中的gethostname函數(shù)獲取到。此外,用戶自定義的environment同樣可以在container被用戶有效使用。
官方計(jì)劃在將來(lái)擴(kuò)充container environment所能包含的信息,比如 所能使用的memory、重啟次數(shù)、已經(jīng)任何能夠從GET api獲取到的信息。
集群信息(Cluster Information)當(dāng)一個(gè)container通過(guò)kubernetes api來(lái)創(chuàng)建時(shí),當(dāng)前kubernetes集群中所包含的所有service信息都被作為environment寫入container內(nèi)部。
比如,一個(gè)service叫做foo,他映射的container的端口為bar,那么對(duì)應(yīng)的environment為:
FOO_SERVICE_HOST=FOO_SERVICE_PORT=
官方會(huì)盡量保證每個(gè)service都有獨(dú)立不變的ip,所以通過(guò)dns的形式來(lái)訪問(wèn)service是一個(gè)不錯(cuò)的方法。
Container HooksContainer Hooks目前正在積極開(kāi)放之中,官方想把他作為kubernetes管理系統(tǒng)中的可擴(kuò)展插件。
Container Hooks為container提供了在其生命周期中所觸發(fā)的event的信息。比如,當(dāng)container 啟動(dòng),觸發(fā)了PostStart hook。它們和docker或者其他系統(tǒng)產(chǎn)生的event不同,比如,output event提供已經(jīng)發(fā)生的事件的日志,input hook提供了正在發(fā)生的事情的實(shí)時(shí)通知,而不是已經(jīng)發(fā)生的log。
目前有兩個(gè)在使用的hook,兩個(gè)推薦的hook:
PreStart - Proposed
在container創(chuàng)建前觸發(fā)他,它將提供這樣的信息:在本次調(diào)用結(jié)束后這個(gè)container將會(huì)被創(chuàng)建。 此hook沒(méi)有參數(shù)傳遞給handler。
PostStart
在container創(chuàng)建后觸發(fā)他。沒(méi)有參數(shù)傳遞給handler
PostRestart - Proposed
當(dāng)一個(gè)container restart時(shí),而不失第一次start,在PostStart handler之前調(diào)用他。沒(méi)有參數(shù)傳遞給handler。
PreStop
這個(gè)hook在一個(gè)container被終止之前被調(diào)用。這個(gè)事件handler是阻塞的,在消息發(fā)送給docker deamon來(lái)delete container之前完成。docker發(fā)送SIGTERM信號(hào)不會(huì)受影響。
一個(gè)名為”reason“的參數(shù)會(huì)發(fā)送給handler,表明是因?yàn)槭裁丛虮唤K止,他的值有以下:
Delete :表明有一個(gè)api的調(diào)用來(lái)刪除這個(gè)pod
Health :表明對(duì)這個(gè)container的健康檢查失敗了。
Dependency :這個(gè)container或pod的依賴丟失,因此這個(gè)container需要restart。比如,pod包含的container破壞,container在mount PD時(shí)操作磁盤失敗等。
Hook Handler Execution當(dāng)一個(gè)hook被觸發(fā),系統(tǒng)將會(huì)調(diào)用所有被注冊(cè)在這個(gè)hook上的handler。在一個(gè)pod所包含的container中,hook handler的執(zhí)行是同步的。這意味著,hook handler將會(huì)阻塞管理模塊發(fā)送的其他操作指令,如果hook handler被阻塞,接下來(lái)的管理操作命令(包括健康檢查)都會(huì)被阻塞,直到handler完成。hook handler只會(huì)影響本pod,不會(huì)對(duì)其他pod造成影響。官方當(dāng)然希望用戶能夠保持hook handler越簡(jiǎn)單越輕量約好,當(dāng)然不排除也有需要較長(zhǎng)時(shí)間執(zhí)行的handler(比如 在容器停止之前保存當(dāng)前的狀態(tài))。
(hook交付保證)Hook delivery guarantees hook handler實(shí)現(xiàn)(Hook Handler Implementations)hook handler是hook 操作處理container的方式。container選擇他們希望的handler類型來(lái)執(zhí)行。kubernetes目前提供兩種hook handler類型:
Exec - 在容器的namespace/cgroup中執(zhí)行指定的命令。如果命令最后輸出”ok“,則被認(rèn)為是處理正確,其他輸出則被當(dāng)做失?。▽?huì)觸發(fā)kubelet重啟container)。參數(shù)以傳統(tǒng)linux的方式被傳遞給指令,比如pre-stop.sh --reason=HEALTH
HTTP - 執(zhí)行一個(gè)http請(qǐng)求。http的5xx錯(cuò)誤或者無(wú)反應(yīng)被當(dāng)做是失敗,參數(shù)以傳統(tǒng)http請(qǐng)求的方式傳遞。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32417.html
摘要:記錄一個(gè)簡(jiǎn)單的的使用創(chuàng)建探針具體的文件如下創(chuàng)建該查看當(dāng)前的狀態(tài)測(cè)試將容器內(nèi)的刪除掉登陸容器使用命令登陸容器可以看到,當(dāng)我們把移走后,這個(gè)容器立馬就退出了。 記錄一個(gè)簡(jiǎn)單的livenessProb的使用 創(chuàng)建livenessProbe探針 具體的liveness-httpget.yaml文件如下: apiVersion: v1 kind: Pod metadata: name: li...
摘要:為什么云平臺(tái)要選擇支持給出的答案是基于的容器編排技術(shù)近年來(lái)已經(jīng)成為行業(yè)里最流行的云原生應(yīng)用開(kāi)發(fā)范式之一。而云平臺(tái)通過(guò)提供的給使用者提供了這種自由度。 截至本文發(fā)稿(2019-2-10, 農(nóng)歷大年初六)時(shí)為止,訪問(wèn)SAP云平臺(tái)的官方網(wǎng)站:https://cloudplatform.sap.com... 能看到下面的網(wǎng)頁(yè):SAP云平臺(tái)上的Kubernetes環(huán)境,Coming Soon(即...
摘要:創(chuàng)建的配置如下在這個(gè)中,我們?cè)O(shè)置了兩個(gè),創(chuàng)建后,查看實(shí)驗(yàn)會(huì)通過(guò)來(lái)篩選,并且設(shè)定的符合該的副本應(yīng)該為個(gè)。文件的內(nèi)容如下此時(shí),我們創(chuàng)建另一個(gè)可以看到,的為,我們嘗試給添加一個(gè),看下會(huì)出現(xiàn)什么效果??梢园l(fā)現(xiàn)的狀態(tài)已經(jīng)為。 創(chuàng)建ReplicaSet ReplicaSet的配置如下 apiVersion: apps/v1 kind: ReplicaSet metadata: name: my...
摘要:是谷歌官方根據(jù)自己容器經(jīng)驗(yàn)開(kāi)源的產(chǎn)品。當(dāng)然,這不可能是,而且它的底層是替換成了,但是這不能掩蓋它解決的問(wèn)題。因此筆者決定嘗試玩玩。不然啟動(dòng)會(huì)報(bào)錯(cuò)。 背景 容器技術(shù)在目前很火,而且確確實(shí)實(shí)的解決了很多的痛點(diǎn),但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很難再實(shí)際生產(chǎn)中使用的。Kubernetes 是谷歌官方根據(jù)自己容器經(jīng)驗(yàn) Borg 開(kāi)...
摘要:是谷歌官方根據(jù)自己容器經(jīng)驗(yàn)開(kāi)源的產(chǎn)品。當(dāng)然,這不可能是,而且它的底層是替換成了,但是這不能掩蓋它解決的問(wèn)題。因此筆者決定嘗試玩玩。不然啟動(dòng)會(huì)報(bào)錯(cuò)。 背景 容器技術(shù)在目前很火,而且確確實(shí)實(shí)的解決了很多的痛點(diǎn),但是如果只使用目前 Docker 官方提供的 engine+compose+swarm 方案,是很難再實(shí)際生產(chǎn)中使用的。Kubernetes 是谷歌官方根據(jù)自己容器經(jīng)驗(yàn) Borg 開(kāi)...
閱讀 2540·2021-10-12 10:12
閱讀 1720·2019-08-30 15:52
閱讀 2455·2019-08-30 13:04
閱讀 1745·2019-08-29 18:33
閱讀 969·2019-08-29 16:28
閱讀 455·2019-08-29 12:33
閱讀 2065·2019-08-26 13:33
閱讀 2368·2019-08-26 11:36