0

关于 Kubernetes 的小问题,请使用 kubectl 命令。

目前,我执行三个单独的操作:

行动一: kubectl -n=mynamespace apply -f /path/to/manifest.yml

基于成功创建,当我看到createdI perform action 2,为了检索 pod

kubectl -n=mynamespace get all

此步骤纯粹是手动的、耗时且容易出错的步骤。我必须用眼睛看终端,选择正确的 pod 名称。只需手动复制粘贴,即从步骤 1 创建的最新 pod。

我会用我的眼睛寻找这样的东西,然后手动复制粘贴: pod/my-pod-6bd84ccb9f-6kjwj

拿到 pod 后,我将执行操作 3,即在pod内执行,并使用步骤 2 中的复制粘贴:

kubectl -n=mynamespace exec -it pod/my-pod-6bd84ccb9f-6kjwj -- bash

我觉得这不是正确的解决方案,并且由于我的无知,我正在做不必要的步骤。

请问是否有更聪明的方法来简单地创建 pod,然后能够直接在这个 pod 中执行?

某种允许这样做的命令。

kubectl -n=mynamespace exec -it {into the pod I just created from kubectl apply -f file.yml} -- bash

谢谢你。

4

3 回答 3

2

并不真地。有,kubectl run -i但我不认为那是你要找的?真正的答案是“不要”。kubectl exec仅用于非常少见的调试用途,如果您这样做足以让您烦恼,那么您的工作流程可能非常非常错误。你觉得你需要什么?

于 2021-06-20T05:48:25.913 回答
1

TL;DR 您的解决方案可能是&&在命令之间使用。&&让您根据上一个命令是否成功完成来做一些事情。


解释 我已经部署了简单的 pod,基于这个文档。我为它创建了 GKE 集群,然后:

  1. 我创建了一个命名空间,名为test-ns
kubectl create namespace test-ns
  1. 我确保它已创建:
kubectl get ns

给我输出:

NAME                   STATUS   AGE
default                Active   7m
kube-node-lease        Active   7m
kube-public            Active   7m
kube-system            Active   7m
test-ns                Active   1m
  1. 在这一步中,我将同时创建 deploy 并登录到 pod:
<user>@cloudshell:~ (<user>-<project>)$ kubectl apply -n test-ns -f https://k8s.io/examples/pods/init-containers.yaml && kubectl -n test-ns exec -it init-demo -- /bin/bash

给我输出:

pod/init-demo configured
Defaulted container "nginx" out of: nginx, install (init)
root@init-demo:/#

我同时创建了部署并登录到 pod。exit如果我使用or从此 pod 注销ctrl +D,然后执行 command kubectl get pods -n test-ns,我有一个输出:

NAME        READY   STATUS    RESTARTS   AGE
init-demo   1/1     Running   0          9m

这意味着,一切都很好。Pod 创建成功。

于 2021-06-21T09:37:21.020 回答
0

它很棘手,您可以尝试将一些 kubectl 命令与 && 条件结合起来,并将其作为命令条件。

像这样的东西:

for pod in $(kubectl -n test apply -f /path/to/manifest.yaml && kubectl -n test get pod -o jsonpath={.items[*].metadata.name}); do echo $pod && kubectl -n test exec --stdin $pod -- /bin/sh; done

但我认为这不适用于命名空间内列出的多个 pod。

我能想到的最好方法是在使用 && 条件创建后放置 pod 和 exec 命令的修复名称。

于 2021-06-20T06:41:47.733 回答