使用kubectl explain來了解可能的API物件欄位
瞭解API物件屬性的方法
在準備manifest檔案時,可以參考kubernetes官網的http://kubernetes.io/docs/api參考文件,來了解API物件支援的屬性,也可以使用kubectl explain命令。很多時候,使用後者更便捷。
如何使用kubectl explain命令
從零開始以編寫POD的manifest檔案,可以使用該命令先了解pod的相關規格:
[jinguang1@m104120196 ~]$ kubectl explain pods
KIND: Pod
VERSION: v1
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#resources
kind <string>
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
metadata <Object>
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
spec <Object>
Specification of the desired behavior of the pod. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
status <Object>
Most recently observed status of the pod. This data may not be up to date.
Populated by the system. Read-only. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status
從顯示的幫助資訊來看,Pod的manifest檔案包含apiVersion, kind, metadata, spec, status屬性,其中status屬性為只讀,編寫manifest檔案時並不需要提供。
如果我們需要進一步瞭解metadata更詳細的資訊,那麼可以通過下列命令來顯示幫助資訊:
[jinguang1@m104120196 ~]$ kubectl explain pod.metadata
KIND: Pod
VERSION: v1
RESOURCE: metadata <Object>
DESCRIPTION:
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
ObjectMeta is metadata that all persisted resources must have, which
includes all objects users must create.
FIELDS:
annotations <map[string]string>
Annotations is an unstructured key value map stored with a resource that
may be set by external tools to store and retrieve arbitrary metadata. They
are not queryable and should be preserved when modifying objects. More
info: http://kubernetes.io/docs/user-guide/annotations
clusterName <string>
The name of the cluster which the object belongs to. This is used to
distinguish resources with same name and namespace in different clusters.
This field is not set anywhere right now and apiserver is going to ignore
it if set in create or update request.
creationTimestamp <string>
CreationTimestamp is a timestamp representing the server time when this
object was created. It is not guaranteed to be set in happens-before order
across separate operations. Clients may not set this value. It is
represented in RFC3339 form and is in UTC. Populated by the system.
Read-only. Null for lists. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
deletionGracePeriodSeconds <integer>
Number of seconds allowed for this object to gracefully terminate before it
will be removed from the system. Only set when deletionTimestamp is also
set. May only be shortened. Read-only.
deletionTimestamp <string>
DeletionTimestamp is RFC 3339 date and time at which this resource will be
deleted. This field is set by the server when a graceful deletion is
requested by the user, and is not directly settable by a client. The
resource is expected to be deleted (no longer visible from resource lists,
and not reachable by name) after the time in this field, once the
finalizers list is empty. As long as the finalizers list contains items,
deletion is blocked. Once the deletionTimestamp is set, this value may not
be unset or be set further into the future, although it may be shortened or
the resource may be deleted prior to this time. For example, a user may
request that a pod is deleted in 30 seconds. The Kubelet will react by
sending a graceful termination signal to the containers in the pod. After
that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL)
to the container and after cleanup, remove the pod from the API. In the
presence of network partitions, this object may still exist after this
timestamp, until an administrator or automated process can determine the
resource is fully terminated. If not set, graceful deletion of the object
has not been requested. Populated by the system when a graceful deletion is
requested. Read-only. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
finalizers <[]string>
Must be empty before the object is deleted from the registry. Each entry is
an identifier for the responsible component that will remove the entry from
the list. If the deletionTimestamp of the object is non-nil, entries in
this list can only be removed.
generateName <string>
GenerateName is an optional prefix, used by the server, to generate a
unique name ONLY IF the Name field has not been provided. If this field is
used, the name returned to the client will be different than the name
passed. This value will also be combined with a unique suffix. The provided
value has the same validation rules as the Name field, and may be truncated
by the length of the suffix required to make the value unique on the
server. If this field is specified and the generated name exists, the
server will NOT return a 409 - instead, it will either return 201 Created
or 500 with Reason ServerTimeout indicating a unique name could not be
found in the time allotted, and the client should retry (optionally after
the time indicated in the Retry-After header). Applied only if Name is not
specified. More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency
generation <integer>
A sequence number representing a specific generation of the desired state.
Populated by the system. Read-only.
initializers <Object>
An initializer is a controller which enforces some system invariant at
object creation time. This field is a list of initializers that have not
yet acted on this object. If nil or empty, this object has been completely
initialized. Otherwise, the object is considered uninitialized and is
hidden (in list/watch and get calls) from clients that haven't explicitly
asked to observe uninitialized objects. When an object is created, the
system will populate this list with the current set of initializers. Only
privileged users may set or modify this list. Once it is empty, it may not
be modified further by any user.
labels <map[string]string>
Map of string keys and values that can be used to organize and categorize
(scope and select) objects. May match selectors of replication controllers
and services. More info: http://kubernetes.io/docs/user-guide/labels
name <string>
Name must be unique within a namespace. Is required when creating
resources, although some resources may allow a client to request the
generation of an appropriate name automatically. Name is primarily intended
for creation idempotence and configuration definition. Cannot be updated.
More info: http://kubernetes.io/docs/user-guide/identifiers#names
namespace <string>
Namespace defines the space within each name must be unique. An empty
namespace is equivalent to the "default" namespace, but "default" is the
canonical representation. Not all objects are required to be scoped to a
namespace - the value of this field for those objects will be empty. Must
be a DNS_LABEL. Cannot be updated. More info:
http://kubernetes.io/docs/user-guide/namespaces
ownerReferences <[]Object>
List of objects depended by this object. If ALL objects in the list have
been deleted, this object will be garbage collected. If this object is
managed by a controller, then an entry in this list will point to this
controller, with the controller field set to true. There cannot be more
than one managing controller.
resourceVersion <string>
An opaque value that represents the internal version of this object that
can be used by clients to determine when objects have changed. May be used
for optimistic concurrency, change detection, and the watch operation on a
resource or set of resources. Clients must treat these values as opaque and
passed unmodified back to the server. They may only be valid for a
particular resource or set of resources. Populated by the system.
Read-only. Value must be treated as opaque by clients and . More info:
https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency
selfLink <string>
SelfLink is a URL representing this object. Populated by the system.
Read-only.
uid <string>
UID is the unique in time and space value for this object. It is typically
generated by the server on successful creation of a resource and is not
allowed to change on PUT operations. Populated by the system. Read-only.
More info: http://kubernetes.io/docs/user-guide/identifiers#uids
來檢視一個真是manifest的例子,你可以查詢使用kubectl explain來檢視每個屬性:
[jinguang1@m104120196 ~]$ kubectl get pod etcd-m104120191 --namespace kube-system -o yaml
apiVersion: v1
kind: Pod
metadata:
annotations:
kubernetes.io/config.hash: 6bc14c8cf2154ca1c46bf10329d714ac
kubernetes.io/config.mirror: 6bc14c8cf2154ca1c46bf10329d714ac
kubernetes.io/config.seen: "2019-03-19T15:23:46.221011601+08:00"
kubernetes.io/config.source: file
scheduler.alpha.kubernetes.io/critical-pod: ""
creationTimestamp: "2019-03-19T07:23:47Z"
labels:
component: etcd
tier: control-plane
name: etcd-m104120191
namespace: kube-system
resourceVersion: "2350"
selfLink: /api/v1/namespaces/kube-system/pods/etcd-m104120191
uid: efca37b8-4a17-11e9-b351-b4432655bdb0
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://10.41.20.191:2379
- --initial-advertise-peer-urls=https://10.41.20.191:2380
- --initial-cluster=m104120196=https://10.41.20.196:2380,m104120195=https://10.41.20.195:2380,m104120193=https://10.41.20.193:2380,m104120192=https://10.41.20.192:2380,m104120191=https://10.41.20.191:2380
- --initial-cluster-state=existing
- --listen-client-urls=https://127.0.0.1:2379,https://10.41.20.191:2379
- --listen-peer-urls=https://10.41.20.191:2380
- --cert-file=/etc/kubernetes/pki/etcd/server.crt
- --client-cert-auth=true
- --data-dir=/var/lib/etcd
- --key-file=/etc/kubernetes/pki/etcd/server.key
- --name=m104120191
- --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
- --peer-client-cert-auth=true
- --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
- --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
- --snapshot-count=10000
- --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
image: registry.intra.xxxx.com/xxxx_rd_algorithmplatform/google_containers/etcd:3.2.24
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- /bin/sh
- -ec
- ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
get foo
failureThreshold: 8
initialDelaySeconds: 15
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 15
name: etcd
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/etcd
name: etcd-data
- mountPath: /etc/kubernetes/pki/etcd
name: etcd-certs
dnsPolicy: ClusterFirst
enableServiceLinks: true
hostNetwork: true
nodeName: m104120191
priority: 2000000000
priorityClassName: system-cluster-critical
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
operator: Exists
volumes:
- hostPath:
path: /etc/kubernetes/pki/etcd
type: DirectoryOrCreate
name: etcd-certs
- hostPath:
path: /var/lib/etcd
type: DirectoryOrCreate
name: etcd-data
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2019-03-19T07:23:46Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2019-03-19T07:24:08Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2019-03-19T07:24:08Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2019-03-19T07:23:46Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://eafc899991dd8023ee4a09d3671345e2932df302d61373e2cc23a75d19dd3ee1
image: registry.aliyuncs.com/google_containers/etcd:3.2.24
imageID: docker-pullable://registry.aliyuncs.com/google_containers/etcd@sha256:7b073bdab8c52dc23dfb3e2101597d30304437869ad8c0b425301e96a066c408
lastState:
terminated:
containerID: docker://f08bdff1c367fd5a36e243ff4daac6ff682cc22a49bc406331f47dbabcfa7ecc
exitCode: 1
finishedAt: "2019-03-19T07:23:48Z"
reason: Error
startedAt: "2019-03-19T07:23:48Z"
name: etcd
ready: true
restartCount: 2
state:
running:
startedAt: "2019-03-19T07:24:08Z"
hostIP: 10.41.20.191
phase: Running
podIP: 10.41.20.191
qosClass: BestEffort
startTime: "2019-03-19T07:23:46Z"
相關文章
- 使用 Eloquent ORM 使用 with 模型關聯查詢,如何處理select不同模型的欄位(欄位名可能相同)ORM模型
- Scala的類、屬性、物件欄位物件
- 舉例解釋一下explain各欄位的含義AI
- 卡卡西:一文詳解explain各欄位含義AI
- 基於 Laravel Passport API 的多使用者多欄位認證系統(三):多欄位登入LaravelPassportAPI
- abc欄位數的使用
- Scala類的屬性以及物件私有欄位物件
- java 將物件集合轉為欄位值的 listJava物件
- api 介面欄位規範的問題,請教大家API
- 關於Thinkphp 使用AdvModel來讀取Blob欄位PHP
- 使用欄位格式化來自定義SharePoint(二)
- 使用欄位格式化來自定義SharePoint(三)
- 使用欄位格式化來自定義SharePoint(一)
- 使用欄位格式化來自定義SharePoint(六)
- 使用欄位格式化來自定義SharePoint(五)
- 使用欄位格式化來自定義SharePoint(七)
- 使用欄位格式化來自定義SharePoint(四)
- 使用欄位格式化來自定義SharePoint(八)
- NRIV表欄位的設定使用
- MySQL Explain的使用MySqlAI
- Mybatis框架:foreach迴圈遍歷欄位(為了解決動態表、動態欄位查詢資料)MyBatis框架
- PhpCms自定義欄位的使用說明PHP
- MySQL中JSON欄位的使用技巧MySqlJSON
- MySQL 中 JSON 欄位的使用技巧MySqlJSON
- Django REST framework API 指南(10):序列化·欄位DjangoRESTFrameworkAPI
- 使用EXPLAIN PLAN來檢視執行計劃AI
- pydantic 欄位欄位校驗
- explain for 的簡單使用AI
- 物件型介面 / 定製操作型別和欄位物件型別
- javascript如何判斷json格式物件中含有指定的欄位JavaScriptJSON物件
- 在 Laravel 中動態 隱藏 / 顯示 API 欄位LaravelAPI
- mac 使用 sed 抽取 json 中的欄位MacJSON
- 輕鬆使用“Explain Shell”指令碼來理解 Shell 命令AI指令碼
- 【Mongo】mongo更新欄位為另一欄位的值Go
- oracle檢視該使用者的所有表名字、表註釋、欄位名、欄位註釋、是否為空、欄位型別Oracle型別
- js記一個根據欄位排序物件函式JS排序物件函式
- 關於 bind 你可能需要了解的知識點以及使用場景
- 使用Hybris Commerce User API讀取使用者資訊時,電話欄位沒有返回API