写在前面

本文一起看下kubectl create和kubectl apply的区别。

1:声明式和命令式

从声明式和命令式来划分的话,kubectl create是属于命令式,即就是要create 某API对象,但kubectl apply是声明式,只是声明了一个yaml文件,只要达到期望的状态就行,并不指定具体做什么操作。

2:多次执行

如果是多次执行的话,kubectl create是不行的,此时会报资源名称已存在错误,如下:

dongyunqi@mongodaddy:~/k8s$ cat create.yml # 第一次创建成功
apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '123'
  ROOT_PASSWORD: '123'
dongyunqi@mongodaddy:~/k8s$ kubectl create -f create.yml 
configmap/maria-cm created
dongyunqi@mongodaddy:~/k8s$ kubectl create -f create.yml # 第二次再创建就提示存在了
Error from server (AlreadyExists): error when creating "create.yml": configmaps "maria-cm" already exists

但是kubectl apply是可以的,如下:

dongyunqi@mongodaddy:~/k8s$ kubectl delete configmap maria-cm # 先将前面创建的删除,避免影响测试
configmap "maria-cm" deleted
dongyunqi@mongodaddy:~/k8s$ kubectl apply -f create.yml # 第一次创建成功
configmap/maria-cm created 
dongyunqi@mongodaddy:~/k8s$ kubectl apply -f create.yml # 第二次提示没有变化
configmap/maria-cm unchanged
dongyunqi@mongodaddy:~/k8s$ cat create.yml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: maria-cm

data:
  DATABASE: 'db'
  USER: 'wp'
  PASSWORD: '1234' # 从123修改为1234,试文件发生变化
  ROOT_PASSWORD: '123'
dongyunqi@mongodaddy:~/k8s$ kubectl apply -f create.yml # 修改yaml配置后提示重新配置,即update了 
configmap/maria-cm configured

写在后面

参考文章列表:

kubernetes: kubectl create与kubectl apply的区别

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐