K8S学习笔记-01(yaml文件编写)

原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com

说明

记录k8s中yaml文件编写相关内容。

k8s官网文档库:https://kubernetes.io/docs/home/
kubelet 命令参考:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

一、书写格式

k8s中yaml文件结尾需以.yml或.yaml结尾。文件放置位置不做限定。

yaml文件中每行都严格遵守层级,同层级资源缩进相同,每个层级间推荐使用两个空格进行缩进,不能使用tab键进行缩进。

yaml文件键值直接使用冒号作为分割线,冒号过后有且只有一个空格。

yaml文件采用驼峰的形式进行书写,冒号左边的第一个单词小写第二个单词开始首字母大写,冒号右边每个单词首字母大写。参考标红字体部分明显可以区分。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod3
  name: pod3
spec:
  containers:
  - image: busybox
    imagePullPolicy: IfNotPresent
    name: pod3
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

二、apiVersion版本与资源组

yaml文件首行为apiVersion及标注该yaml文件使用的版本。不同资源版本中资源使用方式和配置参数存在一定的差异。

apiVersion格式为:{Group}/{Version},Group代表Kubernetes API资源组的名称,Version代表该组的API版本号。

使用 kubectl  api-versions 命令可以查看当前集群支撑的apiVersion信息。

不同apiVerson资源组中包含的kind资源不一样。确定了要使用的kind过后需要明确知道哪个一个apiVersion中包含该kind资源,在yaml中的apiVersion行键入对应的资源组及版本信息。

 k8s apiversion分为四个类别:稳定版(Stable)、Beta版(Beta)、Alpha版(Alpha)和Deprecated版(Deprecated)。

  • Stable稳定版通常只有在主版本发布时才会更新,是被支持且兼容的版本。
  • Beta版可能包含一些已经被定义好但还未成为稳定版的功能,因此可能会在后续版本中被修改或删除。
  • Alpha版是一种开发中的版本类型,API架构和功能都还在开发和完善过程中,通常不建议在生产系统中使用。
  • Deprecated版是已经被废弃的版本,中止了维护和支持。

常见的均可在https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/中查看

仅展示部分apiVersion中的资源组及版本对应的kind资源。

2.1 工作负载资源组:

  • v1:Pod、PodTemplate、ReplicationController、
  • apps/v1:ReplicaSet、Deployment、StatefulSet、ControllerRevision、DaemonSet
  • batch/v1:Job、CronJob
  • autoscaling/v1:HorizontalPodAutoscaler
  • autoscaling/v2:HorizontalPodAutoscaler
  • scheduling.k8s.io/v1:PriorityClass
  • resource.k8s.io/v1alpha2:PodSchedulingContext、ResourceClaim、ResourceClaimTemplate、ResourceClass

2.2 Service资源组:

  • v1:Service、Endpoints 
  • discovery.k8s.io/v1:EndpointSlice
  • networking.k8s.io/v1:Ingress、IngressClass

2.3 配置和存储资源组:

  • v1:ConfigMap、Secret、Volume、PersistentVolumeClaim、PersistentVolume
  • storage.k8s.io/v1:StorageClass、VolumeAttachment、CSIDriver、CSINode、CSIStorageCapacity

2.4 身份认证资源组:

  • v1:ServiceAccount、
  • authentication.k8s.io/v1:TokenRequest、TokenReview
  • certificates.k8s.io/v1:CertificateSigningRequest
  • certificates.k8s.io/v1alpha1:ClusterTrustBundle

2.5 策略资源组:

  • v1:LimitRange、ResourceQuota
  • networking.k8s.io/v1:NetworkPolicy
  • policy/v1:PodDisruptionBudget
  • networking.k8s.io/v1alpha1:IPAddress

2.6 集群资源组:

  • v1:Node、Namespace、Binding、ComponentStatus
  • events.k8s.io/v1:Event
  • apiregistration.k8s.io/v1:APIService
  • coordination.k8s.io/v1:Lease
  • node.k8s.io/v1:RuntimeClass
  • flowcontrol.apiserver.k8s.io/v1beta3: FlowSchema、PriorityLevelConfiguration
  • networking.k8s.io/v1alpha1:ClusterCIDR

三、标准模板获取 

k8s环境中为了方便管理员快速的完成资源yaml文件编写,尽快的上线应用。可以有三种方式获取到某一个kind资源的编写模板。

3.1 官网文档中获取

网址:https://kubernetes.io/zh-cn/docs/home/

在官方文档中找到对应的kind中复制出标准的yaml配置文件模板。

3.2 命令生成

参考kubectl工作使用说明:https://kubernetes.io/zh-cn/docs/reference/kubectl/kubectl/

导出一个POD的标准模板,其中--dry-run表示不创建,只是进行语句检查调试,client表示基本的格式、server表示完整的格式,一般情况下采用client生成的文件进行二次编写。

# kubectl run pod01 --image=busybox --image-pull-policy=IfNotPresent --dry-run=client -o yaml  > pod01_c.yaml
# kubectl run pod01 --image=busybox --image-pull-policy=IfNotPresent --dry-run=server -o yaml  > pod01_s.yaml

Always:总是去网上拉取镜像
Never:不使用网上的镜像
IfNotPresent:优先使用本地镜像
--dry-run=server/client表示只模拟创建,用作检查语法是否错误。client输出比较简洁的文本,server表示输出比较详细的文本。

3.3 现有资源生成

利用现在已经存在的同kind类型资源导出模板

# kubectl get ds/calico-node -n kube-system -o yaml  > ds01.yaml

四、资源创建帮助

在明确了apiVersion和kind,同时有了模板文件过后就可以进行yaml文件的编写了。但对于新手来说或者一些不常用的kind,往往没法记住其使用方法,则可使用命令查看对应apiVersion下kind的配置帮助文件。

查看pod的配置参数。

# kubectl explain  --api-version=v1 pod

如果查看的资源还有下级配置则在可接着查看

# kubectl explain  --api-version=v1 pod.metadata

其中资源配置中有三种类型:string、Object、integer,同时<>表示为必填参数,[]表示为可选参数。

 

posted @ 2023-08-02 22:45  飞翔的小胖猪  阅读(330)  评论(0编辑  收藏  举报