摘要:代表的解決方案為。雖然官網列出的部署方式很多,但也不用被這么多種部署方式搞糊涂了。雖然只是一條命令,但其實執行了很多步驟命令執行后輸出如下可以看到,主要做了這些事創建了名為的虛擬機,并在虛擬機中安裝了容器運行時。
綜述
Kubernetes集群的組件眾多,要部署一套符合生產環境的集群不是一件容易的事。好在隨著社區的快速發展,特別是在它成為事實上的容器編排標準以后,基本所有的主流云平臺都完全支持Kubernetes,或把它作為核心的云解決方案。同時,本地部署也出現了各類成熟的主動化解決方案,特別是Kubeadm,在最新的1.13版本已經官方GA了,也就是完全可以用在生產環境中了。這些云服務或自動化工具都大大減少了Kubernetes的部署難度,讓運維力量不足的小型公司也能快速的搭建出可用的Kubernetes生產環境。
Kubernetes部署方案對比Kubernetes官方文檔中,總共列出了5大類,不下30種的Kubernetes安裝方式。不說別的,單從數量來說,就可以看出當前Kubernetes生態的包容性和目前其他各類平臺對它的技術支持有多強。文檔中把部署方案分為以下幾類:
Local-machine Solutions
可以理解為單機版的Kubernetes,非常適合入門Kubernetes學習或測試使用。代表的解決方案為Minikube。
Hosted Solutions
Turnkey – Cloud Solutions
Turnkey – On-Premises Solutions
這三種方式可以放在一塊說,他們都是基于云服務商提供的解決方案,區別如下:
Hosted方式是指云服務商搭建的一套公共的Kubernetes,用戶直接使用就好了,集群的搭建、管理、運維等操作全部都由云服務商提供,用戶只要專注于自己的應用開發,不用關注集群的運維。這種解決方案特別適合小開發團隊或小型公司,不僅省去了自有硬件的維護成本,連系統運維人員都可以不用了。
Turnkey–Cloud Solutions指云服務商幫忙搭建了Kubernetes Master節點,并負責維護其可用性,用戶可以自定義Node節點加入集群,可以根據具體需求靈活并只用關注Node節點的維護
Turnkey–On-Premises Solutions方案是指包括Master節點和Node節點都由用戶配置及維護,靈活性最高,但資源成本和運維成本也最高。
但不管上述哪種方式,云服務商都已經把Kubernetes做了一層包裝,用戶可以用簡單的幾個命令就可以部署Kubernetes集群,不需要從頭開始一步步安裝。
這三種不同的解決方案,阿里云的文檔容器服務Kubernetes集群三種形態對比介紹的很清楚,可以對比著理解:
其中,Serverless對應Hosted Solution,托管版對應Turnkey – Cloud Solution,專有版對應Turnkey – On-Premises Solution。
Custom Solutions
Custom安裝方式顧名思義,是完全由用戶自己安裝維護Kubernetes,集群服務器和部署、配置、運維都由用戶自己完成。這種方案靈活度最高,相對的,付出的硬件成本和部署、維護成本也最高。這里的服務器可以是類似EC2、ECS這種云主機,也可以是本地服務器、虛擬機等,甚至基于ARM的嵌入式硬件目前也能運行Kubernetes。Custom方式也是一般大公司在生產環境使用Kubernetes的最佳選擇,一方面,大公司運維、開發團隊人員完善,可以獨立部署和運維Kubernetes集群,并且還可以根據自己的需求進行二開,整合Kubernetes容器部署、日志、監控等,打造出適合公司業務的容器平臺。另一方面,很多公司考慮容器化業務的出發點之一就是可以優化公司現有的硬件資源,把原來跑物理服務器或虛擬機的業務遷移到容器平臺上來,以提高自有硬件資源利用率及節省成本。現階段,Custom部署方式除了一步步編譯并部署、配置各組件,還可以通過Kubeadmin簡單快速的部署出生產可用的集群。
雖然官網列出的Kubernetes部署方式很多,但也不用被這么多種部署方式搞糊涂了。所有Kubernetes集群,都少不了關鍵的基礎組件。(參考Kubernetes概念與術語中的組件部分),不同的部署方式,無非是這些組件由云服務商部署好了,用戶只要使用集群就好(Host 或 Turnkey方案),或著被做成容器運行以方便快速部署和管理(Minicube、Kubeadm等)。
Minikube 部署 簡介Minikube是由Kubernetes社區維護的單機版的Kubernetes集群,支持macOS, Linux, and Windows等多種操作系統平臺,使用最新的官方stable版本,并支持Kubernetes的大部分功能,從基礎的容器編排管理,到高級特性如負載均衡、Ingress,權限控制等。非常適合作為Kubernetes入門,或開發測試環境使用。Minikube實際是跑在本地的虛擬機中的,所以,需要先安裝一套Hypervisor。這里以VirtualBox為例。
部署步驟 環境OS:macOS Mojave
Hypervisor:VirtualBox 6.0
Minikube的誕生的初衷就是為了能快速部署一個單機Kubernetes集群,所以,整個部署非常簡單,就2條命令搞定:
brew cask install minikube minikube start
brew cask install直接從官方下載了minikube程序,并加入環境變量。minikube start雖然只是一條命令,但其實執行了很多步驟,命令執行后輸出如下:
$ minikube start o minikube v0.35.0 on darwin (amd64) > Creating virtualbox VM (CPUs=2, Memory=2048MB, Disk=20000MB) ... - "minikube" IP address is 192.168.99.100 - Configuring Docker as the container runtime ... - Preparing Kubernetes environment ... @ Downloading kubeadm v1.13.4 @ Downloading kubelet v1.13.4 - Pulling images required by Kubernetes v1.13.4 ... - Launching Kubernetes v1.13.4 using kubeadm ... : Waiting for pods: apiserver proxy etcd scheduler controller addon-manager dns - Configuring cluster permissions ... - Verifying component health ..... + kubectl is now configured to use "minikube" = Done! Thank you for using minikube!
可以看到,minikube start主要做了這些事:
創建了名為minikube的虛擬機,并在虛擬機中安裝了Docker容器運行時。(實際就是Docker-machine)
下載了Kubeadm與Kubelet工具
通過Kubeadm部署Kubernetes集群
進行各組件間訪問授權、健康檢查等工作
在用戶操作系統安裝并配置kubectl
所以,minikube實際上是基于Kubeadm工具來部署Kubernetes的,我們通過minikube ssh命令可以進入部署的虛擬機中,看下里面在跑的容器:
有木有看到很多熟悉的身影,有Master節點的組件kube-apiserver、kube-scheduler、kube-controller、etcd 容器,以及Node節點的kube-proxy容器,還有些附加的組件比如Coredns等。沒錯,Kubeadm實際就是把Kubernetes各個組件都容器化了(除了kubelet),而minikube再用虛擬機把它們都跑在一起。關于Kubeadm,下一篇文章會詳細再介紹。
集群測試Minikube成功運行以后,就已經在用戶操作系統中安裝了kubectl,并將運行的集群變量設置為了minkube,可以通過kubectl config view 命令查看當前的配置:
kubectl的作用集群已經被指定為minikube的虛擬機了。執行kubectl get node -o wide確認Kubernetes集群節點信息。
集群名稱為minikube,只有一個master節點。
下面我們部署一個簡單的goweb服務,該容器運行時會暴露8000端口,同時訪問/info路徑會顯示容器的主機名。服務由3個容器實例構成,并且通過Nodeport方式暴露給用戶。
// 創建一個名為goweb的Deployment,使用lingtony/goweb鏡像,暴露8000端口,副本pod數為3 $ kubectl run goweb --image=lingtony/goweb --port=8000 --replicas=3 // 查看創建的對象,可以看到已經有3個pod在運行了 $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE goweb 3/3 3 3 2m59s $ kubectl get po NAME READY STATUS RESTARTS AGE goweb-8559474b8c-rphcs 1/1 Running 0 3m2s goweb-8559474b8c-wzvsl 1/1 Running 0 3m2s goweb-8559474b8c-xxtlz 1/1 Running 0 3m2s // 創建svc,通過Nodeport方式暴露服務 $ kubectl expose deployment goweb --name=gowebsvc --port=80 --target-port=8000 --type=NodePort service/gowebsvc exposed // 查看svc,可以看到NodePort隨機分配的端口為31543 $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gowebsvc NodePort 10.108.29.5380:31534/TCP 3s kubernetes ClusterIP 10.96.0.1 443/TCP 7h58m
接下來,在用戶操作系統就可以通過minikube虛擬機的ip地址:31543來訪問這個gowebsvc了,gowebsvc會把80口的請求再負載均衡到實際的goweb pod上。更方便的,可以使用minikube server命令直接獲取到svc的訪問地址:
// 通過minikube server命令獲取svc地址 $ minikube service gowebsvc --url http://192.168.99.100:31534 // 測試訪問一下
可以看到,每次的訪問請求是都進入不同的pod,與kubectl get po命令所示的pod一致。
開啟Kubernetes dashboard可以通過minikube dashboard命令直接開啟dashboard
macOS會自動在你的默認瀏覽器打開,可以通過web查看和管理集群了。
本文介紹了Kubernetes不同部署方式的區別,同時詳細說明了minikube這個單節點Kubernetes工具的部署步驟、以及對部署后的集群做了簡單測試。通過上面的部署分析可以看出,minikube的核心實際還是依靠kubeadm這個工具來部署集群的,后面的文章會介紹如何用Kubeadm部署一個多節點集群。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27755.html
摘要:代表的解決方案為。雖然官網列出的部署方式很多,但也不用被這么多種部署方式搞糊涂了。雖然只是一條命令,但其實執行了很多步驟命令執行后輸出如下可以看到,主要做了這些事創建了名為的虛擬機,并在虛擬機中安裝了容器運行時。 綜述 Kubernetes集群的組件眾多,要部署一套符合生產環境的集群不是一件容易的事。好在隨著社區的快速發展,特別是在它成為事實上的容器編排標準以后,基本所有的主流云平臺都...
摘要:所以,選擇把運行直接運行在宿主機中,使用容器部署其他組件。獨立部署方式所需機器資源多按照集群的奇數原則,這種拓撲的集群關控制平面最少就要臺宿主機了。 在上篇文章minikube部署中,有提到Minikube部署Kubernetes的核心就是Kubeadm,這篇文章來詳細說明下Kubeadm原理及部署步驟。寫這篇文章的時候,Kubernetes1.14剛剛發布,所以部署步驟以1.14版為...
摘要:所以,選擇把運行直接運行在宿主機中,使用容器部署其他組件。獨立部署方式所需機器資源多按照集群的奇數原則,這種拓撲的集群關控制平面最少就要臺宿主機了。 在上篇文章minikube部署中,有提到Minikube部署Kubernetes的核心就是Kubeadm,這篇文章來詳細說明下Kubeadm原理及部署步驟。寫這篇文章的時候,Kubernetes1.14剛剛發布,所以部署步驟以1.14版為...
摘要:前言有種方法可以讓集群外訪問運行在集群上的應用程序。當群集上運行的應用程序數量增加時,這可能會導致端口沖突。由于這些原因,主機網絡不是使您的應用程序可以從群集外部訪問的好方法。例如,可以將網絡插件部署為在集群的所有節點上設置的守護進程。 前言 有5種方法可以讓集群外訪問運行在Kubernetes集群上的應用程序(pod)。接下來我們詳細討論Kubernetes的hostNetwork,...
摘要:前言有種方法可以讓集群外訪問運行在集群上的應用程序。當群集上運行的應用程序數量增加時,這可能會導致端口沖突。由于這些原因,主機網絡不是使您的應用程序可以從群集外部訪問的好方法。例如,可以將網絡插件部署為在集群的所有節點上設置的守護進程。 前言 有5種方法可以讓集群外訪問運行在Kubernetes集群上的應用程序(pod)。接下來我們詳細討論Kubernetes的hostNetwork,...
閱讀 1213·2021-11-25 09:43
閱讀 1969·2021-11-11 10:58
閱讀 1187·2021-11-08 13:18
閱讀 2659·2019-08-29 16:25
閱讀 3508·2019-08-29 12:51
閱讀 3307·2019-08-29 12:30
閱讀 748·2019-08-26 13:24
閱讀 3683·2019-08-26 10:38