我有一個 mysqldb pod,當我們運行腳本 restorebackup.sh 時需要添加一個日志。該腳本在 pod 內,我需要在 pod 的常規日志中使用此日志(使用 kubectl get logs services/mysqldb 訪問它)。
有什么辦法可以做到這一點?
uj5u.com熱心網友回復:
通常kubectl logs顯示第一個行程的標準輸出 (pid=1)。因此,您可以嘗試將日志放入 pod 中的 /proc/1/fd/1 中。
pod 中的示例命令:
echo hello >> /proc/1/fd/1
然后你就可以看到這個hello了kubectl logs。
對于您的腳本restorebackup.sh,也許您可??以嘗試sh restorebackup.sh >> /proc/1/fd/1重定向所有輸出。
uj5u.com熱心網友回復:
- kubectl logs 只不過是其中的容器(pid 1 行程)的 stdout&stderr 流
- 因此,要將 restorebackup.sh 輸出保存到檔案并將其流式傳輸到 stdout ,我們可以使用 tee 之類的實用程式(它將輸出保存到檔案以及 stdout )
例子 :
[root@c3~]# echo foo | tee boo
foo
[root@c3~]# cat boo
foo
- 在您的情況下
restorebackup.sh,應該以所有輸出生成命令都應該使用的方式進行修改tee
uj5u.com熱心網友回復:
容器引擎處理并將生成的任何輸出重定向到容器化應用程式
stdout和stderr流。
在 Linux 上,行程中打開的檔案描述符集可以在 path 下訪問
/proc/PID/fd/,其中PID是行程識別符號。檔案描述符/proc/PID/fd/0是stdin、/proc/PID/fd/1是stdout、/proc/PID/fd/2是stderr。
因此,假設容器中的主命令具有 PID '1',在 k8s Pod 中運行以下命令:
$ sh restorebackup.sh >> /proc/1/fd/1
然后你會stdout在 Pod 的日志中看到它。
$ kubectl logs yourPodName
...
some stdout from your script...
...
請記住,這樣您只需撰寫stdoutbash 腳本。
要從腳本撰寫stdout 和 stderr,請像這樣運行它:
$ sh restorebackup.sh 1>> /proc/1/fd/1 2>> /proc/1/fd/2
或者修改腳本的代碼以將資訊訊息/proc/1/fd/1和錯誤訊息寫入/proc/1/fd/2.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446656.html
標籤:贝壳 Kubernetes 日志记录 kubectl 微
