zoukankan      html  css  js  c++  java
  • 基于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集群即可

  • 相关阅读:
    大端模式与小端模式
    通过tcp socket实现Linux与windows之间的文件传输
    关于递归的几个小例子
    关于线性表的一些简单应用
    数据结构(c语言实现)--线性表
    简单实现getpwnam()
    chapter 7 内存分配函数
    chapter6 非局部跳转函数 setjmp()与longjmp()
    Xcode 出现Permission denied 解决方法
    关于ARfoundation ILRuntime热更新项目的坑
  • 原文地址:https://www.cnblogs.com/hovin/p/14703570.html
Copyright © 2011-2022 走看看