使用Kubernetes pod中的docker套接字



我想修剪docker映像,我使用node-docker-api编写了一个小的docker映像并能够在本地成功测试它
当我将DaemonSet部署到Kubernetes时,pod无法访问Docker套接字:

Error: connect EACCES /var/run/docker.sock

deployment.yaml如下所示:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
labels:
name: docker-image-cleanup
name: docker-image-cleanup
spec:
template:
metadata:
labels:
app: docker-image-cleanup 
spec:
volumes:
- name: docker-sock
hostPath:
path: "/var/run/docker.sock"
type: File
- name: docker-directory
hostPath:
path: "/var/lib/docker"
containers:
- name: docker-image-cleanup
image: image:tag
securityContext:
privileged: true
env:
- name: PRUNE_INTERVAL_SECONDS
value: "30"
- name: PRUNE_DANGLING
value: "true"
volumeMounts:
- mountPath: /var/run/docker.sock
name: docker-sock
readOnly: false
- mountPath: "/var/lib/docker"
name: docker-directory
readOnly: false

运行AKS v1.13.10-如果相关

不能保证您的kubernetes集群实际上使用docker作为容器引擎。由于有许多替代方案,如cri-o和kata容器,您的应用程序/部署不应对底层容器引擎进行假设。

Kubernetes负责自动清理未使用的容器映像。如果您自己运行集群,请参阅有关如何配置它的文档:https://kubernetes.io/docs/concepts/cluster-administration/kubelet-garbage-collection/

除此之外,套接字似乎有一个简单的权限问题:确保清理容器中的应用程序以root身份运行,或者有合适的用户访问套接字。

我已经将runAsUser: 0添加到容器属性中:

containers:
- name: docker-image-cleanup
image: image:tag
securityContext:
privileged: true
runAsUser: 0

现在它工作

最新更新