BPF
Berkeley Packet Filterの略で、パケットを効率よくフィルタリングする機構のこと。Linuxでは LSF(Linux Socket Filtering) という機構を使ってBPFを利用できる。
fukabori.fmの第111回のメインテーマだったeBPF(extend BPF)。聴いていてもさっぱり何のことやらわからなかったので調べてみた。fukabori.fmは自分には内容が難しめの回が多いので、聴きながらちゃんと内容が理解できて、面白いと思えるレベルに早く到達したい。
パケットフィルタリングの機構は割といろいろな種類があるが、BPFはカーネル上で処理をするという点が特徴的らしい。BPFを利用するツールとして、tcpdumpが有名。
eBPFは、BPFがパケットフィルタリング以外の用途にも使いだされた結果、BPFから進化を遂げたものという扱いになっている。2021年にはeBPF Foundationが設立され、Facebook、Google、Isovalent、Microsoft、Netflixなどの大手IT企業が参画を進めているらしい。
完全に理解するにはかなり時間がかかりそう……
ネスぺでこんなん出てきたら太刀打ちできない……
最後に話は少し脱線するが、BPFで検索したらToku’s Blogがヒットしてびっくりした。Kubernetesの勉強法を先輩に聞いたときに教えてもらったのがこのKubernetes道場。2018年に書かれていて流石に情報が古いけど、図がいっぱいあってわかりやすくておすすめです。
も一つ脱線。
なお、現在ではeBPFは 「which is no longer an acronym for anything (何の略称でもない)」とされているらしいんやけど、IT系ってアクロニムじゃなくなるパターン多くないですか?SOAPとか。
もはやアクロニムじゃないってどういうことなんですかね?途中で意味が変わるやつって誰が意味決めてんの?めっちゃ気になる。
参考サイト
BPFについて調べてみた – Toku’s Blog
eBPFに3日で入門した話 – CADDi Tech Blog
cgroup
Control Groupの略。Linuxカーネルの機能の1つで、システムリソース(CPU、メモリ、ディスクIO、ネットワークなど)を使用するプロセスをグループ化し、それぞれのグループに対してリソース使用量を制限することができるもの。
リソースごとにコントローラーが存在し、コントローラーはcgroupfsという特別なファイルシステムを介して使う。この特別なファイルシステムは、ストレージデバイス上に存在するわけではなく、メモリ上にだけ存在するらしい。
なんかメモリ上にだけ存在する特別なファイルシステムってLPICの勉強中に出くわした気がする。/procやったかな?
kubernetesでいうRequest/Limitsみたいなもんかな?
こっちはPodごとに設定するやつやけど。
Requests/Limitsの使い方間違ってないか確認するために調べた記事の内容面白かったので転載します。
RequestsとLimitsの差が意味すること
差が大きい場合
PodのスケジューリングはRequestsに基づき決定されるので、実際には負荷が高いノードであっても、Requestsの合計値として空きがあれば新たなPodを配置することができてしまいます。これがオーバーコミットと呼ばれる状態です。全てのPodが必ず負荷が高い状態が続くわけではないので、このようなことができます。よしなにノードのリソースを使いあう状態になるので、コスト効率は高まります。しかし、この状態はノードのリソースを使い果たすリスクがあるため、負荷が高まった場合は一定の条件でPodを停止されます。差が小さい(同じ)場合
RequestsとLimitsを同じ値にすると、オーバーコミットを回避することができ、不用意にPodが停止されるリスクを回避することができますが、リソースの集約率は低下します。つまり、Podの安定稼働とリソース集約率のトレードオフの状態なのです。したがって、ユースケースに見合ったチューニングが必要になってきます。
Kubernetesクラスターのキャパシティ管理を行うためにRequestsとLimitsを確実に設定する方法
つまり、リスクを取って制限に幅を持たせるか、安全策を取ってぎちぎちにリソース配分を決めておくかということ。言われてみればそらそうやんって感じなんやけど、言われてみて気づくことっていっぱいあるな~と思いました。
参考サイト
Dockerでのcgroupの利用について #Docker – Qiita
Pod Disruption Budget (PDB)
Voluntary Disruptions(システムの計画的な中断) からアプリケーションの可用性を保護するための、Kubernetesのリソースのこと。
Voluntary Disruptions(システムの計画的な中断)って何やねんという話ですが、
物理マシンの障害とか、操作ミスでノード削除しちゃったりとか、想定外のPodの消失以外の、意図的なPodの消失を指すみたい。基本的にはDrainのことって思えばよさそう。
で、意図的なPod消失の際でも可用性を維持するために存在するのがこのPodDisruptionBudget。
PodDisruptionBudgetというリソースを作成するためのマニフェストファイルではminAvailableとmaxUnavailableが指定できる。
minAvailableとは、指定したPod群の中で常に稼働していなければならない最小限のPodの数または割合いのこと。maxUnavailable は、一度に中断または利用不可となっても良いPodの最大数または割合のこと。
Kubernetesはやっぱむずいっすね。
「なにもわからない」状態過ぎて苦しい。早く抜け出したい。
参考サイト
動作例からKubernetes PDBの挙動を理解する | メルカリエンジニアリング
Kubernetes DrainとPod Disruption Budget(PDB)
ユーザーランド
実行中のオペレーティングシステム(OS)環境の中で、中核部であるカーネル以外の要素のこと。一般ユーザーの権限で操作できる領域であり、シェルやコマンド、アプリケーションなどが含まれる。
- GNU core utilities cat や ls など
- util-linux dmesg や fdisk など
- そのほか様々なパッケージ
といったように、コマンドのバイナリファイルが格納されているっぽい。
組み込み Linux では、ユーザーランドとしてGNU core utilities などに含まれるコマンド群(cat や ls など)を 1 つの実行ファイルにまとめた BusyBox がよく使われるらしい。
ってことはBusyBoxってOSではないってことか。
コマンドとかがいっぱい入ったコンテナ立てたいときはコンテナイメージとしてBusyBoxを使うイメージがあって勝手にOSの一種と思ってたけど、OSの一部なんやね。
参考サイト
Linux の「ユーザーランド」という言葉をよく聞くけどちゃんと理解してなかったのでメモ
ユーザーランドとは – 意味をわかりやすく – IT用語辞典 e-Words
Apache JMeter
Apacheソフトウェア財団が開発しているオープンソースの負荷検証ツール。 サーバに対して指定した量のリクエストを送り、そのレスポンスを受けることで、パフォーマンス計測が可能。
JMeterというツールは知ってたけど、Apacheのやつっていうのは知らんかった。
Apache何でもあるやん。すごいやん。
今のプロジェクトめちゃくちゃApacheにお世話になってますやん。
Gatlingとかk6とかが似たようなツールになるのかな?
品質保証とかテストのプロはそれぞれの長所短所熟知してて用途によって使い分けんのかな。
ビブリオバトルみたいなノリでそれぞれのツールについて熱弁してるのを見るの面白そう。だれかやってくれへんかな。