具有root访问权限的kubernetes pod上的exec命令

时间:2017-03-14 18:03:31

标签: bash docker kubernetes

我有一个名为'jenkins-app-2843651954-4zqdp'的pod。我想暂时在这个pod上安装几个软件。我怎么能这样做?

我正在尝试这个 - kubectl exec -it jenkins-app-2843651954-4zqdp -- /bin/bash 然后运行apt-get install命令,但由于我访问的用户没有sudo访问权限,我无法运行命令

8 个答案:

答案 0 :(得分:31)

  • 使用kubectl describe pod ...查找运行Pod的节点和容器ID(docker://...
  • SSH进入节点
  • 运行docker exec -u root ID -- /bin/bash

答案 1 :(得分:4)

有一些kubectl插件可以帮助您实现这一目标:https://github.com/jordanwilson230/kubectl-plugins

其中一个名为“ ssh”的插件将允许您通过运行(例如)kubectl ssh -u root -p nginx-0

以root用户身份执行。

答案 2 :(得分:3)

在@ jordanwilson230的答案的基础上,他还开发了一个名为exec-as的bash脚本,该脚本使用Docker-in-Docker来完成此任务:https://github.com/jordanwilson230/kubectl-plugins/blob/krew/kubectl-exec-as

通过kubectl插件管理器krewkrew install exec-as安装后,您只需

kubectl exec-as -u <username> <podname> -- /bin/bash

这仅适用于允许特权容器的Kubernetes集群。

答案 3 :(得分:2)

  • function onChange(e) { var sheet = e.source.getActiveSheet(); mit = sheet.getRange(1,12).getValue(); mat = sheet.getRange(1,13).getValue(); mih = sheet.getRange(1,14).getValue(); mah = sheet.getRange(1,15).getValue(); var chart = sheet.getCharts()[0]; chart = chart.modify() .setOption('vAxes.0.viewWindow.max', mat) .setOption('vAxes.0.viewWindow.min', mit) .build(); sheet.updateChart(chart); var chart1 = sheet.getCharts()[1]; chart1 = chart1.modify() .setOption('vAxes.0.viewWindow.max', mah) .setOption('vAxes.0.viewWindow.min', mih) .build(); sheet.updateChart(chart1); } 查找容器ID
  • docker container ls

答案 4 :(得分:0)

就我而言,我需要对容器进行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 }}

我还创建了关于Production grade running kubernetes on AWS using EKS

的整个课程

答案 5 :(得分:0)

如果有人在使用 AKS,请按照以下步骤操作:

  • 识别运行容器的 pod
  • 标识运行该 Pod 的节点(kubectl describe pod -n <namespace> <pod_name> | grep "Node:",或在 Azure 门户上查找)
  • SSH to AKS the cluster node

进入节点后,执行以下命令以进入容器:

  • sudo su(您必须获得 root 访问权限才能使用 docker 命令)
  • docker exec -it -u root ID /bin/bash(要获取容器 ID,请使用 docker container ps

答案 6 :(得分:-1)

你必须知道,归根结底你是在使用容器,所以问题是关于 docker 而不是 Kubernetes,

此注释对故障排除很有帮助,您必须忘记 Kubernetes 资源并将其视为容器

并且在 docker 中,如果您想以 root 身份执行到容器,请使用以下命令:

docker exec -it -u root ID /bin/bash

用于指定要登录到容器中的用户的标志 u

答案 7 :(得分:-6)

我们可以通过以下命令在kubernetes窗格中执行。

kubectl exec --stdin --tty pod-name -n namespace-name -- /bin/bash