基於CentOS7.6使用KubeOperator安裝Kubernetes集群


一、系統配置與要求

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集群即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM