kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用
1. Ratel是什么?
Ratel是一个Kubernetes资源平台,基于管理Kubernetes的资源开发,可以管理Kubernetes的Deployment、DaemonSet、StatefulSet、Service、Ingress、Pods、Nodes、Role、ClusterRole、Rolebinding、ClusterRoleBinding、Secret、ConfigMap、PV、PVC等。主要用于以图形化的方式管理k8s的各类资源,提高维护k8s集群的效率及降低出错的概率。
2. 安装Ratel
请查看最新文档: https://github.com/dotbalo/ratel-doc
2.1 配置文件解析
Ratel默认是安装到需要管理的k8s集群中的任意一个集群(需要和其他集群能够通信)。所以需要现有一个集群,可以参照kubernetes实战(二十六):kubeadm 安装 高可用 k8s 1.16.x dashboard 2.x快速搭建一个高可用k8s集群。
Ratel的配置文件采用yaml格式,参数如下:
servers.yaml是ratel的配置文件, 格式如下:
- serverName: 'test1'
serverAddress: 'https://1.1.1.1:8443'
#serverAdminUser: 'test1'
#serverAdminPassword: 'test1#'
serverAdminToken: 'null'
serverDashboardUrl: "https://k8s.test1.com.cn"
production: 'false'
kubeConfigPath: "/mnt/test1.config"
其中管理的方式有两种(Token暂不支持):
账号密码和kubeconfig形式, 只需配置一种即可, kubeconfig优先级高
参数解析:
serverName: 集群别名
serverAddress: Kubernetes APIServer地址
serverAdminUser: Kubernetes管理员账号(需要配置basic auth)
serverAdminPassword: Kubernetes管理员密码
serverAdminToken: Kubernetes管理员Token // 暂不支持
serverDashboardUrl: Kubernetes官方dashboard地址
kubeConfigPath: Kubernetes kube.config路径(绝对路径)
kubeConfigPath 通过secret挂载到容器的/mnt目录或者其他目录
2.2 创建Ratel Secret
其中test1.config是集群test1的配置文件,test2.config是集群test2的配置文件,需要一一对应
kubectl create secret generic ratel-config --from-file=test1.config --from-file=test2.config --from-file=servers.yaml -n kube-system
2.3 部署Ratel
部署Ratel的Yaml文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: ratel
name: ratel
namespace: kube-system
spec:
replicas:
selector:
matchLabels:
app: ratel
strategy:
rollingUpdate:
maxSurge:
maxUnavailable:
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: ratel
spec:
containers:
- command:
- sh
- -c
- ./ratel -c /mnt/servers.yaml
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-
- name: ProRunMode
value: prod
- name: ADMIN_USERNAME
value: admin
- name: ADMIN_PASSWORD
value: ratel_password
image: dotbalo/ratel:v0.1alpha
imagePullPolicy: Always
livenessProbe:
failureThreshold:
initialDelaySeconds:
periodSeconds:
successThreshold:
tcpSocket:
port:
timeoutSeconds:
name: ratel
ports:
- containerPort:
name: web
protocol: TCP
readinessProbe:
failureThreshold:
initialDelaySeconds:
periodSeconds:
successThreshold:
tcpSocket:
port:
timeoutSeconds:
resources:
limits:
cpu: 1000m
memory: 520Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- mountPath: /mnt
name: ratel-config
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: myregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds:
volumes:
- name: ratel-config
secret:
defaultMode:
secretName: ratel-config
创建Ratel的Service和Ingress的yaml文件如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: ratel
name: ratel
namespace: kube-system
spec:
ports:
- name: container--web-
port:
protocol: TCP
targetPort:
selector:
app: ratel
type: ClusterIP
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ratel
namespace: kube-system
spec:
rules:
- host: krm.test.com
http:
paths:
- backend:
serviceName: ratel
servicePort:
path: /
配置参数说明:
ProRunMode: 区别在于dev模式打印的是debug日志, 其他模式是info级别的日志, 实际使用时应该配置为非dev
ADMIN_USERNAME: ratel自己的管理员账号
ADMIN_PASSWORD: ratel自己的管理员密码
实际使用时账号密码应满足复杂性要求,因为ratel可以直接操作所配置的资源。
其他无需配置, 端口配置暂不支持。
部署完毕后可以通过krm.test.com进行访问(域名按需配置)
2.4 访问Ratel

登录后可以查看到集群列表

点击Cluster Name可以查看到当前集群部分信息

单击资源数量可以查看资源列表,比如Node

或者Deployment

更多详情查看:https://github.com/dotbalo/ratel-doc
3. 使用Ratel创建Deployment
点击Deployment --> 创建
3.1 基本信息填写

填写说明
- 选择集群: 选择之前配置的集群, 按serverName区分,选择集群后,会自动弹出Namespace的选择框。
- Namespace: 当前Deployment需要创建在哪个Namespace,Namespace的选择框支持搜索功能。
- 尽量部署至不同宿主机: 此选项相当于添加了一个Pod的Affinity的软策略,基于selector实现。
- 部署至不同宿主机: 此选项相当于添加了一个Pod的Affinity的硬性策略策略,基于selector实现。
- 更新策略: Deployment的更新策略,此处和DaemonSet和StatefulSet更新策略不一致。
- 副本数: Pod的个数,可以使用鼠标滚轮或者直接键入的方式更改。
- 私有仓库Secret: 用于私有仓库镜像下载的账号密码,需要提前创建,点击刷新会自动获取集群的docker registry类型的secret。
可选参数配置

填写说明
- Labels:Labels是Deployment的label标签,当属于Deployment名字时,会自动填写一个Labels和Selector,可以按需修改、添加和删除。
- Selectors: Selectors是Pod的Labels和Deployment的Selector,按需修改、添加和删除。
- HostAliases: HostAliases是hosts文件配置,按需修改、添加和删除。
- NodeSelector: 节点选择器,按需修改、添加和删除。
- 内核配置: Pod中的内核配置。
- Taint: 容忍配置。
3.2 Volume配置
基本配置填写完成以后,点击Next(必须)进入到填写Volume的视图

填写说明
如上图所示,目前所支持的Volume配置有HostPath、Secret、ConfigMap、EmptyDir、PVC。
上述的Secret、ConfigMap、PVC、StorageClass无需手动输入,单击刷新后即可自动自动获取到当前集群的相关信息。
填写内容如下

3.3 Container配置
填写完Volume配置以后,点击Next填写Container配置
3.3.1 Container 1配置


3.3.2 Container 2配置


填写说明
- Container配置目前几乎支持所有常见配置,Container的名称会在Deployment名称键入后自动填写一个默认的,可以按需修改。
- 可以配置多个Container,按需添加、修改和删除。
- 启动命令和启动参数按需修改,逗号分隔,如果启动命令或者启动参数含有逗号,需要以变量的方式传入,比如启动命令是--configEnv=test1,prd
- 此时test1,prd需要配置成变量,之后通过--configEnv=$ConfigEnv注入。
- 集群的CPU和内存资源按需配置,直接拖动即可。
- 健康检查按需配置,目前支持httpGet、tcpSocket、exec方式。
- preStop和postStart按需配置。
- 高权限运行是添加privilege=true参数至Container。
- 容器端口按需配置和添加,目前支持三种协议配置。
- 容器环境变量,支持三种方式的容器变量配置,按需添加、修改和删除。
- 字符变量: key value变量,不能留空。
- EnvFrom: 从ConfigMap和Secret中获取变量配置。
- ValueFrom: 目前支持FieldRef、ConfigMapRef、SecretRef和ResourceFieldRef配置。
- 文件挂载配置:
- 文件挂载配置必须先添加Volume配置,否则无法创建文件挂载。
- Volume名称自动获取创建Volume。
3.4 Init Container配置
Init Container配置和Container大致相同

3.5 Service配置
创建Deployment、DaemonSet和StatefulSet的页面,嵌入了简单的Service和Ingress配置。
如图所示,在配置完Container后,如果需要添加Service(默认不添加),在开启service配置后,会根据container的端口配置自动生成Service的配置,可以按需修改、添加和删除。此页面Service仅支持ClusterIP和NodePort两种类型。

3.6 Ingress配置
如图所示,在配置完Service后,如果需要添加Ingress(默认不添加),在开启Ingress后,会根据Service配置默认生成一个Ingress配置,可以按需修改、添加和删除。
如需开启https,需要提前添加tls类型的域名证书,点击刷新后即可自动读取当前集群的当前Namespace的tls类型的证书列表,无tls类型的证书无法开启https。
去除前缀的意思是: 访问www.test1.com/a/test.html 会自动变成www.test1.com/test.html。

3.7 创建资源
上述有不规范填写,比如名称不能包含大写的,Ratel会自动转换为小写。创建成功页面如下

4. 创建资源查看
相对于手动创建,不仅降低了出错概率,同时也无需掌握yaml文件的每个参数含义,大大提高了k8s集群的管理效率。
4.1 查看创建的Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: ""
creationTimestamp: "2019-11-18T10:19:57Z"
generation:
labels:
app: nginx
name: nginx
namespace: default
resourceVersion: ""
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/nginx
uid: f857546a-09ec-11ea-bf14-f80f41f365d0
spec:
progressDeadlineSeconds:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge:
maxUnavailable:
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
namespaces:
- default
topologyKey: kubernetes.io/hostname
weight:
containers:
- args:
- sleep
command:
- sh
- -c
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-
- name: testValueFrom
valueFrom:
resourceFieldRef:
containerName: nginx
divisor: ""
resource: requests.memory
envFrom:
- secretRef:
name: default-token-hgfm8
image: nginx
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
exec:
command:
- echo
failureThreshold:
initialDelaySeconds:
periodSeconds:
successThreshold:
timeoutSeconds:
name: nginx
ports:
- containerPort:
name: web
protocol: TCP
readinessProbe:
exec:
command:
- echo
failureThreshold:
initialDelaySeconds:
periodSeconds:
successThreshold:
timeoutSeconds:
resources:
limits:
cpu: 164m
memory: 273Mi
requests:
cpu: 10m
memory: 10Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/share/zoneinfo/Asia/Shanghai
name: tz-config
- mountPath: /etc/localtime
name: tz-config
- mountPath: /etc/timezone
name: timezone
- mountPath: /mnt/testSecret
name: testsecret
- mountPath: /mnt/testConfigMap
name: testconfigmap
- mountPath: /mnt/testempty
name: testemptydir
- command:
- sh
- -c
- sleep
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-
- name: test
value: a
- name: testFieldRef
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
envFrom:
- configMapRef:
name: runner-xxx-gitlab-runner
image: nginx
imagePullPolicy: IfNotPresent
lifecycle: {}
name: nginx2
resources:
limits:
cpu: 48m
memory: 52Mi
requests:
cpu: 10m
memory: 10Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/share/zoneinfo/Asia/Shanghai
name: tz-config
- mountPath: /etc/localtime
name: tz-config
- mountPath: /etc/timezone
name: timezone
- mountPath: /mnt/testConfigMap
name: testconfigmap
- mountPath: /mnt/testPVC
name: testpvc
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: myregistrykey
initContainers:
- command:
- sh
- -c
- sleep3
env:
- name: TZ
value: Asia/Shanghai
- name: LANG
value: C.UTF-
image: nginx
imagePullPolicy: Always
name: initcontainer
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 10m
memory: 10Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /usr/share/zoneinfo/Asia/Shanghai
name: tz-config
- mountPath: /etc/localtime
name: tz-config
- mountPath: /etc/timezone
name: timezone
nodeSelector:
env: test
restartPolicy: Always
schedulerName: default-scheduler
securityContext:
sysctls:
- name: net.core.somaxconn
value: ""
- name: net.ipv4.tcp_max_syn_backlog
value: ""
terminationGracePeriodSeconds:
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
operator: Exists
volumes:
- hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
type: ""
name: tz-config
- hostPath:
path: /etc/timezone
type: ""
name: timezone
- name: testsecret
secret:
defaultMode:
secretName: default-token-hgfm8
- configMap:
defaultMode:
name: runner-xxx-gitlab-runner
name: testconfigmap
- emptyDir: {}
name: testemptydir
- name: testpvc
persistentVolumeClaim:
claimName: gitrunner-workspace
4.2 查看创建Service
[root@k8s-master01 ~]# kubectl get svc nginx -oyaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2019-11-18T10:19:56Z"
labels:
app: nginx
name: nginx
namespace: default
resourceVersion: ""
selfLink: /api/v1/namespaces/default/services/nginx
uid: f833a327-09ec-11ea-bf14-f80f41f365d0
spec:
clusterIP: 50.104.173.155
ports:
- name: container--web-
port:
protocol: TCP
targetPort:
selector:
app: nginx
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
4.3 Ingress配置
[root@k8s-master01 ~]# kubectl get ingress nginx-strip-path -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$
creationTimestamp: "2019-11-18T10:25:39Z"
generation:
name: nginx-strip-path
namespace: default
resourceVersion: ""
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/nginx-strip-path
uid: c42679fe-09ed-11ea-bf14-f80f41f365d0
spec:
rules:
- host: www.test.com
http:
paths:
- backend:
serviceName: nginx
servicePort:
path: /test(/|$)(.*)
status:
loadBalancer: {}
Ratel项目地址:https://github.com/dotbalo/ratel-doc

kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用的更多相关文章
- kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警
1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...
- kubernetes实战(二十九):Kubernetes RBAC实现不同用户在不同Namespace的不同权限
1.基本说明 在生产环境使用k8s以后,大部分应用都实现了高可用,不仅降低了维护成本,也简化了很多应用的部署成本,但是同时也带来了诸多问题.比如开发可能需要查看自己的应用状态.连接信息.日志.执行命令 ...
- kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x
1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南 ...
- kubernetes实战(二十五):kubeadm 安装 高可用 k8s v1.13.x
1.系统环境 使用kubeadm安装高可用k8s v.13.x较为简单,相比以往的版本省去了很多步骤. kubeadm安装高可用k8s v.11 和 v1.12 点我 主机信息 主机名 IP地址 说明 ...
- Kubernetes实战(二):k8s v1.11.1 prometheus traefik组件安装及集群测试
1.traefik traefik:HTTP层路由,官网:http://traefik.cn/,文档:https://docs.traefik.io/user-guide/kubernetes/ 功能 ...
- Java并发编程原理与实战二十八:信号量Semaphore
1.Semaphore简介 Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类. 所谓Semaphore即 信号量 的意思. 这个叫法并不能很好地 ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例
Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
随机推荐
- Spring源码分析(一)预备篇=》基本知识储备
一.Spring框架整体,各个部分 .Spring Core Container Core 和 Beans 模块是框架的基础部分,提供 IoC (控制反转)和依赖注入特性. 这里的基础 概念是 Bea ...
- mongoDB4.0数据库
下载:https://www.mongodb.com/ 安装:略 注意:使用前修改bin目录下配置文件mongodb.cfg,删除最后一行的'mp'字段 1. 启动服务与终止服务 net start ...
- postman参数化
1.新建csv文件 2.csv文件中输入变量名和参数 3.postman中新增接口,并设置变量 4.选择进入 5.导入参数化csv格式文件,点击run 查看运行结果
- 掌握git基本功
前言 最近想把代码传到GitHub上,结果我发现的demo的npm全是本地安装,上穿到GitHub要死要死,几百M,然后我就搜了下怎么不上传node_modules弄了半天也没成功,于是准备静下心学一 ...
- [Luogu2422]良好的感觉
题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中 ...
- java学习-IDEA运行java程序报错
问题1: 解决办法:依次执行如下两步 问题2: 解决办法:如下两项版本应保持一致
- SpringBoot学习(三)探究Springboot自动装配
目录 什么是自动装配 何时自动装配 原理分析 注:以下展示的代码springboot的版本为2.0.3版.因源码过长,大家选择展开代码 ㄟ( ▔, ▔ )ㄏ 什么是自动装配 自动装配还是利用了Spri ...
- 详细解读 Spring AOP 面向切面编程(二)
本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...
- Java基础(十八)集合(5)Queue集合
队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构.队列的原则就是“先进先出”. Queue接口是Collection接口的最后一个子接口. Queue接口是队列接口,而Deque接口是Que ...
- (七)javac编译
文章目录 1.基本格式 2.目标路径 2.1 缺省项 2.2 指定路径 2.2.1 全路径 2.2.2 相对路径 3.源文件 3.1 无第三方库 3.1.1 基本方法 3.1.2 添加目录 3.1.3 ...