天天看點

kubernetes 資源清單

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           

繼續閱讀