一、系統配置與要求
1.1、系統環境:
角色 | CPU核數 | 內存 | 系統盤 | 數量 |
---|---|---|---|---|
部署機 | 4 | 8G | 100G | 1 |
Master | 2 | 4G | 100G | 1 |
Worker | 2 | 4G | 100G | 2 |
1.2、軟件要求
需求項 | 具體要求 | 參考(以CentOS7.6)為例 |
---|---|---|
操作系統 | CentOS/RHEL 7.4 - 7.7 Minimal EulerOS 2.5(x86_64) EulerOS 2.8(arm64) |
cat /etc/redhat-release |
kernel版本 | >=Linux 3.10.0-957.el7.x86_64 | uname -sr |
swap | 關閉。如果不滿足,系統會有一定幾率出現 io 飆升,造成 docker 卡死。kubelet 會啟動失敗(可以設置 kubelet 啟動參數 --fail-swap-on 為 false 關閉 swap 檢查) | swapoff -a sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab |
防火牆 | 關閉。Kubernetes 官方要求 | systemctl stop firewalld && systemctl disable firewalld |
SELinux | 關閉 | setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config |
時區 | 所有服務器時區必須統一,建議設置為 Asia/Shanghai | timedatectl set-timezone Asia/Shanghai |
二、KubeOperator安裝
2.1、在線安裝
# 以 root 用戶 ssh 登錄目標服務器, 執行如下命令
curl -sSL https://github.com/KubeOperator/KubeOperator/releases/latest/download/quick_start.sh -o quick_start.sh
bash quick_start.sh
2.2、離線安裝
(1) 下載安裝包
下載離線安裝包:https://pan.baidu.com/s/1hfpbip-OaNM0r9nch7Texw 提取碼 kc8p
(2) 解壓安裝包
# 解壓安裝包
tar zxvf KubeOperator-release-v3.1.1.tar.gz
(3) 執行安裝腳本
# 進入安裝包目錄
cd kubeoperator-release-v3.1.1
# 運行安裝腳本
/bin/bash install.sh
# 等待安裝腳本執行完成后,查看 KubeOperator 狀態
koctl status
安裝完成后,以下服務應都處於 healthy 狀態。若有服務未正常啟動,可以使用 koctl restart 命令進行重新啟動。
[root@localhost kubeoperator-release-v3.1.1]# koctl status
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------------------------
kubeoperator_grafana /run.sh Up (healthy) 3000/tcp
kubeoperator_kobe kobe-server Up (healthy) 8080/tcp
kubeoperator_kotf kotf-server Up (healthy) 8080/tcp
kubeoperator_mysql /entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp
kubeoperator_nexus sh -c ${SONATYPE_DIR}/star ... Up 0.0.0.0:8081->8081/tcp, 0.0.0.0:8082->8082/tcp, 0.0.0.0:8083->8083/tcp
kubeoperator_nginx /docker-entrypoint.sh ngin ... Up (healthy) 0.0.0.0:80->80/tcp
kubeoperator_server ko-server Up (healthy) 8080/tcp
kubeoperator_ui /docker-entrypoint.sh ngin ... Up (healthy) 80/tcp
kubeoperator_webkubectl sh /opt/webkubectl/start-w ... Up (healthy)
(4) 登錄
安裝成功后,通過瀏覽器訪問,輸入以下信息登錄 KubeOperator。如果網絡環境中有防火牆或安全組請開啟 TCP/80,8081-8083 端口。
地址: http://目標服務器IP地址:80
用戶名: admin
密碼: kubeoperator@admin123
(5) 幫助
koctl --help
(6) 升級
# 進入項目目錄
cd KubeOperator-release-v3.x.y
# 運行安裝腳本
koctl upgrade
# 查看 KubeOperator 狀態
koctl status
三、安裝NFS
(1) 安裝nfs軟件包
yum install -y nfs-utils
(2) 創建共享目錄,並修改配置文件
mkdir -pv /u01/nfs_data
vim /etc/exports
/root/nfs_data/ 192.168.145.0/24(insecure,rw,sync,no_root_squash)
(3) 啟動nfs服務
systemctl start nfs-server
systemctl enable nfs-server
(4) 檢查配置是否生效
exportfs -r #重讀配置文件
exportfs #查看NFS配置,如下如示
/u01/nfs_data 192.168.145.0/24
四、創建集群
4.1、配置NFS服務和用戶憑據
登錄 KubeOperator 管理界面,在"系統設置"下的"系統"中,設置"系統IP"和"NTP Server",設置后提交保存
在"系統設置"下的"憑據"中,添加服務器憑據,支持ssh用戶密碼和密鑰兩種方式,這里使用ssh用戶名密碼的方式
密鑰方法連接主機舉例說明: 在 KubeOperator 主機中首先生成 id_rsa 和 id_rsa.pub 密鑰對,將 id_rsa.pub 公鑰里面內容添加要連接的目標主機 authorized_keys 文件中,authorized_keys 文件權限需要設置為 600 。然后在 KubeOperator 控制台的【憑據】頁面,將開始生成的 id_rsa 私鑰文件內容復制到憑據的密鑰框中。注意這里的賬號需要 root 賬號。
4.2、創建主機
在"主機"菜單下,添加需要創建集群的主機,"憑據"選剛才創建的憑據,依次將三台主機添加即可
4.3、創建項目
KubeOperator 系統自帶一個默認項目。除默認項目外,系統管理員(admin 賬號和新建的系統管理員賬號)可以創建其他項目,項目內可以部署多個集群,不同項目之間的集群除系統管理員以外賬號是不可見的。項目管理員管理該項目的集群,通過授權資源(包括主機,部署計划和備份賬號)給項目,然后可以開始創建集群
創建成功后,點擊名稱即可進入具體項目的配置
點擊"資源"選項卡下的"主機",添加需要創建集群的主機
點擊"集群"選項卡,然后點擊"添加",開始一步步創建集群
- 供應商: 支持裸金屬(手動模式)和部署計划(自動模式)
- 架構: 支持 AMD64 和 ARM64
下一步,修改高級選項
- 容器運行時: 支持 Docker 和 Containerd(注意: ARM64 架構下,容器運行時不支持 Containerd)
- Docker 數據路徑: 默認 /var/lib/docker
- 容器網絡: 支持 flannel 和 calico
- 網絡模式: flannel 支持 host-gw 和 vxlan、calico 支持 bgp 和 ipip
- Pod 子網: 默認 179.10.0.0/16
- Service 子網: 默認 179.20.0.0/16
- Container 子網: 默認 179.30.0.0/16
- 最大 POD 數量: 默認 110
- kube-proxy 模式: 支持 iptables 和 ipvs
- ingress 類型: 支持 nginx-ingress 和 traefik-ingress
- kubernetes 審計: 支持開啟日志審計功能
vxlan 和 ipip 網絡模式
- 基於隧道,在任何網絡環境下都可以正常工作
- 優勢是對物理網絡環境沒有特殊要求,只要宿主機IP層可以路由互通即可
- 劣勢是封包和解包耗費CPU性能,且額外的封裝導致帶寬浪費
host-gw 和 bgp 網絡模式
- 基於路由,不適用於公有雲環境
- 優勢是沒有封包和解包過程,完全基於兩端宿主機的路由表進行轉發
- 劣勢是要求宿主機在2層網絡是互通,且路由表膨脹會導致性能降低
下一步,添加節點信息
最后一步,確認信息,點"完成"即可
然后平台會幫我們自動開始創建集群,點擊"狀態"情況,可以顯示當前的部署狀態
部署完成后,狀態顯示"Running"
點擊集群名稱,可以查看集群的概覽
點擊"存儲"-->"存儲提供商"-->"添加",可以添加nfs
點擊"工具",可以啟用一些實用的工具
五、安裝Kuboard管理界面
5.1、在線安裝
#安裝
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml
#查看Kuboard運行狀態
kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
##輸出如下結果即正常
NAME READY STATUS RESTARTS AGE
kuboard-54c9c4f6cb-6lf88 1/1 Running 0 45s
5.2、離線安裝
(1) 准備Kuboard鏡像
在可以上網的機器上抓取 kuboard 鏡像,將 Kuboard 鏡像導出到文件,然后在 Kubernetes 集群的某一個節點上加載鏡像
#獲取鏡像
docker pull eipwork/kuboard:latest
#查看鏡像ID
docker images | grep kuboard
#導出鏡像
docker save 86eaead8421e > kuboard.tar
#加載鏡像
docker load < kuboard.tar
#為鏡像重新添加標簽
docker tag 0146965e6475 eipwork/kuboard:latest
(2) 准備 kuboard.yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: kuboard
namespace: kube-system
annotations:
k8s.kuboard.cn/displayName: kuboard
k8s.kuboard.cn/ingress: "true"
k8s.kuboard.cn/service: NodePort
k8s.kuboard.cn/workload: kuboard
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
spec:
replicas: 1
selector:
matchLabels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
template:
metadata:
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
spec:
nodeName: your-node-name #修改此處為加載了kuboard鏡像的節點的名稱
containers:
- name: kuboard
image: eipwork/kuboard:latest
imagePullPolicy: IfNotPresent
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
---
apiVersion: v1
kind: Service
metadata:
name: kuboard
namespace: kube-system
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 32567
selector:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: kuboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kuboard-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kuboard-user
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kuboard-viewer
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kuboard-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: kuboard-viewer
namespace: kube-system
# ---
# apiVersion: extensions/v1beta1
# kind: Ingress
# metadata:
# name: kuboard
# namespace: kube-system
# annotations:
# k8s.kuboard.cn/displayName: kuboard
# k8s.kuboard.cn/workload: kuboard
# nginx.org/websocket-services: "kuboard"
# nginx.com/sticky-cookie-services: "serviceName=kuboard srv_id expires=1h path=/"
# spec:
# rules:
# - host: kuboard.yourdomain.com
# http:
# paths:
# - path: /
# backend:
# serviceName: kuboard
# servicePort: http
5.3、獲取Token
(1) 管理員用戶
此Token擁有 ClusterAdmin 的權限,可以執行所有操作
#在Master節點上執行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
(2) 只讀用戶
只讀用戶不能對集群的配置執行修改操作,非常適用於將開發環境中的 Kuboard 只讀權限分發給開發者,以便開發者可以便捷地診斷問題
#在Master節點上執行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
5.4、訪問Kuboard
Kuboard Service 使用了 NodePort 的方式暴露服務,NodePort 為 32567;您可以按如下方式訪問 Kuboard。
http://任意一個Worker節點的IP地址:32567/
六、操作實例
6.1、elasticsearch集群
(1) 登錄Kuboard管理界面:http://192.168.145.17:32567/dashboard ,進入 default 名稱空間
(2) 創建 ConfigMap
(3) 創建工作負載
(4) 上一步點擊保存后,系統會自動創建Pod,並拉取和運行容器,然后,流覽器訪問 http://192.168.145.17:30001/ 可查看集群啟動情況
6.2、elasticsearch-head插件安裝
(1) 創建工作負載
(2) 保存后等待創建成功即可,之后流覽器訪問:http://192.168.145.17:30002/ ,並連接elasticsearch集群即可