全國咨詢/投訴熱線:400-618-4000

Kubernetes核心原理和搭建

更新時間:2020年11月02日15時08分 來源:傳智播客 瀏覽次數:

1. 引言

在過去,我們在進行程序部署的時候,是直接將環境和程序統一配置部署到主機上,但是這樣做容易造成程序與程序之間的混淆,所以為了處理這種問題,我們可以搭建一臺不可變的虛擬機鏡像,將環境和程序配置部署到虛擬機鏡像中,但是虛擬機鏡像部署存在體量過于龐大并且不可移動的問題,所以容器技術應運而生,容器技術是基于操作系統級別的虛擬化技術,各個容器與宿主機是隔離的,各個容器之間也是是隔離的,它比虛擬機鏡像更容易搭建,并且可以很方便在不同的主機上移動。但是隨著分布式、集群等技術在實際應用中越來越多,在實際的生產環境中,我們可能會涉及到多個容器,而這些容器可能會跨越多個服務器主機進行部署,所以一個基于容器技術的分布式架構解決方案應用而生,它就是Kubernetes。

2. Kubernetes的概念

Kubernetes(k8s)是一個基于容器技術的的分布式架構解決方案,是Google開源的容器集群管理系統,Google內部稱為Borg,主要用于自動部署、擴展和管理容器化的應用程序,是以Docer為基礎的分布式系統架構。 Kubernetes可以對分布式系統進行完美的支撐,它具備完善的集群控制能力,內建有智能的負載均衡器,擁有強大的故障發現和自我修復能力。同時還針對開發、部署測試、運維監控等提供了完善的管理工具。

Kubernetes的核心思想是:一切以服務為中心,根據這一核心思想,Kubernetes可以讓在其上構建的系統獨立運行在物理機、虛擬機群或者云上,所以,Service(服務)是Kubernetes進行分布式集群構建的核心,必須擁有如下關鍵特征:

擁有一個唯一指定的名稱。 擁有一個虛擬IP和端口。

能夠提供某種遠程服務能力。

可以被映射到提供這種遠程服務能力的一組容器應用上。


3. Kubernetes的術語

3.1 Master

Kubernetes的集群控制節點,負責整個集群的管理和控制,擁有一個etcd服務,用來保存所有資源對象的數據,我們執行的所有控制命令會發給他,他負責具體的執行過程,Master節點通常會獨占一個服務器,在其上會運行以上一組關鍵的進程:

Kubernetes API Server:提供Http Rest接口的關鍵服務進程,是Kubernetes中增、刪、改、查等操作的唯一入口,是集群控制的入口進程。

Kubernetes Controller Manager:Kubernetes中所有資源對象的自動化控制中心。

Kubernetes Scheduler:負責資源調度的進程。

3.2 Node

Kubernetes集群中的其他機器被稱為Node節點,Node節點可以是一臺物理主機,也可以是一臺虛擬機,每個Node節點會被Master節點分配一些負載,所以Node節點是Kubernetes集群中工作負載節點,當某個Node節點宕機時,工作負載會被Master自動轉移到其他節點。Node節點之上會運行一組關鍵進程:

kubelet:負責Pod對應容器的創建,啟動、停止等任務。

kube-proxy:實現Kubernetes Service通訊與負載均衡機制的重要組件。

Docker Engine:Docker引擎,負責容器的創建和管理

3.3 Pod

Pod是Kurbernetes進行創建、調度和管理的最小單位,Pod運行在Node節點之上,其中包含多個業務容器,這些業務容器之間共享網絡命名空間、Ip地址、端口,可以通過localhost進行通訊。Pod有兩種類型:普通Pod和靜態Pod。

3.4 Replication Controller

Kurbernetes用來管理和保證集群中擁有的Pod。

4. Kubernetes的架構

Kubernetes的一切都是基于分布式的,下面這張圖就是Kubernetes的架構圖

Kubernetes的架構

通過這張架構圖我們發現Kurbernetes主要由以下幾個核心組件組成:

·Etcd:保存整個集群的狀態。

·API Server:提供認證、授權、訪問控制、API注冊和發現等機制,是資源操作的唯一入口。

·Kurbernetes Controller:負責維護集群的狀態。

·Scheduler:負責資源的調度。

·kubelet:負責維護容器的生命周期,同時管理Volume和網絡。

·Container:負責鏡像管理以及Pod和容器的真正運行。

·kube-proxy:負責為Service提供cluster內部的服務發現和負載均衡。

5. Kubernetes的搭建

5.1 準備工作

因為Kubernetes的一切都是基于分布式的,那么,要想搭建Kubernetes就需要準備多臺服務器主機,因為條件有限,這里我采用搭建多臺虛擬機系統的方式進行,所以需要將虛擬機和鏡像系統準備好。

虛擬機:這里的虛擬機我采用的是VMware,當然也可以采用VirtualBox,VMware下載地址如下:
https://www.vmware.com/cn.html

鏡像系統:虛擬機的鏡像系統我采用的是:CentOS-7-x86_64-DVD-1810,下載地址如下:

http://mirrors.zju.edu.cn/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso

5.2 虛擬機環境搭建

我們準備安裝三個虛擬機節點,一個為Kubernetes的Master節點,剩下兩個為Kubernetes的Node節點,這里我們只演示第一個安裝第一個節點,剩下的兩個節點,采用VMware復制鏡像的方式進行。

5.2.1 虛擬機環境要求

搭建Kubernetes,虛擬機環境至少要滿足以下要求:

·操作系統 CentOS 7

·內存 2G 【至少】

·CPU 2核【至少】

·硬盤 20G 【至少】

5.2.2 創建虛擬機

打開VMware,選擇“文件”菜單“新建虛擬機”選項,或者直接點擊界面上的“創建新的虛擬機”選項,創建新的虛擬機,如下圖所示:

打開VMware


在彈出的彈窗中選擇“經典”選項,點擊“下一步”按鈕,如下圖所示:

新建虛擬機

在彈出的新的彈窗中選擇“稍后安裝操作系統”選項,點擊“下一步”按鈕,如下圖所示:

安裝虛擬機操作系統

在彈出的新的彈窗中選擇客戶機操作系統為“Linux”,版本為“CentOS 64位”,點擊“下一步”按鈕,如下圖所示:

選擇虛擬機版本

在彈出的新的彈窗中設置虛擬機名稱為“K8S_Node1”,選擇虛擬機系統的安裝位置,點擊“下一步”按鈕,如下圖所示:

設置虛擬機名稱

在彈出的新的彈窗中設置最大磁盤大小為20G,選擇“將虛擬磁盤存儲為單個文件”,點擊“下一步”按鈕,如下圖所示:

設置硬盤尺寸

在彈出的新的彈窗中選擇“自定義硬件”選項

自定義硬件

在彈出的硬件配置彈窗中,內存設置為2048M,如下圖所示:

設置虛擬內存

處理器設置為2個,如下圖所示:

設置處理器

鏡像文件選擇本地下載好的鏡像文件,如下圖所示:

選擇鏡像文件

設置完內存、處理、鏡像文件之后,點擊“關閉”按鈕,回到新建虛擬機向導頁面,點擊“完成”按鈕,完成新建虛擬機。

5.2.3 安裝操作系統

在新建好虛擬機之后,在VMware主界面,選擇對應的虛擬機,點擊“開啟此虛擬機”選項,啟動虛擬機,如下圖所示:

安裝操作系統

在打開的系統界面中選擇“Install CentOS 7”,進行CentOS 7系統的安裝,如下圖所示:

進行CentOS 7系統

在打開的界面中選擇中文語言環境,點擊“繼續”按鈕,繼續進行安裝,如下圖所示:

選擇簡體中文

在打開的界面中進行安裝配置,如下圖所示:

禁用Kdump

注意:"軟件選擇”建議選擇最后一個“開發及生產工作站”,“安裝位置”選擇默認“自動分區”,禁用Kdump,打開網絡,讓你的虛擬機可以連接到互聯網。

在新打開的頁面中設置Root密碼,進行安裝CentOS 7系統

設置Root密碼

安裝完成后,會進入到系統的基本配置操作頁面,可以進行語言環境的配置,如下圖所示:

配置語言環境

系統鍵盤布局和輸入方式選擇配置,如下圖所示:

設計鍵盤

最后點擊“開始使用CentOS Linux(s)”按鈕,開始進入到CentOS 7系統中,如下圖所示:

進入到CentOS 7系統

進入系統之后,使用“ifconfig”指令查看系統的ip地址,發現沒有ip地址,如下圖所示:

查看系統的ip地址

沒有ip地址的原因,查看之前2.2.8的配置步驟,發現已經配置了網絡適配器為NAT,那沒有ip地址的原因可能就是系統在啟動的時候沒有加載網卡造成的,所以使用“vi”指令打開“/etc/sysconfig/network-scripts/ifcfg-ens33”文件,將其中的“ONBOOT=no”改為“ONBOOT=yes”,使用“wq”指令保存文件,如下圖所示:

“ data-cke-saved-ONBOOT=no”改為“ONBOOT=yes” ONBOOT=no”改為“ONBOOT=yes”

修改文件之后,需要通過“service network restart”重啟網絡服務,之后在使用“ifconfig”指令查看,就會發現ip地址就有了,如下圖所示:

重啟網絡服務


5.2.4 遠程操作操作系統

因為在操作系統的終端中直接操作指令不太方便,比較好的方法是使用第三方的終端模擬軟件,比如Xshell、SecureCRT登錄,我這里使用的是SecureCRT進行操作。打開SecureCRT軟件,配置一個連接,連接CentOS 7操作系統,如下圖所示:

連接CentOS 7操作系統

在遠程連接成功之后,我們還需要配置CentOS 7的yum源,因為使用CentOS 7自帶的yum源,在安裝軟件和下載依賴的時候會非常的慢,甚至有時候還會超時失敗,所以這里不建議使用CentOS 7自帶的yum源,我們可以執行如下命令,使用阿里云的源替換CentOS 7自帶的yum源,如下圖所示:

將防火墻關閉

考慮到后續我們需要安裝Kubernetes集群需要各種網絡,所以需要將防火墻關閉,避免因為防火墻的問題導致連網失敗,如下圖所示:

將防火墻關閉

在安裝Kubernetes集群的時候,為了避免因為內存交互而影響性能以及穩定性,所以這里我們需要關閉Swap內存交互機制。使用“vi”指令打開“/etc/fstab”文件,將其中的swap配置注釋掉,如下圖所示:

swap配置注釋掉


5.2.5 安裝Docker

Kubernetes是以Docker為基礎的一個全新的分布式系統架構,安裝Kubernetes必須要先安裝Docker,可以參考Docker官方文檔進行操作:https://docs.docker.com/install/linux/docker-ce/centos/#prerequisites

因為使用yum安裝Docker的時候經常會超時失敗,所以可以添加阿里云的Docker倉庫,如下圖所示:

添加阿里云的Docker倉庫

使用yum安裝Docker最新版本,如下圖所示:

安裝Docker最新版本

執行如下命令啟動Docker并激活開機自動啟動,如下圖所示:

Docker并激活開機自動啟動


5.3 Kubernetes集群搭建

虛擬機環境我們在上邊已經搭建好了,接下來我們就該搭建Kubernetes集群,我們將現在的虛擬機作為主節點,先安裝Kubernetes,之后再復制出兩個虛擬機作為工作節點。


5.3.1 安裝Kubernetes

我們可以參考Kubernetes官方文檔進行安裝Kubernetes,下面是官方文檔網址:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/, 官方倉庫因為被墻的原因我們無法使用,所以還是使用阿里云的倉庫,執行以下命令添加kubernetes倉庫:

令添加kubernetes倉庫

Linux會對我們的訪問進行控制,所以需要關閉,如下圖所示:

關閉linux


5.3.2 安裝kubelet、kubeadm、kubectl

執行以下的指令安裝Kubernetes的kubelet、kubeadm、kubectl,如下圖所示:

安裝Kubernetes的kubelet、kubeadm、kubectl

執行以下的指令配置kubelet的cgroup drive,要和docker的cgroup drive保持一致,如下圖所示:

docker的cgroup drive保持一致

執行以下指令,啟動kubelet

啟動kubelet

但是啟動kubelet會失敗,因為缺少證書,但是不用擔心,之后我們在執行kubeadm init命令的時候會創建證書,這里不啟動也不影響后續的配置。

5.3.3 下載Kubernetes的Docker鏡像

接下來我們需要使用Kubernetes官方提供的kubeadm工具來初始化Kubernetes集群,但是kubeadm init默認會訪問谷歌服務器,使用的Docker鏡像倉庫是k8s.gcr.io,國內是無法訪問的,我們可以使用docker.io/mirrorgooglecontainers中轉一下,所以需要執行以下命令,如下圖所示:

使用docker.io/mirrorgooglecontainers中轉
使用docker.io/mirrorgooglecontainers中轉

但是coredns沒包含在docker.io/mirrorgooglecontainers中,所以需要手工到coredns官方鏡像轉換下,執行以下命令進行操作,如下圖所示:

需要手工到coredns官方鏡像轉換
需要手工到coredns官方鏡像轉換
需要手工到coredns官方鏡像轉換

最后通過“docker images”查看所有的鏡像,會發現所有鏡像都已經下載完成,如下圖所示:

docker images

5.4 復制虛擬機

上面執行完成,Kubernetes就已經安裝完畢了,接下來就需要復制虛擬機將其他節點創建出來。

5.4.1 復制虛擬機

關閉之前的虛擬機,在VMware的界面中,右鍵點擊第一個節點,我這里叫做K8S_Node1,選擇“管理”選項中的“克隆”選項,開始復制虛擬機,如下圖所示:

復制虛擬機

進入到選擇克隆源的選擇,選擇“虛擬機中的當前狀態”選項,然后點擊“下一步”按鈕,如下圖所示:

選擇克隆源

在彈出的選擇克隆類型的窗口中選擇“創建完整克隆”選項,點擊“下一步”按鈕,如下圖所示:

創建完整克隆

在彈出的設置新的虛擬機名稱的窗口中設置新的虛擬機的名稱為K8S_Node2,并設置保存位置,然后點擊“完成”按鈕,進行復制操作,如下圖所示:

設置新的虛擬機

重復上面的步驟復制出名稱為K8S_Node3的虛擬機。

5.4.2 設置虛擬機網絡

復制虛擬機結束之后,我們會發現三個節點ip為:

K8S_Node1:192.168.149.129

K8S_Node2:192.168.149.130

K8S_Node3:192.168.149.131

但是我們還需要進行一些配置,以便后續操作可以配置連接,這里以K8S_Node1為例:

使用“vi”指令編輯“/etc/hostname”文件,將hostname改為k8s-node1,注意這里不能大寫,不能使用“_”,不然后續的Kubernetes配置會出問題,如下圖所示:

K8S_Node1

使用“vi”指令編輯“/etc/hosts”文件,在其最后添加192.168.149.129 k8s-node1,如下圖所示:

 k8s-node1

配置完畢之后,重啟生效,剩下的兩個節點也是如此的配置,這里不再演示。

5.5 創建Kubernetes集群

前面的準備工作都已經準備好了,接下來我們就可以開始創建Kubernetes集群了,這里我們使用之前安裝的kubeadm來快速、方便的創建一個Kubernetes集群。

5.5.1 初始化Kubernetes集群

在主節點(K8S_Node1)上執行以下的命令,如下圖所示:

K8S_Node1

當看到如下信息時,就表示Kubernetes集群初始化成功了,如下圖所示:

Kubernetes集群初始化

我們需要將初始化成功的提示信息中的kubeadm join記錄下來(之后會使用到),同時需要執行提示信息中關于以下的幾個指令,如下圖所示:

kubeadm join記錄

5.5.2 創建網絡

當初始化好Kubernetes集群之后,我們還需要配置網絡,以便實現各個節點之間的通訊,設置網絡可以使用Calico或者是flannel,這里我們采用flannel來設置網絡,如下圖所示:

使用Calico或者是flannel

5.6 配置Kubernetes集群

當Kubernetes集群初始化成功并設置好網絡之后,我們就需要將Pod調度到Master上,因為Kubernetes默認是不會將Pod調度到Master中,所以我們需要手動設置。

5.6.1 將Master作為工作節點

可以執行以下命令,將Master節點作為工作節點,如下圖所示:

Master節點

5.6.2 將其他節點添加到集群

在K8S_Node2和K8S_Node3的節點上執行K8S_Node1節點進行kubeadm init初始化集群成功之后提示的kubeadm join指令,將K8S_Node2和K8S_Node3添加到集群中,如下圖所示:

kubeadm join

K8S_Node3

如果kubeadm join指令失敗了,可以執行kubeadm reset進行重置,然后再次執行kubeadm join。

最后我們通過“kubectl get nodes”查看節點是否添加到集群中,如下圖所示:

kubectl get nodes

到此,Kubernetes集群就搭建完畢了。

6. 總結

通過上述的案例,我們就可以把Kubernetes集群搭建完成,之后我們可以在此基礎上繼續搭建Kubernetes的Dashboard,也可以在Kubernetes部署nginx、redis等軟件??傊?,通過Kubernetes我們可以很方便的進行分布式、集群操作,很方便的實現在物理機、虛擬機或者是云上進行項目的部署和遷移。 ?


猜你喜歡:

Kubernetes網絡模型詳細介紹 

10分鐘創建阿里云容器服務kubernetes專有版 

5分鐘6步強制刪除kubernetes NameSpace小技巧

Kubernetes(K8S)入門教程下載 

Kubernetes集群部署詳細圖文教程

人妻系列无码专区_漂亮人妻被中出中文字幕_人妻中文制服巨乳中文