主頁 >  其他 > (三)Kubernetes 快速入門

(三)Kubernetes 快速入門

2020-09-16 13:09:07 其他

 Kubernetes的核心物件

API Server提供了RESTful風格的編程介面,其管理的資源是Kubernetes API中的端點,用于存盤某種API物件的集合,例如,內置Pod資源是包含了所有Pod物件的集合,資源物件是用于表現集群狀態的物體,常用于描述應于哪個節點進行容器化應用、需要為其配置什么資源以及應用程式的管理策略等,例如,重啟、升級及容錯機制,另外,一個物件也是一種“意向記錄“——一旦創建,Kubernetes就需要一直確保物件始終存在,PodDeploymentService等都是最常用的核心物件,

Pod資源物件

Pod資源物件是一種集合了一到多個應用容器、存盤資源、專用IP及支撐容器運行的其他選項的邏輯組件,如圖所示,Pod代表著Kubernetes的部署單元及原子運行單元,即一個應用程式的單一運行實體,它通常由共享資源且關系緊密的一個或多個應用容器組成,

Kubernetes的網路模型要求其各Pod物件的IP地址位于同一網路平面內(同一IP網段),各Pod之間可使用其IP地址直接進行通信,無論它們運行于集群內的哪個作業節點上,這些Pod物件都像運行于同一局域網中的多個主機,

不過,Pod物件中的各行程均運行于彼此隔離的容器中,并于容器間共享兩種關鍵資源:網路存盤卷

  • 網路:每個Pod物件都會被分配一個集群內專用的IP地址,也稱為Pod IP,同一Pod內部的所有容器共享Pod物件的NetworkUTS名稱空間,其中包括主機名、IP地址和埠等,因此,這些容器間的通信可以基于本地回環介面lo進行,而與Pod外的其他組件的通信則需要使用Service資源物件的ClusterIP及相應的埠完成,

  • 存盤卷:用戶可以為Pod物件配置一組“存盤卷”資源,這些資源可以共享給其內部的所有容器使用,從而完成容器間資料的共享,存盤卷還可以確保在容器終止后重啟,甚至是被洗掉后也能確保資料不會丟失,從而保證了生命周期內的Pod物件資料的持久化存盤,

 

一個Pod物件代表某個應用程式的一個特定實體,如果需要擴展應用程式,則意味著為此應用程式同時創建多個Pod實體,每個實體均代表應用程式的一個運行的“副本”(replica),這些副本化的Pod物件的創建和管理通常由另一組稱為“控制器”(Controller)的物件實作,例如,Deployment控制器物件,

創建Pod時,還可以使用Pod Preset物件為Pod注入特定的資訊,如ConfigMapSecret、存盤卷、掛載卷和環境變數等,有了Pod Preset物件,Pod模板的創建者就無須為每個模板顯示提供所有資訊,因此,也就無須事先了解需要配置的每個應用的細節即可完成模板定義,

基于期望的目標狀態和各節點的資源可用性,Master會將Pod物件調度至某選定的作業節點運行,作業節點于指向的鏡像倉庫(image register)下載鏡像,并于本地的容器運行時環境中啟動容器,Master會將整個集群的狀態保存于etcd中,并通過API Server共享給集群的各組件及客戶端,

Controller

Kubernetes集群的設計中,Pod是有生命周期的物件,通過手動創建或由Controller(控制器)直接創建的Pod物件會被“調度器”(Scheduler)調度至集群中的某作業節點運行,待到容器應用行程運行結束之后正常終止,隨后就會被洗掉,另外,節點資源耗盡或故障也會導致Pod物件被回收,

Pod物件本身并不具有“自愈”功能,若是因為作業節點甚至是調度器自身導致了運行失敗,那么它將會被洗掉;同樣,資源耗盡或節點故障導致的回收操作也會洗掉相關的Pod物件,在設計上,Kubernetes使用”控制器“實作對一次性的(用后即棄)Pod物件的管理操作,例如,要確保部署的應用程式的Pod副本數量嚴格反映用戶期望的數目,以及基于Pod模板來創建Pod物件等,從而實作Pod物件的擴縮容、滾動更新和自愈能力等,例如,某節點發生故障時,相關的控制器會將此節點上運行的Pod物件重新調度到其他節點進行重建,

控制器本身也是一種資源型別,它有著多種實作,其中與作業負載相關的實作如Replication ControllerDeploymentStatefulSetDaemonSetJobs等,也可統稱它們為Pod控制器,

Pod控制器的定義通常由期望的副本數量、Pod模板和標簽選擇器(Label Selector)組成,Pod控制器會根據標簽選擇器對Pod物件的標簽進行匹配檢查,所有滿足選擇條件的Pod物件都將受控于當前控制器并計入其副本總數,并確保此數目能夠精確反映期望的副本數,

Service

盡管Pod物件可以擁有IP地址,但此地址無法確保在Pod物件重啟或被重建后保持不變,這會為集群中的Pod應用間依賴關系的維護帶來麻煩:前端Pod應用(依賴方)無法基于固定地址持續跟蹤后端Pod應用(被依賴方),于是,Service資源被用于在被訪問的Pod物件中添加一個有這固定IP地址的中間層,客戶端向此地址發起訪問請求后由相關的Service資源調度并代理至后端的Pod物件,

換言之,Service是“微服務”的一種實作,事實上它是一種抽象:通過規則定義出由多個Pod物件組合而成的邏輯集合,并附帶訪問這組Pod物件的策略,Service物件挑選、關聯Pod物件的方式同Pod控制器一樣,都是要基于Label Selector進行定義,其示意圖如下

Service IP是一種虛擬IP,也稱為Cluster IP,它專用于集群內通信,通常使用專用的地址段,如“10.96.0.0/12”網路,各Service物件的IP地址在此范圍內由系統動態分配,

集群內的Pod物件可直接請求此類的Cluster IP,例如,圖中來自Pod client的訪問請求即可以ServiceCluster IP作為目標地址,但集群網路屬于私有網路地址,它們僅在集群內部可達,將集群外部的訪問流量引入集群內部的常用方法是通過節點網路進行,實作方法是通過作業節點的IP地址和某埠(NodePort)接入請求并將其代理至相應的Service物件的Cluster IP上的服務埠,而后由Service物件將請求代理至后端的Pod物件的Pod IP及應用程式監聽的埠,因此,圖中的External Clients這種來自集群外部的客戶端無法直接請求此Service提供的服務,而是需要事先經由某一個作業節點(如NodeY)的IP地址進行,這類請求需要兩次轉發才能到達目標Pod物件,因此在通信效率上必然存在負面影響,

事實上,NodePort會部署于集群中的每一個節點,這就意味著,集群外部的客戶端通過任何一個作業節點的IP地址來訪問定義好的NodePort都可以到達相應的Service物件,此種場景下,如果存在集群外部的一個負載均衡器,即可將用戶請求負載均衡至集群中的部分或者所有節點,這是一種稱為“LoadBalancer”型別的Service,它通常是由Cloud Provider自動創建并提供的軟體負載均衡器,不過,也可以是有管理員手工配置的諸如F5一類的硬體設備,

簡單來說,Service主要有三種常用型別:第一種是僅用于集群內部通信的ClusterIP型別;第二種是接入集群外部請求的NodePort型別,它作業與每個節點的主機IP之上;第三種是LoadBalancer型別,它可以把外部請求負載均衡至多個Node的主機IPNodePort之上,此三種型別中,每一種都以其前一種為基礎才能實作,而且第三種型別中的LoadBalancer需要協同集群外部的組件才能實作,并且此外部組件并不接受Kubernetes的管理,

命令式容器應用編排

部署應用Pod

Kubernetes集群上自主運行的Pod物件在非計劃內終止后,其生命周期即告結束,用戶需要再次手動創建類似的Pod物件才能確保其容器中的依然可得,對于Pod數量眾多的場景,尤其是對微服務業務來說,用戶必將疲于應付此類需求,Kubernetes的作業負載(workload)型別的控制器能夠自動確保由其管控的Pod物件按用戶期望的方式運行,因此,Pod的創建和管理大多會通過這種型別的控制器來進行,包括DeploymentReplicasSetReplicationController等,

1)創建Deployment控制器物件

kubectl run命令可用于命令列直接創建Deployment控制器,并以 --image選項指定的鏡像運行Pod中的容器,--dry-run選項可以用于命令的測驗,但并不真正執行資源物件的創建程序,

# 創建一個名字叫做nginx的deployment控制器,并指定pod鏡像使用nginx:1.12版本,并暴露容器內的80埠,并指定副本數量為1個,并先通過--dry-run測驗命令是否錯誤,[root@k8s-master ~]# kubectl run nginx --image=nginx:1.12 --port=80 --replicas=1 --dry-run=true[root@k8s-master ~]# kubectl run nginx --image=nginx:1.12 --port=80 --replicas=1deployment.apps/nginx created[root@k8s-master ~]# kubectl get pods    #查看所有pod物件NAME                     READY   STATUS    RESTARTS   AGEnginx-685cc95cd4-9z4f4   1/1     Running   0          89s###引數說明:--image      指定需要使用到的鏡像,--port       指定容器需要暴露的埠,--replicas   指定目標控制器物件要自動創建Pod物件的副本數量,

2)列印資源物件的相關資訊

kubectl get 命令可用來獲取各種資源物件的相關資訊,它既能顯示物件型別特有格式的簡要資訊,也能按照指定格式為YAMLJSON的詳細資訊,或者使用Go模板自定義要顯示的屬性及資訊等,

[root@k8s-master ~]# kubectl get deployment    #查看所有deployment控制器物件NAME    READY   UP-TO-DATE   AVAILABLE   AGEnginx   1/1     1            1           66s###欄位說明:NAME    資源物件名稱READY   期望由當前控制器管理的Pod物件副本數及當前已有的Pod物件副本數UP-TO-DATE   更新到最新版本定義的Pod物件的副本數量,在控制器的滾動更新模式下,表示已經完成版本更新的Pod物件的副本數量AVAILABLE    當前處于可用狀態的Pod物件的副本數量,即可正常提供服務的副本數,AGE    Pod的存在時長說明:Deployment資源物件通過ReplicaSet控制器實體完成對Pod物件的控制,而非直接控制,另外,通過控制器創建的Pod物件都會被自動附加一個標簽,格式為“run=<Controller_Name>”,[root@k8s-master ~]# kubectl get deployment -o wide    #查看deployment控制器物件的詳細資訊NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES       SELECTORnginx   1/1     1            1           69m   nginx        nginx:1.12   run=nginx[root@k8s-master ~]# kubectl get pods     #查看pod資源NAME                     READY   STATUS    RESTARTS   AGEnginx-685cc95cd4-9z4f4   1/1     Running   0          72m[root@k8s-master ~]# kubectl get pods -o wideNAME                     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATESnginx-685cc95cd4-9z4f4   1/1     Running   0          73m   10.244.1.12   k8s-node1   <none>           <none>###欄位說明:NAME       pode資源物件名稱READY      pod中容器行程初始化完成并能夠正常提供服務時即為就緒狀態,此欄位用于記錄處于就緒狀態的容器數量STATUS     pod的當前狀態,其值有Pending、Running、Succeeded、Failed和Unknown等其中之一RESTARTS   Pod重啟的次數IP         pod的IP地址,通常由網路插件自動分配NODE       pod被分配的節點,

3)訪問Pod物件

這里部署的是pod是運行的為nginx程式,所以我們可以訪問是否ok,在kubernetes集群中的任意一個節點上都可以直接訪問PodIP地址,

[root@k8s-master ~]# kubectl get pods -o wide    #查看pod詳細資訊NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATESnginx-685cc95cd4-9z4f4   1/1     Running   0          88m   10.244.1.12   k8s-node1   <none>           <none>[root@k8s-master ~]# curl 10.244.1.12    #kubernetes集群的master節點上訪問<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>[root@k8s-node2 ~]# curl 10.244.1.12    #kubernetes集群的node節點上訪問<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>

上面訪問是基于一個pod的情況下,但是,當這個pod由于某種原因意外掛掉了,或者所在的節點掛掉了,那么deployment控制器會立即創建一個新的pod,這時候再去訪問這個IP就訪問不到了,而我們不可能每次去到節點上看到IP再進行訪問,測驗如下:

[root@k8s-master ~]# kubectl get pods -o wideNAME                     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATESnginx-685cc95cd4-9z4f4   1/1     Running   0          99m   10.244.1.12   k8s-node1   <none>           <none>[root@k8s-master ~]# kubectl delete pods nginx-685cc95cd4-9z4f4    #洗掉上面的podpod "nginx-685cc95cd4-9z4f4" deleted[root@k8s-master ~]# kubectl get pods -o wide    #可以看出,當上面pod剛洗掉,接著deployment控制器又馬上創建了一個新的pod,且這次分配在k8s-node2節點上了,NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE        NOMINATED NODE   READINESS GATESnginx-685cc95cd4-z5z9p   1/1     Running   0          89s   10.244.2.14   k8s-node2   <none>           <none>[root@k8s-master ~]# curl 10.244.1.12    #訪問之前的pod,可以看到已經不能訪問curl: (7) Failed connect to 10.244.1.12:80; 沒有到主機的路由[root@k8s-master ~]# [root@k8s-master ~]# curl 10.244.2.14    #訪問新的pod,可以正常訪問<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>

部署Service物件

簡單來說,一個Service物件可視作通過其標簽選擇器過濾出的一組Pod物件,并能夠為此組Pod物件監聽的套接字提供埠代理及調度服務,就好比上面做的測驗,如果沒有Service,那么每次都得去訪問pod物件自己的地址等,且那還只是創建了一個pod物件,如果是多個,那么該如何是好?故使用Service解決此問題,

1)創建Service物件(將Service埠代理至Pod埠示例)

"kubectl expose"命令可用于創建Service物件以將應用程式“暴露”(expose)于網路中,

#方法一[root@k8s-master ~]# kubectl expose deployment nginx --name=nginx-svc --port=80 --target-port=80 --protocol=TCP    #為deployment的nginx創建service,取名叫nginx-svc,并通過service的80埠轉發至容器的80埠上,service/nginx-svc exposed#方法二[root@k8s-master ~]# kubectl expose deployment/nginx --name=nginx-svc --port=80 --target-port=80 --protocol=TCPservice/nginx-svc exposed###引數說明:--name    指定service物件的名稱--port    指定service物件的埠--target-port    指定pod物件容器的埠--protocol    指定協議[root@k8s-master ~]# kubectl get svc     #查看service物件,或者kubectl get serviceNAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   25hnginx-svc    ClusterIP   10.109.54.136   <none>        80/TCP    41s

這時候可以在kubernetes集群上所有節點上直接訪問nginx-svccluster-ip及可訪問到名為deployment控制器下nginxpod,并且,集群中的別的新建的pod都可以直接訪問這個IP或者這個service名稱即可訪問到名為deployment控制器下nginxpod,示例:

# master節點上通過ServiceIP進行訪問[root@k8s-master ~]# curl 10.109.54.136 <!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href=https://www.cnblogs.com/yanjieli/p/"http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>#新建一個客戶端pod進行訪問,這里這個客戶端使用busybox鏡像,且pod副本數量為1個,-it表示進入終端模式,--restart=Never,表示從不重啟,[root@k8s-master ~]# kubectl run client --image=busybox --replicas=1 -it --restart=NeverIf you don't see a command prompt, try pressing enter./ # wget -O - -q 10.109.54.136    #訪問上面創建的(service)nginx-svc的IP<!DOCTYPE html><html><head><title>Welcome to nginx!</title>....../ # / # wget -O - -q nginx-svc    #訪問上面創建的(service)名稱nginx-svc<!DOCTYPE html><html><head><title>Welcome to nginx!</title>

2)創建Service物件(將創建的Pod物件使用“NodePort”型別的服務暴露到集群外部)

[root@k8s-master ~]# kubectl run mynginx --image=nginx:1.12 --port=80 --replicas=2    #創建一個deployments控制器并使用nginx鏡像作為容器運行的應用,[root@k8s-master ~]# kubectl get pods    #查看創建的podNAME                     READY   STATUS    RESTARTS   AGEclient                   1/1     Running   0          15hmynginx-68676f64-28fm7   1/1     Running   0          24smynginx-68676f64-9q8dj   1/1     Running   0          24snginx-685cc95cd4-z5z9p   1/1     Running   0          16h[root@k8s-master ~]# [root@k8s-master ~]# kubectl expose deployments/mynginx --type="NodePort" --port=80 --name=mynginx-svc    #創建一個service物件,并將mynginx創建的pod物件使用NodePort型別暴露到集群外部,service/mynginx-svc exposed[root@k8s-master ~]# [root@k8s-master ~]# kubectl get svc    #查看serviceNAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEkubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        41hmynginx-svc   NodePort    10.111.89.58    <none>        80:30884/TCP   10snginx-svc     ClusterIP   10.109.54.136   <none>        80/TCP         15h###欄位說明:PORT(S)     這里的mynginx-svc物件可以看出,集群中各作業節點會捕獲發往本地的目標埠為30884的流量,并將其代理至當前service物件的80埠,于是集群外部的用戶可以使用當前集群中任一節點的此埠來請求Service物件上的服務,[root@k8s-master ~]# [root@k8s-master ~]# netstat -nlutp |grep 30884    #查看master節點上是否有監聽上面的30884埠tcp6       0      0 :::30884                :::*                    LISTEN      7340/kube-proxy[root@k8s-node1 ~]# [root@k8s-node1 ~]# netstat -nlutp |grep 30884    #查看node節點是否有監聽上面的30884埠tcp6       0      0 :::30884                :::*                    LISTEN      2537/kube-proxy

客戶端訪問kubernetes集群的30884

3)Service資源物件的描述

“kuberctl describe services”命令用于列印Service物件的詳細資訊,它通常包括Service物件的Cluster IP,關聯Pod物件使用的標簽選擇器及關聯到的Pod資源的端點等,示例

[root@k8s-master ~]# kubectl describe service mynginx-svcName:                     mynginx-svcNamespace:                defaultLabels:                   run=mynginxAnnotations:              <none>Selector:                 run=mynginxType:                     NodePortIP:                       10.111.89.58Port:                     <unset>  80/TCPTargetPort:               80/TCPNodePort:                 <unset>  30884/TCPEndpoints:                10.244.1.14:80,10.244.2.15:80Session Affinity:         NoneExternal Traffic Policy:  ClusterEvents:                   <none>###欄位說明:Selector      當前Service物件使用的標簽選擇器,用于選擇關聯的Pod物件Type          即Service的型別,其值可以是ClusterIP、NodePort和LoadBalancer等其中之一IP            當前Service物件的ClusterIPPort          暴露的埠,即當前Service用于接收并回應的埠TargetPort    容器中的用于暴露的目標埠,由Service Port路由請求至此埠NodePort      當前Service的NodePort,它是否存在有效值與Type欄位中的型別相關Endpoints     后端端點,即被當前Service的Selector挑中的所有Pod的IP及其埠Session Affinity    是否啟用會話粘性External Traffic Policy    外部流量的調度策略

擴容和縮容

所謂的“伸縮(Scaling)”就是指改變特定控制器上Pod副本數量的操作,“擴容(scaling up)”即為增加副本數量,而“縮容(scaling down)"則指縮減副本數量,不過,不論是擴容還是縮容,其數量都需要由用戶明確給出,

Service物件內建的負載均衡機制可在其后端副本數量不止一個時自動進行流量分發,它還會自動監控關聯到的Pod的健康狀態,以確保將請求流量分發至可用的后端Pod物件,若某Deployment控制器管理包含多個Pod實體,則必要時用戶還可以為其使用“滾動更新”機制將其容器鏡像升級到新的版本或變更那些支持動態修改的Pod屬性,

使用kubect run命令創建Deployment物件時,“--replicas=”選項能夠指定由該物件創建或管理的Pod物件副本的數量,且其數量支持運行時進行修改,并立即生效,“kubectl scale”命令就是專用于變動控制器應用規模的命令,它支持對Deployment資源物件的擴容和縮容操作,

上面示例中創建的Deployment物件nginx僅創建了一個Pod物件,其所能夠承載的訪問請求數量即受限于這單個Pod物件的服務容量,請求流量上升到接近或超出其容量之前,可以通過kubernetes的“擴容機制”來擴招Pod的副本數量,從而提升其服務容量,

擴容示例

[root@k8s-master ~]# kubectl get pods -l run=nginx    #查看標簽run=nginx的podNAME                     READY   STATUS    RESTARTS   AGEnginx-685cc95cd4-z5z9p   1/1     Running   0          17h[root@k8s-master ~]# [root@k8s-master ~]# kubectl scale deployments/nginx --replicas=3    #將其擴容到3個deployment.extensions/nginx scaled[root@k8s-master ~]# [root@k8s-master ~]# kubectl get pods -l run=nginx    #再次查看NAME                     READY   STATUS    RESTARTS   AGEnginx-685cc95cd4-f2cwb   1/1     Running   0          5snginx-685cc95cd4-pz9dk   1/1     Running   0          5snginx-685cc95cd4-z5z9p   1/1     Running   0          17h[root@k8s-master ~]# [root@k8s-master ~]# kubectl describe deployments/nginx    #查看Deployment物件nginx詳細資訊Name:                   nginxNamespace:              defaultCreationTimestamp:      Thu, 29 Aug 2019 15:29:31 +0800Labels:                 run=nginxAnnotations:            deployment.kubernetes.io/revision: 1Selector:               run=nginxReplicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailableStrategyType:           RollingUpdate...#由nginx自動創建的pod資源全部擁有同一個標簽選擇器“run=nginx”,因此,前面創建的Service資源物件nginx-svc的后端端點也已經通過標簽選擇器自動擴展到了這3個Pod物件相關的端點[root@k8s-master ~]# kubectl describe service/nginx-svcName:              nginx-svcNamespace:         defaultLabels:            run=nginxAnnotations:       <none>Selector:          run=nginxType:              ClusterIPIP:                10.109.54.136Port:              <unset>  80/TCPTargetPort:        80/TCPEndpoints:         10.244.1.15:80,10.244.2.14:80,10.244.2.16:80Session Affinity:  NoneEvents:            <none>

縮容示例

縮容的方式和擴容相似,只不過是將Pod副本的數量調至比原來小的數字即可,例如將nginxpod副本縮減至2個

[root@k8s-master ~]# kubectl scale deployments/nginx --replicas=2deployment.extensions/nginx scaled[root@k8s-master ~]# [root@k8s-master ~]# kubectl get pods -l run=nginxNAME                     READY   STATUS    RESTARTS   AGEnginx-685cc95cd4-pz9dk   1/1     Running   0          10mnginx-685cc95cd4-z5z9p   1/1     Running   0          17h

洗掉物件

有一些不再有價值的活動物件可使用“kubectl delete”命令予以洗掉,需要洗掉Service物件nginx-svc時,即可使用下面命令完成:

[root@k8s-master ~]# kubectl get services     #查看當前所有的service物件NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEkubernetes    ClusterIP   10.96.0.1       <none>        443/TCP        43hmynginx-svc   NodePort    10.111.89.58    <none>        80:30884/TCP   96mnginx-svc     ClusterIP   10.109.54.136   <none>        80/TCP         17h[root@k8s-master ~]# kubectl delete service nginx-svc    #洗掉service物件nginx-svc

有時候要清空某一型別下的所有物件,只需要將上面的命令物件的名稱快取“--all”選項便能實作,例如,洗掉默認名稱空間中所有的Deployment控制器的命令如下:

[root@k8s-master ~]# kubectl delete deployment --alldeployment.extensions "mynginx" deleted

注意:受控于控制器的Pod物件在洗掉后會被重建,洗掉此類物件需要直接洗掉其控制器物件,不過,洗掉控制器時若不想洗掉其Pod物件,可在洗掉命令上使用“--cascade=false“選項,

雖然直接命令式管理的相關功能強大且適合用于操縱Kubernetes資源物件,但其明顯的缺點是缺乏操作行為以及待運行物件的可信源,另外,直接命令式管理資源物件存在較大的局限性,它們在設定資源物件屬性方面提供的配置能力相當有限,而且還有不少資源并不支持命令操作進行創建,例如,用戶無法創建帶有多個容器的Pod物件,也無法為Pod物件創建存盤卷,因此,管理資源物件更有效的方式是基于保存有物件配置資訊的配置清單來進行,

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57249.html

標籤:其他

上一篇:阿里云和微軟共同開源的 OAM 對 Kubernetes 開發人員意味著什么?

下一篇:(四)Kubernetes 資源清單定義

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more