2個伺服器搭建k8s集群
1. 使用kubeadm搭建高可用的K8S集群(2022年1月親測有效)
kubeadm是官方社區推出的一個用於快速部署kubernetes集群的工具。
這個工具能通過兩條指令完成一個kubernetes集群的部署:
在開始之前,部螞余署Kubernetes集群機器需要滿足以下幾個條件:
3.1 安裝相關包和keepalived
3.2配置master節點
master1節點配置
master2節點配置
3.3 啟動和檢查
在兩台master節點都執行
啟動後查看master1的網卡信息
4.1 安裝
4.2 配置
兩台master節點的配置均相同,配置中聲明了後端代理的兩個master節點伺服器,指定了haproxy運行的埠為16443等,因此16443埠為集群的入口
4.3 啟動和檢查
兩台master都啟動
檢查埠
Kubernetes默認CRI(容器運行時)為Docker,因此先安裝Docker。
5.1 安裝Docker
5.2 添加阿里雲YUM軟體陵物培源
5.3 安裝kubeadm,kubelet和kubectl
由於版本更新頻繁,這里指定版本號部署:
6.1 創建kubeadm配置文件
在具有vip的master上操作,這里為master1
6.2 在master1節點執行
按照提示保存以下內容,一會要使用(kubeadm init中的回顯內容):
按照提示配置環境變數,使用kubectl工具:
查看集群狀態
創建kube-flannel.yml,在master1上執行
安裝flannel網路
檢查
8.1 復制密鑰及相關文件
從master1復制密鑰及相關文件到master2
8.2 master2加入集群
執行在master1上init後輸出的join命令,需要帶上參數--control-plane表示把master控制節點加入集群(之前kubeadm init回顯內容)
檢查狀態(master1上執行)
在node1上執行
向集群添加新節點,執行在kubeadm init輸出的kubeadm join命令(之前kubeadm init回尺唯顯內容,注意不加--control-plane):
集群網路重新安裝,因為添加了新的node節點(在master1上執行)
檢查狀態(在master1上執行)
在Kubernetes集群中創建一個pod,驗證是否正常運行:
訪問地址:http://192.168.3.158:31030
2. 快速搭建kubernetes高可用集群(3master+3worker+負載均衡)
kubeadm 是Kubernetes官方提供的用於快速安裝Kubernetes集群的工具,通過kubeadm的方式安裝集群比二進制的方式安裝高效不少。建議初次使用k8s使用此方式安裝,二進制的方式會很快令人失去信心。
在開始之前,部署Kubernetes集群機器需要滿足以下幾個條件:
dnsmasq安裝可參考我的另一篇 文章
ha1節點配置
ha2節點配置
在兩台ha節點都執行
啟動後查看ha的網卡信息(有一台可看到vip)
兩台ha節點的配置均相同,配置中聲明了後端代理的兩個master節點伺服器,指定了haproxy運行的埠為16443等,因此16443埠為集群的入口
兩台ha都啟動
檢查埠
Kubernetes默認CRI(容器運行時)為Docker,因此先安裝Docker。kubelet控制容器,kubeadm控制加入平面。
鏡像加速
由於版本更新頻繁,這里指定版本號部署:
在master1操作
按照提示配置環境變數,使用kubectl工具:
按照提示保存以下內容,一會要使用:
查看集群狀態
從官方地址獲取到flannel的yaml,在master1上執行
安裝flannel網路
檢查
從master1復制密鑰及相關文件到master2
master3操作同上
執行在master1上init後輸出的join命令,需要帶上參數 --control-plane 表示把master控制節點加入集群
檢查狀態
在node1、2、3上執行
向集群添加新節點,執行在kubeadm init輸出的kubeadm join命令:
檢查狀態
在Kubernetes集群中創建一個pod,驗證是否正常運行:
訪問地址: http://NodeIP:Port
3. 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 上的污點。刪除污點可以執行以下命令,
它應該返回以下內容。
4. 基於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集群
5. 超全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. 常用排錯命令如下
6. 企業級k8s集群部署
二進制包
註:推薦用二進制包部署Kubernetes集群,雖手動部署麻煩,但可以學習很多工作原理利於後期維護。
環境
可以使用VMware虛擬機,宿主機必須8G內存以上
• 伺服器可以訪問外網,有從網上拉取鏡像的需求
單Master伺服器規劃:( 註:部署時候根據具體環境進行IP地址調整即可 )
這里使用3台組建集群,可容忍1台機器故障,當然,你也可以使用5台組建集群
etcd1: 192.168.3.110 etcd2: 192.168.3.112 etcd3: 192.168.3.113
cfssl是一個開源的證書管理工具,使用json文件生成證書,相比openssl更方便使用。
找任意一台伺服器操作,這里用Master節點。
創建工作目錄:
自簽CA:
生成證書:
會生成ca.pem和ca-key.pem文件。
創建證書申請文件:
註:上述文件hosts欄位中IP為所有etcd節點的集群內部通信IP,一個都不能少!為了方便後期擴容可以多寫幾個預留的IP。
生成證書:
會生成etcd.pem和etcd-key.pem文件。
https://github.com/etcd-io/etcd/releases/download/v3.5.1/ etcd-v3.5.1-linux-amd64.tar.gz
以下在節點1上操作,然後將文件拷貝到其他集群機器
把剛才生成的證書拷貝到配置文件中的路徑:
注意修改節點2和節點3分別etcd.conf配置,按照下面提示的修改
啟動各節點的etcd服務
如果輸出上面信息,就說明集群部署成功。
如果有問題看日誌:/var/log/message
docker二進制下載地址:
https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz
註:使用yum安裝也行
集群所有機器都安裝docker
生成證書:
會生成ca.pem和ca-key.pem文件。
創建證書申請文件:
生成證書:
會生成k8s.pem和k8s-key.pem文件。
下載地址參考:
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#downloads-for-v12013
Wget https://dl.k8s.io/v1.20.13/kubernetes-server-linux-amd64.tar.gz
把剛才生成的證書拷貝到配置文件中的路徑:
TLS Bootstrapping 機制,對work-node加入進行自簽證書用
創建上述配置文件中token文件:
token 可以自行生產,網路下怎麼生產
kube-apiserver服務
生成kube-controller-manager證書:
生成kubeconfig文件(以下是shell命令,直接在終端執行):
生成kube-scheler證書:
生成kubeconfig文件:
生成kubeconfig文件:
通過kubectl工具查看當前集群組件狀態:
在所有worker node創建工作目錄:
從master節點拷貝:
註:由於網路插件還沒有部署,節點會沒有準備就緒 NotReady
二進制包下載地址:https://github.com/containernetworking/plugins/releases
確保kubelet啟用CNI:
在Master執行:
應用場景:例如kubectl logs
在Master節點將Worker Node涉及文件拷貝到新節點192.168.3.112/113
註:這幾個文件是證書申請審批後自動生成的,每個Node不同,必須刪除
Node2(192.168.3.113 )節點同上。記得修改主機名!
訪問地址:https://NodeIP:30001
創建service account並綁定默認cluster-admin管理員集群角色:
使用輸出的token登錄Dashboard。
CoreDNS用於集群內部Service名稱解析。
DNS解析測試:
這樣 單Master集群就搭建完成了
7. 如何在本地快速啟動一個k8s集群小技巧,學到了
最近在閱讀《每天5分鍾玩轉Kubernetes》 這本書,個人感覺是一本不錯的 K8S 的入門書籍。
我們在剛開始學習一項技術的時候,不論是通過官方文檔、書籍,亦或是視頻的形式,如果僅僅是去看,而不去練習實踐的話,那麼是很難將其真正應用起來的。
然而當我開始准備實踐的時候,發現要想在本地將 K8S 跑起來,並不像我們想像的那麼容易。存在以下幾點「問題」:
那麼有沒有什麼方案可以更優雅更輕量更快速搭建一個 K8S 集群呢?答案就是 k3d。
其實有很多種方式可以在本地運行 k8s,比如:
當然了,如果只是學習 k8s 的使用,那麼以上方案均可以使用。
k3s 包括以下一些組件:
k3s 是一種模塊化的發行版,可以很方便的替換上面的組件。
在 Mac 下,使用 Homebrew 可以很方便的安裝 k3d: brew install k3d。
順手安裝一下 kubectl 和 kubecm:
我們通過 k3d 的命令可以輕易的在本地啟動一個或 N 個 k8s 集群。
首先我們嘗試創建一個 1主2從 的集群:
初次創建可能會比較慢,因為會從 Docker 倉庫拉取最新的 rancher/k3s 鏡像。
當出現下面的日誌時,k8s 集群就創建成功了
此時,我們按照日誌提示,運行 kubectl cluster-info 查看下當前集群的信息:
運行 kubectl get nodes 查看下當前集群的節點情況:
注意,這里的「節點」其實是本機 Docker 運行的容器,通過 docker ps 查看下當前本機運行的容器吧
解釋一下我們創建集群時配置的埠映射:
現在我們集群和主機的網路通信是這樣子的:
創建一個 nginx 的 Deployment
創建一個 Service 通過 ClusterIP 的方式暴露服務
創建一個 Ingress,k3s 默認安裝的是 traefik 1.x 作為 Ingress Controller
此時,打開瀏覽器,訪問 http://localhost:8080/ 就可以看到熟悉的 nginx 默認頁。
這是不是太酷了~
當使用 Helm Chart 安裝 Rancher 時,可能會出現如下錯誤日誌:
要創建一個 k8s 版本號為 v1.19.8-k3s1 的 k8s 集群,可以在創建集群的命令後面加 --image 參數,指定版本號:k3d cluster create first-cluster xxxxx --image rancher/k3s:v1.19.8-k3s1
還記得在第二步順手安裝的 kubecm 嗎?
當我們在本地使用 k3d 創建了多個集群之後,我們可以通過 kubecm 快速切換 context。