K8S 中所有的內存都抽象為資源,資源實例化之后稱為對象。
名稱空間級別
工作負載型資源(workload):Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Job, CronJob, ReplicationController(在 v1.11 版本廢棄)
服務發現及負載均衡型資源(ServiceDiscovery LoadBalance): Service, Ingress
配置與存儲型資源:Volume(存儲卷), CSI(容器存儲接口,可以擴展各種各樣的第三方存儲卷)
特殊類型的存儲卷:ConfigMap(當配置中心來使用的資源類型),Secret(保存敏感數據),DownwarAPI(把外部環境中的信息輸出給容器)
集群級資源:Namespace, Node, Role, ClusterRole, RoleBinding, ClusterRoleBinding
元數據型資源:HPA, PodTemplate, LimitRange
資源清單
在 K8S 中,一般使用 yaml 格式的文件來創建符合我們預期期望的 pod,這樣的 yaml 文件我們一般稱為資源清單。
常用字段的解釋
必須存在的屬性
參數名 | 字段類型 | 說明 |
---|---|---|
version | String | K8S API 的版本,目前基本是v1,可以用 kubectl api-version 命令查詢 |
kind | String | 這里指的是 yaml 文件定義的資源類型和角色, 比如: Pod |
metadata | Object | 元數據對象,固定值寫 metadata |
metadata.name | String | 元數據對象的名字,這里由我們編寫,比如命名Pod的名字 |
metadata.namespace | String | 元數據對象的命名空間,由我們自身定義 |
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)IfNOtPresent:如果本地有鏡像就使用本地鏡像,沒有就拉取在線鏡像。
默認值是Always。
spec.containers[].command[] (List): 指定容器啟動命令,因為是數組可以指定多個,不指定則使用鏡像打包時使用的啟動命令。
spec.containers[].largs[] (List): 指定容器啟動命令參數,因為是數組可以指定多個。
spec.containers[].worKingDir (String): 指定容器工作目錄
spec.containers[].volumeMounts[] (List): 指容器內部的存卷配置
spec.containers[].volumeMounts[].name (String): 指可以被容器掛載的存儲卷的名稱
spec.containers[].volumeMounts[].mountPatn (String): 指可以被容器掛載的存儲卷路徑
spec.containers[].volumeMounts[].readOnly (String): 設置存儲卷路徑的讀寫模式,ture或者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內存的限制,單位為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格式指定
spec.imagePuIlSecrets (Object): 定義pull鏡像時便用secret名稱,以name:secretkey格式指定
spec.hostNetwork (Boolean): 定義是否使用主機網絡模式,默認值為false。設置true表示使用宿主機網絡,不使用docker網橋,同時設置了
true將無法在同一台宿主機上啟動第二個副本。
參考文檔:
http://docs.kubernetes.org.cn/