群集伺服器搭建步驟
A. 超全K8s集群構建指南,建議收藏
1. 什麼是kubernetes
Kubernetes(k8s)是Google開源的容器集群管理系統(谷歌內部:Borg)。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的便捷性。
2. kubernetes核心組件說明
Kubernetes 集群中主要存在兩種類型的節點,分別是 master 節點 ,以及 minion 節點 。
Minion 節點是實際運行 Docker 容器的節點,負責和節點上運行的 Docker 進行交互,並且提供了代理功能。
Master 節點負責對外提供一系列管理集群的 API 介面,並且通過和 Minion 節點交互來實現對集群的操作管理。
apiserver :用戶和 kubernetes 集群交互的入口,封裝了核心對象的增刪改查操作,提供了 RESTFul 風格的 API 介面,通過 etcd 來實現持久化並維護對象的一致性。
scheler :負責集群資源的調度和管理,例如當有 pod 異常退出需要重新分配機器時,scheler 通過一定的調度演算法從而找到最合適的節點。
controller-manager :主要是用於保證 replicationController 定義的復制數量和實際運行的 pod 數量亮禪一致,另外還保證了從 service 到 pod 的映射關系總是最新的。
kubelet :運行在 minion 節點,負責和節點上的 Docker 交互,例如啟停容器,監控運行狀態等。
proxy :運行在 minion 節點,負責為 pod 提供代理功能,會定期從 etcd 獲取 service 信息,並根據 service 信息通過修改 iptables 來實現流量轉發(最初的版本是直接通過程序提供轉發功能,效率較低。),將流量轉發到要訪問的 pod 所在的節點上去。
etcd :key-value鍵值存儲資料庫,用來存儲kubernetes的信息的。
flannel :Flannel 是 CoreOS 團隊針對 Kubernetes 設計的一個覆蓋網路(Overlay Network)工具,需要另外下載部署。
我們知道當我們啟動 Docker 後會有一個用於和容器進行交互的 IP 地址,如果不去管理的話可能這個 IP 地址在各個機器上是一樣的,並且僅限於在本機上進行通信,無法訪問到其他機器上的 Docker 容器。
Flannel 的目的就是為集群中的所有節點重鎮銷新規劃 IP 地址的使用規則,從而使得不同節點上的容器能夠獲得同屬一個內網且不重復的 IP 地址,並讓屬於不同節點上的容器能夠直接通過內網 IP 通信。
3. Kubernetes的核心概念
Pod
運行於Node節點上,若干相關容器的組合。Pod內包含的容器運行在同一宿主機上,使用相同的網路命名空間、IP地址和埠,能夠通過localhost進行通。
Pod是Kurbernetes進行創建、調度和管理的最小單位,它提供了比容器更高層次的抽象,使得部署和管理更加靈活。一個Pod可以包含一個容器或者多個相關容器。
Replication Controller
Replication Controller用來管理Pod的副本,保證集群中存在指定數量的Pod副敬旅塵本。
集群中副本的數量大於指定數量,則會停止指定數量之外的多餘容器數量,反之,則會啟動少於指定數量個數的容器,保證數量不變。
Replication Controller是實現彈性伸縮、動態擴容和滾動升級的核心。
Service
Service定義了Pod的邏輯集合和訪問該集合的策略,是真實服務的抽象。
Service提供了一個統一的服務訪問入口以及服務代理和發現機制,用戶不需要了解後台Pod是如何運行。
Label
Kubernetes中的任意API對象都是通過Label進行標識,Label的實質是一系列的K/V鍵值對。Label是Replication Controller和Service運行的基礎,二者通過Label來進行關聯Node上運行的Pod。
Node
Node是Kubernetes集群架構中運行Pod的服務節點(或agent)。
Node是Kubernetes集群操作的單元,用來承載被分配Pod的運行,是Pod運行的宿主機。
4. 前置條件設置
三台Centos7系統的虛擬機(1個master+2個node),三台機器上的防火牆,SElinux全部關掉。我的實驗壞境可以上網,默認的YUM源就可以用。
5. 部署規劃
192.168.10.1 # master節點(etcd,kubernetes-master)
192.168.10.2 # node1節點(etcd,kubernetes-node,docker,flannel)
192.168.10.3 # node2節點(etcd,kubernetes-node,docker,flannel)
6. 開始安裝
step1:在master上安裝
yum install kubernetes-master etcd flannel -y
step2:在node上安裝
yum install kubernetes-node etcd flannel -y
step3:etcd集群配置
在master節點上編輯etcd配置文件
在node1節點上編輯etcd配置文件
在node2節點上編輯etcd配置文件
到此etcd集群就部署完了,然後每個節點上啟動
systemctl start etcd
step4:驗證
step6:啟動Master上的三個服務
step7:kubernetes node安裝
node2 節點重復上述操作
step8:分別啟動kubernetes node服務
7. 網路配置
因為kubernetes集群中網路部分是插件形式安裝的,我們這里選用flannel
上述安裝步驟已經install 了
為flannel創建分配的網路
8. 執行kubectl 命令檢查
在master上執行下面,檢查kubernetes的狀態
9. 常用排錯命令如下
B. 伺服器集群怎麼搭建Linux平台的
linux伺服器集群平台的搭建比較簡單,有專門的均衡軟體,比如lvs,lvs是一個集群系統,由很多伺服器組成,可以根據需要,把它門分為三層,一層是前端機,用於均衡,相當於公平為系統分配工作,二層是伺服器群,比如web伺服器群,DNS,mail群等,這些就是接待員,把均衡器分配的工作進行處理,第三層是存儲設備,用於存儲數據,相當於檔案庫。
知道這些後,要搭建就非常容易,有現成的軟體,比如我有四台web伺服器,2台資料庫,1台前置機 ,安裝linux系統,安裝lvs軟體,比如
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
perl-MailTools-1.77-1.el5.noarch.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
當然還需要配置,你可以自己網路有關lvs集群的詳細安裝說明。希望能幫助你。
C. 基於Linux自己初步搭建Kubernetes(k8s)集群基礎,詳細教程
k8s官方網站:https://kubernetes.io/zh/,可自行查看相關文檔說明
k8s-master:Ubuntu--192.168.152.100
k8s-node01:Ubuntu--192.168.152.101
k8s-node02:Ubuntu--192.168.152.102
全部已安裝docker,未安裝可根據官方文檔安裝:https://docs.docker.com/get-docker/
1,禁止swap分區
K8s的要求,確保禁止掉swap分區,不禁止,初始化會報錯。
在每個宿主機上執行:
2,確保時區和時間正確
時區設置
3,關閉防火牆和selinux
ubuntu 查看防火牆命令,ufw status可查看狀態,ubuntu20.04默認全部關閉,無需設置。
4,主機名和hosts設置(可選)
非必須,但是為了直觀方便管理,建議設置。
在宿主機分別設置主機名:k8s-master,k8s-node01,k8s-node02
hosts設置
1,更改docker默認驅動為systemd
為防止初始化出現一系列的錯誤,請檢查docker和kubectl驅動是否一致,否則kubectl沒法啟動造成報錯。版本不一樣,docker有些為cgroupfs,而kubectl默認驅動為systemd,所以需要更改docker驅動。
可查看自己docker驅動命令:
更改docker驅動,編輯 /etc/docker/daemon.json (沒有就新建一個),添加如下啟動項參數即可:
重啟docker
需要在每台機器上安裝以下的軟體包:
2,更新 apt 包索引並安裝使用 Kubernetes apt 倉庫所需要的包
安裝軟體包以允許apt通過HTTPS使用存儲庫,已安裝軟體的可以忽略
3,下載公開簽名秘鑰、並添加k8s庫
國外 :下載 Google Cloud 公開簽名秘鑰:
國內:可以用阿里源即可:
請注意,在命令中,使用的是Ubuntu 16.04 Xenial 版本, 是可用的最新 Kubernetes 存儲庫。所以而非20.04 的focal。
4,更新 apt 包索引,安裝 kubelet、kubeadm 和 kubectl,並鎖定其版本
鎖定版本,防止出現不兼容情況,例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 伺服器,反之則不可以。
只需要在master上操作即可。
1,初始化錯誤解決(沒有報錯的可以跳過這條)
錯誤提示1:
原因:kubectl沒法啟動,journalctl -xe查看啟動錯誤信息。
解決方案:k8s建議systemd驅動,所以更改docker驅動即可,編輯 /etc/docker/daemon.json (沒有就新建一個),添加如下啟動項參數即可:
重啟docker和kubectel
錯誤提示2:
原因:初始化生產的文件,重新初始化,需要刪除即可
錯誤提示3:
解決方法:重置配置
2,初始化完成
無報錯,最後出現以下,表示初始化完成,根據提示還需要操作。
根據用戶是root或者普通用戶操作,由於大多環境不會是root用戶,我也是普通用戶,所以選擇普通用戶操作命令:
如果是root用戶,執行以下命令:
初始化完成,用最後的提示命令 kubeadm join.... 在node機器上加入集群即可。
3,主節點pod網路設置
主節點支持網路插件:https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
這里安裝Calico網路插件:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
Calico官網提供三種安裝方式,1)低於50個節點,2)高於50個節點,3)etcd datastore(官方不建議此方法)。
這里選擇第一種:
安裝完成後, kubectl get node 可查看節點狀態,由NotReady變成Ready則正常,需要等幾分鍾完成。
1,node加入master節點
在所有node節點機器操作,統一已安裝完成 kubelet、kubeadm 和 kubectl,用master初始化完成後最後提示命令加入,切記要用root用戶。
加入成功後,提示如下:
再次查看kubelet服務已正常啟動。
2,需注意的坑
1:加入主節點,需要 root 用戶執行詞條命令,才可以加入master主節點。
node在沒有加入主節點master之前,kubelet服務是沒法啟動的,是正常情況,會報錯如下:
原因是缺失文件,主節點master初始化 `kubeadm init`生成。
node節點是不需要初始化的,所以只需要用root用戶`kubeadm join`加入master即可生成。
2:如果加入提示某些文件已存在,如:
原因是加入過主節點,即使沒成功加入,文件也會創建,所以需要重置節點,重新加入即可,重置命令:
3,在master查看節點
加入完成後,在master節點 kubectl get node 可查看已加入的所有節點:
這里k8s集群創建完成,下一步使用可參考我的下一篇文章:k8s初步熟悉使用介紹,實踐搭建nginx集群
D. 怎麼搭建分布式伺服器
如何搭建分布式網站伺服器,比如我有3台伺服器ABC,需要搭建分布式服務。也就需要建立IIS 還由DNS WIN 伺服器的 還有更改主機名 很麻煩的,這個需要專業的IT人員來操作的。 x0dx0ax0dx0a以下資料作為參考:x0dx0aDNS輪循x0dx0a首先介紹一個DNS系統:傳統的DNS解析都是一個域名對應一個IP地址,但是通過DNS輪循技術(負載平衡技術)可以做到一個域名對應到多個IP 上. 這樣大家難免就會問,這個技術有什麼用呢?x0dx0ax0dx0aDNS輪循是指將相同的域名解釋到不同的IP,隨機使用其中某台主機的技術,該項技術可以智能的調整網站的訪問量到不同伺服器上,減輕網站伺服器的壓力,實現負載勻衡;如果您感覺到單一的主機已經不堪負載你網站日益增長的訪問,那麼建議您採用我們的DNS輪循技術。x0dx0ax0dx0aDNS輪循系統可以根據您的需求設置N台主機作為WEB伺服器。目前已有越來多大型的WEB伺服器使用DNS輪循來實現負載均衡,服務的分布規劃更便捷,擴展性更好,從而提高了網站的穩定性和訪問效率,那些大量數據文件請求的客戶也得到了更快的響應。x0dx0ax0dx0aDNS輪循還將給您的網站提供這樣的改進,諸如您的網站的數據使用量一直處於不斷的增長當中,當達到伺服器資源運行瓶頸的情況x0dx0a下,由於採用了DNS輪循技術,您只需要增加伺服器數量就可以平滑升級,而且偶然故障或其他意外情況造成的損失得以避免,7×24小時可靠性的持續的運行x0dx0a成為可能。x0dx0ax0dx0a如果您真的希望自己的網站能夠一直穩定的在線運行,盡量的減少宕機的比率,那麼除了採用比較好的網站空間技術支持之外,還可以採用時代互聯域名的DNS輪循功能來實現網站的永久在線負載平衡 x0dx0a負載均衡是由多台伺服器以對稱的方式組成一個伺服器集合,每台伺服器都具有等價的地位,都可以單獨對外提供服務而無須其x0dx0a他伺服器的輔助。通過某種負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一台伺服器上,而接收到請求的伺服器獨立地回應客戶的請求。均衡負載x0dx0a能夠平均分配客戶請求到伺服器列陣,籍此提供快速獲取重要數據,解決大量並發訪問服務問題。這種群集技術可以用最少的投資獲得接近於大型主機的性能。x0dx0ax0dx0a網路負載均衡的優點x0dx0ax0dx0a第一,網路負載均衡能將傳入的請求傳播到多達32台伺服器上,即可以使用最多32台伺服器共同分擔對外的網路請求服務。網路負載均衡技術保證即使是在負載很重的情況下,伺服器也能做出快速響應;x0dx0ax0dx0a第二,網路負載均衡對外只需提供一個IP地址(或域名);x0dx0ax0dx0a第三,當網路負載均衡中的一台或幾台伺服器不可用時,服務不會中斷。網路負載均衡自動檢測到伺服器不可用時,能夠迅速在剩餘的x0dx0a伺服器中重新指派客戶機通訊。這項保護措施能夠幫助你為關鍵的業務程序提供不中斷的服務,並可以根據網路訪問量的增加來相應地增加網路負載均衡伺服器的數x0dx0a量;x0dx0ax0dx0a第四,網路負載均衡可在普通的計算機上實現。x0dx0ax0dx0a網路負載均衡的實現過程x0dx0ax0dx0a在Windows Server 2003中,網路負載均衡的應用程序包括Internet信息服務(IIS)、ISA x0dx0aServer 2000防火牆與代理伺服器、VPN虛擬專用網、終端伺服器、Windows Media x0dx0aServices(Windows視頻點播、視頻廣播)等服務。同時,網路負載均衡有助於改善伺服器的性能和可伸縮性,以滿足不斷增長的基於x0dx0aInternet客戶端的需求。x0dx0ax0dx0a網路負載均衡可以讓客戶端用一個邏輯Internet名稱和虛擬IP地址(又稱群集IP地址)訪問群集,同時保留每台計算機各自的名稱。下面,我們將在兩台安裝Windows Server 2003的普通計算機上,介紹網路負載均衡的實現及應用。x0dx0ax0dx0a這兩台計算機中,一台計算機名稱為A,IP地址為192.168.0.7;另一台名為B,IP地址為192.168.0.8。x0dx0a規劃網路負載均衡專用虛擬IP地址為192.168.0.9。當正式應用時,客戶機只需要使用IP地址192.168.0.9來訪問伺服器,網路服務均衡x0dx0a會根據每台伺服器的負載情況自動選擇192.168.0.7或者192.168.0.8對外提供服務。具體實現過程如下:x0dx0ax0dx0a在實現網路負載均衡的每一台計算機上,只能安裝TCP/IP協議,不要安裝任何其他的協議(如IPX協議或者NetBEUI協議),這可以從「網路連接屬性」中查看。x0dx0ax0dx0a第一步,分別以管理員身份登錄A機和B機,打開兩台機的「本地連接」屬性界面,勾選「此連接使用下列項目」中的「負載均衡」項並進入「屬性」對話框,將IP地址都設為192.168.0.9(即負載均衡專用IP),將子網掩碼設置為255.255.255.0;x0dx0ax0dx0a第二步,分別進入A機和B機的「Internet協議(TCP/IP)」屬性設置界面,點擊「高級」按鈕後,在彈出的「高級TCP/IP設置」界面中添加IP地址192.168.0.9和子網掩碼設置為255.255.255.0。x0dx0ax0dx0a第三步,退出兩台計算機的「本地連接屬性」窗口,耐心等一會兒讓系統完成設置。x0dx0a以後,如果這兩台伺服器不能滿足需求,可以按以上步驟添加第三台、第四台計算機到網路負載均衡系統中以滿足要求。