1. 程式人生 > 其它 >運行於Kubernetes中的容器

運行於Kubernetes中的容器

何時在 pod 中使用多個容器

將多個容器新增到單個pod的主要原因是應用可能由 一個主程序和一個或多個輔助程序組成。如圖

例如,pod中的主容器可以是一個僅僅服務於某個目錄中的檔案的web伺服器,而另一容器(所謂的sidecar容器)定期從外部源下載容並將其儲存在web伺服器目錄中。sidecar容器的其他例子包括日誌輪轉器和收集器、資料處理器、通訊介面卡等。

決定何時在 pod 中使用多個容器

回顧一下容器應該如何分組到pod中:當決定是將兩個容器放入一個pod 還是兩個單獨的pod 時,我們需要問自己以下問題:

  • 它們需要一起執行還是可以在不同的主機上執行?
  • 它們代表的是一個整體還是相互獨立的元件?
  • 它們必須一起進行擴縮容還是可以分別進行?

獲取多容器 pod 的日誌時指定容器名稱
kubectl logs kubia-manual -c kubia

將本地網路埠轉發到 pod 中的埠

如果想要在不通過service的情況下與某個特定的pod 進行通訊(出於除錯或其他原因), Kubemetes將允許我們配置埠轉發到該pod。 可以通過kubectlport-forward命令完成上述操作。 例如以下命令會將機器的本地埠 8888轉發到我們的kubia-manual pod的埠8080。

kubectl port-forward kubia-manual 8888:8080

標籤 label

kubectl get pod --show-labels
kubectl get pod -L creation_method,env
kubectl label pod kubia-manual-v2 env=debug --overwrite
注意在更改現有標籤時, 需要使用 --overwrite選項

kubectl get pod -l [ creation_method=manual ] [ env ] [ '!env' ]

注意使用單引號來圈引 !env ,這樣bash shell 才不會解釋感嘆號
同理,我們也可以將pod與以下標籤選擇器進行匹配:
• creation_rnethod!=rnanual 選擇帶有 creation_rnethod標籤,並且 值不等於manual的pod
• env in (prod, devel)選擇帶有env標籤且值為prod或devel的pod
• env notin (prod, devel)選擇帶有env標籤,但其值不是prod或 devel 的 pod
如:kubectl get pods -l 'environment in (production, qa)' 使用單引號

註解 annotate

你可以使用標籤或註解將元資料附加到 Kubernetes 物件。 標籤可以用來選擇物件和查詢滿足某些條件的物件集合。 相反,註解不用於標識和選擇物件。 註解中的元資料,可以很小,也可以很大,可以是結構化的,也可以是非結構化的,能夠包含標籤不允許的字元。
註解和標籤一樣,是鍵/值對:

"metadata": {
  "annotations": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

註解可以在建立時就新增到pod中,也可以在之後再對現有的pod進行新增或修改。
kubectl annotate pod kubia-manual mycompany.com/someannotation="foo bar"

刪除名稱空間中的(幾乎)所有資源

kubectl delete all --all
命令中的第一個 all 指定正在刪除所有資源型別, 而 --all 選項指定將刪除所有資源例項而不是按名稱指定它們
注意使用 all 關鍵字刪除所有內容並不是真的完全刪除所有內容。 一些資源(比如 Secret) 會被保留下來, 並且需要被明確指定刪除。