3個節點Kubernetes集群用於Home Lab- Quick&Dirty
介紹
容器和編曲十年來的新流行語。這很有趣也很有挑戰性。
學習應該完全掌握,同樣需要一個良好的家庭實驗室。我將引導您完成一個家庭實驗室,我已經設置了一系列博客,我們為預先理解提供了一些很好的參考 - 這是一項正在進行的工作,我將相應地進行更新。背景
有基於在線雲的選項,但從長遠來看不會更便宜,應該避免任何意外的驚喜(你可以忘記關閉你的VM) - 我希望我的kubernetes集群運行24乘7而不支付電費以外的任何其他費用。
在第二個想法創建自己的kubernetes集群並保持相同將為您提供使用AWS,Azure或谷歌k8s服務時無法獲得的巨大洞察力。
另外一點: 這也是鍛煉虛擬化技能的好機會。我將嘗試從kubernetes Home實驗室開始,讓您快速了解您應該熟悉的事項。
裸金屬
這是至關重要的 - 這取決於您想要學習的內容以及您想要學習的內容。
Type 2 hypervisor- like virtualbox是一個很好的入門方式,但這只是為了在您完成學習的同時預熱您的基礎 - 我將提供一些快速的步驟,讓您啟動並運行3節點k8s群集。小時在下一節
像VMware ESXi這樣的1型虛擬機管理程序 - 這是真正的交易,也是我的最終目標。
你需要一些真正的壞男孩,比如戴爾PowerEdge R820(或前幾代伺服器),這些在ebay 上真的很便宜 (看這個系列 - 我會有一些有趣的東西)。
這 是一篇關於兩者差異的非常好的文章。
你需要一台好機器 - 參考我的舊博客「 構建你自己的強大桌面 」(對於2型虛擬機管理程序,你不需要伺服器級機器,但有超線程,足夠數量的內核和線程,大量內存)
具體對於此設置以下將是理想的(以下節點可以是實際的機器或VM或兩者的混合無關緊要)
一個主節點-4 vCPu,超過4 GB的內存,30 GB的磁碟空間
Tow worker nodes-2 vCPu,超過2 GB的內存,20 GB的磁碟空間
聯網
了解您的家庭網路以及虛擬盒網路選項非常重要 。
在本文後面(或下一個埠)中,我將提供有關Docker和Kubernetes網路的一些很好的參考 - 但同樣對於設置實驗室並不重要。
以下是我的家庭設置(我有軟體VPN,以及端點保護,但不包括相同,以避免複雜性)
(如果您使用的是虛擬機或某種其他類型2的虛擬機管理程序,並且只使用「僅限主機」「Nated」網路,請跳過此部分)
了解您的家庭網路以及如何最好地使用您的設備
您可以將數據機和路由器組合在一個與大多數ISP相同的單個設備中,或者像我一樣,您可以使用兩個單獨的設備,我有一個谷歌Wi-Fi路由器 - 它有自己的優勢(你可以在家裡建立無線網路所以可以讓您在地下室停止耗電的熱伺服器並遠程連接主工作站)
確定您的DHCP提供商(伺服器) - 在我的情況下是我的谷歌路由器,它將IP租給我的所有家用設備。
交換機非常方便 - 如果您有許多設備,帶有乙太網選項的wifi路由器允許您一起訪問所有無線和有線設備。此時,請確保每個設備(稍後將討論VM訪問)可以相互ping通 - 它應該是默認情況下,但您可能需要對防火牆/防病毒端點保護和VPN進行一些更改(如果您使用的話)。
- 如果您的設備中有防病毒軟體,則同樣會管理防火牆 - 即使您的所有設備都連接到私人/家庭網路,比如Bitdefender以下 鏈接 具有良好的一步一步細節,請確保您對防火牆做同樣的事情保護
- 如果您有VPN,請確保啟用本地網路共享
那麼為什麼我不贊成NAT或Host Only?這些是在私有網路中啟動和運行任意數量虛擬機的最簡單方法 - 是的,但它在很多方面都沒有可擴展性,也沒有為您提供最佳利用所有設備的選項。
注意:我 將跳過下載,安裝虛擬機,配置VM並假設您已經了解基礎知識。
第一個可擴展性(和使用)
3個VM將使用8個vCPu(4個cpu內核),您的工作站將以高CPU使用率運行
如果你想要添加更多的節點,HA到主節點等,可擴展性將是一個問題...你將耗盡多個可用線程,內存並記住這是你的工作站而不是你做其他事情的專用伺服器!!
我玩遊戲(並行工作)即使我的機器配置非常好( 在這裡查看) - 當你正在使用已經在使用的6vCPU(滿分為12)的Ghost Recon時 - 你不必要地邀請限制
備用和舊設備的最大利用率
- 我有3台筆記本電腦
- 11歲戴爾靈感(我即將扔掉它--2 / 2核心-3 GB)
- 一個chromebook(我可以用linux-2 / 4-8 GB雙啟動)
- 另一款配備linux mint的戴爾筆記本電腦(2 / 4-8 GB)
- 一個PC 6核心(12個vCPU-32 GB)
- 很少有備用手機和平板電腦 - 我可以在Android手機和平板電腦上啟動Linux(不是正式的)並將它們添加到群集中(實驗 - 以前嘗試過,但我可以連接群集中的所有無線設備 - 等待我的下一部分相同)
總的來說,我可以在我的所有有線或無線設備上擠出大約24-26個cpu線程,而不會過度使用它們。
優點
我的舊筆記本電腦,我是關於扔 - 我的主節點,我可以24比7運行 - 除此之外我不會使用它。我的妻子使用並在公寓周圍漫遊的chromebook可以默默地運行一個工作節點。第三台筆記本電腦可能用於主節點的HA而我的電腦是用於爆破 - 如果我需要在某一天工作節點的數量我可以創建他們按需要摧毀他們。並且我有可能將舊的Android手機添加到群集中。
因此,最好的選擇是混合和匹配實際的機器或VM,並且只有在使用橋接網路創建VM時才能實現(橋接網路通過使用主機系統上的網路適配器將虛擬機連接到網路。如果主機系統是在網路上,橋接網路通常是讓虛擬機訪問該網路的最簡單方法。當您在Windows或Linux主機系統上安裝Workstation時,會為您設置橋接網路(VMnet0))
一旦理論得到解決,就讓我們開始吧
以下步驟和腳本通過Ubuntu-18.04.2進行測試。展望未來,我將提及VM / Machine作為節點
步驟1: 提供3個節點並在2個工作節點上安裝ubuntu伺服器,在主節點上安裝Ubuntu伺服器+ GUI。
我將跳過如何通過VM或實際硬體安裝ubuntu - 只需一個谷歌。確保在每個伺服器上安裝SSH伺服器,並且不要創建SWAP空間。
理想情況下,你應該為所有3個節點創建一個ubuntu伺服器的基本映像(沒有GUI)
完成以下初始化,然後將它們克隆到3個不同的節點。一旦安裝完OS就運行完畢
sudo apt update && sudo apt upgrade (apt-get not require)
如果任何節點是virtualbox VM安裝guest虛擬機添加,請將guest虛擬機版本磁碟添加到VM並運行
sudo mount /dev/cdrom /mnt
cd /mnt
sudo apt-get install -y dkms build-essential linux-headers-generic linux-headers-$(uname -r)
sudo ./VBoxLinuxAdditions.run
sudo swapoff -a (in case you have swap)
此時請拍攝快照並將圖像克隆到3個不同的節點(如果您需要單獨安裝實際硬體),請記住配置具有指定內核數,硬碟大小,內存和選擇橋接的每個節點適配器。
如果出現任何問題,快照將為您節省很多時間,因此在您認為已達到里程碑時,在節點初始化期間繼續拍攝快照。步驟2: 配置所有節點運行 ifconfig 並 注意IP 確保您可以SSH到所有節點,並且每個節點都可以相互ping通(之前我已經解釋了您可能面臨的挑戰和解決方案)。 利用任何有用的終端管理器 - 你更容易管理你必須運行很多命令並需要維護很多終端窗口。我使用 Mobaxterm - 非常有用。第3步:( 適用於所有節點)
每個節點應該通過名稱相互了解,因此您需要考慮節點的命名約定 - 我有以下名稱Master Node-k8s-master / Worker Nodes- k8s-node01,k8s-node02 ...
檢查主機名(如果需要,則更改)
sudo nano /etc/hostname (edit host names accordingly save and exit)
sudo nano /etc/hosts
And append following
<master node ip> k8s-master
<node1 ip> k8s-node01
<node1 ip> k8s-node02
第4步:( 安裝Docker - 適用於所有節點)
?????make sure to remove existing docker installation-
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt install apt-transport-https ca-certificates curl gnupg-agent
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
sudo apt-get update
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo apt-cache policy docker-ce
sudo systemctl status docker (check the status)
sudo systemctl enable docker (enable docker)
快照!!
第5步:( 安裝適用於所有節點的k8s)
?????curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# Configure iptables for Kubernetes
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
sudo apt install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet
步驟6 僅在主節點中初始化k8s)
可選: 通過運行 sudo apt install ubuntu-desktop安裝桌面gui (你需要它來訪問k8s儀錶板)
sudo kubeadm init --apiserver-advertise-address=<master node ip>
--pod-network-cidr=192.168.0.0/16
This will provide you with a kubeadm join command copy the same and save it somewhere!
示例: kubeadm join <主節點ip>:6443 --token bkffxa.42w0tyswagctogv1 --discovery-token-ca-cert-hash sha256:894039dca5a45491db1090xxxxxxxxxxxxxxxxxxxxxxxxxx
注意: 192.168.0.0/16用於印花布
作為普通用戶運行以下mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
運行 監視kubectl獲取pods - 所有突出顯示的pods將啟動並運行,你將不會運行calico或儀錶板,並且不會激活cordns。如果是這種情況,請拍攝快照。因為接下來我們將為k8s網路安裝calico。
kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
你會看到印花布豆莢正在創造。
第7步:( 初始化k8s-dashboard)
讓我們通過運行來安裝儀錶板
kubectl apply -f
https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/
src/deploy/recommended/kubernetes-dashboard.yaml
You need a service account to access the k8s dashboard
kubectl --namespace kube-system create serviceaccount k8s-dadmin
(k8s-dadmin name of the service account)
kubectl create clusterrolebinding k8s-dadmin
--serviceaccount=kube-system:k8s-dadmin --clusterrole=cluster-admin
Run following command to generate the service account token
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret |
grep k8s-dadmin | awk {print $1})
This will print a long token save it you will need it to login to dashboard
運行kubectl代理,它將啟動儀錶板,您可以訪問 http:// localhost:8001
稍後您可以訪問實際的儀錶板門戶
HTTP://本地主機:8001 / API / V1 /命名空間/ KUBE-系統/服務/ HTTPS:kubernetes的儀錶板:/代理/
它會要求你提供令牌
複製並粘貼之前保存的服務帳戶令牌並將其粘貼到此處,您就可以登錄儀錶板。
步驟8 域加入所有工作節點)
運行Stepe 6中提供的kubeadm join命令
kubeadm join <master node ip>:6443 --token bkffxa.42w0tyswagctogv1
--discovery-token-ca-cert-hash sha256:894039dca5a45491db1090xxxxxxxxxxxxxxxxxxxxxxxx
返回主節點訪問儀錶板或運行 kubectl get節點
我說這不是伺服器級配置,這是你的工作站,所以你可能需要在重新啟動時關閉所有節點 - 如果你遇到問題在主節點中運行以下命令,你將能夠使你的集群工作!推薦閱讀: