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安装及使用的更多相关文章

  1. kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警

    1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...

  2. kubernetes实战(二十九):Kubernetes RBAC实现不同用户在不同Namespace的不同权限

    1.基本说明 在生产环境使用k8s以后,大部分应用都实现了高可用,不仅降低了维护成本,也简化了很多应用的部署成本,但是同时也带来了诸多问题.比如开发可能需要查看自己的应用状态.连接信息.日志.执行命令 ...

  3. kubernetes实战(二十六):kubeadm 安装 高可用 k8s v1.16.x dashboard 2.x

    1.基本配置 基本配置.内核升级.基本服务安装参考https://www.cnblogs.com/dukuan/p/10278637.html,或者参考<再也不踩坑的Kubernetes实战指南 ...

  4. kubernetes实战(二十五):kubeadm 安装 高可用 k8s v1.13.x

    1.系统环境 使用kubeadm安装高可用k8s v.13.x较为简单,相比以往的版本省去了很多步骤. kubeadm安装高可用k8s v.11 和 v1.12 点我 主机信息 主机名 IP地址 说明 ...

  5. Kubernetes实战(二):k8s v1.11.1 prometheus traefik组件安装及集群测试

    1.traefik traefik:HTTP层路由,官网:http://traefik.cn/,文档:https://docs.traefik.io/user-guide/kubernetes/ 功能 ...

  6. Java并发编程原理与实战二十八:信号量Semaphore

    1.Semaphore简介 Semaphore,是JDK1.5的java.util.concurrent并发包中提供的一个并发工具类. 所谓Semaphore即 信号量 的意思. 这个叫法并不能很好地 ...

  7. (转载)Android项目实战(二十八):Zxing二维码实现及优化

    Android项目实战(二十八):Zxing二维码实现及优化   前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...

  8. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21我要评论 这篇文章主要介绍了Android项目 ...

  9. Bootstrap <基础二十八>列表组

    列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...

随机推荐

  1. Spring源码分析(一)预备篇=》基本知识储备

    一.Spring框架整体,各个部分 .Spring Core Container Core 和 Beans 模块是框架的基础部分,提供 IoC (控制反转)和依赖注入特性. 这里的基础 概念是 Bea ...

  2. mongoDB4.0数据库

    下载:https://www.mongodb.com/ 安装:略 注意:使用前修改bin目录下配置文件mongodb.cfg,删除最后一行的'mp'字段 1. 启动服务与终止服务 net start ...

  3. postman参数化

    1.新建csv文件 2.csv文件中输入变量名和参数 3.postman中新增接口,并设置变量 4.选择进入 5.导入参数化csv格式文件,点击run 查看运行结果

  4. 掌握git基本功

    前言 最近想把代码传到GitHub上,结果我发现的demo的npm全是本地安装,上穿到GitHub要死要死,几百M,然后我就搜了下怎么不上传node_modules弄了半天也没成功,于是准备静下心学一 ...

  5. [Luogu2422]良好的感觉

    题目描述 kkk做了一个人体感觉分析器.每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适.在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中 ...

  6. java学习-IDEA运行java程序报错

    问题1: 解决办法:依次执行如下两步   问题2: 解决办法:如下两项版本应保持一致

  7. SpringBoot学习(三)探究Springboot自动装配

    目录 什么是自动装配 何时自动装配 原理分析 注:以下展示的代码springboot的版本为2.0.3版.因源码过长,大家选择展开代码 ㄟ( ▔, ▔ )ㄏ 什么是自动装配 自动装配还是利用了Spri ...

  8. 详细解读 Spring AOP 面向切面编程(二)

    本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...

  9. Java基础(十八)集合(5)Queue集合

    队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构.队列的原则就是“先进先出”. Queue接口是Collection接口的最后一个子接口. Queue接口是队列接口,而Deque接口是Que ...

  10. (七)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 ...