我正在 AWS EKS 上运行集群。当前运行的容器(StatefulSet POD)内部安装有 Docker。
我在集群中将该映像作为 Kubernetes StatefulSet 运行。这是我的 yaml 文件,
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: jenkins
labels:
run: jenkins
spec:
serviceName: jenkins
replicas: 1
selector:
matchLabels:
run: jenkins
template:
metadata:
labels:
run: jenkins
spec:
securityContext:
fsGroup: 1000
containers:
- name: jenkins
image: 99*****.dkr.ecr.<region>.amazonaws.com/<my_jenkins_image>:0.0.3
imagePullPolicy: Always
ports:
- containerPort: 8080
name: jenkins-port
在这个 POD 中,我无法运行任何 docker 命令,该命令会出现错误:
/etc/init.d/docker: 96: ulimit: 错误设置限制(不允许操作)
在我的研究中,我浏览了一些文章,但它没有解决我的问题。
我列出了我尝试过但在我的案例中未修复的解决方案
第一个解决方案:(我在容器内运行)
文章链接 https://stackoverflow.com/questions/24318543/how-to-set-ulimit-file-descriptor-on-docker-container-the-image-tag-is-phusion
$ sudo service docker stop
$ sudo bash -c "echo \"limit nofile 262144 262144\" >> /etc/init/docker.conf"
$ sudo service docker start
第二种解决方案:(我在容器内运行)
ulimit -n 65536 in /etc/init.d/docker
第三种解决方案:**文章链接 https://unix.stackexchange.com/questions/450799/getting-operation-not-permitted-error-when-setting-ulimit-for-memlock-in-a-doc这似乎是一个更好的答案,我无法将其添加到我的配置文件中。
它说,以特权身份运行 pod。但无法在 ***Kubernetes StatefulSet* 中添加该选项。
所以我尝试添加 SecurityContext(安全上下文:fsGroup:1000)像这样的配置文件内部,
spec:
serviceName: jenkins
replicas: 1
selector:
matchLabels:
run: jenkins
template:
metadata:
labels:
run: jenkins
spec:
securityContext:
fsGroup: 1000
但它仍然不起作用。
注意:相同的图像适用于 Docker swarm
任何帮助,将不胜感激!