biz*_*dev 28 bash docker kubernetes
我有一个名为'jenkins-app-2843651954-4zqdp'的pod.我想暂时在这个pod上安装几个软件.我怎样才能做到这一点?
我正在尝试这个kubectl exec -it jenkins-app-2843651954-4zqdp -- /bin/bash
- 然后运行apt-get install命令,但由于我访问的用户没有sudo访问权限,我无法运行命令
Jan*_*art 40
kubectl describe pod ...查找运行你盘上的节点和容器ID( docker://...)docker exec -u root ID -- /bin/bash小智 19
当使用containerd作为运行时时,添加henning-jay的答案。
通过获取容器ID
kubectl get pod <podname> -o jsonpath="{.status.containerStatuses[].containerID}" | sed 's,.*//,,'
容器 ID 类似于 7e328fc6ac5932fef37f8d771fd80fc1a3ddf3ab8793b917fafba317faf1c697
查找 pod 的节点
kubectl get pod <podname> -o Wide
在节点上,触发 runc - 由于它是由 containerd 调用的,因此必须更改 --root
runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 <containerID> sh
Met*_*ymy 13
如果您使用现代 Kubernetes 版本,它可能会运行 Containerd 而不是 docker 作为容器运行时。
要以 root 身份执行,您必须对运行容器的节点具有 SSH 访问权限和 SUDO 访问权限。
kubectl get pod cassandra-0 -n cassandra -o jsonpath="{.status.containerStatuses[].containerID}" | sed 's/.*\/\///'
8e1f2e5907087b5fd55d98849fef640ca73a5ca04db2e9fc0b7d1497ff87aed9
Run Code Online (Sandbox Code Playgroud)
runc以 root 身份执行。例子:sudo runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 8e1f2e5907087b5fd55d98849fef640ca73a5ca04db2e9fc0b7d1497ff87aed9 sh
Run Code Online (Sandbox Code Playgroud)
hai*_*ong 12
以防万一您遇到寻找minikube的答案,该minikube ssh命令实际上可以与此处的 command 一起使用docker,这使得它相当简单:
查找容器 ID:
$ minikube ssh docker container ls
Run Code Online (Sandbox Code Playgroud)
将-u 0选项添加到 docker 命令(整个 docker 命令需要引号):
$ minikube ssh "docker container exec -it -u 0 <Container ID> /bin/bash"
Run Code Online (Sandbox Code Playgroud)
注意:这不适用于一般 Kubernetes,它仅适用于minikube。虽然我觉得我们需要在本地开发环境中退出很多 root 访问权限,但值得在这个线程中提及。
小智 11
有一些kubectl插件可以帮助您实现这一目标:https : //github.com/jordanwilson230/kubectl-plugins
其中一个名为“ ssh”的插件将允许您通过运行(例如)以root用户身份执行
kubectl ssh -u root -p nginx-0
Abd*_*UMI 11
就我而言,我需要对容器进行 root 访问(或 sudo),以授予chown特定安装路径的权限。
我无法通过 SSH 连接到机器,因为我将我的基础设施设计为使用 Terraform 完全自动化,无需任何手动访问。
相反,我发现它initContainers可以完成这项工作:
initContainers:
- name: volume-prewarming
image: busybox
command: ["sh", "-c", "chown -R 1000:0 {{ .Values.persistence.mountPath }}"]
volumeMounts:
- name: {{ .Chart.Name }}
mountPath: {{ .Values.persistence.mountPath }}
Run Code Online (Sandbox Code Playgroud)
我还创建了一门关于使用 EKS 在 AWS 上运行 kubernetes 的生产级课程
基于@jordanwilson230 的回答,他还开发了一个 bash 脚本exec-as,该脚本使用 Docker-in-Docker 来完成此操作:https : //github.com/jordanwilson230/kubectl-plugins/blob/krew/kubectl-exec-as
通过 kubectl 插件管理器krew安装时?kubectl krew install exec-as你可以简单地
kubectl exec-as -u <username> <podname> -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
这仅适用于允许特权容器的 Kubernetes 集群。
| 归档时间: |
|
| 查看次数: |
31064 次 |
| 最近记录: |