クベルネートのQuestDB

9595 ワード

私は最初に私の元同僚によってQuestDBに導入されました.私はデータベースに興味を持っている、むしろ好奇心旺盛な個人、特に時系列で、私はそれと遊びたいと思っていました.
絶対に必要ない場合は、私のラップトップにJVMをインストールしてください.questdbはJavaで書かれています.それで、2つのオプションがありました.
現在利用できるヘルムチャートがないので、私はKubernetesを選びました;これはQuestDBに貢献する絶好の機会です.
閉じるこの動画はお気に入りから削除されています.Davidを見ることができ、次のビデオでこのプロセスを実行することができます.これは、TelegrafをQuestDBにデータを書き込むように設定することも含んでいます.

Kerbernetes上でのQuestDBのインストール
QuestDBをKubernetesにインストールするには、ヘルムチャートをローカルでクローン化する必要があります.この手順は現在、ヘルムチャートリポジトリが現在QuestDBによって公開されていないため、現在必要です.これは、今後数週間以上の貢献をもって支援することを期待しています.
git clone https://github.com/questdb/questdb-kubernetes

チャートはAとともに発送するvalues.yaml それは以前にKubernetes資源を展開している誰にでもよく知らなければなりません.私は次のセクションで少し詳細に各ブロックをカバーし、そのちょっとしたことに興味がある必要があります.
あなたのそれらのためには気にしない、楽しいビットになることができます.以下のコマンドは、我々が実行したと仮定しますgit clone 上記の作業ディレクトリの上に.されていない場合は、最後にパスを更新どこにクローンした.
helm upgrade --install questdb ./questdb-kubernetes/charts/questdb

このコマンドは2番目か2つだけをとり、そのようなものを端末に出力します.
Release "questdb" does not exist. Installing it now.
NAME: questdb
LAST DEPLOYED: Mon Aug 24 11:15:15 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=questdb,app.kubernetes.io/instance=questdb" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1:9000 to use your application"
  kubectl --namespace default port-forward $POD_NAME 9000:9000


インストールの確認
まず最初にやりたいことは、PODがスケジュールされていることを確認することです.あなたはSTATUS ASContainerCreating しばらくの間、これはコンテナイメージがまだクラスタに取り込まれていることを意味します.
$ kubectl get pods

NAME READY STATUS RESTARTS AGE
questdb-0 1/1 Running 0 3s

💥 パーフェクト.
questdbが実行されているので、Web UIをチェックアウトするためにサービスを転送します.
kubectl port-forward svc/questdb 8080:80

これはローカルマシンからKubernetesクラスタへのポートを設定します.ローカルポートを指定します8080 ポートに転送すべきである80 QuestDBサービスsvc/questdb , Kubernetesクラスタの内部
魔法のように、あなたはすぐに閲覧することができますhttp://localhost:8080 を参照してください.
私を信じないで?試してみる🤪

データの書き込み
QuestDBの本当にクールな機能の1つは、大きなデータセットとのばかげたパフォーマンスのほかに、InfluxDBラインプロトコルのサポートです.つまり、Quesdbにデータを書くためにテレグラフを使うことができます.
仮定するとtelegraf.conf , 入力プラグインを使用してホストからのメトリクスを収集します著名cpu , disk , and mem プラグイン.
[agent]
  interval = "5s"

[[inputs.cpu]]
[[inputs.disk]]
[[inputs.mem]]

我々は、Telegrafのジェネリックを追加することができますsocket_writer 出力プラグインを使用してデータを書き込みます.
[[outputs.socket_writer]]
  address = "tcp://questdb:9009"
  data_format = "influx"

この出力設定では、TeleGrafがLine Protocol Data Formatを使用していることを指定し、ポートのTCPソケットに書き込みを行います9009 . これは、values.yaml ファイル.
まず、QuestDBサービスを見てみましょう.
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
questdb ClusterIP 10.105.188.157 <none> 80/TCP 52m

あなたはそれを見ることができますPORT(S) それが唯一のポートのリスト80 , Web UIです.したがって、EndexDBラインプロトコルサポートを有効にする変更を使用して、QuestDB展開をアップグレードする必要があります.
cat <<EOF >> values.yaml
service:
  type: ClusterIP
  port: 80
  expose:
    influx:
      enabled: true
      port: 9009
EOF

helm upgrade -f values.yaml questdb ./questdb-kubernetes/charts/questdb

使いました-f 独自の値ファイルを指定するには、グラフによって提供される既定のものと拡張/マージされます.我々values.yaml IncluxDBサポートを有効にするために必要な設定を追加しますquestdbサービスでポートを公開します.クール、ハッ?我々が再びサービスをチェックするならば、...
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d
questdb ClusterIP 10.105.188.157 <none> 80/TCP,9009/TCP 56m

港がある9009 😀
私はKubernetesクラスタの中で少なくともこの記事ではなく、テレグラフを実行するつもりはありません.私もその簡単に簡単にグラフを維持;どれが見つかるかhere .

イージーペイ
これは、KuberDBの公式ヘルムチャートを使用して実行するQuestDBを取得し、telegrafといくつかのデータを書き込むために必要なすべてです.
もちろん、生産に飛躍するときに考慮する様々なものがありますそして、私がQuestDBで私の旅行を続けるので、私はそれをさらに調査します.それまでは、自分でチェックしてください.
あなたが本当に熱心であるならば、以下の構成は利用できる構成へのより深い潜水です.
良い一日を!

ヘルムチャート値説明
まず、QuestDBの展開に使用するイメージとタグをオーバーライドするオプションがあります.デフォルトではquestdb/questdb , これはquestdbチームによって公式に維持されます.私は常に公式に維持されたイメージを使用することを勧めます、しかし、あなたが空気でとらえられた環境にいるか、適当なコンプライアンスチームを持つならば、あなたは必要に応じて上書きすることができます.これはimagePullSecrets あなたの個人的なレジストリの認証を処理するには、また、提供することができます.書く時に、QuestDBの最新版はそうです5.0.1 .
image:
  repository: questdb/questdb
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  #tag: "5.0.1"
imagePullSecrets: []

次はnameOverride and fullnameOverride . ほとんどすべてのチャートはこれらを提供します、そして、彼らは全く表面的です.展開の結果として作成されたリソースの名前を設定できます.今日は使わないつもりです.
nameOverride: ""
fullnameOverride: ""

現在、我々はもう少し面白いです.podAnnotations ポッドに任意の注釈を注入することができます.これは、主にPrometheusでQuestDB展開からメトリクスを集めるのに便利ですエンドポイント発見の注釈を使用できます.
podAnnotations: {}

今いくつかの肉のセキュリティのもの.コンテナー内のプロセスが、データを格納するために必要なファイルシステムのグループ所有権と同様に、ユーザーを設定できます.また、私たちのコンテナがカーネルレベルで持っている機能について、むしろ明示的にする能力を持っています.これは、SWANのように優雅に扱われる必要がある巨大なトピックです.ホンク.Kubernetes保安があなたの空想をくすぐる何かであるならば、それが見ている価値がある、そして、最近、それは価値がありました.
podSecurityContext: {}
# fsGroup: 2000
securityContext: {}
# capabilities:
# drop:
# - ALL
# readOnlyRootFilesystem: true
# runAsNonRoot: true
# runAsUser: 1000

よろしい.ここでquestdb自体を設定します.私は正直です、私はまだこれについてあまり知りません.しかし、それはdocumented .
questdb:
  config: #{}
    enabled: true
    options:
      shared.worker.count: 2

KubernetesのQuestDBの実行は素晴らしいです.しかし、我々もそれを消費することができます.私たちはservice QuestDBにアクセスするために、クラスタ内の他のPODを有効にするブロック.QuestDBはWebサーバを実行し、そのAPIとUIを提供します9000 . しかしながら、HTTPネイティブポートでそれを公開するのは全く一般的です.80 , Kubernetesの中で.これは、クラスタ内から実行できることを意味しますcurl http://questdb そして、我々が予想するものを得てください.
QuestDBもいくつかの他のポートを提供します.ポートで9009 and 8812 丁重に.私は、実際にヘルムチャートにこれを加えるのを忘れました、そして、それは貢献しましたNiclas Mietz ; それで、ありがとう!😃
service:
  type: ClusterIP
  port: 80
  expose:
    postgresql:
      enabled: false
      port: 8812
    influx:
      enabled: false
      port: 9009

あなたはクラスタ内で内部QuestDBにアクセスするよりも楽しいことを知っていますか?それを公開する.oooooo hはい.
ヘルムチャートでは、大きな悪い世界にあなたのサービスを公開するKubernetesイングルのコントローラを活用することができます.実際、QuestDBはかなり大胆です.実際に実行するown public QuestDB それはあなたに260億のレコードを問い合わせることができます.それは野生です.私は、誰もそれを壊したと思いません..まだ😂
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true"
# hosts:
# - host: chart-example.local
# paths: []
# tls: []
# # - secretName: chart-example-tls
# # hosts:
# # - chart-example.local

あなたは、データベースが状態/永続性なしで何が良いかについてわかっています.
Kubernetesのプリミティブ、PVC/PVを通して永続性を使用するためにQuestDB展開を設定することができます.だから慎重にどのくらいのスペースを提供するために考えてください.
persistence:
  enabled: true
  #storageClass: "-"
  accessMode: ReadWriteOnce
  size: 50Gi

QuestDBはGCを無効にするためにJVMでいくつかの魔法のものを行います.あなたはresources これを明示的に制限するブロック.これらの数字を推測することはありません.これらの制約なしで実行する必要があります/プロフィール/あなたのポッドを監視する“通常の”使用パターンがどのように見えるかを確認します.その後、安全な天井を(10~20°)30 %加えて、それに従います.幸運のベスト.リソース制約はトリッキーなビジネスです.
resources: {}
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi

最後に、最後のブロック.すべてのヘルムチャートとそれの後に来るすべてのヘルムチャートの前にすべてのヘルムチャートのように、我々は能力をあなたのQuestDBポッドのスケジューリングを奨励するノードを、あなたの他の生産や消費ポッドにストレージクラスのサポートや地域性かどうか、希望するノードに次の3つのキーで何をすることができます.
nodeSelector: {}
tolerations: []
affinity: {}

Read more here .