首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-如何使用资源定义?

-如何使用资源定义?
EN

Stack Overflow用户
提问于 2021-07-21 19:09:38
回答 1查看 221关注 0票数 0

使用下面的yml文件:

代码语言:javascript
复制
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.的规定

这个注释到底保存在哪里?如何查看此注释?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-21 19:14:14

下面的命令将打印pod my-nginx中的所有注释

代码语言:javascript
复制
kubectl get pod my-nginx  -o jsonpath='{.metadata.annotations}'

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

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

我部署的原始清单:

代码语言:javascript
复制
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: {}

按照以下方式创建了部署:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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(声明性命令)。

代码语言:javascript
复制
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命令时,它是丢失的。

代码语言:javascript
复制
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中,使用问题中提供的清单创建结荚,并运行raw etcd命令打印内容。(在这个dev环境中,etcd没有加密)。

代码语言:javascript
复制
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"}]}}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68475249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档