--save配置如何处理资源定义



使用以下yml文件:

apiVersion: v1
kind: Pod
metadata:
name: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:alpine

运行kubectl create -f nginx.pod.yml --save-config时,根据文档:If true, the configuration of current object will be saved in its annotation.

此注释究竟保存在哪里?如何查看此注释?

下面的命令将打印podmy-nginx:中的所有注释

kubectl get pod my-nginx  -o jsonpath='{.metadata.annotations}'

在上述输出的kubectl.kubernetes.io/last-applied-configuration下,将存储您使用的配置。

下面是一个显示用法的示例:

我部署的原始清单:

apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: my-deploy
name: my-deploy
spec:
replicas: 1
selector:
matchLabels:
app: my-deploy
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: my-deploy
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}

创建部署如下:

k create  -f x.yml --save-config
deployment.apps/my-deploy created
kubectl get deployments.apps my-deploy   -o jsonpath='{.metadata.annotations.kubectl.kubernetes.io/last-applied-configuration}' |jq .
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"annotations": {},
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
},
"name": "my-deploy",
"namespace": "default"
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "my-deploy"
}
},
"strategy": {},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
}
},
"spec": {
"containers": [
{
"image": "nginx",
"name": "nginx",
"resources": {}
}
]
}
}
},
"status": {}
}
kubectl get deployments.apps my-deploy   -o jsonpath='{.spec.template.spec.containers[*].image}'
nginx

现在一些用户来了,使用imperative命令将nginx上的图像从nginx更改为httpd

k set image deployment/my-deploy nginx=httpd --record
deployment.apps/my-deploy image updated

kubectl get deployments.apps my-deploy   -o jsonpath='{.spec.template.spec.containers[*].image}'
httpd

但是,我们可以检查最后应用的声明性配置是否未更新。

kubectl get deployments.apps my-deploy   -o jsonpath='{.metadata.annotations.kubectl.kubernetes.io/last-applied-configuration}' |jq .
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"annotations": {},
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
},
"name": "my-deploy",
"namespace": "default"
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "my-deploy"
}
},
"strategy": {},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
}
},
"spec": {
"containers": [
{
"image": "nginx",
"name": "nginx",
"resources": {}
}
]
}
}
},
"status": {}
}

现在,将原始清单文件中的图像名称从nginx更改为flask,然后执行kubectl apply(声明性命令(

kubectl apply -f orig.yml
deployment.apps/my-deploy configured
kubectl get deployments.apps my-deploy   -o jsonpath='{.spec.template.spec.containers[*].image}'
flask

现在检查最后一个应用的配置注释,其中会有flask。请记住,在使用kubectl set image命令时它是丢失的。

kubectl get deployments.apps my-deploy   -o jsonpath='{.metadata.annotations.kubectl.kubernetes.io/last-applied-configuration}' |jq .
{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": {
"annotations": {},
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
},
"name": "my-deploy",
"namespace": "default"
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"app": "my-deploy"
}
},
"strategy": {},
"template": {
"metadata": {
"creationTimestamp": null,
"labels": {
"app": "my-deploy"
}
},
"spec": {
"containers": [
{
"image": "flask",
"name": "nginx",
"resources": {}
}
]
}
}
},
"status": {}
}

";最后应用的";注释已保存:

和其他一切一样,它保存在etcd中,使用问题中提供的清单创建pod,并运行rawetcd命令打印内容。(在这个开发环境中,etcd没有加密(。

ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/ca.crt get /registry/pods/default/my-nginx
/registry/pods/default/my-nginx
k8s
v1Pod⚌
⚌
                                                                                             my-nginxdefault"*$a3s4b729-c96a-40f7-8de9-5d5f4ag21gfa2⚌⚌⚌b⚌
0kubectl.kubernetes.io/last-applied-configuration⚌{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"my-nginx","namespace":"default"},"spec":{"containers":[{"image":"nginx:alpine","name":"my-nginx"}]}}

最新更新