运行 k8s yaml 中 kubectl 图像的命令行

Running command line for kubectl image in yaml for k8s

我想在使用 kubectl 镜像的 yaml 文件命令行中为 `kubectl' 的任何命令声明,即等待另一个 pod 进入就绪状态。

如果我 运行 命令:

kubectl wait pod/mypod --for=condition=ready --timeout=120s

我收到了一条真实消息:

pod/mypod condition met

第一-如何运行命令提示符,简单使用?

即使用 kubectl version,所以输出是 kube 的版本,用于使用图像:kubectl:

kubectl run test -it --rm --image=bitnami/kubectl get pods --restart=Never --command -- 
/bin/kubectl version

(我想 运行 一次,并在 pod 结束时自动删除它。命令也一样:kubectl wait pod/mypod --for=condition=ready --timeout=120s 或任何命令使用 kubectl image)。

上面的方法不行。

此外 - 我应该如何将以上内容转换为 kubernetes yaml 文件(一次 运行 - 完成后,pod 将自动删除)?

当我在等待,即等待 mypod 完成时,以下内容不起作用。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3
  template:
    metadata:
      labels:
        app: myapp
    spec:
      initContainers:
        - name: wait-for-pod
          image: bitnami/kubectl
          args:
            - wait
            - pod/mypod
            - --for=condition=ready
            - --timeout=120s
      containers:
        - name: myapp
          image: myapp

状态:Init:ContainerCannotRun

当我 运行:kubectl describe pod <mypod>,我收到消息:

OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "wait": executable file not found in $PATH: unknown

谢谢。

你的kubectl run 命令是错误的。 --image=bitnami/kubectl get pods 部分不正确。您只需指定图像,而不是命令。
正确的工作命令是

kubectl run test -it --rm --image=bitnami/kubectl --restart=Never -- version

说到部署清单,您几乎就在那里。只需将 command 列表添加到清单中,它应该可以工作。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 3
  template:
    metadata:
      labels:
        app: myapp
    spec:
      initContainers:
        - name: wait-for-pod
          image: bitnami/kubectl
          command:
            - kubectl
          args:
            - wait
            - --for=condition=Ready
            - pod/mypod
            - --timeout=120s
      containers:
        - name: myapp
          image: myapp

现在,您需要记住,附加到每个 pod 的 system:serviceaccount:default:default 服务帐户没有足够的权限在集群中列出 pods。以上所有都不会工作除非你给默认服务帐户适当的权限

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  namespace: default
  name: service-reader
rules:
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: service-reader-pod
subjects:
  - kind: ServiceAccount
    name: default
    namespace: default
roleRef:
  kind: ClusterRole
  name: service-reader
  apiGroup: rbac.authorization.k8s.io