Carpe Diem

備忘録

Bitwardenでsshキーを管理する

背景

仕事だと定期的にPCを交換しますが、そのたびにsshキーを全て最初から登録し直すのは非常に大変です。
かといって.sshをdotfilesとしてGitHubに管理したり、手動でコピーするのも転送経路をどうするかとか前PCから消し忘れたりとセキュリティ的に心配になります。

そこでsshキーをBitwarden上で管理し、ssh-agentを使ってsshができるようにします。

環境

  • macOS(M1) 13.2
  • bitwarden-cli 2023.1.0
  • joaojacome/bitwarden-ssh-agent 6035f80
続きを読む

MongoDB AtlasでContinuous Cloud Backupを有効化してRPOを小さくする

概要

MongoDB AtlasではContinuous Cloud Backupという機能を用いることでRPO(Recovery Point Objective)を1分にすることが可能です。

Dedicated Cluster Backups — MongoDB Atlas

その他のストレージやデータベースではPoint in Time Recover/Restoreという名称で提供されていることが多いです。

今回はこの設定方法と使い方、ポイントについて説明します。

続きを読む

IstioのDestination RuleでCircuit Breakerを適用する

概要

christina04.hatenablog.com

ではEnvoyでのCircuit Breakerの設定や挙動について説明しました。

IstioではDataPlaneにEnvoyを使っているので同じ様にCircuit Breakerを使えますが、設定するコンポーネントとしてはDestination Ruleになります。

Istio / Destination Rule

今回はIstioでの設定方法について説明します。

環境

  • Istio 1.16.1
続きを読む

KubernetesのPodを安全に終了する(istio-proxy編)

概要

前回KubernetesのPodの安全な終了方法について図を交えて解説しました。

christina04.hatenablog.com

今回はistio-proxy(envoy sidecar)がある場合の安全な終了方法について説明します。

環境

続きを読む

Prometheusのrateを理解する

背景

Prometheusでメトリクスを可視化する際にPromQLを使います。その中で最もよく使うのがrate()関数ですが、

  • window, interval, resolutionの違い
  • irate()関数との違い

など疑問に思ったので一度きちんと整理してみます。

環境

  • Prometheus v2.40.5

range ventor

rate関数を理解する上でまずrange vectorの概念を理解する必要があります。

windowとintervalとresolution

こちらの図が非常に分かりやすいです。

ref: https://iximiuz.com/en/posts/prometheus-functions-agg-over-time/

続きを読む

Kubernetesの初学者がlabelについて気になること

概要

ラベルという名前ゆえか若干軽視されがちですが、Kubernetesにおいてlabelはリソースを識別する上で非常に重要な要素です。
そのlabelについてKubernetesの初学者が気になる(自身も気になった)ことを挙げて行きます。

気になること

Deploymentにあるlabelが多い

公式ドキュメントに記載されているDeploymentの例を見てみます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:  # ①
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:  # ②
      app: nginx
  template:
    metadata:
      labels:  # ③
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

この様にlabelに関連するところがなんと3つもあります。

続きを読む

KubernetesのPodを安全に終了する

概要

KubernetesのPodを安全に終了する際に気をつけるべき事前知識と設定方法について説明します。

あらかじめまとめると

  1. 新規リクエストのルーティングがなくなるまでpreStopでPodのアプリケーションコンテナの終了開始を待たせる
  2. 既存リクエストが全て処理されるまでアプリケーション側でGraceful Shutdownをする
  3. SIGKILLで強制終了されないように1, 2が完了するまでterminationGracePeriodSecondsを長くする

の3つを実施することになります。

環境

前提知識

Podが終了すると何がトリガーされるか

Podが終了するとまずdeletionTimestampがPodリソースに設定され、Terminating状態になります。

そしてその次に以下の3つの処理がそれぞれ独立(並行)して実施されます。

  • Podの終了処理
  • ServiceからPodへのルーティングの削除
  • ReplicaSetやDeployment管理下からの除外

これらはそれぞれ独立しているため順序に保証はなく「いずれかの処理の完了を待って次の処理をする」のような依存関係を持った制御もできません

続きを読む