在Windows 10上創(chuàng)建單節(jié)點Kubernetes群集分步教程
本Kubernetes實施示例演示了如何在Windows 10上創(chuàng)建單節(jié)點群集,以啟動并運行容器化的應(yīng)用程序。
Kubernetes使開發(fā)人員和系統(tǒng)管理員可以快速部署應(yīng)用程序并將其擴展到其需求,而無需停機。Kubernetes系統(tǒng)是高度可配置的,幾乎所有內(nèi)容都圍繞四個重要概念:節(jié)點,pod,部署和服務(wù)。
準(zhǔn)備好進入Kubernetes的世界了嗎?這是開始的關(guān)鍵步驟和Kubernetes命令。
學(xué)習(xí)Kubernetes架構(gòu)的基礎(chǔ)知識
首先,了解Kubernetes系統(tǒng)的基礎(chǔ)非常有用。運行容器的服務(wù)器及其內(nèi)部的應(yīng)用程序稱為節(jié)點。主服務(wù)器控制,管理和配置這些節(jié)點服務(wù)器。主節(jié)點還管理Pod或一組駐留在節(jié)點上的一個或多個容器。
主服務(wù)器充當(dāng)Kubernetes集群的控制平面??刂破矫嬷懈鞣N組件的主要目的是維護所有Kubernetes對象的記錄,并通過自動響應(yīng)變化來連續(xù)管理集群的期望狀態(tài)。
控制平面有四個主要組成部分:
- Etcd:Kubernetes集群etcd的最基本組件是輕量級可用的配置存儲。它可以跨多個Kubernetes節(jié)點設(shè)置。它的主要目的是存儲Kubernetes集群中每個節(jié)點都可以訪問的配置數(shù)據(jù)。
- Kube-apiserver:這是用于kubectl等命令行工具的RESTful接口,為它們提供了與Kubernetes集群進行交互的方式。簡單來說,它充當(dāng)各種工具的管理點,以通過REST API控制和配置Kubernetes集群。
- Kube控制器管理:該服務(wù)的主要作用是維護群集的狀態(tài),例如副本數(shù)。如果觀察到所需狀態(tài)有任何變化,則kube-controller-manager將運行所需的過程以確保滿足所需狀態(tài)。
- Kube調(diào)度器:該組件的主要職責(zé)是根據(jù)配置,資源需求和特定于工作負(fù)載的需求計劃群集工作負(fù)載。
節(jié)點服務(wù)器有多個組件,這些組件使主服務(wù)器可以使用它們。這些包括:
- 容器運行時:要運行封裝在節(jié)點上存在的pod中的應(yīng)用程序,我們需要一個輕量級的,隔離的操作環(huán)境:容器。容器運行時是一種工具,例如Docker,用于創(chuàng)建,部署和運行應(yīng)用程序。
- Kubelet:Kubelet是安裝在節(jié)點上以與主節(jié)點進行通信并從其接收命令的代理或服務(wù)。它指導(dǎo)需要在節(jié)點上執(zhí)行的操作,例如創(chuàng)建,縮放和刪除容器。
- Kube代理:此代理服務(wù)將請求中繼到正確的容器并執(zhí)行負(fù)載平衡。Kube-proxy還執(zhí)行主機級子網(wǎng)劃分,以確保其他組件可以訪問服務(wù)。
Kubernetes實施步驟
在本教程中,我們將創(chuàng)建一個在Windows 10操作系統(tǒng)上運行的單節(jié)點群集。
要在Windows上安裝和設(shè)置Kubernetes,請加載kubectl并安裝minikube。Chocolatey軟件包管理器在此過程中會提供幫助。命令行工具kubectl對Kubernetes集群運行命令,而minikube是使我們能夠在機器上的VM中運行單節(jié)點集群的工具。輸入命令:
- choco install Kubernetes-cli minikube
這將返回如下所示的輸出:
現(xiàn)在,運行以下命令并驗證您的計算機上是否安裝了kubectl:
- kubectl.exe version --client
必須在以下屏幕截圖中看到類似的輸出:
接下來,在Kubernetes中啟動一個工作機-或節(jié)點。它可以是物理機或虛擬機。為此,請使用以下命令啟動minikube:
- minikube start
這將返回如下所示的輸出:
由于我們在Windows上安裝Kubernetes,因此請使用Hyper-V啟動VM并在VM上設(shè)置Kubernetes集群。
這樣就完成了設(shè)置。
如何在Kubernetes中運行容器
要啟動容器,請使用下面的Kubernetes命令創(chuàng)建部署。提供部署名稱和要部署的容器映像。Kubernetes將自動選擇Docker作為默認(rèn)的容器運行時。在這里,我們使用將運行Nginx Web服務(wù)器的鏡像:
- kubectl.exe create deployment my-nginx --image nginx
創(chuàng)建部署后,Kubernetes將構(gòu)建Pod來承載應(yīng)用程序?qū)嵗?/p>
運行上一條命令后立即輸入get pods,以在部署pod時捕獲ContainerCreating狀態(tài):
- kubectl.exe get pods
這將在幾秒鐘內(nèi)完成,并且容器狀態(tài)應(yīng)更改為“正在運行”:
如下所示,將describe關(guān)鍵字與部署名稱一起使用,以查看有關(guān)部署的更多詳細(xì)信息:
- kubectl.exe get deployment
- kubectl.exe describe deployment helloworld-nginx
這將返回結(jié)果,例如副本數(shù),所需狀態(tài)和時間戳記:
在此Kubernetes實施教程中,我們僅運行一個容器或Nginx服務(wù)器,但有時必須適應(yīng)增加的工作量和流量。在這種情況下,請擴大應(yīng)用程序?qū)嵗臄?shù)量。這可以通過使用帶有--replicas參數(shù)的kubectl規(guī)模部署來實現(xiàn):
- kubectl.exe scale deployment helloworld-nginx --replicas 4
檢查部署。將觀察到已部署了該應(yīng)用程序?qū)嵗乃膫€副本:
現(xiàn)在,檢查Kubernetes pod;該節(jié)點上應(yīng)運行四個容器:
啟動應(yīng)用程序并運行
現(xiàn)在,有一個應(yīng)用程序在具有各自IP地址的多個容器中運行。接下來,將它們公開到群集之外,以便可以訪問該應(yīng)用程序:
- Kubectl.exe expose deployment helloworld-nginx --port=80 --type=NodePort
通過kubectl get services命令進行驗證。這將返回NodePort的服務(wù)類型,以在Kubernetes集群的每個節(jié)點上公開端口80。該服務(wù)是一個抽象層,基本上可以實現(xiàn)負(fù)載平衡,并在共享IP地址的群集中對一個以上的pod進行分組。
要在Web瀏覽器中打開此應(yīng)用程序,請創(chuàng)建一個代理以將本地端口連接到群集端口,我們在上一步中使用NodePort服務(wù)公開了該端口:
- kubectl.exe port-forward svc/helloworld-nginx 80:80
如下所示:
轉(zhuǎn)到Web瀏覽器并打開http://127.0.0.1/或http://localhost/以查看在Kubernetes容器中部署的Nginx Web服務(wù)器的主頁。
測試Kubernetes控制平面
最后,測試Kubernetes控制平面或主服務(wù)器是否能夠維持節(jié)點服務(wù)器上運行的Pod的所需狀態(tài)。要檢查這一點,請使用以下命令來強制刪除運行該應(yīng)用程序?qū)嵗囊粋€容器:
- kubectl.exe delete pod helloworld-nginx-67bb76cf46-mks6j
識別出這種不希望的狀態(tài),Kubernetes將立即在容器中運行該應(yīng)用程序的新實例: