如何在不部署 kubernetes 的情况下在命令行中启动 pod?

How to start a pod in command line without deployment in kubernetes?

我想以简单的方式调试pod,因此我想在不部署的情况下启动pod。

但它会自动创建部署

$ kubectl run nginx --image=nginx --port=80
deployment "nginx" created

所以我必须创建 nginx.yaml 文件

---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80

然后像下面这样创建 pod,然后它只创建 pod

kubectl create -f nginx.yaml
pod "nginx" created

如何在命令行中指定 kind:Pod 以避免 deployment

// 我在 minikue 0.20.0 下 运行 和 kubernetes 1.7.0 在 Windows 7

kubectl run nginx --image=nginx --port=80 --restart=Never

--restart=Always: The restart policy for this Pod. Legal values [Always, OnFailure, Never]. If set to Always a deployment is created, if set to OnFailure a job is created, if set to Never, a regular pod is created. For the latter two --replicas must be 1. Default Always [...]

查看官方文档https://kubernetes.io/docs/user-guide/kubectl-conventions/#generators

你是说 "expose a service" 吗? 我想这个命令行会帮助你做到这一点。

 kubectl expose pod nginx  --type=LoadBalancer --port=80

现在有两种方式可以通过命令行创建pod。

kubectl run nginx --image=nginx --restart=Never

kubectl run --generator=run-pod/v1 nginx1 --image=nginx

查看官方文档。 https://kubernetes.io/docs/reference/kubectl/conventions/#generators

为此使用生成器,默认 kubectl 运行 将创建一个部署对象。如果您想覆盖此行为,请使用 "run-pod/v1" 生成器。

kubectl run --generator=run-pod/v1 nginx1 --image=nginx

您可以参考下面的 link 以便更好地理解。

https://kubernetes.io/docs/reference/kubectl/conventions/#generators

我对 kubernetes 比较陌生,但自从提出这个问题以来,它似乎已经有了很大的发展。从其最新版本(我是 运行 v1.16)开始,生成器已被弃用,它们在 v1.18 中被完全删除。 参见对应的ticket and the release notes。 发行说明明确指出:

Remove all the generators from kubectl run. It will now only create pods.

我已经使用各种 --restart 标志测试了 kubectl run,但从未创建任何部署。我们现在拥有的是 "naked" Pod。虽然你可能想使用它,但它违背了 k8s best practices:

Don’t use naked Pods (that is, Pods not bound to a ReplicaSet or Deployment) if you can avoid it. Naked Pods will not be rescheduled in the event of a node failure.

当您使用“kubectl 运行 nginx --image=nginx --port=80”时,它会默认创建部署。 要创建广告连播,您有两种选择。

  1. kubectl 运行 --generator=run-pod/v1 nginx --image=nginx --port=80
  2. kubectl create pod nginx --image=nginx --port=80