5分钟安装Kubernetes+带你轻松安装istio服务网格指南
上次我跟大家簡單介紹了一下Kubernetes的各個組件及其含義,本期本來計劃帶領大家一起學習一些常用命令,但我認為這種方式可能無法達到學習的效果。有可能你們會直接忘記,甚至可能沒有興趣去學。我也理解,心想這跟我有什么關系,我本地又搭建不起來K8s。
我一直堅持讓大家親自動手敲命令解決問題,因為只有這樣才能真正理解命令的作用。所以我一直秉持著讓大家能夠直接學習命令,我也不想去寫什么安裝教程,直接給你們封裝好環境了,但是這個環境是我自己站在巨人的肩膀上一步一步搭建起來的。我本地進行測試是沒有問題的。這個環境僅供大家本地學習使用,如果因此造成任何損失,我概不負責哦。
如果你想獲取Kubernetes的學習環境,請關注我的主頁,然后在微信中搜索我的公眾號即可后臺回復: k8s。由于不能進行廣告宣傳,我就不在這里提及公眾號的名字了。現在,我們繼續正式話題,開始快速安裝istio。
K8s直接安裝
前提是你需要先獲取一個適用于Kubernetes學習環境的安裝包。我的分享鏈接將提供五個文件,它們分別是:
oracle VM visualbox 類似于你的vmware一樣是一個運行虛擬機的軟件,你總不能去買一臺高配置的云服務器去搞吧。也沒有資金。
k1215-centos81-docker-1.20.6-56.5.ova是只集成了k8s和docker的鏡像,可以直接學習各種k8s的命令
k8s-istio-centos81-docker-1.20.6-56.ova是在k1215-centos81-docker-1.20.6-56.5.ova版本基礎上集成好了istio的鏡像,你可以直接導入到visualbox 中啟動運行即可。剩下的就可以學習服務網格了。
istio-1.11.1-linux-amd64.tar.gz是istio的離線安裝包,因為需要代理,所以我也提前下載下來了。
kube-flannel.yaml是網絡組件,因為需要代理,所以我也提前下載下來了。
一旦你下載完成。助你快速學習k8s的命令用法以及其他知識,省去安裝這種費勁的無用耗時。
導入基礎K8s鏡像
我們將根據一個僅集成了Kubernetes和Docker的鏡像,逐步進行istio的安裝。這樣做有兩個好處:一方面,你可以直接練習Kubernetes的命令;另一方面,你能夠更深入地理解Kubernetes的各種概念和問題。好的,我們開始吧。
首先,你需要確保已經成功安裝了Oracle VM VirtualBox(關于這個安裝過程我就不詳細解釋了)。安裝完成后,我們需要進行第一步,即處理你的NAT網絡設置,因為這個鏡像需要通過NAT模式進行聯網。請按照以下圖示進行設置:
在創建時,你無需填寫任何內容,因為系統會自動為你生成IP地址。你只需要記住這個NAT網絡的名稱即可。
好的,現在你可以開始直接導入基于k8s的基礎鏡像。如下圖所示:
在導入選擇K8s的基礎鏡像后,需要注意的是MAC地址設定這個方面。除此之外,沒有其他需要特別注意的地方。接下來就是等待過程。
當你完成操作之后,請務必進行虛擬機網絡的設置。
好的,現在讓我們來啟動你的虛擬機吧!k8s的大門已經為你打開了。然而,在建立istio服務網格的過程中,你可能會遇到各種報錯。不用擔心,我撰寫本文的目的就是為了幫助你解決這些報錯,并成功建立起istio服務網格。此外,你還能學到一些常用命令。
istio手動安裝
當你準備登錄虛擬機時,請使用以下賬戶信息:用戶名為root,密碼為123456。如果你安裝了xshell,你可以通過使用IP地址192.168.56.5直接進行連接。無需擔心IP地址與你本地設備的地址不同,因為它已被設定為固定值。
由于我已經完成了所有的環境配置工作,因此可以直接利用k8s的命令進行操作。
kubectl get cs
好的,讓我們開始執行第一個命令,用于查看各個組件的狀態。這個命令的縮寫是"cs",代表"component status"。我已經在之前的文章中講解了有哪些組件了。所以我不會再重復告訴你。然而,令人意外的是,執行命令后出現了錯誤。
至于為什么會報出這個錯誤,關于這個問題在網上有很多不同的說法。幸運的是,我找到了一個解決方案。首先,我需要先卸載一下相關的內容。
卸載:
kubeadm reset
ifconfig cni0 down && ip link delete cni0
ifconfig flannel.1 down && ip link delete flannel.1
rm -rf /var/lib/cni/
rm -rf /etc/kubernetes
rm -rf /root/.kube/config
rm -rf /var/lib/etcd
重新安裝:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.21.5 --pod-network-cidr=10.10.0.0/16 --service-cidr=10.20.0.0/16 --apiserver-advertise-address=192.168.56.5
安裝完之后,在執行一下,kubeadm讓我們執行的語句:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
再次執行查看組件狀態后,仍然無法正常工作。然而,其中一個組件成功運行了:
這時候,為了完成任務,我們需要對一些文件進行修改。我已經準備好了命令,我們需要做的是注釋掉兩個文件中的port這一行。
vim /etc/kubernetes/manifests/kube-scheduler.yaml
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
一旦你完成了操作,你就能夠觀察到我們的k8s正常運行了。
好的,現在我們開始安裝istio吧。由于istio需要使用代理,所以我已經提前準備好了相應版本的istio安裝包。接下來,只需將安裝包直接復制到虛擬機中即可開始安裝。
使用tar -zxvf istio-1.11.1-linux-amd64.tar.gz命令解壓成功后,需要你修改到etc/profile中。
export ISTIO_HOME=/root/istio-1.11.1/bin
export PATH=$ISTIO_HOME:$PATH
在執行完相應的操作后,記得使用命令 "source /etc/profile" 來使其生效。接下來,你就可以開始安裝了。
安裝命令:istioctl install --set profile=demo -y
在等待了大約幾分鐘后,不出所料,還是遇到了錯誤。我們的第一反應肯定是上網搜索解決方案。然而,盡管我嘗試了所有的解決方案,例如網絡代理等,但都沒有成功解決我的問題。答案眾多,但都不是我所需要的正確答案。
然而,我知道當安裝istio時,它會在k8s中啟動一個pod。于是,我決定直接查看后臺啟動日志,這樣或許能找到問題的所在。因此,現在我們可以開始學習一些關于k8s命令的知識了。
首先,我們需要檢查一下istio是否安裝在特定的命名空間中。命名空間可以被理解為一種隔離機制,類似于進行分組操作,將同一命名空間下的pod視為一組。
kubectl get ns
為了查看所有的命名空間,你可以使用以下命令:kubectl get namespaces 或者 kubectl get ns。通過執行這個命令,你可以輕松地確定istio是否安裝在名為istio-system的命名空間中。通常情況下,我們會在默認的命名空間default下進行操作。
kubectl get pods -n
為了查看istio-system命名空間下的pod狀態,你可以使用以下命令:kubectl get pods -n istio-system。通過添加"-n"參數并指定命名空間,你可以在不切換命名空間的情況下,輕松地查看指定命名空間下的pod狀態。當然,如果你希望切換到其他命名空間,你可以使用以下命令::kubectl config set-context $(kubectl config current-context) --namespace=istio-system
kubectl describe pod
好的,我們注意到pod的狀態異常,因此我們首先查看pod的描述以確定是否有異常情況。執行命令kubectl describe pod <pod的名稱> -n istio-system后,我們發現確實有提示信息如下:
kubectl taint nodes
錯誤信息可以輕松查看真正的錯誤原因。通常情況下,Kubernetes的Master節點是不可調度的,以防止在Master節點上運行用戶Pod。然而,考慮到我們的虛擬環境只是用于學習,我們可以直接運行Pod而不管它們是否可以調度。因此,我們需要對配置進行調整。
命令是:kubectl taint nodes <node-name> node-role.kubernetes.io/master-請將
kubectl get nodes
如果你不知道你的node-name的話,可以使用kubectl get nodes獲取。
當你執行完后,我們再來重新安裝一次istio,經過優化。然而,我們發現問題仍然存在,因此我們再次執行describe命令時仍然遇到了錯誤。具體錯誤信息如下:
我看完日志后的第一反應是感到困惑,因為我對日志中出現的內容不太理解。于是我決定找AI幫忙,讓它來分析一下。AI給出的接口看起來很可信,它指出缺少了POD network Flannel網絡插件,我看了一下報錯信息果然如此。既然找到了問題,那就著手解決吧。
kubectl apply -f
經過一番搜索看來是需要:wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yaml執行命令下載一個文件。但是一看就是需要代理的,所以我也提前準備好了kube-flannel.yaml。當你往你的虛擬機中傳輸完之后,可以直接使用命令啟動kubectl apply -f kube-flannel.yaml
然而,我執行完畢后,令人驚訝的是,Istio仍然無法正常工作。從啟動日志中可以看出,它被安裝在了kube-flannel命名空間中。現在,我們來查看一下它的Pod情況。
k get pod -n kube-flannel執行完后查看到pod沒啟動成功,我們再看下他的描述信息。
kubectl logs -n
這次的描述信息似乎很正常,沒有明顯的錯誤提示,只有一個提示信息。為了更進一步了解情況,我們可以再次查看它的啟動日志,以下是相應的命令:kubectl logs -n kube-flannel kube-flannel-ds-h47f6
在查看日志后,我們發現問題居然是由于網絡段的設置引起的,這真是個坑啊。不過好消息是,這似乎是最后一個問題了。我就不在此處詳述了,我希望你能夠自行解決。解決完畢后,你將進入istio的訓練天地,如果你真的遇到困難,可以在我的公眾號中回復k8s,我將會給你回復并提供答案。
當你安裝成功后,所有的服務都將啟動
總結
以上所有的問題,我都是自己解決的。如果你覺得我提供的幫助不錯,可以給我一個贊。對于初學者來說,我建議從基礎版鏡像開始慢慢構建istio,這樣可以更好地學習k8s的命令。當然,如果你已經是k8s的老手,除了別跳過visualBox的過程外,你可以直接下載已經搭建好的istio虛擬機鏡像。好的,這一章就到此結束了。記得關注我的公眾號,我的宗旨是讓你用最小的成本學習到最多的技術內容。
總結
以上是生活随笔為你收集整理的5分钟安装Kubernetes+带你轻松安装istio服务网格指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Qt开发:Slider滑块条组件
- 下一篇: 原神奶酪怎么获取 奶酪有什么作用