iT邦幫忙

2024 iThome 鐵人賽

DAY 9
1
Kubernetes

Kubernetes圖解筆記系列 第 9

Day-9 Kubernetes 的設定檔:yaml

  • 分享至 

  • xImage
  •  

需要記得的東西出現了... (´・ω・`)


在進入部署以前,要先認識 Kubernetes 設定檔的格式。
Kubernetes 的設定只支援 yamljsonjson 用於 API 傳遞,yaml 則是用在設定和配置。

有件事很重要:

yaml 區分大小寫

基本架構很單純,絕大多數配置都是以這個模板去延伸,先記得就對了!

apiVersion:
kind:
metadata:

spec:
  • apiVersion:使用的 kubernetes api 版本,需依照想建立的元件調整
  • kind:要建立的資源
  • metadata:元件相關數據,如 name, label 等
    • dictionary 格式,同級屬性排版需一致,
    • 有固定欄位,不允許自行定義屬性。
      可參考官方文件:ObjectMeta
  • spec:細節配置
    • 使用 dictionary 格式

以 pod 設定檔為例:

apiVersion: v1 
kind: Pod 
metadata:
  name: <pod名稱> 
  labels:
    app: myapp 
spec:
  conatiners:
  - name: <container名稱>
    image: <要部署的image>
  - name: <container名稱>
    image: <要部署的image>
  • 固定格式:
    • 每個級距以兩個空白( )區分
    • 當參數可以設定為多組的時候,使用-符號為項目分界
  • labels:標籤,k8s 中最常用來識別的資訊,真心建議不要隨便取。

有興趣可以往下看看 apiVersion,或是有需要再 Google 就好


如果怕忘了元件對應的 apiVersion,可以用這個指令確認

kubectl api-resources

(紅色標示為較常使用的基礎元件)

KIND SHORTNAMES APIVERSION NAMESPACED
Binding v1 true
ComponentStatus cs v1 false
ConfigMap cm v1 true
Endpoints ep v1 true
Event ev v1 true
LimitRange limits v1 true
Namespace ns v1 false
Node no v1 false
PersistentVolumeClaim pvc v1 true
PersistentVolume pv v1 false
Pod po v1 true
PodTemplate v1 true
ReplicationController rc v1 true
ResourceQuota quota v1 true
Secret v1 true
ServiceAccount sa v1 true
Service svc v1 true
MutatingWebhookConfiguration admissionregistration.k8s.io/v1 false
ValidatingAdmissionPolicy admissionregistration.k8s.io/v1 false
ValidatingAdmissionPolicyBinding admissionregistration.k8s.io/v1 false
ValidatingWebhookConfiguration admissionregistration.k8s.io/v1 false
CustomResourceDefinition crd,crds apiextensions.k8s.io/v1 false
APIService apiregistration.k8s.io/v1 false
ControllerRevision apps/v1 true
DaemonSet ds apps/v1 true
Deployment deploy apps/v1 true
ReplicaSet rs apps/v1 true
StatefulSet sts apps/v1 true
SelfSubjectReview authentication.k8s.io/v1 false
TokenReview authentication.k8s.io/v1 false
LocalSubjectAccessReview authorization.k8s.io/v1 true
SelfSubjectAccessReview authorization.k8s.io/v1 false
SelfSubjectRulesReview authorization.k8s.io/v1 false
SubjectAccessReview authorization.k8s.io/v1 false
HorizontalPodAutoscaler hpa autoscaling/v2 true
CronJob cj batch/v1 true
Job batch/v1 true
CertificateSigningRequest csr certificates.k8s.io/v1 false
Lease coordination.k8s.io/v1 true
EndpointSlice discovery.k8s.io/v1 true
Event ev events.k8s.io/v1 true
FlowSchema flowcontrol.apiserver.k8s.io/v1 false
PriorityLevelConfiguration flowcontrol.apiserver.k8s.io/v1 false
IngressClass networking.k8s.io/v1 false
Ingress ing networking.k8s.io/v1 true
NetworkPolicy netpol networking.k8s.io/v1 true
RuntimeClass node.k8s.io/v1 false
PodDisruptionBudget pdb policy/v1 true
ClusterRoleBinding rbac.authorization.k8s.io/v1 false
ClusterRole rbac.authorization.k8s.io/v1 false
RoleBinding rbac.authorization.k8s.io/v1 true
Role rbac.authorization.k8s.io/v1 true
PriorityClass pc scheduling.k8s.io/v1 false
CSIDriver storage.k8s.io/v1 false
CSINode storage.k8s.io/v1 false
CSIStorageCapacity storage.k8s.io/v1 true
StorageClass sc storage.k8s.io/v1 false
VolumeAttachment storage.k8s.io/v1 false

從上表不難發現,apiVersion有不同格式,雖然格式有些複雜,但其實有其規則可循:

  • 核心組(Core Group)
    格式:v1
    apiVersion: v1
    用於:Pod、Service、ConfigMap 等核心資源
  • 命名組Named Group
    格式:<group>/<version>
    apiVersion: apps/v1
    用於:Deployment、ReplicaSet、StatefulSet 等
  • 自定義資源定義CRD
    使用者可用將自行定義的新資源類型引入 Kubernetes,並與原生資源相同的方式進行管理。
    格式:<domain>/<version>
    apiVersion: example.com/v1

常用的 apiVersion

apiVersion Resources
v1 Pod, Service, ConfigMap, Secret
apps/v1 Deployment, ReplicaSet, StatefulSet, DaemonSet
batch/v1 Job, CronJob
networking.k8s.io/v1 Ingress, NetworkPolicy
storage.k8s.io/v1 StorageClass, VolumeAttachment

不同的 apiVersion 可能會改變資源的定義方式,新版本可能引入新功能,也可能棄用舊功能,通常 v1 表示穩定版本,beta(如 v1beta1)為預計發佈版,alpha 則為測試版,可能在未來更新時出現變化,使用時須特別留意。

欸!為什麼 Event 有兩個版本?

是新舊版本的差異,events.k8s.io/v1 是比較新的版本(也是社群比較建議使用的)。
雖說舊版 v1 並未停用,從最新版 v1.31和前一版 v1.30(stable)的 API 文件都還可以確認仍有支援,但若直接從官方文件搜尋:Event,就只會看到 events.k8s.io/v1 的版本,什麼意思應該不言而喻了吧... (・_・;

相關的討論可以參考:core v1 Event API needs improvement?

我不會告訴你查這些文件花了多久時間,五告拍揣。

小結

在學習 Kubernetes 的過程中,掌握用於定義和配置的 yaml 格式是無可避免的,雖說細部配置複雜,但先記住主要格式再慢慢擴充設定,一定能逐漸熟練的!


上一篇
Day-8 Worker Node
下一篇
Day-10 Depoly Pod
系列文
Kubernetes圖解筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言