我在kubernetes上部署了istio/bookinfo,想在微服务容器上安装压力来注入故障。然而,当我使用
kubectl exec -it reviews-v1-f55d74d54-kpxr2 -c reviews --username=root -- /bin/bash
登录容器,显示用户还是default。命令“apt-get”得到了
default@reviews-v2-6f4995984d-4752v:/$ apt-get update
Reading package lists... Done
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
我尝试使用“su root”,但我不知道答案。 我搜索了一些答案说我可以使用'docker exec',它可以工作但不方便,所以我想知道如何使用命令 kubectl exec 登录容器。
不支持此功能。
源代码表明这是一个 TODO 功能:kubernetes/kubectl/pkg/cmd/exec/exec.go
kubectl 解释的
--username
标志:
➜ ~ kubectl options | grep user
--user='': The name of the kubeconfig user to use
--username='': Username for basic authentication to the API server
正如您可能看到的,没有任何用户标志可以更改 exec 的用户/UID。
exec 命令支持的所有标志:
➜ ~ kubectl exec --help
[...]
Options:
-c, --container='': Container name. If omitted, the first container in the pod will be chosen
-f, --filename=[]: to use to exec into the resource
--pod-running-timeout=1m0s: The length of time (like 5s, 2m, or 3h, higher than zero) to wait until at least one
pod is running
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TTY
此外,apt-get update 最好在构建时运行,而不是在运行时运行。
保持容器不可变是一个很好的做法。为了测试目的,您应该坚持使用 docker exec,因为没有其他已知的替代方案。
此外,如果您有特定问题需要解决,请解释问题,而不是解决方案。 xy问题
在使用containerd的现代kubernetes集群(2024+)上,可以使用
ctr
工具而不是kubectl来实现这一点。您需要使用 apt/yum 等安装 ctr
。
首先在容器列表中找到容器ID:
ctr c ls
获得 ID 后,以 root 身份登录:
ctr -n k8s.io task exec --user 0 --exec-id 0 -t <container id> /bin/sh