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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kubernetes容器上下文环境

發(fā)布時(shí)間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kubernetes容器上下文环境 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄貼:Kubernetes學(xué)習(xí)系列

  下面我們將主要介紹運(yùn)行在Kubernetes集群中的容器所能夠感知到的上下文環(huán)境,以及容器是如何獲知這些信息的。

  首先,Kubernetes提供了一個(gè)能夠讓容器感知到集群中正在發(fā)生的事情的方法:環(huán)境變量。作為容器環(huán)境組成的一部分,這些集群信息對(duì)于容器構(gòu)建“集群環(huán)境感知”起著非常重要的作用。其次,Kubernetes容器環(huán)境還包括一系列與容器生命周期相關(guān)的容器鉤子,其對(duì)應(yīng)的回調(diào)函數(shù)hook handler可以作為單個(gè)容器可選定義項(xiàng)的一部分。這個(gè)容器鉤子與操作系統(tǒng)傳統(tǒng)進(jìn)程模型的通知回調(diào)機(jī)制有些類(lèi)似。其實(shí),還有一個(gè)與容器環(huán)境相關(guān)的重要部分是容器可用的文件系統(tǒng)。通過(guò)前面的討論可知,在Kubernetes中,容器的文件系統(tǒng)由一個(gè)容器鏡像和若干個(gè)Volume組成。

  下面我們將著重討論暴露給容器的集群信息和用于向容器發(fā)布對(duì)其生命周期管理信息的容器鉤子這兩種同容器上下文環(huán)境協(xié)作的方法。

1、集群環(huán)境感知

  運(yùn)行在Kubernetes集群中的一個(gè)容器在容器內(nèi)部能夠感知兩種類(lèi)型的環(huán)境變量信息,一種是與容器自身相關(guān)的信息,另一種是集群的信息。

1.1容器自身信息

  容器能夠感知到的與容器自身相關(guān)的信息包括運(yùn)行該容器的pod的名字、pod所在的namespace、在pod資源配置文件中env字段定義的鍵/值對(duì),等等。其中,pod的名字被設(shè)置成容器的的主機(jī)名,而且可以在容器內(nèi)通過(guò)所有訪問(wèn)主機(jī)名的方式獲得,例如,hostname命令或JAVA中InetAddress.getLocalHost()函數(shù)調(diào)用。pod的名字和namespace還可以通過(guò)downwardAPI進(jìn)行訪問(wèn)。對(duì)容器而言,用戶(hù)在pod資源配置文件中自定義的環(huán)境變量的可訪問(wèn)性與在Docker鏡像中指定的環(huán)境變量是一樣的。downwardAPI示例如下:

[root@k8s-master downwardapi]# cat test-downwardapi.yaml apiVersion: v1 kind: Pod metadata:name: test-downwardaoi-volumelabels:name: test-downwardaoi-volumezone: us-eastcluster: test-cluster1annotations:build: twobuilder: zhenyuyaodidiao spec:containers:- name: test-hostpathimage: registry:5000/back_demon:1.0volumeMounts:- name: podinfomountPath: /home/laizy/podinforeadOnly: falsecommand:- /run.shvolumes:- name: podinfodownwardAPI:items:- path: "pod_name"fieldRef:fieldPath: metadata.name- path: "pod_namespace"fieldRef:fieldPath: metadata.namespace- path: "pod_labels"fieldRef:fieldPath: metadata.labels- path: "pod_annotations"fieldRef:fieldPath: metadata.annotations[root@k8s-master downwardapi]# kubectl create -f test-downwardapi.yaml pod "test-downwardaoi-volume" created[root@k8s-master downwardapi]# kubectl exec -ti test-downwardaoi-volume /bin/bash [root@test-downwardaoi-volume /]# cd /home/laizy/podinfo/ [root@test-downwardaoi-volume podinfo]# ls pod_annotations pod_labels pod_name pod_namespace [root@test-downwardaoi-volume podinfo]# cat pod_annotations build="two" builder="zhenyuyaodidiao" kubernetes.io/config.seen="2017-03-22T09:42:11.832955302+08:00" kubernetes.io/config.source="api" [root@test-downwardaoi-volume podinfo]# cat pod_labels cluster="test-cluster1" name="test-downwardaoi-volume" zone="us-east" [root@test-downwardaoi-volume podinfo]# cat pod_name test-downwardaoi-volume [root@test-downwardaoi-volume podinfo]# cat pod_name test-downwardaoi-volume [root@test-downwardaoi-volume podinfo]# cat pod_namespace default [root@test-downwardaoi-volume podinfo]# exit exit

?

1.2集群信息

  我們?cè)谇懊嬉呀?jīng)討論過(guò)Kubernetes服務(wù)發(fā)現(xiàn)的兩種機(jī)制:DNS和環(huán)境變量。service環(huán)境變量屬于集群信息,在容器創(chuàng)建時(shí)由Kubemetes集群API注人,在容器內(nèi)以環(huán)境變量或域名的方式被訪問(wèn)。

2.容器鉤子

  容器鉤子是Kubemetes針對(duì)容器生命周期管理引入的事件處理機(jī)制,它負(fù)責(zé)監(jiān)聽(tīng)Kubemetes對(duì)容器生命周期的管理信息,并將這些信息以廣播的形式通知給容器。然后執(zhí)行相應(yīng)的回調(diào)函數(shù)。

2.1容器鉤子類(lèi)型

  Kubemetes支持兩種類(lèi)型的容器鉤子,分別為PostStart和PreStop。

  PostStart。該鉤子在容器被創(chuàng)建后立刻觸發(fā),通知容器它已經(jīng)被創(chuàng)建。該鉤子不需要向其所對(duì)應(yīng)的hook handler傳人任何參數(shù)。如果該鉤子對(duì)應(yīng)的hook handler執(zhí)行失敗,則該容器會(huì)被殺死,并根據(jù)該容器的重啟策略決定是否要重啟該容器。

  PreStop。該鉤子在容器被刪除前觸發(fā),其所對(duì)應(yīng)的hook handler必須在刪除該容器的請(qǐng)求發(fā)送給Docker daemon之前完成。在該鉤子對(duì)應(yīng)的hook handler完成后不論執(zhí)行的結(jié)果如何,Docker daemon會(huì)發(fā)送一個(gè)SGTERN信號(hào)量給Docker daemon來(lái)刪除該容器。同樣地。該鉤子也不需要傳人任何參數(shù)

2.2hook handler執(zhí)行

  當(dāng)一個(gè)容器管理hook發(fā)生時(shí),管理系統(tǒng)將會(huì)在容器中調(diào)用注冊(cè)的hook handler。其中hook handler通過(guò)在包含該容器的pod資源配置文件的Lifecycle字段中定義來(lái)完成注冊(cè)。注意,當(dāng)hook handler在執(zhí)行時(shí),其他對(duì)該容器所在pod的管理動(dòng)作將被阻塞除非該容器異常退出。而如果你自定義的hook handler阻塞時(shí),其他對(duì)pod的管理操作包括容器健康檢查將不會(huì)發(fā)生,直到hook handler繼續(xù)執(zhí)行完畢。因此,一般建議用戶(hù)自定義的hook handler代碼盡可能地輕量化,盡管確實(shí)有一些場(chǎng)景的hook handler需要長(zhǎng)時(shí)間運(yùn)行(例如在容器時(shí)退出保存運(yùn)行狀態(tài)等)。

2.3hook handler的執(zhí)行方式

  hook handler是hook在容器內(nèi)執(zhí)行的回調(diào)函數(shù),也即hook暴露給容器的方式。Kubemetes支持兩種不同的hook handler類(lèi)型,分別是Exec和HTTPGet。

    Exec。在容器的cgroup和namespace內(nèi)啟動(dòng)一個(gè)新進(jìn)程來(lái)執(zhí)行指定的命令,由該命令消耗的資源全部要計(jì)人容器的消耗。正如在之前容器健康檢查中提到的,如果Exec執(zhí)行的命令最后在標(biāo)準(zhǔn)輸出stdout的結(jié)果為0k,就代表handler執(zhí)行成功,否則就被認(rèn)為執(zhí)行異常,并且Kuberlet將強(qiáng)制重新啟動(dòng)該容器。

    HTTPGet。向容器的指定接口發(fā)起一個(gè)HTTP請(qǐng)求作為handler的具體執(zhí)行內(nèi)容,并通過(guò)返回的HTTP狀態(tài)碼來(lái)判斷該請(qǐng)求執(zhí)行是否成功。

  綜上,hook機(jī)制為用戶(hù)提供了一種能夠根據(jù)容器生命周期及其上下文的變化來(lái)觸發(fā)不同操作的協(xié)作方法。這對(duì)于很多需要精細(xì)控制容器的場(chǎng)景是非常有用的,比如在容器結(jié)束前執(zhí)行一些清理工作來(lái)保證其“優(yōu)雅”退出。以下給出hook執(zhí)行exec的示例:

[root@k8s-master hook]# cat test-lifecycle-hostpath.yaml apiVersion: v1 kind: Pod metadata:labels:name: test-lifecycle-hostpathrole: mastername: test-lifecycle-hostpath spec:containers:- name: test-lifecycle-hostpathimage: registry:5000/back_demon:1.0lifecycle:postStart:exec:command:- "touch"- "/home/laizy/test/hostpath/post-start"preStop:exec:command:- "touch"- "/home/laizy/test/hostpath/pre-stop"volumeMounts:- name: testhostmountPath: /home/laizy/test/hostpathreadOnly: falsecommand:- /run.shvolumes:- name: testhosthostPath:path: /home/testhost [root@k8s-master hook]# date 2017年 03月 22日 星期三 10:21:58 CST [root@k8s-master hook]# kubectl create -f test-lifecycle-hostpath.yaml pod "test-lifecycle-hostpath" created [root@k8s-master hook]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE test-lifecycle-hostpath 1/1 Running 0 13s 10.0.9.3 k8s-node-3 [root@k8s-master hook]# date 2017年 03月 22日 星期三 10:22:52 CST [root@k8s-master hook]# kubectl delete pod test-lifecycle-hostpath pod "test-lifecycle-hostpath" deleted

在node3上查看外掛出來(lái)的路徑上,生成了兩個(gè)文件,post-start文件是在pod創(chuàng)建之后生成的;pre-stop文件是在pod刪除之前生成的。

[root@k8s-node-3 ~]# ll /home/testhost/ 總用量 0 -rw-r--r--. 1 root root 0 3月 22 10:22 post-start -rw-r--r--. 1 root root 0 3月 22 10:23 pre-stop [root@k8s-node-3 ~]#

?

對(duì)應(yīng)的httpGet示例簡(jiǎn)單示意如下:

containers:- name: lifecycleimage: busyboxlifecycle:postStart:exec:command:- "touch"- "/var/log/lifecycle/post-start"preStop:httpGet:path: "/abort"port: 8080

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhenyuyaodidiao/p/6558444.html

總結(jié)

以上是生活随笔為你收集整理的Kubernetes容器上下文环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。