文章目錄
- K8S搭建
- 配置要求
- 安裝 Kuboard-Spray
- 加載離線資源包
- 規劃并安裝集群
- 訪問集群
- 重啟Kubernetes集群
- Worker節點不能啟動
- 許多Pod一直Crash或不能正常訪問
- containerd配置網絡代理
- 常用的 kubectl 命令:
K8S搭建
安裝高可用的Kubernetes集群
配置要求
對于 Kubernetes 初學者,在搭建K8S集群時,推薦在阿里云或騰訊云采購如下配置:(您也可以使用自己的虛擬機、私有云等您最容易獲得的 Linux 環境)
- 至少 2 臺 2核4G 的服務器
- 本文檔中,CPU 必須為 x86 架構,暫時未適配 arm 架構的 CPU
- CentOS 7.8、 CentOS 7.9 或 Ubuntu 20.04
操作系統兼容性
CentOS 版本 | 本文檔是否兼容 | 備注 |
---|---|---|
CentOS 7.9 | 😄 | 已驗證 |
CentOS 7.8 | 😄 | 已驗證 |
Ubuntu 20.04 | 😄 | 已驗證 |
安裝 Kuboard-Spray
-
取一臺服務器或虛擬機,執行一條命令,即可完成 Kuboard-Spray 的安裝。
對這臺服務器的最低要求為:
- 1核2G
- 不少于 10G 磁盤空余空間
- 已經安裝好 docker
待執行的命令如下:
docker run -d \--privileged \--restart=unless-stopped \--name=kuboard-spray \-p 80:80/tcp \-v /var/run/docker.sock:/var/run/docker.sock \-v ~/kuboard-spray-data:/data \eipwork/kuboard-spray:latest-amd64# 如果抓不到這個鏡像,可以嘗試一下這個備用地址:# swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard-spray:latest-amd64
持久化
- KuboardSpray 的信息保存在容器的
/data
路徑,請將其映射到一個您認為安全的地方,上面的命令中,將其映射到了~/kuboard-spray-data
路徑; - 只要此路徑的內容不受損壞,重啟、升級、重新安裝 Kuboard-Spray,或者將數據及 Kuboard-Spray 遷移到另外一臺機器上,您都可以找回到原來的信息。
-
在瀏覽器打開地址
http://這臺機器的IP
,輸入用戶名admin
,默認密碼Kuboard123
,即可登錄 Kuboard-Spray 界面。
加載離線資源包
-
在 Kuboard-Spray 界面中,導航到
系統設置
-->資源包管理
界面,可以看到已經等候您多時的Kuboard-Spray 離線資源包
,如下圖所示:
-
點擊
導 入
按鈕,在界面的引導下完成資源包的加載。重要
- 權限問題
- 導入資源包時,可能會碰到
no such file or directory
或者permission denied
之類的錯誤提示,通常是因為您開啟了 SELinux,導致 kuboard-spray 不能讀取映射到容器/data
的路徑
- 導入資源包時,可能會碰到
- 離線導入
- 如果您處在內網環境,上圖中的列表默認將是空的,請注意其中的
離線加載資源包
按鈕,它可以引導您輕松完成資源包的離線加載過程。
- 如果您處在內網環境,上圖中的列表默認將是空的,請注意其中的
- 權限問題
規劃并安裝集群
-
在 Kuboard-Spray 界面中,導航到
集群管理
界面,點擊界面中的添加集群安裝計劃
按鈕,填寫表單如下:-
集群名稱: 自定義名稱,本文中填寫為 kuboard123,此名稱不可以修改;
-
資源包:選擇前面步驟中導入的離線資源包。
-
點擊上圖對話框中的
確定
按鈕后,將進入集群規劃頁面,在該界面中添加您每個集群節點的連接參數并設置節點的角色,如下圖所示:重要: kuboard-spray 所在機器不能當做 K8S 集群的一個節點,因為安裝過程中會重啟集群節點的容器引擎,這會導致 kuboard-spray 被重啟掉。
注意事項
-
最少的節點數量是 1 個;
-
ETCD 節點、控制節點的總數量必須為奇數;
-
在
全局設置
標簽頁,可以設置節點的通用連接參數,例如所有的節點都使用相同的 ssh 端口、用戶名、密碼,則共同的參數只在此處設置即可; -
在節點標簽頁,如果該節點的角色包含
etcd
則必須填寫ETCD 成員名稱
這個字段; -
如果您 KuboardSpray 所在節點不能直接訪問到 Kubernetes 集群的節點,您可以設置跳板機參數,使 KuboardSpray 可以通過 ssh 訪問集群節點。
-
集群安裝過程中,除了已經導入的資源包以外,還需要使用 yum 或 apt 指令安裝一些系統軟件,例如 curl, rsync, ipvadm, ipset, ethtool 等,此時要用到操作系統的 apt 軟件源或者 yum 軟件源。
全局設置
標簽頁中,可以引導您完成 apt / yum 軟件源的設置,您可以:- 使用節點操作系統已經事先配置的 apt / yum 源,或者
- 在安裝過程中自動配置節點的操作系統使用指定的軟件源
-
如果您使用 docker 作為集群的容器引擎,還需要在
全局設置
標簽頁指定安裝 docker 用的 apt / yum 源。如果您使用 containerd 作為容器引擎,則無需配置 docker 的 apt / yum 源,containerd 的安裝包已經包含在 KuboardSpray 離線資源包中。
-
-
點擊上圖的
保存
按鈕,再點擊執行
按鈕,可以啟動集群的離線安裝過程,如下圖所示:
-
取決于您機器的性能和網絡訪問速度,大概喝一杯茶的功夫,集群就安裝好了,安裝成功時,日志界面的顯示如下圖所示:
-
訪問集群
-
如果集群日志界面提示您集群已經安裝成功,此時您可以返回到集群規劃頁面,此界面將自動切換到
訪問集群
標簽頁,如下圖所示:界面給出了三種方式可以訪問 kubernetes 集群:
- 在集群主節點上執行 kubectl 命令
- 獲取集群的 .kubeconfig 文件
- 將集群導入到 kuboard管理界面
重啟Kubernetes集群
Kubernetes集群的設計目標是setup-and-run-forever,然而許多學習者使用自己筆記本上的虛擬機安裝K8S集群用于學習,這就必然會出現反復重啟集群所在虛擬機的情況。本文針對重啟后會出現一些的一些令人困惑的問題做了解釋。
Worker節點不能啟動
Master 節點的 IP 地址變化,導致 worker 節點不能啟動。請重裝集群,并確保所有節點都有固定內網 IP 地址。
許多Pod一直Crash或不能正常訪問
kubectl get pods --all-namespaces
重啟后會發現許多 Pod 不在 Running 狀態,此時,請使用如下命令刪除這些狀態不正常的 Pod。通常,您的 Pod 如果是使用 Deployment、StatefulSet 等控制器創建的,kubernetes 將創建新的 Pod 作為替代,重新啟動的 Pod 通常能夠正常工作。
kubectl delete pod <pod-name> -n <pod-namespece>
containerd配置網絡代理
沒有配置containerd運行時代理設置。因為K8使用containerd運行時拉取圖像。如果您的PC位于代理之后,如果它不直接使用代理系統設置(例如docker,containerd等),您應該始終配置應用設置。
sudo mkdir -p /etc/systemd/system/containerd.service.d
sudo touch /etc/systemd/system/containerd.service.d/http-proxy.conf
vi /etc/systemd/system/containerd.service.d/http-proxy.conf
# 在http-proxy.conf里寫入以下配置
[Service]
Environment="HTTP_PROXY=http://xx.x.xx.xxx:xxxx/" "HTTPS_PROXY=http://xx.x.xx.xxx:xxxx/"
"NO_PROXY=localhost,127.0.0.1,192.168.182.xxx"
# 重啟containerd服務
sudo systemctl daemon-reload
sudo systemctl restart containerd
sudo systemctl show --property=Environment containerd
常用的 kubectl 命令:
-
kubectl get: 獲取資源列表
kubectl get pods
: 獲取 Pod 列表kubectl get nodes
: 獲取節點列表kubectl get services
: 獲取服務列表kubectl get deployments
: 獲取部署列表
-
kubectl describe: 顯示資源的詳細信息
kubectl describe pod <pod-name>
: 顯示 Pod 的詳細信息kubectl describe node <node-name>
: 顯示節點的詳細信息kubectl describe service <service-name>
: 顯示服務的詳細信息
-
kubectl create: 創建資源
kubectl create deployment <name> --image=<image>
: 創建一個部署kubectl create service <name> --tcp=<port>:<targetPort>
: 創建一個服務
-
kubectl delete: 刪除資源
kubectl delete pod <pod-name>
: 刪除 Podkubectl delete deployment <deployment-name>
: 刪除部署kubectl delete service <service-name>
: 刪除服務
-
kubectl exec: 在容器內執行命令
kubectl exec -it <pod-name> -- <command>
: 在 Pod 內執行命令
-
kubectl logs: 獲取容器日志
kubectl logs <pod-name>
: 獲取 Pod 的日志
-
kubectl apply: 應用配置文件
kubectl apply -f <filename>
: 應用配置文件
-
kubectl scale: 調整副本數
kubectl scale deployment <deployment-name> --replicas=<replica-count>
: 調整部署的副本數
-
kubectl rollout: 管理滾動更新
kubectl rollout status deployment/<deployment-name>
: 查看滾動更新狀態kubectl rollout history deployment/<deployment-name>
: 查看滾動更新歷史kubectl rollout undo deployment/<deployment-name>
: 回滾滾動更新
-
kubectl port-forward: 將本地端口映射到 Pod 端口
kubectl port-forward <pod-name> <local-port>:<pod-port>
: 將本地端口映射到 Pod 的端口