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