k8命令,pod的启动流程与资源文件书写,k8s集群调度
目錄
一.常用命令及kubect介紹
1.kubect介紹
1)語法格式:
2)命名空間的概述
3)查看命名空間
4)查看命名空間中的資源對象
2.查用排錯命令
1)查詢資源文件
2)查看資源詳細信息(經常用于排錯)
3)查看容器的日志信息
3.kubectl 命令與示例
二.kubectl容器管理
1.Pod與控制器
1)Deployment 資源控制器
2)POD是什么
2.POD的概述
1)POD的啟動過程
2)POD生命周期
3.POD的啟動狀態
4.POD特點
5.容器管理命令
1)進入一個正在運行的容器
6.其他資源控制器
三.資源文件的概述
1.資源對象文件的概述
2.YAMl語法概述
3.資源文件的管理命令
4.POD的資源文件書寫格式概述
??5.deploy資源控制器文件的書寫
6.標簽和選擇器的書寫格式
三.集群的管理
1.集群擴容
2.集群更新與回滾
1)查看控制器規則
2)deployment.spec.strategy支持兩種策略
3.集群調度
3)高級調度策略
一.常用命令及kubect介紹
1.kubect介紹
--Kubectl是用于控制Kubernetes集群的命令行工具
1)語法格式:
~]# kubectl [command] [TYPE] [NAME] [flagsJ command: # 子命令,如create, get, describe, delete type: ? ?# 資源類型,可以表示為單數,復數或縮寫形式 name: ? ?# 資源的名稱,如果省略,則顯示所有資源信息 flags: ? # 指定可選標志,或附加的參數 ? # 查看所有類型 ~]# kubectl api-resources ? ## 示例 # 查詢節點狀態 ~]# kubectl get node # 查詢主機信息 ~]# kubectl get node node1 -o wide # -o參數幫助 ~]# kubectl get node node1 -o wide --help .... [(-o|--output=)json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file|custom-columns|custom-columns-file|wide] ..... # -o 指定以yaml格式顯示出來 ~]# kubectl get node node1 -o yaml # 查詢deployment資源名稱 ~]# kubectl get deployment # 查詢pod容器資源(默認命名空間default) ~]# kubectl get pods # 指定查看pods的名稱空間 ~]# kubectl get pods -n kube-system2)命名空間的概述
k8s命名空間為對象名稱提供了一個作用域,我們可以把資源放到不同的命名空間中,這樣我們可以使用同名的資源名稱,只要保證同一命名空間中的資源名稱唯一即可
系統命名空間
--default默認的命名空間,不聲明命名空間的POD都在這里
--kube-node-lease為高可用提供心跳監視的命名空間
--kube-public公共數據,所有用戶都可以讀取它
--kube-system 系統服務對象所使用的命名空間
3)查看命名空間
~]# kubectl get namespace4)查看命名空間中的資源對象
~]# kubectl -n kube-system get pod2.查用排錯命令
1)查詢資源文件
# 格式 ~]# kubectl get [資源類型] [資源名稱] ? ## 示例 # 查看所有pod容器 ~]# kubectl get pods -A # 查看指定容器名稱空間內的所有容器 ~]# kubectl get pods -n kube-system NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? ? AGE coredns-557689b88f-g9pwl ? ? ? ? 1/1 ? ? Running ? 1 (5h1m ago) ? 2d22h coredns-557689b88f-rj84r ? ? ? ? 1/1 ? ? Running ? 1 (5h1m ago) ? 2d22h ....... # 查看指定容器名稱空間內的指定容器 ~]# kubectl get pods -n kube-system coredns-557689b88f-g9pwl # 查看指定容器名稱空間內的指定容器信息 ~]# kubectl get pods -n kube-system coredns-557689b88f-g9pwl -o wide # 查看指定容器名稱空間內的指定容器詳細信息以yaml格式顯示 ~]# kubectl get pods -n kube-system coredns-557689b88f-g9pwl -o yaml # 查看節點信息并顯示詳細信息以yaml格式顯示 ~]# kubectl get nodes -o yaml2)查看資源詳細信息(經常用于排錯)
# 格式 ~]# kubectl describe [資源類型] [資源名稱] ? # 示例 ~]# kubectl describe pods -n kube-system kube-flannel-ds-jxwf53)查看容器的日志信息
-查看console終端的輸出信息
-為空是正常現象,表示沒有日志輸出
# 格式 ~]# kubectl logs [名稱空間] [容器名稱] ? # 示例 ~]# kubectl logs -n kube-system kube-flannel-ds-jxwf5排錯流程,一般先get查看,然后再describe,最后再logs查看
3.kubectl 命令與示例
| kubectl run 資源名稱 -參數 --image=鏡像名稱:標簽 | 創建資源對象,常用參數-i交互,-t終端 |
| kubectl get 查詢資源 可選參數 -o wide 顯示主機信息 | 常用查詢的資源 node|deployment|pod |
| kubectl exec -it 容器id 執行的命令 | 同 docker exec 指令,進入容器內 |
| kubectl describe 資源類型 資源名稱 | 查詢資源的詳細信息 |
| kubectl attach | 同 docker attach 指令,連接容器 |
| kubectl logs 容器id | 查看容器控制臺的標準輸出 |
| kubectl delete 資源類型 資源名稱 | 刪除指定的資源 |
| kubectl create|apply -f 資源文件 | 執行指定的資源文件 |
命令示例
# 執行指定的資源文件 ~]# kubectl apply -f kube-flannel.yml # 刪除指定資源文件(當flannel注冊失敗容器報pending時,可以用這種方法重啟) ~]# kubectl delete -f kube-flannel.yml # 查看 ~]# kubectl get pods -A NAMESPACE ? ? NAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? AGE default ? ? ? testos ? ? ? ? ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 2 (31m ago) ? 125m kube-system ? coredns-557689b88f-g9pwl ? ? ? ? 1/1 ? ? Running ? 1 (8h ago) ? 3d1h kube-system ? coredns-557689b88f-rj84r ? ? ? ? 1/1 ? ? Running ? 1 (8h ago) ? 3d1h kube-system ? etcd-master ? ? ? ? ? ? ? ? ? ? ?1/1 ? ? Running ? 3 (8h ago) ? 3d1h kube-system ? kube-apiserver-master ? ? ? ? ? ?1/1 ? ? Running ? 3 (8h ago) ? 3d1h kube-system ? kube-controller-manager-master ? 1/1 ? ? Running ? 3 (8h ago) ? 3d1h kube-system ? kube-proxy-flzrz ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 2 (8h ago) ? 3d1h kube-system ? kube-proxy-sv5n8 ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 7h42m kube-system ? kube-proxy-tkctb ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 30h kube-system ? kube-scheduler-master ? ? ? ? ? ?1/1 ? ? Running ? 4 (8h ago) ? 3d1h ? ## get 查詢信息 # 查看節點 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready master 19h v1.17.6 node-0001 Ready <none> 16h v1.17.6 ? # 查看pod容器 ~]# kubectl get pod No resources found in default namespace. # 注:這里是因為get pod不寫指定名稱空間,默認找default ? # 查看所有名稱空間 ~]# kubectl get namespaces NAME ? ? ? ? ? ? STATUS ? AGE default ? ? ? ? ? Active ? 9h kube-node-lease ? Active ? 9h kube-public ? ? ? Active ? 9h kube-system ? ? ? Active ? 9h ? # 指定名稱空間查看pod容器 ~]# kubectl -n kube-system get pod NAME READY STATUS RESTARTS AGE kube-flannel-ds-amd64-hf2jp 1/1 Running 0 41m kube-flannel-ds-amd64-rtl4l 1/1 Running 0 41m ... ... ? # describe 查詢詳細信息 ~]# kubectl -n kube-system describe pod kube-flannel-ds-amd64-rtl4l Name: kube-proxy-4tbp6 Namespace: kube-system ... ... Events: ...... # 注:錯誤信息主要找Events ? # 使用run啟動容器 ~]# kubectl run testos -it --image=192.168.1.100:5000/myos:v1804 # 注釋: 命令 子命令 自己起的名字 交互式終端 指定鏡像=鏡像倉庫地址/鏡像名 If you don't see a command prompt, try pressing enter /]# exit ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE testos ? 1/1 ? ? Running ? 1 (5s ago) ? 3m28s ? # 啟動服務 ~]# kubectl run web-test --image=192.168.1.100:5000/myos:httpd ? kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead. deployment.apps/web-test created ? # 訪問節點 ~]# kubectl get pod -o wide #詳細信息 NAME READY STATUS RESTARTS AGE IP testos-79778b4895-s8mxl 1/1 Running 1 6m33s 10.244.3.2 ... ... testweb--7bf98b9576-v566c 1/1 Running 0 4m24s 10.244.4.2 ... ... ? ~]# curl http://10.244.4.2/info.php <pre> Array ( [REMOTE_ADDR] => 10.244.0.0 [REQUEST_METHOD] => GET [HTTP_USER_AGENT] => curl/7.29.0 [REQUEST_URI] => /info.php ) php_host: web-test-7bf98b9576-v566c 1229 ? # 進入容器 ~]# kubectl exec -it testos-79778b4895-s8mxl -- /bin/bash /]# ~]# kubectl attach -it testos-79778b4895-s8mxl /]# ? # 查看終端日志 ~]# kubectl logs web-test-7bf98b9576-v566c AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.244.4.2. Set the 'ServerName' directive globally to suppress this message ? # 刪除資源控制器,直接刪除POD會自動重建 ~]# kubectl delete pod testos-79778b4895-s8mxl pod "testos-79778b4895-s8mxl" deleted ? ~]# kubectl delete deployments testos deployment.apps "testos" deleted二.kubectl容器管理
1.Pod與控制器
1)Deployment 資源控制器
Deployment 為 RS 提供滾動更新
????????-ReplicaSet資源控制器(RS)
????????-ReplicaSet 創建管理POD
????????-ReplicaSet可以擴容和縮容
????????-POD最小的管理單元
????????-POD負責啟動和運行容器
控制器架構示例圖
# 查看一級控制器 ~]# kubectl get deployments.apps NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? ? AGE testos ? 1/1 ? ? Running ? 1 (6m57s ago) ? 10m ? # 查看二級控制器 ~]# kubectl get replicasets.apps NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? ? AGE testos-79778b4895 ? 1/1 ? ? Running ? 1 (6m57s ago) ? 10m ? # 查看三級控制器 ~]# kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? ? AGE testos-79778b4895-s8mxl ? 1/1 ? ? Running ? 1 (6m57s ago) ? 10m ?# 注:二級,三級等一下控制器都是自動生成的,而一級控制器是自己創建的(必須手定義)
2)POD是什么?
-
POD是Kubernetes中最小的管理元素
-
一個pod 可以理解為多個linux命名空間的聯合
同一個Pod共享進程(PID)
同一個Pod共享網絡IP及權限(NETWORK)
同一個Pod共享IPC通信信號(IPC)
同一個Pod共享主機名(UTS)
-
包涵1個或多個容器 例如:共享網絡、共享存儲等
理解POD對掌握kubernetes非常重要
Pod支持橫向擴展和復制
2.POD的概述
1)POD的啟動過程
用戶創建pod--->>(kubectl )聯系API server--->>(kubectl 的命令)記錄在etcd數據庫中--->>然后(api server)再去找Scheduler調度器,Scheduler再調用內部的算法去找適合運行容器的節點--->>(Scheduler)把結果返回aip server-->>api server再把結果記錄到etcd數據庫中,由于master默認不運行服務,所以api serve 回直接找node節點也就是(kubelete計算節點)--->> (kubelete)找docker創建容器--(docker)把容器狀態返回kubelete--->>(kubelet)再把容器狀態返回給api server--->>( api server)再把結果記錄再etcd數據庫中
注:此時數據庫中記錄了類似與(c1 node running),所以此時使用kubectl就能調用這些信息
Scheduler分配容器
第一步篩選
比如此時要運行一個容器需要(500m的內存,端口80),此時 Scheduler就會去找節點凡是內存沒有500m的排除,端口80被占用的排除,
第二步優選
如果此時有多個節點符合篩選條件,則根據內部算法(打分機制)選擇
2)POD生命周期
Pod對象自從其創建開始至其終止退出的時間范圍稱為其生命周期。在這段時間中,Pod會處于 多種不同的狀態,并執行一些操作;其中,創建主容器(main container)為必需的操作,其他可選的操作還包括運行于初始化容器(init container)、容器啟動后鉤子 (postart hook)、容器的存活性探測(liveness probe) 就緒性探測 (readiness probe)以及容器終止前鉤子 (pre stop hook) 等,這些操作是否執行則取決于Pod 的定義
pod的啟動--->>初始化容器(init container)(默認沒有條件,可以填加初始話條件)--->>隨著容器啟動的小程序,也叫啟動前腳本(post start hook)(小程序可以執行一些特別的操作,比如指定容器為誰的從服務器,默認也是空的)--->> 容器關閉前腳本(pre stop hook)(默認也是空的)(比如刪除容器時發現容器在啟動之后產生了5個G的硬盤空間,此時想要刪除,這時候就可以設置結束前執行腳本了)
此時pod還有兩個探測器
- 生存探測(liveness probe)
????????如果容器失敗了,就會重啟
- 就緒性探測 (readiness probe)
????????如果失敗不會重啟容器,只會改為NoReady,沒有就緒狀態,這個時候就以排錯了(默認為空)
## 生存探測器示例 ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE testos ? 1/1 ? ? Running ? 1 (13m ago) ? 17m ~]# kubectl attach pods -n default -it testos If you don't see a command prompt, try pressing enter. # 在容器內查看進程 /]# echo $$ 1 # 因為attach進入容器用的父進程,而容器的父進程是上帝進程,且容器退出的方式是殺掉父進程,也就是會干掉容器 /]# exit ? # 就緒探測器發現容器沒有啟動就會直接顯示該狀態 ~]# kubectl get pods NAME ? ? READY ? STATUS ? ? RESTARTS ? ? AGE testos ? 0/1 ? ? Completed ? 1 (90m ago) ? 93m ? # 此時生存探測器發現容器被干掉了,就會重新生成容器 ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE testos ? 1/1 ? ? Running ? 2 (4s ago) ? 93m3.POD的啟動狀態
Pod phase(相位狀態)
--Pod的status字段是一個PodStatus的對象,Pod對象總是應 該處于其生命進程中以下幾個相位(phase)之-。
--Pending 容器創建過程中,但它尚未被調度完成(api server找Scheduler之前的狀態就是Pending,如果是這種狀態,則說明節點不服和調度)
--Running 所有容器都已經被kubelet創建完成(Scheduler到docker之間的狀態)
--Succeeded 所有容器都已經成功終止了并不會被重啟
--Failed Pod中的所有容器中至少有一個容器退出是非O狀態
--Unknown 無法正常獲取到Pod對象的狀態信息
4.POD特點
--Pod的生命周期是短暫的,用后即焚的實體。 注意:重啟Pod中的容器跟重啟Pod不是一回事。Pod只提供容器的運行環境并保持容器的運行狀態,重啟容器不會造成Pod重啟。(在k8s中沒有停止的概念,只有創建與刪除。create,delete)
--Pod不會自愈。如果Pod運行的Node故障,或者是調度器本身故障,這個Pod就會被刪除。(但是如果有控制器就不不一樣)
--控制器(Deployment/RC/RS)可以自動創建和管理多個Pod, 提供副本管理、滾動升級和集群級別的自愈能力。
5.容器管理命令
1)進入一個正在運行的容器
語法格式:
~]# kubectl exec -it 容器id --執行的命令 # 這樣運行的退出后不會重啟2)刪除資源
語法格式:
~]# kubectl delete 資源類型 資源名稱 # 刪除容器 ~]# kubectl delete pods -n default testos-79778b4895-s8mxl pod "testos-79778b4895-s8mxl" deleted # 查看pod容器,發現還是會創建出來 ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE testos-79778b4895-43er4 ? 1/1 ? ? Running ? 2 (88m ago) ? 92m ? # 此時就要刪除該pod容器的控制器 ~]# kubectl get deployments.apps NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE testos ? 1/1 ? ? Running ? 2 (88m ago) ? 92m ~]# kubectl delete deployments testos deployment.apps "testos" deleted ? # 刪除容器時有一個寬限期,為了保證數據的完整性,刪除資源控制器時也有一個(terminating回收狀態)寬限期6.其他資源控制器
peployment
????????Deployment /RC/RS 都是資源控制器
????????Deployment為Pod和ReplicaSet提供了一個聲明式定 義方法,用來替代以前的Replicationcontroller 來方便的管理應用。
典型的應用場景包括:
????????--定義Deployment來創建Pod和ReplicaSet
????????--滾動升級和回滾應用
????????--擴容和縮容
????????--暫停和繼續Deployment
RC/RS/Deployment
????????--kubernetes通過Replication Control1(簡稱RC) 管理POD,在RC中定義了如何啟動POD,如何 運行,啟動幾副本等功能,如果我們創建文件, 在其中使用Yaml的語法格式描述了上面的信息, 這個文件就是我們的資源對象文件
????????--ReplicaSet (簡稱RS)是RC的升級版
????????--Deployment為Pods和RS提供描述性的更新方式
三.資源文件的概述
1.資源對象文件的概述
-kuberbetes通過RC/RS 管理POD,在RC中定義了如何啟動POD,如何運行,啟動幾個副本等功能,如果我們創建的文件,在其中使用Yaml的語法描述了上面的信息,這個文件就是我們的資源對象文件
-資源文件可以創建,刪除,管理資源對象
-資源文件有很多高級的復雜的功能靠簡單的命令方式無法實現,這些都需要使用資源文件描述
2.YAMl語法概述
YAML 是什么?
YAML 是一種可讀性高,以數據為中心的數據序列化格式??梢员磉_ 對象(鍵值對)數組,標量; 這幾種數據形式 能夠被多種編程語言和腳本語言解析
YAML 語法與格式
基本語法
-
以 k: v 的形式來表示鍵值對的關系,冒號后面必須有一個空格
-
表示注釋
-
對大小寫敏感
-
通過縮進來表示層級關系,縮排中空格的數目不重要,只要相同階層的元素左側對齊就可以了
-
縮進只能使用空格,不能使用 tab縮進鍵
-
字符串可以不用雙引號
格式
對象和鍵值對
通過 k: v 的方式表示對象或者鍵值對,冒號后必須要加一個空格:
Name: Astron Sex: female School: TJU通過縮進來表示對象的多個屬性:
People: Name: Astron Sex: female School: TJU也可以寫成
people: {name: Astron, sex: female}數組
數組(或者列表)中的元素采用 - 表示,以 - 開頭的行表示構成一個數組
# eg1:- A - B - C #eg2:people: - yyy- zzz- www行內表示:
people: [yyy, zzz, www]eg3: 對象數組
people: - name: yyyage: 18- name: zzzage: 19使用流式表示:
people: [{name: yyy, age: 18},{name: zzz, age: 19}]標量
標量是最基本的不可再分的值,包括:
-
整數
-
浮點數
-
字符串
-
布爾值
-
Null
-
時間
-
日期
引用
& 用于建立錨點,* 用于引用錨點,<< 表示合并到當前數據
eg1:defaults: &defaults adapter: ppp host: qqq ? development: database: mq <<: *defaults相當于:
defaults: adapter: ppp host: qqq ? development: database: mq adapter: ppp host: qqqeg2: - &showell steve - clark - eve - *showell相當于:
- steve - clark - eve - steve3.資源文件的管理命令
--create 創建資源對象(沒有密等性,一般不用)
--apply 生名更新資源對象
--delete 刪除資源文件
# 更新資源對象,也可以用來創建 ~]# kubectl apply -f mypod.yaml # 創建資源對象,但是用create創建的資源不能用apply更新 ~]# kubectl create -f mypod.yaml # 刪除資源文件 ~]# kubectl delete -f mypod.yaml4.POD的資源文件書寫格式概述
--- ? ? ? ? ? ?# 資源的開始,當一個文件中有多個時,則說明一個文件有多個資源文件 kind: Pod ? ? ?# 資源對象的類型,這里定義pod,默認鍵值對采用key(小駝峰) : value(大坨峰),資源所有對象查看(kubectl api-resources) apiVersion: v1 # pod的版本,查看當前k8s支持的所有版本(kubectl api-versions),查看當前pod的版本,及基本概述(kubectl explain pods),詳細的當輸入前面這條命令的時候地下會有網址,不過建議訪問國內的(https://kubernetes.io/) metadata: ? ? ?# 元數據,(屬性數據,定義該pod的詳細信息,pod.metadata)name: mypod ?# 定義pod的名字,且是唯一性 spec: ? ? ? ? ?# 標志位,標志詳細信息,前面定義了資源對象,所以這里就是pod的詳細信息(pod.spec)containers: ?# pod里的容器- name: mylinux ?#相當于pod里面的容器(mypod.mylinux)image: 172.17.0.98:5000/myos:v1804 ? # 這個容器用的什么鏡像stdin: true ? ? ? ? ? ? ? ? ? ? ? ? ? # 標準輸出(相當與-i)tty: true ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 終端(相當與-t) # 注:stdin,tty不寫默認是false ? ? ## 示例 # 創建容器 ~]# kubectl apply -f mypod.yaml pod/mypod created # 查看創建 ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE mypod ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 5s # 注意此時是沒有控制器的,所以可以直接刪除 ~]# kubectl get deployments.apps No resources found in default namespace. ~]# kubectl get replicasets.apps No resources found in default namespace # 直接刪除 ]# kubectl delete pods mypod pod "mypod" deleted ~]# kubectl get replicasets.apps No resources found in default namespace. ~]# kubectl get pods NAME ? ? READY ? STATUS ? RESTARTS ? ? AGE?5.deploy資源控制器文件的書寫
# 由于創建不帶控制器的pod非常的不安全,所以這里創建帶控制器的pod ~]# vim myapache.yaml --- ? ? ? ? ? ? ? ? ? ? # 資源的開始 kind: Deployment ? ? ? ?# 資源對象的類型,為Deployment控制器 apiVersion: apps/v1 ? ? # 控制器的版本,查看deployment的版本(kubectl explain deployment) metadata: ? ? ? ? ? ? ? # 元數據,(屬性數據,定義該deployment控制器的詳細信息,deploy.metadata) name: myapache ? ? ? # 定義deploy控制器的名字,且是唯一性 annotations: ? ? ? ? # 附加信息,該字段保留,后續介紹kubernetes.io/change-cause: httpd.v1 spec: ? ? ? ? ? ? ? ? ? # 詳細定義,定義了資源對象控制器的詳細信息,(deploy.spec)selector: ? ? ? ? ? ?# 定義了控制器的標簽 ? matchLabels: ? ? ? ? ? myapp: httpd ? ? # 定義了標簽為httpd replicas: 1 ? ? ? ? ?# 定義pod副本數template: ? ? ? ? ? ?# 定義pod的資源模板metadata: ? ? ? ? ?# pod的元數據,(屬性數據,定義該pod的詳細信息,pod.metadata)labels: ? ? ? ? ?# 定義pod的標簽myapp: httpd ?# 標簽名 (由于創建了控制器所以不能給pod起名字,只能由控制器創建pod的名字,所以這里只定義了標簽)spec: ? ? ? ? ? ? ?# 定義pod的spec這里就是pod的詳細信息(pod.spec)containers: ? ? ?# pod里的容器- name: webcluster ? ?# 定義于pod里面的容器名字(mypod.webcluster)image: 172.17.0.98:5000/myos:httpd ?# 這個容器用的什么鏡像stdin: false ? ?# 標準輸出(相當與-i),由于這邊啟動的是apache,不需要交互試的終端輸出,所以這里同意設置flase,或者不寫也是可以的tty: false ? ? ?# 終端(相當與-t)ports: ? ? ? ? ?# 由于啟動的是服務所以要設置監聽端口號- protocol: TCP # 監聽的協議TCP containerPort: 80 ?# 監聽的端口是80restartPolicy: Always ?# 定義策略,pod維護容器的策略(策略:Always;OnFailure;Never)默認Always,Always表示容器一但死亡,則會重新創建;OnFailure表示只有當容器退出時$?!=0時才重啟,也就是啟動失敗才重啟;Never表示不管哪種都不重啟; ? # 創建 ~]# kubectl apply -f myapache.yaml deployment.apps/myapache created # 查看pod ~]# kubectl get pods NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? AGE myapache-9d7557448-nq8rw ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 17s # 查看一級控制器 ~]# kubectl get deployments.apps myapache ? 1/1 ? ? 1 ? ? ? ? ? 1 ? ? ? ? ? 3m49s # 查看二級控制器 ~]# kubectl get replicasets.apps NAME ? ? ? ? ? ? ? ? DESIRED ? CURRENT ? READY ? AGE myapache-9d7557448 ? 1 ? ? ? ? 1 ? ? ? ? 1 ? ? ? 4m # 測試 ~]# curl -ik http://10.244.2.46.標簽和選擇器的書寫格式
k8s 的 標簽 和 標簽選擇器 標簽 可以附加在 kubernetes 任何資源對象之上的鍵值型 數據 ,常用于 標簽選擇器 的匹配度檢查,從而完成資源篩選 資源 標簽 當 Kubernetes 對系統的任何API對象如Pod和節點進行“分組”時,會對其添加Label(key=value形式的“鍵-值對”)用以精準地 選擇 對應的API對象
lables是設置標簽,matchLabels匹配標簽
為了建立控制器和pod間的關聯,因為pod的名字是唯一的,如果起多個容器的話,不可以這么操作,所以kubernetes 先給每個pod打上一個標簽(Label),然后再給相應的位置定義標簽選擇器(Label Selector),引用這些標簽管理,而且資源控制器會給pod自動分配名字;
三.集群的管理
一個資源控制器可以控制多個pod
1.集群擴容
-
replicas 決定了集群pod數量
創建一個單節點的web容器
-
在集群運行的過程中我們可以動態調整集群pod的數量
在創建文件之初設置容器副本數
~]# cat myapache.yaml --- ......replicas: 1 ? # 根據數字設置...... ? ?在線修改設置,及時生效
# 先查看要擴容的容器的資源控制器,只有修改資源控制器才有效,而pod是被創建出來的 ~]# kubectl get deployment NAME ? ? ? READY ? UP-TO-DATE ? AVAILABLE ? AGE myapache ? 1/1 ? ? 1 ? ? ? ? ? ?1 ? ? ? ? ? 26m ? # 進入配置里修改 ~]# kubectl edit deployment myapache ....... replicas: 3 ? ?# 根據數字設置,這里設置3測試 ...... ? # 查看 ~]# kubectl get deployment myapache NAME ? ? ? READY ? UP-TO-DATE ? AVAILABLE ? AGE myapache ? 3/3 ? ? 3 ? ? ? ? ? ?3 ? ? ? ? ? 31m ~]# kubectl get pods ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-9d7557448-59fxm ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 3m4s ? 10.244.1.4 ? vm-0-114-centos ? <none> ? ? ? ? ? <none> myapache-9d7557448-64fhh ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 109s ? 10.244.1.5 ? vm-0-114-centos ? <none> ? ? ? ? ? <none> myapache-9d7557448-brsbc ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 109s ? 10.244.2.4 ? vm-0-142-centos ? <none> ? ? ? ? ? <none> testos ? ? ? ? ? ? ? ? ? ? 1/1 ? ? Running ? 2 (23h ago) ? 24h ? ?10.244.1.2 ? vm-0-114-centos ? <none> ? ? ? ? ? <none>scale 命令
# 先查看要擴容的容器的資源控制器,只有修改資源控制器才有效,而pod是被創建出來的 ~]# kubectl get deployment myapache NAME ? ? ? READY ? UP-TO-DATE ? AVAILABLE ? AGE myapache ? 3/3 ? ? 3 ? ? ? ? ? ?3 ? ? ? ? ? 31m ? ## 用scale設置 # 縮減 ~]# kubectl scale deployments.apps myapache --replicas=1 # 查看pod ~]# kubectl get deployment myapache NAME ? ? ? READY ? UP-TO-DATE ? AVAILABLE ? AGE myapache ? 1/1 ? ? 1 ? ? ? ? ? ?1 ? ? ? ? ? 35m ? # 擴展 ~]# kubectl scale deployments.apps myapache --replicas=3 # 查看pod ~]# kubectl get deployment myapache NAME ? ? ? READY ? UP-TO-DATE ? AVAILABLE ? AGE myapache ? 3/3 ? ? 3 ? ? ? ? ? ?3 ? ? ? ? ? 31m ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-9d7557448-59fxm ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 3m4s ? 10.244.1.4 ? vm-0-114-centos ? <none> ? ? ? ? ? <none> myapache-9d7557448-64fhh ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 109s ? 10.244.1.5 ? vm-0-114-centos ? <none> ? ? ? ? ? <none> myapache-9d7557448-brsbc ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 109s ? 10.244.2.4 ? vm-0-142-centos ? <none> ? ? ? ? ? <none>2.集群更新與回滾
1)查看控制器規則
kubectl get 資源對象 資源名稱 -o 格式
~]# kubectl get deployment myapache -o yaml ...... spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10 ? ? ?# 保留最多10個歷史版本selector: ? ? ? ? ? ? ? ? ? ? matchLabels:myapp: httpdstrategy: ? ? ? ? ? ? ? ? ? ? # 更新策略 rollingUpdate: ? ? ? ? ? ? ?# 滾動更新maxSurge: 25% ? ? ? ? ? ? # 最多超過25%的副本數maxUnavailable: 25% ? ? ? # 最多有25%的副本不可用type: RollingUpdate ? ? ? ? # 更行方式(Recrete ,rollingUpdate)2)deployment.spec.strategy支持兩種策略
-
Recrete
重建式更新,就是刪一個建一個(如果有一百個容器則會比較慢)
-
rollingUpdate
滾動更新,更新期間pod最多有幾個(相當與多線程操作,這邊刪,那邊創),滾動更新在創建的時候最多不能超過25%,最大有25%的副本數量在不可用(刪除)
示例
## 更新;把apache升級成nginx # 先查看原有配置及測試 ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-9d7557448-brsbc ? 1/1 ? ? Running ? 0 ? ? ? ? ? ? 31m ? 10.244.2.4 ? vm-0-142-centos ? <none> ? ? ? ? ? <none> ~]# curl -ik http://10.244.2.4 this is apache # 在線修改 ......kubernetes.io/change-cause: nginx.v1 ?# 版本名 ..... - image: 172.17.0.98:5000/myos:nginx ? # 更新的鏡像 ..... ? # 查看 ]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? ? ? ? ? ? RESTARTS ? ? ? AGE ? ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-5886d7b69b-bl7l4 ? 0/1 ? ? Running ? ?6 (3m42s ago) ? 9m34s ? 10.244.1.6 ? vm-0-114-centos ? <none> ? ? ? ? ? <none> ~]# curl -ik http://10.244.2.4 this is nginx ? ## 回滾 # 查看歷史記錄 ~]# kubectl rollout history deployment myapache deployment.apps/myapache REVISION CHANGE-CAUSE 1 ? ? ? ? httpd.v1 2 ? ? ? ? nginx.v1 # 回滾 ~]# kubectl rollout undo deployment myapache --to-revision=1 deployment.apps/myapache rolled back ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-9d7557448-8gv62 ? 1/1 ? ? Running ? 0 ? ? ? ? 9m59s ? 10.244.2.6 ? vm-0-142-centos ? <none> ? ? ? ? ? <none> ~]# curl -ik http://10.244.2.4 this is apache ?3.集群調度
容器的創建是隨機的,如何選擇固定的宿主機
1)nodeName標簽
容器創建是隨機的,選擇nodeName固宿主機
# 先查看原有的pod ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-9d7557448-8gv62 ? 1/1 ? ? Running ? 0 ? ? ? ? 15h ? 10.244.2.6 ? node2 ? <none> ? ? ? ? ? <none> # 可以看出容器在node2上,那么此時修改yaml文件更新 ~]#vim myapache.yaml --- kind: Deployment apiVersion: apps/v1 metadata:name: myapacheannotations:kubernetes.io/change-cause: httpd.v1 spec:selector:matchLabels:myapp: httpd replicas: 1template:metadata:labels:myapp: httpdspec:nodeName: node1 ?# 在該配置文件中添加一行使其調度到node1containers: ? ? ? ? - name: webclusterimage: 172.17.0.98:5000/myos:httpdstdin: falsetty: falseports:- protocol: TCPcontainerPort: 80restartPolicy: Always ? ? ~]# kubectl apply -f myapache.yaml deployment.apps/myapache configured ? ~]# kubectl get pod -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-58fdbddd8d-m78jv ? 1/1 ? ? Running ? 0 ? ? ? ? 11s ? 10.244.1.8 ? node1 ? <none> ? ? ? ? ? <none>注:如果添加了選則標簽,但無法使用該主機,POD將一直處于Pending狀態
使用 nodeName 參數讓容器運行在指定節點上
2)nodeSelector標簽
如何選擇一類宿主機?
需要提前為目標主機打上特定的標簽(可以是多臺)
在資源文件中根據標簽選擇宿主機(更加靈活)
node標簽的管理
nodeSelector是節點選擇約束的最簡單推薦形式
-
可以給節點打上標簽,根據標簽來選擇需要的節點(標簽名任意)
-
查看標簽
-
設置標簽
- 刪除標簽
- 使用 標簽 讓容器運行在一些節點上
運用資源文件把容器跑在有標簽的節點組上
# 先運行標簽 ~]# kubectl label nodes node2 disktype=ssd node/node2 labeled # 修改配置文件 ]# cat myapache.yaml --- kind: Deployment apiVersion: apps/v1 metadata:name: myapacheannotations:kubernetes.io/change-cause: httpd.v1 spec:selector:matchLabels:myapp: httpd replicas: 1template:metadata:labels:myapp: httpdspec:nodeSelector: ? ? ?# 添加標簽組disktype: ssd ? ?# 綁定剛剛創建的標簽containers:- name: webclusterimage: 172.17.0.98:5000/myos:httpdstdin: falsetty: falseports:- protocol: TCPcontainerPort: 80restartPolicy: Alwa ~]# kubectl get node --show-labels NAME ? ? ? ? ? ? STATUS ? ROLES ? ? ? ? ? ? ? ? AGE ? ? VERSION ? LABELS ........ node2 ? Ready ? <none> ? ? ? ? ? ? ? ? 47h ? ? v1.23.2 ? disktype=ssd,..... ? ~]# kubectl get pod -o wide NAME ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES myapache-7d685d5d66-shd86 ? 1/1 ? ? Running ? 0 ? ? ? ? 42s ? 10.244.2.7 ? node2 <none>3)高級調度策略
親和與反親和
-
親和可以理解成偏愛或喜好,同樣反親和可以理解成不喜歡
-
在kubernetes 中親和特性在pod. spec. affinity中設置
-
從親和的對象又可以分為(節點親和)和(容器親和)
-
從親和的策略又可以分為(硬親和)和(軟親和)
手冊地址:
將 Pod 分配給節點 | Kubernetes
pod節點親和示例
親和示例
## 非強制性親和示例 # 先創建節點標簽 ~]# kubectl label nodes node2 app=myapp-apache # 創建yaml文件 ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: web-example spec:selector:matchLabels:app: myapp-webreplicas: 3revisionHistoryLimit: 10strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: myapp-webspec:affinity: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? podAffinity: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # pod的親和設置preferredDuringSchedulingIgnoredDuringExecution: ?# 親和性,表示更傾向于部署在指定節點上,但不是必須的- weight: 1 ? ? ? ? ? ? ? ?# weight范圍1-100。這個涉及調度器的優選打分過程,每個node的評分都會加上這個weight,最后bind最高的nodepodAffinityTerm: ? ? ? ? #指定pod要調度在含有標簽app=myapp-apache的節點上labelSelector: ? ? ? ? # 連接的標簽組 matchExpressions: ? - key: appoperator: Invalues:- myapp-apachetopologyKey: kubernetes.io/hostname ?# 用topologyKey表示,具體值用node label表示,調度器需要考慮這些pods是否滿足規則Ycontainers: ? ? ? - name: nginximage: 172.17.0.98:5000/myos:httpdports:- protocol: TCPcontainerPort: 80restartPolicy: Always ? # 創建 ~]# kubectl apply -fweb-example.yaml deployment.apps/web-example configured # 查看調度 ~]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES web-example-558fd5cd9b-gs7v4 ? 1/1 ? ? Running ? 0 ? ? ? ? 9s ? 10.244.1.9 ? ? node1 ? <none> ? ? ? ? ? <none> web-example-558fd5cd9b-jlx97 ? 1/1 ? ? Running ? 0 ? ? ? ? 6s ? 10.244.1.10 ? node2 ? <none> ? ? ? ? ? <none> web-example-558fd5cd9b-tl67p ? 1/1 ? ? Running ? 0 ? ? ? ? 7s ? 10.244.2.17 ? node2 ? <none> ? ? ? ? ? <none> ? # affinity.podAffinity第二個表示創建的3個pod部署時要滿足傾向性親和性,創建的3個pod更傾向于部署在Pod的標簽為app=myapp-apache所在的節點上,并且所在的節點要含有kubernetes.io/hostname標簽。如下所示,上設置,app=myapp-apache的pod在kus-node2節點上,新創建的3個pod調度時要滿足傾向性親和性,最終2個pod調度在了k8s-node2上,1個pod調度在了k8s-node1上,更傾向于調度在k8s-node2上 # 強制親和性 ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: web-example spec:selector:matchLabels:app: myapp-webreplicas: 3revisionHistoryLimit: 10strategy: ? ? ? ? ? ? ? ? ?# 設置滾動升級rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: myapp-webspec: ? ? ? ? ? ? ? ? ? ? ? ? # pod設置nodeName: vm-0-142-centos ? nodeSelector: ? ? ? ? ? ? ? # 指定標簽disktype: ssd affinity: ? ? ? ? ? ? ? ? ? # 親和設置podAffinity: ? ? ? ? ? ? ?# pod的親和設置requiredDuringSchedulingIgnoredDuringExecution: ? #強制親和性- labelSelector: ? ? ? ?# 連接的標簽組 matchExpressions: ? #指定pod要調度在含有標簽app=myapp-apache的節點上- key: appoperator: Invalues:- myapp-apachetopologyKey: kubernetes.io/hostname ? ?# 必須也要滿足此標簽要求containers:- name: nginximage: 172.17.0.98:5000/myos:httpdports:- protocol: TCPcontainerPort: 80restartPolicy: Always # affinity.podAffinity第一個表示部署apache時會創建3個pod,并且這3個pod要滿足強制親和性,要調度在節點含有標簽為app=myapp-apache的pod,并且,調度的節點要含有標簽kubernetes.io/hostname。如上設置,app=myapp-apache的pod在kus-node2節點上,所以創建的3個pod全部調度在了k8s-node2節點上反親和示例
就是把podAffinity替換成podAntiAffinity
# 強制 ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: web-example spec:selector:matchLabels:app: myapp-webreplicas: 3revisionHistoryLimit: 10strategy: ? ? ? ? ? ? ? ? ?rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: myapp-webspec: ? ? ? ? ? ? ? ? ? ? ? ? nodeName: vm-0-142-centos ? nodeSelector: ? ? ? ? ? ? ? disktype: ssd affinity: ? ? ? ? ? ? ? ? ? podAntiAffinity: ? ? ? ? ? ? ?# pod的反親和設置requiredDuringSchedulingIgnoredDuringExecution: ? #- labelSelector: ? ? ?matchExpressions: ?- key: appoperator: Invalues:- myapp-apachetopologyKey: kubernetes.io/hostname ? ?containers:- name: nginximage: 172.17.0.98:5000/myos:httpdports:- protocol: TCPcontainerPort: 80restartPolicy: Always # 非強制 ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: web-example spec:selector:matchLabels:app: myapp-webreplicas: 3revisionHistoryLimit: 10strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: myapp-webspec:affinity: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? podAntiAffinity: ? ? ? ? ? ?# pod的反親和設置preferredDuringSchedulingIgnoredDuringExecution: ?- weight: 1 ? ? ? ? ? ? ? ?podAffinityTerm: ? ? ? ?labelSelector: ? ? ? ? matchExpressions: ? - key: appoperator: Invalues:- myapp-apachetopologyKey: kubernetes.io/hostname ?containers: ? ? ? - name: nginximage: 172.17.0.98:5000/myos:httpdports:- protocol: TCPcontainerPort: 80restartPolicy: Alwaysnode節點親和示例
## 反親和性 ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: web-example spec:selector:matchLabels:app: myapp-webreplicas: 3revisionHistoryLimit: 10strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: myapp-webspec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution: ?# 反親和性,表示更傾向于部署在指定節點上,但不是必須的- weight: 1preference:matchExpressions:- key: cpuoperator: Invalues:- highcontainers:- name: nginximage: 172.17.0.98:5000/myos:httpdports:- protocol: TCPcontainerPort: 80restartPolicy: Always ? # 創建容器 ~]# kubectl apply -f web-example.yaml deployment.apps/web-example configured # 查看 ]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES web-example-64d897b884-f8gz5 ? 1/1 ? ? Running ? 0 ? ? ? ? 4s ? 10.244.2.31 ? node2 ? <none> ? ? ? ? ? <none> web-example-64d897b884-fqkj8 ? 1/1 ? ? Running ? 0 ? ? ? ? 5s ? 10.244.1.20 ? node1 ? <none> ? ? ? ? ? <none> web-example-64d897b884-pdsln ? 1/1 ? ? Running ? 0 ? ? ? ? 7s ? 10.244.2.30 ? node2 ? <none> ? ? ? ? ? <none> ? #因為非強制所以都可以分配 ? ## 強制反親和性 ? ~]# vim web-example.yaml --- apiVersion: apps/v1 kind: Deployment metadata:name: php-example spec:selector:matchLabels:app: myapp-phpreplicas: 1template:metadata:labels:app: myapp-phpspec:affinity:requiredDuringSchedulingIgnoredDuringExecution: ?#強制反親和性nodeSelectorTerms:- matchExpressions:- key: memoperator: Invalues:- high- midcontainers:- name: php-fpmimage: 192.168.1.100:5000/myos:php-fpmports:- protocol: TCPcontainerPort: 9000restartPolicy: Always # 查看pod的啟動此時就可以看到處于pengding狀態了 ]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES 10.244.2.30 ? node2 ? <none> ? ? ? ? ? <none> web-example-77647fb5fd-85g4m ? 0/1 ? ? Pending ? 0 ? ? ? ? 3s ? <none> ? ? ? <none> ? ? ? ? ? <none> ? ? ? ? ? <none> # 是因為幾臺節點上都沒有標簽所以不知道跳哪天導致的報錯,這里給node1設置一個標簽,就可以跳到node2上 ~]# kubectl label node vm-0-114-centos mem=high ]# kubectl get pods -o wide NAME ? ? ? ? ? ? ? ? ? ? ? ? ? READY ? STATUS ? RESTARTS ? AGE ? IP ? ? ? ? ? NODE ? ? ? ? ? ? NOMINATED NODE ? READINESS GATES web-example-77647fb5fd-85g4m ? 1/1 ? ? Running ? 0 ? ? ? ? 14m ? 10.244.1.21 ? node1 ? <none> ? ? ? ? ? <none> web-example-77647fb5fd-9bc9f ? 1/1 ? ? Running ? 0 ? ? ? ? 41s ? 10.244.1.22 ? node1 ? <none> ? ? ? ? ? <none> web-example-77647fb5fd-9vf4k ? 1/1 ? ? Running ? 0 ? ? ? ? 39s ? 10.244.1.23 ? node1 ? <none> ? ? ? ? ? <none>總結
以上是生活随笔為你收集整理的k8命令,pod的启动流程与资源文件书写,k8s集群调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HPA集群控制器
- 下一篇: kubernetes资源控制与及ingr