/kubernetes-mirror

Synchronize Kubernetes resources to mariadb/mysql to support on-demand query

Primary LanguageJavaApache License 2.0Apache-2.0

kube-mirror

Synchronize Kubernetes resources to mariadb/mysql to support query and recovery.

This project is based on :

Installation

https://raw.githubusercontent.com/kubesys/kubernetes-synchronizer/master/kubernetes-mirror.yaml

Maven users

Add this dependency to your project's POM:

<dependency>
  <groupId>com.github.kubesys</groupId>
  <artifactId>kubernetes-mirror</artifactId>
  <version>1.9.0</version> 
</dependency>

<repositories>
   <repository>
       <id>pdos-repos</id>
       <name>PDOS Releases</name>
       <url>http://39.106.40.190:8081/repository/maven-public/</url>
    </repository>
</repositories>

Quick start

install database (if you do not have, otherwise skip it)

kubectl apply -f https://raw.githubusercontent.com/kubesys/kubernetes-tools/master/core/database.yaml

edit kubernetes-mirror-[arch].yaml

  • Then, please edit 'Deployment' named 'kubernetes-mirror' in namespace 'kube-system', update env 'kubeUrl' and 'token' as described in kubernetes-client.
  • If you use customized database, please add these attributes
env:
- name: mysqlUrl
  value: xxx
- name: user
  value: xxx
- name: pwd
  value: xxx
- name: database
  value: xxx

start service

kubectl apply -f https://raw.githubusercontent.com/kubesys/kubernetes-mirror/master/kubernetes-mirror-amd64.yaml

or 

kubectl apply -f https://raw.githubusercontent.com/kubesys/kubernetes-mirror/master/kubernetes-mirror-arm64.yam

Build

cp target/kubernetes-synchronizer-[version]-jar-with-dependencies.jar docker/kubernetes-mirror.jar
docker build docker/ -t registry.cn-beijing.aliyuncs.com/kubesys/kubernetes-mirror:[version]

Usage

mysql-based

access 'http://IP:30307', if you use default mariadb

  • server: kube-database.kube-system:3306
  • username: root
  • password: onceas

then you can go to database 'kube', and find the synchronous data.

Now mariadb/mysql can support JSON, so you can on-demand query JSON

For example,

use kube;
select * from pods where JSON_EXTRACT(data, '$.metadata.name') like '%database%'

In addition, you can work with json as described in mysql docs

Note that If you want to synchronous more data, please edit ConfigMap named kubernetes-mirror in namesapce 'kube-system'

kubectl edt cm kubernetes-synchronizer -n kube-system

Roadmap

  • 1.5.0 support customized database
  • 1.7.0 support dyanmic watch CRD
  • 1.8.1 fix watch timeout
  • 1.9.0 support dynamic create and delete tables
  • 1.10.0 testing version