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

原文地址:https://www.cnblogs.com/hovin/p/14703570.html