如何在Kubernetes中使用apply而不是create进行部署?
我正在尝试使用如何在Kubernetes中使用apply而不是create进行部署?,kubernetes,Kubernetes,我正在尝试使用kubectl apply以声明方式创建部署。下面的配置创建得很好 kubectl create -f postgres-deployment.yaml 但如果我去 kubectl apply -f postgres-deployment.yaml 我收到了一条可爱的错误消息: 错误:无法解码“postgres deployment.yaml”:没有种类 已为版本“apps/v1beta1”注册“部署” 我试图寻找一个解释来解释这意味着什么,但我无法理解 apiVersion:
kubectl apply
以声明方式创建部署。下面的配置创建得很好
kubectl create -f postgres-deployment.yaml
但如果我去
kubectl apply -f postgres-deployment.yaml
我收到了一条可爱的错误消息:
错误:无法解码“postgres deployment.yaml”:没有种类
已为版本“apps/v1beta1”注册“部署”
我试图寻找一个解释来解释这意味着什么,但我无法理解
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:10.1
ports:
- containerPort: 5432
旧的Kubernetes版本支持
extensions/v1beta1
API组上的部署对象
对于Kubernetes 1.9.0之前的版本,您应该使用API组apps/v1beta2
在上面,您应该使用API组
apps/v1
您可以从kubectl apply--help
发布kubectl version
的输出吗:要使用“apply”,请始终首先使用“apply”或“create--save config”创建资源
。因此,也许可以尝试kubectl-create--save config-f postgres-deployment.yaml
,然后使用kubectl-apply-f postgres-deployment.yaml
。这是否回答了您的问题?但是为什么kubectl创建了
工作而kubectl应用了
没有?当使用错误的API版本时,我预计两者都会失败。我只是在这里假设,但由于kubectl apply
是创建对象的声明性方式的一部分,因此它执行的操作最终会确保所创建对象的API组不会被弃用。另一方面,kubectl create
是创建对象的必要方式的一部分,因此,在这种管理对象的方式中,如果api组存在,则只会创建对象,即使不推荐使用。我敢打赌,如果用“香蕉”替换apps/v1beta1
,kubectl create将失败。客户端版本还是服务器版本?