我使用Docker映像在K8中进行了一次小型部署,但未在部署中显示,而仅在pod中显示。 原因:它没有在部署中创建任何默认名称空间。
请建议:
以下是我使用的命令。
$ kubectl run hello-node --image=gcr.io/$DEVSHELL_PROJECT_ID/hello-node:1.0 --port=8080 --namespace=default
pod/hello-node created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node 1/1 Running 0 12s
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-node 1/1 Running 0 9m9s
kube-system event-exporter-v0.2.5-599d65f456-4dnqw 2/2 Running 0 23m
kube-system kube-proxy-gke-hello-world-default-pool-c09f603f-3hq6 1/1 Running 0 23m
$ kubectl get deployments
**No resources found in default namespace.**
$ kubectl get deployments --all-namespaces
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system event-exporter-v0.2.5 1/1 1 1 170m
kube-system fluentd-gcp-scaler 1/1 1 1 170m
kube-system heapster-gke 1/1 1 1 170m
kube-system kube-dns 2/2 2 2 170m
kube-system kube-dns-autoscaler 1/1 1 1 170m
kube-system l7-default-backend 1/1 1 1 170m
kube-system metrics-server-v0.3.1 1/1 1 1 170m
答案 0 :(得分:2)
Arghya Sadhu的回答是正确的。过去的kubectl run
命令实际上是默认创建的Deployment
而不是Pod
。实际上,过去您可以将其与所谓的generators一起使用,并且可以通过提供--generator
标志和相应的值来确切指定要创建的资源类型。当前--generator
标志已弃用,并且无效。
请注意,在运行kubectl run
命令后,您得到的信息很清楚:
$ kubectl run hello-node --image=gcr.io/$DEVSHELL_PROJECT_ID/hello-node:1.0 --port=8080 --namespace=default
pod/hello-node created
它清楚地表明Pod
hello-node
已创建。它在任何地方都没有提到Deployment
。
除了使用命令式命令创建Deployments
或Pods
之外,还可以使用声明式方法:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-node
namespace: default
labels:
app: hello-node
spec:
replicas: 3
selector:
matchLabels:
app: hello-node
template:
metadata:
labels:
app: hello-node
spec:
containers:
- name: hello-node-container
image: gcr.io/$DEVSHELL_PROJECT_ID/hello-node:1.0
ports:
- containerPort: 8080
在这种情况下,可以省略对namespace
的声明,因为默认情况下,所有资源都已部署到default
命名空间中。
保存文件后,例如与nginx-deployment.yaml
一样,您只需要运行:
kubectl apply -f nginx-deployment.yaml
在yaml清单中扩展环境变量实际上不起作用,因此无法使用上述部署示例中的以下行:
image: gcr.io/$DEVSHELL_PROJECT_ID/hello-node:1.0
最简单的解决方法是一个相当简单的sed
“技巧”。
首先,我们需要在部署定义yaml中更改项目ID的占位符。可能看起来像这样:
image: gcr.io/{{DEVSHELL_PROJECT_ID}}/hello-node:1.0
然后在应用部署定义而不是简单的kubectl apply -f deployment.yaml
时运行此单行代码:
sed "s/{{DEVSHELL_PROJECT_ID}}/$DEVSHELL_PROJECT_ID/g" deployment.yaml | kubectl apply -f -
上面的命令告诉sed
在deployment.yaml
文档中搜索{{DEVSHELL_PROJECT_ID}}
字符串,并且每次出现此字符串时,用$DEVSHELL_PROJECT_ID
环境变量的实际值替换它
答案 1 :(得分:1)
使用kubectl version
从kubectl 1.18版本kubectl run
起,仅创建pod,没有其他内容。要创建部署,请使用kubectl create deployment
或使用旧版本的kubectl