kubernetes--資源清單


⒈資源含義

  k8s中所有的內容都被抽象為資源,資源實例化之后,叫做對象。

⒉資源分類

  名稱空間級別

  僅在此名稱空間下生效,k8s的系統組件是默認放在kube-system名稱空間下的,而kubectl get pod等價於kubectl get pod -n default,因此查看不到k8s的系統組件。
  1.工作負載型資源(workload):Pod【k8s最小組成部分,共享網絡棧共享存儲卷】、ReplicaSet【RS,調度器、控制器,通過標簽去控制pod的創建、副本數量】、Deployment【控制器,通過控制RS的創建去創建pod】、StatefulSet【為有狀態服務所建立的管理器】、DaemonSet【可以在每一個節點都運行一個pod的組件】、Job【工作、任務】、CronJob【輪詢工作、輪詢任務,為批處理而生的】(ReplicationController在v1.11版本被廢棄)
  2.服務發現及負載均衡型資源(ServiceDiscovery LoadBalance):Service【簡稱svc,服務,將服務暴露出去】、Ingress【將服務暴露出去】、...
  3.配置與存儲型資源:Volume(存儲卷)【給pod提供持久化的能力】、CSI(容器存儲接口,可以擴展各種各樣的第三方存儲卷)
  4.特殊類型的存儲卷:ConfigMap(當配置中心來使用的資源類型)【一般用來存儲配置文件達到熱更新的狀態】、Secret(保存敏感數據)【加密方案存儲數據,一般用來保存密碼文件、密鑰等等】、DownwardAPI(把外部環境中的信息輸出給容器)【類似於CSI,】


  集群級別
  不管在任何名稱空間下定義,在其他的名稱空間下都能看得到,在定義的時候無需指定名稱空間
  例如:Namespace【名稱空間】、Node【節點】、Role【角色】、ClusterRole、RoleBinding、ClusterRoleBinding


  元數據級別
  提供一個指標,不像是名稱空間類型又不像集群級別,本質上更像是在兩者之間,但是它有自己的特點,所以更應該作為一個單獨的分類,例如HPA【通過cpu的利用率進行平滑擴展】就是一個很明顯的元數據類型,通過指標進行操作。
  根據一些指標去進行對應的操作
  例如:HPA、PodTemplate【pod模板】、LimitRange【資源限制】

⒊資源清單

  k8s一般都是通過定義資源清單的方式去創建資源
  資源清單等價於劇本,寫好了每一步應該如何去做

  在k8s中,一般使用yaml格式的文件來創建符合我們預期期望的資源,這樣的yaml文件我們一般稱為資源清單

⒋資源清單常用的字段

  必須存在的屬性【創建資源清單的時候沒有這些屬性的存在它是不允許被執行的】

參數名稱 字段類型 說明
version String

這里是指的是K8SAPI的版本,目前基本上是v1,可以用kubectl

api-version命令查詢

kind String 這里指的是yam文件定義的資源類型和角色,比如:Pod
metadata Object 元數據對象,固定值就寫metadata
metadata.name String 元數據對象的名字,這里由我們編寫,比如命名Pod的名字
metadata.namespace String

元數據對象的命名空間,由我們自身定義,如果不定義的

話則默認是default名稱空間

Spec Object 詳細定義對象,固定值就寫Spec
spec.containers[] List 這里是Spec對象的容器列表定義,是個列表
spec.containers[].name String 這里定義容器的名字
spec.containers[].image String 這里定義要用到的鏡像名稱

   主要屬性【這些屬性比較重要,如果不指定的話系統會自動補充默認值】

參數名稱 字段類型 說明
spec.containers[].name String 這里定義容器的名字
spec.containers[].image String 這里定義要用到的鏡像名稱
spec.containers[].imagePullPolicy String

定義鏡像拉取策略,有Always、Never、

IfNotPresent三個值可選(1)Always:意思是

每次都嘗試重新拉取鏡像(2)Never:表示僅

使用本地鏡像(3)lfNotPresent:如果本地有

鏡像就使用本地鏡像,沒有就拉取在線鏡像。

上面三個值都沒設置的話,默認是Always。

spec.containers[].command[] List

指定容器啟動命令,因為是數組可以指定多

個,不指定則使用鏡像打包時使用的啟動命令。

spec.containers[].args[] List

指定容器啟動命令參數,因為是數組可以指定

多個。

spec.containers[].workingDir String 指定容器的工作目錄,進入容器時默認所在的目錄
spec.containers[].volumeMounts[] List 指定容器內部的存儲卷配置
spec.containers[].volumeMounts[].name String 指定可以被容器掛載的存儲卷的名稱
spec.containers[].volumeMounts[].mountPath String 指定可以被容器掛載的存儲卷的路徑
spec.containers[].volumeMounts[].readOnly String

設置存儲卷路經的讀寫模式,true或者false,

默認為讀寫模式

spec.containers[].ports[] List 指定容器需要用到的端口列表
spec.containers[].ports[].name String 指定端口名稱
spec.containers[].ports[].containerPort String 指定容器需要監聽的端口號
spec.containers[].ports[].hostPort String

指定容器所在主機需要監聽的端口號,默認跟

上面containerPort相同,注意設置了hostPort

同一台主機無法啟動該容器的相同副本

(因為主機的端口號不能相同,這樣會沖突)

spec.containers[].ports[].protocol String 指定端口協議,支持TCP和UDP,默認值為 TCP
spec.containers[].env[] List 指定容器運行前需設置的環境變量列表
spec.containers[].env[].name String 指定環境變量名稱
spec.containers[].env[].value String 指定環境變量值
spec.containers[].resources Object

指定資源限制和資源請求的值(這里開始就是

設置容器的資源上限)

spec.containers[].resources.limits Object 指定設置容器運行時資源的運行上限
spec.containers[].resources.limits.cpu String

指定CPU的限制,單位為core數,將用於

docker run --cpu-shares參數

這里前面文章 Pod資源限制有講過)

spec.containers[].resources.limits.memory String 指定MEM內存的限制,單位為MlB、GiB 
spec.containers[].resources.requests Object 指定容器啟動和調度時的限制設置
spec.containers[].resources.requests.cpu String CPU請求,單位為core數,容器啟動時初始化可用數量
spec.containers[].resources.requests.memory String 內存請求,單位為MIB、GiB,容器啟動的初始化可用數量

 

額外的參數項

參數名稱 字段類型 說明
spec.restartPolicy  String

定義Pod的重啟策略,可選值為Always、OnFailure,默認值為

Always。1.Always:Pod一旦終止運行,則無論容器是如何終

止的,kubelet服務都將重啟它。2.OnFailure:只有Pod以

非零退出碼終止時,kubelet才會重啟該容器。如果容器正常

結束(退出碼為0),則kubelet將不會重啟它。3.Never:

Pod終止后,kubelet將退出碼報告給Master,不會重啟該Pod。

spec.nodeSelector Object

定義Node的Label過濾標簽,以key:value格式指定,選擇node節點

去運行

spec.imagePullSecrets Object 定義pull鏡像時使用secret名稱,以name:secretkey格式指定
spec.hostNetwork Boolean

定義是否使用主機網絡模式,默認值為false。設置true表示使用

宿主機網絡,不使用docker網橋,同時設置了true將無法在同

一台宿主機上啟動第二個副本。

  查看資源有那些資源清單屬性,使用以下命令

kubectl explain pod

  查看屬性說明,使用以下命令

kubectl explain pod.apiVersion

 ⒌資源清單格式

apiVersion: group/apiversion #如果沒有給定group名稱,那么默認為core,可以使用kubectlapi-versions命令獲取當前k8s版本上所有的apiversion版本信息(每個版本可能不同)kind: #資源類別
metadata: #資源元數據
 name: 
 namespace: 
 lables: 
 annotations: #主要目的是方便用戶閱讀查找
spec: #期望的狀態(disired state)
status: #當前狀態,本字段由Kubernetes自身維護,用戶不能去定義

⒍資源清單的常用命令

  1.獲取apiVersion版本信息

kubectl api-versions

  2.獲取資源的apiVersion的版本信息(以pod為例),該命令同時輸出屬性設置幫助文檔

kubectl explain pod

  *字段配置格式 

apiVersion <string> #表示字符串類型 
metadata <Object> #表示需要嵌套多層字段 
1abels <map[string]string> #表示由k:v組成的映射 
finalizers <[]string> #表示字串列表 
ownerReferences <[]Object>#表示對象列表 
hostPID <boolean> #布爾類型 
priority <integer> #整型 
name <string> -required- #如果類型后面接-required-,表示為必填字段

⒎示例:通過定義清單文件創建Pod

apiVersion: v1 
kind: Pod 
metadata:
 name: pod-demo 
 namespace: default 
 1abels:
  app:myapp 
spec:
 containers:
 - name: myapp-1 
   image: hub.coreqi.cn/1ibrary/myapp:v1 
 - name: busybox-1 
   image: busybox:latest 
   command:
   - "/bin/sh"
   - "-c"
   - "sleep 3600"

  通過yaml文件創建pod

kubectl create -f xxx.yaml

  獲取資源的資源配置文件

#使用 -o 參數 加 yaml,可以將資源的配置以yaml的格式輸出出來,也可以使用json,輸出為json格式
kubectl get pod {podName} -o yaml

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM