Unyablog.

のにれんのブログ

ISUCON 予選突破のために Elastic Stack と GCP で分析環境を整えた (:old_noto_innocent: Team)

ISUCON 12 予選にいつもの id:utgwkk, id:wass80 と :old_noto_innocent: チームで参戦した*1。 結果は 50696 点で本選出場! ここ数回と同様、自分はインフラと分析・観測を担当していた。ただ、毎年似たようなことをやっていてあまり貢献できていないなあ…

Elasticsearch の Docker container でパスワードを指定する

環境: Docker の elasticsaerch image 8.3.2 久々に Elasticsearch を Docker で立ち上げると、初期状態でセキュリティ機能が有効になっていて、そのまま curl しても認証が通らず API が打てなかった。 $ curl -k https://localhost:9200/ {"error":{"root_…

pip install --user を config でデフォルトにする

最近(2年以上前)、pip がデフォルトで --user でインストールするようになった。 github.com ただ、この機能が有効になるにはいくつかの条件がある。 The user has not explicitly specified otherwise in the command line, environment variable, or a c…

GKE の Preemptible VM を Spot VM にした

プライベートで GKE を Preemptible VM ベースで運用していた。だいぶ昔に Preemptible VM が Spot VM に変わるよという通知が GCP から来ていて 値段変わらないし 放置していたのだが、GKE のバージョンを上げるついでに Spot VM に変更した。 cloud.google…

TypeScript 型わくわく日記

TypeScript でオブジェクトのバリデータを作っている。それぞれの値ごとのバリデータは値の特性ごとに様々な関数がある((value: string) => Error[] のような形)。 時折 Optional な値があるものの、バリデータ自体は non-null な値のバリデーションに専念…

AlertManager: Slack の Incoming webhook URL が Kubernetes の Secret で扱いやすくなっていた

Prometheus の AlertManager は Slack などに通知を送る重要なコンポーネントである。 当然 Slack の Webhook URL といった Credential を設定ファイルに書く必要があるのだけど、AlertManager は強い意志で環境変数や複数設定ファイルに対応していないので…

Git でブランチがリモートリポジトリの HEAD から派生しているかどうかを確認する

Git

Git でトピックブランチを切るときに、元ブランチで git pull し忘れて古いコミットから生やしてしまうときがある。 最新の変更を認識できなかったり、後々コンフリクトが起きたりと不便なことがままあるので、 Commit 前に HEAD がリモートリポジトリの HEA…

Python の subprocess.run は KeyboardInterrupt で強制的に kill される

Python から Terraform をインタラクティブな(stdin をそのまま渡す)形で呼ぶために、subprocess.run を使って subprocess で走らせようとしている。 ここで、 Ctrl-C (KeyboardInterrupt) のハンドリングがネックになる。 Terraform は Ctrl-C を打つと G…

Elasticsearch: さようなら、query_string のスペース区切り

この記事は KMC advent calendar 2021 9日目の記事です。 昨日の記事は Elasticsearch: N-gram tokenizer と N-gram token filter の挙動の違い - Unyablog. でした。今日*1も Elasticsearch の話をします。 本題 サークル内で開発しているドキュメント検索…

Elasticsearch: N-gram tokenizer と N-gram token filter の挙動の違い

この記事は KMC advent calendar 8日目の記事ということにしています。 adventar.org KMC では部内ドキュメント検索システムで Elasticsearch を使用している。最近 Elasticsearch のバージョンを上げる準備をしていて、設定の見直しの中で N-gram token fil…

Docker で jq が使いたくなったら gojq の Image を使えば良さそう

タイトル通りのメモ。 jq を Docker で使いたかったけど、公式で提供されている image が明示されておらず、それっぽいものも Updated 6 years ago となっている。 github.com 野良 Image はあまり使いたくないので、どうしたものか。 gojq を使おう ここで…

GitHub Actions で Docker push をするときに、特定のブランチについて latest タグをつける

DockerHub の autobuild が無料では出来なくなったので GitHub Actions で Docker build / push を行う作業をしていた。 基本的にはスムーズに移行できたが、 latest tag を自動で生成する部分だけちょっと詰まったのでメモ。 問題 Docker Hub の autobuild …

docker-compose を Docker で動かす

docker-compose を Docker 内で実行するメモ。 背景 docker-compose は便利なツールだが、Linux サーバー上で動かすときは入れ方に悩む。 Docker engine は Docker 公式 apt リポジトリから入れることができるけど、docker-compose はレポジトリには存在しな…

replicaCount: 1 と Drain とダウンタイム

Kubernetes で Node を Drain するとき、replicaCount: 1 な ReplicaSet (Service) はある程度のダウンダイムを許容せざるを得ない。 関連 issue は以下。 github.com 問題 ReplicaSet X があり、その replicaCount は 1 にしている また、同じ Selector で …

k8s: 手元で削除したリソースをクラスタからも消したい

k8s の yaml を kustomize で管理している。ここからリソースを消しても kustomize はそれを感知しないためクラスタからは削除されない。 どうするか kpt を使う。これを見つけたのは deprecated になった inventory からリンクが貼られていたため。 kpt は…

Vertical Pod Autoscaler の limits 周りの挙動について

Kubernetes で memory の requests を管理するのに Vertical Pod Autoscaler (VPA) を使っている。 github.com VPA はリソースの使用量の実績に基づいて良い感じに limits と requests を調整してくれるものだが、 limits の設定に関してちょっと困ったので…

Kubernetes ヒヤリハット ― デフォルトに戻すときはちゃんと書く

Kubernetes で Service Account を特定のものから default に戻そうとして、Pod の Template から serviceAccountName を消して apply した。 spec: - serviceAccountName: old-service-account restartPolicy: Never containers: - ... しかし、適用しても…

SQLAlchemy で MySQL の JSON_CONTAINS をやる

SQLAlchemy で MySQL の JSON_CONTAINS をやるには func.json_contains を用いれば良いのだけど、 JSON_CONTAINS のドキュメント にあるように candidate は JSON ドキュメントである必要がある。 以下のようにすると hoge は JSON ドキュメントではないため…

ISUCON 10 本戦に出場した(16位)

チーム として ISUCON 10 本戦に参加した。 isucon.net 結果は 14206 点で 16位。くやしい! レポジトリは以下。よく分からない Author になってるコミットは大体自分によるもの。 github.com 以下はチームメイトのブログ。コードの改善などは基本的にそち…

ISUCON 10 で予選突破した(24位)

ISUCON に今年も出場して、めでたく予選突破できた。チーム名は で、チームメイトはいつもと同様 utgwkk と wass80。 isucon.net チームメイトのエントリは以下。 wass80.hateblo.jp blog.utgw.net レポジトリは以下。 github.com やったこと いつも通り自…

eBPF: bpf_skb_store_bytes の BPF_F_RECOMPUTE_CSUM は tc_cls の egress では動かなさそう

最近 bpf についてめっちゃ書いてるけど、ドキュメントが弱く検索しても情報がないからです… bpf_skb_store_bytes には BPF_F_RECOMPUTE_CSUM というフラグがあって、ドキュメントによると store 後にチェックサムを更新してくれるらしい。 しかし、これを t…

eBPF: sk_skb は parser と verdict どちらも attach する必要がある

eBPF で sk_skb (BPF_PROG_TYPE_SK_SKB) を使うとき、 parser と verdict どちらも attach する必要がある。一方だけを attach しても上手く動かない。 環境は ArchLinux で Kernel release は 5.7.10-arch1-1。 $ bpftool prog attach pinned /sys/fs/bpf/s…

eBPF: BPF_MAP_TYPE_SK_STORAGE が Invalid argument

Linux の eBPF で BPF_MAP_TYPE_SK_STORAGE を使おうとして、map を定義して bpftool で流し込んだけど Invalid argument でうまく動かなかった。調べてもヒットしなくて長時間費やしたのでメモ。 環境は ArchLinux で Kernel release は 5.7.10-arch1-1。 T…

個人で運用しているサーバーを Kubernetes に整理する

個人で運用している VPS に Kubernetes を乗せて既存のシステム(Web アプリとか Slack Bot とか Cron ジョブとか)をガッと移行した。 もともとは itamae 使って Systemd でサービス立ち上げていたのだけど、ソフトウェア依存とか権限分離とか冪等性とか面…

別のサブドメインの cookie をセットできるのか

できない。 疑問 foo.example.com で Domain=bar.example.com をセットできるのか? Domain=example.com はできる Domain=example.net はできない 答え できない。 The user agent will reject cookies unless the Domain attribute specifies a scope for t…

HTML を LDIF で書くのを HTML で書くために html2ldif を作った

という記事を書きました。まだ3時こしてないので25日です。 ku-ldif.github.io

LDIF で HTML を書くために ldap2html を作った

という記事を書きました。 ku-ldif.github.io

Poetry を使ってみた

この記事は KMC 2 Advent Calendar 2019 3日目の記事ということにしました。 Poetry Python の Dependency Manager は pipenv が有名で、自分もリリース当初から使っていた。ただ、最近はリリースが一年間されておらず、割と不安な状態*1。 最近は pipenv へ…

iTerm2 JISキーボード 文字 拡大 Karabiner-Elements

iTerm2 で文字を拡大するショートカットは ⌘ + である。 JISキーボードでは + は Shift ; を入力することになるので、⌘ + は JIS では Shift ⌘ ; が入力される。 一方 iTerm2 では、Shift ⌘ ; が Open Command History に割り当てられている。このため、JIS…

YAML から JSON に変換するツールを Nim で書き、GitHub Actions でリリースする

最近 config が YAML になっているアプリケーションが多い。ただ、自分は YAML の読み書きが苦手である。 設定を書くには機能が多すぎるのと、(config なので)ネストしやすいのにインデントが関わってくるのが苦手なのだと思う。 何度かハマった結果、これ…