【云原生学习笔记】认识kubernetes配置清单yaml文件
文章目录前言一、kubectl apply -f二、k8s yaml配置文件1. apiVersion2. kind3. metadata4. spec前言前面提到应用部署时,在实践工作中更多的是用kubectl apply。这节内容将介绍这两命令的具体用法,以及其配合使用的配置的编写。一、kubectl apply -f-f是kubectl apply最常用的命令选项。通过文件名或控制台输入,对
前言
前面提到应用部署时,在实践工作中更多的是用kubectl apply
。这节内容将介绍这两命令的具体用法,以及其配合使用的配置的编写。
一、kubectl apply -f
-f是kubectl apply最常用的命令选项。通过文件名或控制台输入,对资源进行配置。接受JSON和YAML格式的描述文件。YAML格式更被推荐使用。
-f, --filename=[]: 包含配置信息的文件名,目录名或者URL。
示例:
# 将pod.json中的配置应用到pod
$ kubectl apply -f ./kube-config.yaml
# 将控制台输入的JSON配置应用到Pod
$ cat kube-config.yaml | kubectl apply -f -
二、k8s yaml配置文件
关于yaml的介绍不具体说了,文件后缀一般是.yaml
或者.yml
其语法格式如下:
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
'#'表示注释
在k8s的配置清单文件中,需要掌握yaml语法中的键值对和数组。推荐yaml入门学习。
k8s的yaml配置主要分为四个部分:
- apiVersion
- kind
- metadata
- spec
如pod资源yaml示例:
apiVersion: v1 # API版本号,必须在`kubectl apiversion`中
kind: Pod # 指定创建资源类型,资源类型可以是Deployment、Service等,根据实际情况决定。
metadata: # 元数据,包含一些meta信息,比如名称、namespace、标签等信息。
name: nginx-test # 资源的名称,在同一个namespace空间中必须是唯一的
spec: # 资源规格,包括一些container,storage,volume以及其他k8s需要的参数。
containers: # 容器列表
- name: front-end # 容器名称
image: nginx # 容器镜像
ports:
- containerPort: 80 # 容器的对外端口
1. apiVersion
表示指定api版本号,通常写v1,但是并不是写死的,可以执行kubectl api-versions
命令查看,需要为其中一个。
$ kubectl api-versions
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
2. kind
表示该yaml定义的资源类型,k8s中资源有很多种,可以执行命令kubectl api-resources -o wide
查看,但大多数并不常用。常用的资源主要包括Deployment,Services,Job等。
$ kubectl api-resources -o wide
NAME SHORTNAMES APIVERSION NAMESPACED KIND VERBS
bindings v1 true Binding [create]
componentstatuses cs v1 false ComponentStatus [get list]
configmaps cm v1 true ConfigMap [create delete deletecollection get list patch update watch]
endpoints ep v1 true Endpoints [create delete deletecollection get list patch update watch]
events ev v1 true Event [create delete deletecollection get list patch update watch]
limitranges limits v1 true LimitRange [create delete deletecollection get list patch update watch]
namespaces ns v1 false Namespace [create delete get list patch update watch]
nodes no v1 false Node [create delete deletecollection get list patch update watch]
persistentvolumeclaims pvc v1 true PersistentVolumeClaim [create delete deletecollection get list patch update watch]
persistentvolumes pv v1 false PersistentVolume [create delete deletecollection get list patch update watch]
pods po v1 true Pod [create delete deletecollection get list patch update watch]
podtemplates v1 true PodTemplate [create delete deletecollection get list patch update watch]
replicationcontrollers rc v1 true ReplicationController [create delete deletecollection get list patch update watch]
resourcequotas quota v1 true ResourceQuota [create delete deletecollection get list patch update watch]
secrets v1 true Secret [create delete deletecollection get list patch update watch]
serviceaccounts sa v1 true ServiceAccount [create delete deletecollection get list patch update watch]
services svc v1 true Service [create delete deletecollection get list patch update watch]
mutatingwebhookconfigurations admissionregistration.k8s.io/v1 false MutatingWebhookConfiguration [create delete deletecollection get list patch update watch]
validatingwebhookconfigurations admissionregistration.k8s.io/v1 false ValidatingWebhookConfiguration [create delete deletecollection get list patch update watch]
customresourcedefinitions crd,crds apiextensions.k8s.io/v1 false CustomResourceDefinition [create delete deletecollection get list patch update watch]
apiservices apiregistration.k8s.io/v1 false APIService [create delete deletecollection get list patch update watch]
controllerrevisions apps/v1 true ControllerRevision [create delete deletecollection get list patch update watch]
daemonsets ds apps/v1 true DaemonSet [create delete deletecollection get list patch update watch]
deployments deploy apps/v1 true Deployment [create delete deletecollection get list patch update watch]
replicasets rs apps/v1 true ReplicaSet [create delete deletecollection get list patch update watch]
statefulsets sts apps/v1 true StatefulSet [create delete deletecollection get list patch update watch]
tokenreviews authentication.k8s.io/v1 false TokenReview [create]
localsubjectaccessreviews authorization.k8s.io/v1 true LocalSubjectAccessReview [create]
selfsubjectaccessreviews authorization.k8s.io/v1 false SelfSubjectAccessReview [create]
selfsubjectrulesreviews authorization.k8s.io/v1 false SelfSubjectRulesReview [create]
subjectaccessreviews authorization.k8s.io/v1 false SubjectAccessReview [create]
horizontalpodautoscalers hpa autoscaling/v2 true HorizontalPodAutoscaler [create delete deletecollection get list patch update watch]
cronjobs cj batch/v1 true CronJob [create delete deletecollection get list patch update watch]
jobs batch/v1 true Job [create delete deletecollection get list patch update watch]
certificatesigningrequests csr certificates.k8s.io/v1 false CertificateSigningRequest [create delete deletecollection get list patch update watch]
leases coordination.k8s.io/v1 true Lease [create delete deletecollection get list patch update watch]
endpointslices discovery.k8s.io/v1 true EndpointSlice [create delete deletecollection get list patch update watch]
events ev events.k8s.io/v1 true Event [create delete deletecollection get list patch update watch]
flowschemas flowcontrol.apiserver.k8s.io/v1beta2 false FlowSchema [create delete deletecollection get list patch update watch]
prioritylevelconfigurations flowcontrol.apiserver.k8s.io/v1beta2 false PriorityLevelConfiguration [create delete deletecollection get list patch update watch]
ingressclasses networking.k8s.io/v1 false IngressClass [create delete deletecollection get list patch update watch]
ingresses ing networking.k8s.io/v1 true Ingress [create delete deletecollection get list patch update watch]
networkpolicies netpol networking.k8s.io/v1 true NetworkPolicy [create delete deletecollection get list patch update watch]
runtimeclasses node.k8s.io/v1 false RuntimeClass [create delete deletecollection get list patch update watch]
poddisruptionbudgets pdb policy/v1 true PodDisruptionBudget [create delete deletecollection get list patch update watch]
podsecuritypolicies psp policy/v1beta1 false PodSecurityPolicy [create delete deletecollection get list patch update watch]
clusterrolebindings rbac.authorization.k8s.io/v1 false ClusterRoleBinding [create delete deletecollection get list patch update watch]
clusterroles rbac.authorization.k8s.io/v1 false ClusterRole [create delete deletecollection get list patch update watch]
rolebindings rbac.authorization.k8s.io/v1 true RoleBinding [create delete deletecollection get list patch update watch]
roles rbac.authorization.k8s.io/v1 true Role [create delete deletecollection get list patch update watch]
priorityclasses pc scheduling.k8s.io/v1 false PriorityClass [create delete deletecollection get list patch update watch]
csidrivers storage.k8s.io/v1 false CSIDriver [create delete deletecollection get list patch update watch]
csinodes storage.k8s.io/v1 false CSINode [create delete deletecollection get list patch update watch]
csistoragecapacities storage.k8s.io/v1beta1 true CSIStorageCapacity [create delete deletecollection get list patch update watch]
storageclasses sc storage.k8s.io/v1 false StorageClass [create delete deletecollection get list patch update watch]
volumeattachments storage.k8s.io/v1 false VolumeAttachment [create delete deletecollection get list patch update watch]
3. metadata
这个字段是资源对象的"标识",即元数据,也是我们从 Kubernetes 里找到这个对象的主要依据。包含名称、namespace、标签和注解等信息。metadata中常见的子字段有:
- name: 资源名称,在同一个namespace中必须是唯一的。
- namespace: 命名空间,是对一组资源和对象的抽象集合,对k8s从逻辑上进行划分,实现分层管理,有一定程度上的资源和权限隔离。内置namespace有default,kube-system和kube-public。默认值是default。
- label: 标签数据,可用于在spec中通过selectors进行匹配,达到绑定效果。
- annotation: 注解,一些自定义的辅助信息。
4. spec
spec是指资源内容的规格,即我们资源期望达到的状态,各个资源规格内容不太统一,比如pod的内容包括一些container,volume,nodeSelector等。Deployment的内容包括replicas、selector、template等。
比较全面的具体字段介绍可以参考spec字段常用字段及含义
更多推荐
所有评论(0)