Kubernetes資源清單
1、k8s中的資源
叢集資源分類:
- 名稱空間級别:隻在本名稱空間下生效;kube-system
- 叢集級别:role,在定義時未指定名稱空間
- 中繼資料型:HPA--通過名額進行操作
什麼是資源?
k8s中所有的内容都抽象為資源,資源執行個體化之後,叫做對象。
K8s中存在哪些資源
1.名稱空間級别
工作負載型資源(workload):
Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob(ReplicationController在v1.11版本被廢棄)
- Statefulset--有狀态服務建立的管理器
- DaemonSet--可以在每個節點運作一個pod的元件
- Job\Cronjob:批處理任務
服務發現及負載均衡型資源(ServiceDiscovery LoadBalance)
- Service、Ingress 将資源暴露出去
配置與存儲型資源:
- Volume--存儲卷
- CSI--容器存儲接口,可以擴充符合k8s規則的第三方存儲卷
特殊類型的存儲卷:
- ConfigMap--通過它存儲配置檔案,達到熱更新
- Secret--儲存密碼密鑰
- DownwardAPI--下載下傳檔案的接口,調用資料
2.叢集級資源:
NameSpace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
3.中繼資料型資源
通過名額進行操作
HPA、PodTemplate、LimitRange
2、資源清單
在k8s中,一般使用
yaml
格式的檔案來建立符合我們預期的pod,這樣的yaml檔案我們一般稱為資源清單。
YAML文法
yaml是一個可讀性高,用來表達資料序列的格式;yaml的意思其實是:仍是一種标記語言,但為了強調這種語言以資料為中心,而不是以标記語言為重點。
基本文法:
- 縮進時不允許使用Tab鍵,隻允許使用空格
- 縮進的空格數量不重要,隻要相同層級左側對齊即可
- \# 辨別注釋,從這個字元一直到行尾,都會被解釋器忽略
支援的資料結構:
- 對象:鍵值對的集合,又稱映射(mapping)/哈希(hashes)/字典(dictionary)
- 數組:一組按次序排列的值,又稱為序列(sequence)/清單(list)
- 純量(scalars):單個的、不可再分的值
對象類型:對象的一組鍵值對,使用冒号結構表示
name: Steve
age: 18
# 鍵:<空格> 值
# yaml也允許另一種寫法,将所有鍵值對寫成一個行内對象
hash: { name: Steve, age: 18 }
數組類型:一組連詞線開頭的行,構成一個數組
animal:
- Cat
- Dog
# 數組也可以采用行内表示法,使用大括号
animal: [Cat, Dog]
複合結構:對象和數組可以結合使用,形成複合結構
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
純量:純量是最基本的、不可再分的值
# 字元串、布爾值、整數、浮點數、NULL
# 時間、日期
# 數值直接以字面量的形式表示
number: 12.30
# 布爾值用true和false表示
isSet: true
# null用“~”表示
parent: ~
# 時間采用 ISO8601 格式
iso8601: 2001-12-14t21:59:43.10-05:00
# 日期采用符合 ISO8601 格式的年、月、日表示
date: 1976-07-31
# YAML允許使用兩個感歎号,強制轉換資料類型
e: !!str 123
f: !!str true
字元串
字元串預設不使用雙引号表示
str: 這是一個字元串
如果字元串之中包含空格或特殊字元,需要放在引号之中
str: '内容: 字元串'
單引号和雙引号都可以使用;但雙引号不會對特殊字元轉義
s1: '内容\n字元串'
s2: "内容\n字元串"
單引号之中如果還有單引号,必須連續使用兩個單引号轉義
str: 'labor''s day'
# 輸出結果為labor's day(勞動的一天)
# 類似于轉義符\'s
字元串可以寫成多行,但從第二行開始,必須有一個單空格縮進;換行符會被轉為空格
str: 這是一段
多行
字元串
多行字元串可以使用|保留換行符,也可以使用>折疊換行
this: |
Foo
Bar
that: >
Foo
Bar
+ 号表示保留文字塊末尾的換行,- 号表示删除字元串末尾的換行
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
3、
常用字段解釋說明
必須存在的屬性
參數名 | 字段類型 | 說明 |
---|---|---|
version | String | 這裡指的是K8s API的版本,目前基本上是v1,可以用kubectl api-version指令查詢 |
kind | 這裡指的是yaml檔案定義的資源類型和角色,比如:pod | |
metadata | Object | 中繼資料對象,固定值就寫 metadata |
metadata.name | 中繼資料對象的名字,這裡由我們編寫,比如指令Pod的名字 | |
metadata.namespace | 中繼資料對象的命名空間,由我們自身定義 | |
spec | 詳細定義對象,固定值就寫 Spec | |
spec.containers[] | list | 這裡是Spec對象的容器清單定義,是個清單 |
spec.containers[].name | 這裡定義容器的名字 | |
spec.containers[].image | 這裡定義要用到的鏡像名稱 |
主要對象:
定義容器的名字 | ||
定義要用到的鏡像名稱 | ||
spec.containers[].imagePullRolicy | 定義鏡像拉取政策,有Always、Never、IfNotPresent三個選項; Always:每次都嘗試重新拉取鏡像,預設Always Never:僅使用本地鏡像 IfNotPresent:如果本地有鏡像就使用本地就像,如果沒有就拉取線上鏡像; | |
spec.containers[].command[] | List | 指定容器啟動指令,因為是數組可以指定多個,不指定則使用鏡像打包時使用的啟動指令。 |
spec.containers[].args[] | 指定容器啟動指令參數,因為是數組可以指定多個。 | |
spec.containers[].workingDir | 指定容器的工作目錄。 | |
spec.containers[].volumeMounts[] | 指定容器内部的存儲卷配置 | |
spec.containers[].volumeMounts[].name | 指定可以被容器挂載的存儲卷的名稱 | |
spec.containers[].volumeMounts[].mountPath | 指定可以被容器挂載的存儲卷的路徑 | |
spec.containers[].volumeMounts[].readOnly | 設定存儲卷路徑的讀寫模式,true或者false,預設為讀寫模式 | |
spec.containers[].ports[] | 指定容器需要用到的端口清單 | |
spec.containers[].ports[].name | 指定端口名稱 | |
spec.containers[].containerPort | 指定容器需要監聽的端口号 | |
spec.containers[].ports[].hostPort | 指定容器所在主機需要監聽的端口号,預設跟上面containerPort相同;注意設定了hostPort同一台主機無法啟動該容器的相同副本(因為主機的端口号不能相同,這樣會沖突) | |
spec.containers[].ports[].protocol | 指定端口協定,支援TCP和UDP,預設為TCP | |
spec.containers[].env[] | 指定容器運作前需設定的環境變量清單 | |
額外的參數項
spec.restartPolicy | 定義Pod的重新開機政策,可選值為Always、OnFailure,預設值為Always; 1.Always:pod一旦終止運作,則無論容器是如何終止的,kubelet服務都将重新開機它。 2.OnFailure:隻有pod以非零退出碼終止時,kubelet才會重新開機該容器;如果容器正常退出(退出碼為0),則kubelet将不會重新開機它; 3.Never:pod終止後,kubelet将退出碼報告給master,不會重新開機pod。 | |
spec.nodeSelector | 定義Node的Label過濾标簽,以key: value格式指定 | |
spec.imagePullSecrets | 定義pull鏡像時使用sercet名稱,以name: secretkey格式指定 | |
spec.hostNetwork | Boolean | 定義是否使用主機網絡模式,預設值false;設定true表示使用主控端網絡,不使用docker網橋,同時設定了true将無法再同一台主控端上啟動第二個副本。 |
3、通過資源清單編寫 Pod
檢視運作的pod
kubectl get pods
檢視pod詳細資訊
kubectl describe pod <podName>
檢視容器日志
kubectl logs <podName> -c <指定容器名>
第一個ymal檔案
apiVersion: v1 # k8s API 版本
kind: Pod # 資源角色:pod
metadata: # 中繼資料對象
name: myapp-pod # 對象名
namespace: # 命名空間
labels: # 标簽
app: myapp
version: v1
spec: # 詳細定義對象
containers: # 容器清單
- name: app # 容器名
image: docker.io/nginx # 鏡像名
建立pod
kubectl create -f myapp.yaml