問題1
在容器內strace/gdb乙個程序報錯:
operation not permitted
這涉及到ptrace系統呼叫的許可權問題,預設容器是沒有許可權去ptrace程序的。
這個問題需要通過給容器提權才能解決,在k8s中需要給container級別增加如下選項:
]注意,securitycontext.capabilities選項只能在container級別生效,不能配置到pod級別。
capabilities還包括一些其他許可權,另外也有平行於capabilities的其他選項可以配置,可以進一步學習:
問題2因為容器內的程式用到了大量的systemv訊號量,需要通過sysctl命令調大閥值。
直接在容器裡調整是被禁止的:
sysctl kernel.sem=」1034 32000 100 1000″
sysctl: setting key 「kernel.sem」: read-only file system
對於如下的sysctl配置:
kernel.shm*,
kernel.msg*,
kernel.sem,
fs.mqueue.,
net..
允許在pod級別指定securitycontext生效,但是前提是在kubelet啟動引數中進行授權,比如:
kubelet –allowed-unsafe-sysctls kernel.sem
然後就可以在pod級進行sysctl修改,生效到pod下的所有容器:
metadata
:labels
:: ***x
spec
:securitycontext
:sysctls:-
name
: kernel.sem
value
:"1034 32000 100 1000"
metadata
:labels
:: ***x
spec
:securitycontext
:sysctls:-
name
: kernel.sem
value
:"1034 32000 100 1000"
然後在容器裡觀察一下,已經生效:
[root@zhongce-85d55fd5b5-hrwbs ~]
# sysctl -a|grep sem
kernel.sem = 1034 32000 100 1000
kernel.sem_next_id = -1
[root@zhongce-85d55fd5b5-hrwbs ~]
# sysctl -a|grep sem
kernel.sem = 1034 32000 100 1000
kernel.sem_next_id = -1
k8s調整sysctl的官方文件: k8s中解決容器時差問題
解決k8s的pod容器的時差常用的兩種方式 1 通過設定pod 模板中的環境變數 env解決 在pod的模板中新增以下 apiversion v1 kind pod metadata name pod name spec containers name name image image name i...
k8s 容器鉤子
有兩個鉤子暴露在容器中 poststart 這個鉤子在建立容器之後立即執行。但是,不能保證鉤子會在容器入口點之前執行。沒有引數傳遞給處理程式。kind deployment metadata name testlifecycle labels spec replicas 1 selector mat...
容器編排工具k8s
如何實踐 1 搜尋kubunetes online kubernetes playground katacoda pod k8s最小排程單位 docker pause 二個容器 deployments 維持pod一定數量 service 解決deploytemnets內部之間的乙個負載均衡 dns解...