7、声明式对象配置

17.声明式对象配置

总结: 其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)** 使用apply操作资源:如果资源不存在,就创建,相当于 kubectl create** 如果资源已存在,就更新,相当于 kubectl patch

声明式对象配置跟命令式对象配置很相似、但是他只有一个命令apply(更新创建 已有则更新 没有则创建)

如果使用conmand 中的create 则会报错

使用apply 创建/更新资源

1
2
3
4
5
# 更新创建 已有则更新 没有则创建 nginx
kubectl apply -f nginxpod.yml
# 验证
kubectl get ns dev
kubectl get pods -n dev

再次执行(已资源此时更新)

1
2
3
4
5
# 此时我们已经创建了 我们再运行一下这个配置文件
kubectl apply -f nginxpod.yml
// 返回(提示没有改变)
namespace/dev unchanged
pod/nginxpod unchanged

此时我们将nginxpod.yml中镜像版本修改为2此时再次执行kubectl apply -f nginxpod.yml

注意:

  • 修改pod名称会重新创建一个pod 修改镜像测试即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 命名空间的声明 创建一个dev的namespace
apiVersion: v1 # 版本
kind: Namespace # 类型
metadata: # 描述名称为dev
name: dev

---

apiVersion: v1 # 版本
kind: Pod # 类型是pod
metadata: # 描述如下
name: nginxpod # 名字叫nginxpod
namespace: dev # 所在名称空间叫dev
spec: # 详细描述如下
containers:
- name: nginx-containers # pod中容器的名字叫nginx-containers
image: registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:nginx-1.17.2 # 容器使用的镜像nginx:latest 或 私有镜像仓库 registry.cn-hangzhou.aliyuncs.com/zznn/mycentos:nginx-latest
~

查看 此时返回命名空间没有改变 pod/nginxpod发生改变

查看详情:kubectl describe pod nginxpod -n dev

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/12/image_320ee6bf67ce0c8b48d8f440b782316d.png

扩展:kubectl可以在node节点上运行吗 ?

kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

1
2
3
4
# 变量形式
scp -r $HOME/.kube node1: HOME/
# 等同于如下
scp -r ~/.kube node1:~/

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/12/image_5e5a9778ccfa864aed4adf4cffc6ee23.png

使用推荐: 三种方式应该怎么用 ?

什么时候使用三种方式的推荐使用方式:

  • 创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
  • 删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
  • 查询资源 使用命令式对象管理 kubectl get(describe) 资源名称