一 集群資源分類
k8s 中所有的內容都抽象為資源,資源實例化之后叫做對象。
1.名稱空間級別:僅在此名稱空間下生效。
① 工作負載型資源(workload):Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,CronJob( ReplicationController 在 v1.11 版本被廢棄 )
② 服務發現及負載均衡型資源(ServiceDiscovery LoadBalance ):Service,Ingress...
③ 配置與存儲型資源:Volume( 存儲卷 ),CSI(容器存儲接口,可以擴展各種各樣的第三方存儲卷)
④ 特殊類型的存儲卷:ConfigMap(當配置中來使用的資源那類型),Secret(保存敏感數據),DownwardAPI(把外部環境中的信息輸出給容器)
2.集群級別:不管在什么名稱空間下定義,在其他的名稱空間中都能看的到。
例如:Namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
3.元數據型
例如:HPA,PodTemplate,LimitRange
二 常用字段說明
1.必須存在的屬性
參數名 | 字段類型 | 說明 |
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.container[] | list | 這里是Spec對象的容器列表定義,是個列表 |
spec.container[].name | String | 這里定義容器的名字 |
spec.container[].image | String | 這里定義要用到的鏡像名稱 |
2.spec 主要對象
參數名 | 字段類型 | 說明 |
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[].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 參數 |
spec.containers[].resources.limits.memory | String | 指定 MEM 內存的限制,單位為 MIB,GIB |
spec.containers[].resources.requests | Object | 指定容器啟動和調度室的限制設置 |
spec.containers[].resources.requests.cpu | String | CPU請求,單位為 core 數,容器啟動時初始化可用數量 |
spec.containers[].resources.requests.memory | String | 內存請求,單位為 MIB,GIB 容器啟動的初始化可用數量 |
3.額外的參數項
參數名 | 字段類型 | 說明 |
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.imagePullSecrets | Object | 定義pull 鏡像是使用 secret 名稱,以 name:secretkey 格式指定 |
spec.hostNetwork | Boolean | 定義是否使用主機網絡模式,默認值為 false。設置 true 表示使用宿主機網絡,不使用 docker 網橋,同時設置了 true 將無法在同一台宿主機上啟動第二個副本。 |
以上是 pod 常用的一些資源清單 屬性信息,如果想查看更多,可以使用一下命令查看
#查看 pod 的模板屬性
kubectl explain pod
#查看 pod 的 spec 模板中的屬性
kubectl explain pod.spec
4.創建 Pod 的資源模板 實例
創建 pod yaml文件
vim pod.yaml
編寫yaml 文件內容
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp version: v1 spec: containers: - name: app image: hub.harbor.com/kubernetes-test/kubernetes-test:latest
測試啟動 Pod
kubectl apply -f pod.yaml #查看 pod 是否啟動成功 kubectl get pod