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,同时<>表示为必填参数,[]表示为可选参数。