當前位置:首頁 » 編程軟體 » k8s編譯安裝

k8s編譯安裝

發布時間: 2023-08-17 06:05:50

① K8S安裝和創建集群終極教程(單master多worker)

本文會以 最簡單 最直接 最完整 的方式記錄kubernetes(下面統稱K8S)單master多工作節點(worker nodes)的集群步驟

首先要簡單了解一下本文的3個核心概念:

內存建議至少4G

問:如何查看主機名?

答:執行命令hostname

問:如何修改主機名?

答:永久生效的做法:執行命令vi /etc/hostname,把第一行去掉(不能注釋掉,要去掉),然後重新寫上自定義的主機名(注意命名規范),保存並重啟後生效;

臨時生效的做法:執行以下命令

問:如何查看MAC地址?

答:執行命令ip link,然後看你的第一網卡

問:如何查看proct_uuid?

答:執行命令sudo cat /sys/class/dmi/id/proct_uuid

注意:30000-32767這個埠范圍是我們創建服務的埠必須要設置的一個范圍(如果設置范圍以外的會有限制提示並創建失敗),這是K8S規定的。

另外,如果你要直接關閉防火牆可以執行

⑥必須禁用Swap

Swap total大於0,說明Swap分區是開啟的

問:如何關閉Swap?

答:編輯文件/etc/fstab,在swap行前面加上#號注釋, 保存並重啟伺服器

再次查看分區狀態,已生效

常見的容器引擎(Container runtime,簡稱runtime):

本文使用的容器引擎是Docker

安裝完成後查看版本:

當出現可能跟Docker引擎相關的奇怪異常時可以嘗試把Docker卸載干凈並重新安裝,但一定要注意鏡像、容器、卷或配置文件這些是否需要備份。

下面記錄卸載Docker引擎的步驟:

①卸載 Docker Engine、CLI 和 Containerd 包:

②主機上的映像、容器、卷或自定義配置文件不會自動刪除。刪除所有鏡像、容器和卷:

③配置文件如果有不合法的字元時會導致啟動失敗,我們需要將其刪除然後重建

此時Docker引擎已卸載干凈

官網用的是谷歌的yum源,因為國內是連不上的,所以這里替換成阿里提供的yum源

①安裝

從安裝信息中可以看到版本號是1.22

Installing:

kubeadm x86_64 1.22.4-0 kubernetes 9.3 M

kubectl x86_64 1.22.4-0 kubernetes 9.7 M

kubelet x86_64 1.22.4-0 kubernetes 20 M

②啟動



這就是一個驅動程序,注意cgroup和cgroupfs不要混淆了

引用官方的一段話

「由於 kubeadm 把 kubelet 視為一個系統服務來管理,所以對基於 kubeadm 的安裝, 我們推薦使用 systemd 驅動,不推薦 cgroupfs 驅動。」

kubeadm默認是使用systemd 驅動,而我們的Docker默認驅動是cgroupfs(docker info可以查看),所以需要將Docker的驅動改成systemd

①編輯Docker配置文件

②重啟Docker服務

再次docker info查看驅動信息已變成了systemd

工作節點(worker nodes)的最小配置就到這里了

①鏡像源參數說明

默認情況下, kubeadm 會從 k8s.gcr.io 倉庫拉取鏡像,國內是拉不了的。官方文檔明確表示允許你使用其他的 imageRepository 來代替 k8s.gcr.io。

--image-repository 你的鏡像倉庫地址

接下來我找了一些國內的鏡像源,並簡單做了下分析

綜合上述統計,我選擇阿里雲的鏡像源

②ip地址范圍參數說明

--pod-network-cidr =192.168.0.0/16

注意:如果192.168.0.0/16已經在您的網路中使用,您必須選擇一個不同的pod網路CIDR,在上面的命令中替換192.168.0.0/16。

集群初始化命令:

因為我用的是演示機器,所以這里把完整的執行信息都貼出來方便查閱,平時工作中一定要注意保護好敏感的信息(我的ip地址范圍是自定義的便於下面的功能演示,另外初次init需要下載鏡像文件,一般需要等幾分鍾)

如上所示,集群初始化成功,此時一定要注意看上面執行結果最後的那部分操作提示,我已用標明了初始化成功後還需要執行的3個步驟

注意:如果init成功後發現參數需要調整,可以執行kubeadm reset,它的作用是盡最大努力恢復kubeadm init 或者 kubeadm join所做的更改。

To start using your cluster, you need to run the following as a regular user:

翻譯:開始使用集群前,如果你是普通用戶(非root),你需要執行以下的命令:

Alternatively, if you are the root user, you can run:

翻譯:或者,如果你使用的是root,你可以執行以下命令:

(注意:export只是臨時生效,意味著每次登錄你都需要執行一次)

網路配置配的就是Pod的網路,我的網路插件選用calico

cidr就是ip地址范圍,如果您使用 pod CIDR 192.168.0.0/16,請跳到下一步。

但本文中使用的pod CIDR是192.100.0.0/16,所以我需要取消對清單中的 CALICO_IPV4POOL_CIDR 變數的注釋,並將其設置為與我選擇的 pod CIDR 相同的值。(注意一定要注意好格式,注意對齊)

可根據需求自定義清單,一般不需要的就直接跳過這步

在所有的工作節點上執行join命令(復制之前初始化成功後返回的加入集群命令到所有的工作節點執行即可)

master上查看所有節點的狀態

到這里集群已經創建完成

最後我再安裝K8S的可視化界面kubernetes-dashboard,方便我們日常使用

①下載yaml文件

②修改yaml文件,新增type和nodePort,使服務能夠被外部訪問

③安裝並查看運行情況

④新建用戶

文件創建完成後保存並apply

⑤獲取Token,用於界面登錄

⑥登錄dashboard

192.168.189.128是我的master伺服器ip,另外要注意必須使用https,並且不能使用ie內核模式

復制⑤生成的token到輸入框,點擊登錄

dashboard安裝配置完成

問:如何在查看資源情況?

答:在master上執行以下命令可查看資源情況(-o wide是顯示更詳細的信息),

①查看所有節點

②查看所有命名空間

③查看命名空間下的pod

④查看所有命名空間的pod

⑤實時查看查看命名空間下的pod運行情況

問:kubeadm join 出現異常[ERROR Port-10250]: Port 10250 is in use,如何解決?

答:這是因為你之前join失敗過了,需要先執行kubeadm reset再重新join

問:虛擬機上測試時網卡突然消失如何解決(題外問題記錄)?

答:

①確認丟失的網卡信息,ens開頭(可選步驟)

ifconfig -a

②執行以下命令解決

問:如何查看K8S版本?

答:kubectl version

問:join命令忘記或者過期了怎麼辦?

答:

生成永不過期的

生成時效24小時的

問:Pod不斷重啟並且無其它報錯信息時怎麼辦?

答:這種情況通常是因為你的集群中只有master,沒有worker節點,master的創建默認是有污點的,即不允許調度新的Pod,如果你需要(當然這並不推薦),就需要刪除 master 上的污點。刪除污點可以執行以下命令,

它應該返回以下內容。

② Kubernetes(K8S)入門與安裝配置

Kubernetes是一個跨主機集群的開源的容器調度平台,它可以自動化應用容器的部署、擴展和操作,提供以容器為中心的基礎架構。谷歌旗下開源軟體,江湖人稱K8S。

上圖是一個通過K8S搭建的集群環境,採用三台物理機搭建(三台機器是K8S搭建集群的最低要求),我先簡單介紹一下幾個重點名詞。

Centos7Master*1(注意必須是雙核以上的CPU,否則無法初始化K8S)

Centos7Node*2

將文件上傳至該目錄

網盤地址:https://pan..com/s/1NiAdf0Gp24qjVx2v_HqqyQ

提取碼:aew7

執行以下命令

如果不是groupfs,執行下列語句

將最後一行注釋

運行dockerimages可以看到以下幾個關鍵應用

kube-proxy容器間通訊代理、kube-apiserverAPI服務端、kube-scheler任務調度器、kube-controller-manager集群控制器、corednsK8S內置的DNS伺服器、etcd用於保存集群所有的網路配置和對象的狀態信息、pause前面已經提到用於容器間的通訊以及數據卷的掛載。至此K8S安裝完成

圖中的第一個紅框的命令是需要管理員手動復制,然後在master伺服器上執行的。

PS:admin.conf是kubeadm集群管理的核心配置文件,包含整個集群各個節點的授權信息,以及本身的一些配置信息

第二個紅框中的命令是在node節點上執行,裡麵包含了一個加入集群的token認證信息以及ca證書的hashcode。通過該token可以加入K8S集群.

從圖中看到master節點處於NotReady狀態,說明節點中存在有問題的Pod,查看存在問題的pod,執行以下命令查看所有Pod狀態

如果某個Pod的STATUS處於CrashLoopBackOff狀態表示創建失敗了,那麼它會不斷自動重新創建。上圖中兩個coredns處於pending狀態,原因是我們沒有配置K8S網路通訊協議fannel,從上傳的文件中載入並創建flannel網路組件

3.在node節點上執行剛剛由kubeadm生成的節點加入命令

如果出現反復無法加入節點的情況,運行kubeadmreset這條命令還原當前節點上kubeadminit或者kubeadmjoin所做的所有更改。當想加入新節點忘記token時可以使用kubeadmtokenlist查看token,或者kubeadmtokencreate創建token,採用跳過ca安全認證的方式加入節點。

4.三台機器設置kubelet開機自啟,至此通過kubeadm集群配置完成

在主節點上執行以下命令,以下三個配件都是已經配置好的,裝載即可。

圖中dashboard服務已經被創建,配置文件中關閉了密碼驗證,只需要瀏覽器打開http://192.168.220.131:32000無需登錄。

③ 基於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集群

熱點內容
電腦華為雲空間哪裡密碼設置 發布:2025-02-04 16:22:15 瀏覽:755
sql不重復記錄 發布:2025-02-04 16:21:39 瀏覽:510
硬碟緩存速度 發布:2025-02-04 16:20:51 瀏覽:585
cmc的密碼是什麼意思 發布:2025-02-04 16:16:01 瀏覽:969
ccs編譯找不到匯編程序 發布:2025-02-04 16:15:52 瀏覽:770
安卓如何恢復刪除記錄 發布:2025-02-04 16:12:08 瀏覽:609
signatureandroid 發布:2025-02-04 16:11:31 瀏覽:16
linux模擬 發布:2025-02-04 16:06:31 瀏覽:401
python405 發布:2025-02-04 16:01:28 瀏覽:716
單片機閃爍燈編程 發布:2025-02-04 15:50:19 瀏覽:880