最近 CKE というベアメタル向けの Kubernetes 管理ツールを作っています。 ブートストラップツールではなく自律的・継続的にクラスタの構成を修正していくツールで、以下が特徴です。
- ネットワークプラグイン非依存
- HA 対応
- CKE 自体の高可用性
今日は CKE の紹介が目的ではないのでこのあたりにします。
本題は、CKE が内部で使っている golang.org/x/crypto/ssh
というライブラリが無期限に ブロックしてしまう問題があったので、どう対応したかです。
最近 CKE というベアメタル向けの Kubernetes 管理ツールを作っています。 ブートストラップツールではなく自律的・継続的にクラスタの構成を修正していくツールで、以下が特徴です。
今日は CKE の紹介が目的ではないのでこのあたりにします。
本題は、CKE が内部で使っている golang.org/x/crypto/ssh
というライブラリが無期限に ブロックしてしまう問題があったので、どう対応したかです。
初日についてはこちらをどうぞ。
builderscon tokyo 2018 一日目 - 誰かの役に立てばいいブログ
二日目は QUIC+TLS1.3 や Jepsen など楽しみにしていたセッションと、私も内容に関わったセッションなどに参加しました。
続きを読むbuilderscon tokyo 2018に参加してきましたので、メモ。
仕事で Kubernetes を扱っているので、その周辺技術の話を聞いてきました。 初日はサービスメッシュ関係がたくさん。
続きを読むTL;DR
HDD 同様、NVMe ストレージも nobarrier
するなら内部キャッシュを無効化したほうがいいケースがあります。
分かる人向けに端的に書くと、NVMe 仕様には volatile write cache の有無と、有効化/無効化切り替え、および有効な場合にデータが消失するケースが明記されています。手持ちの NVMe デバイスの情報を確認して、ファイルシステムに nobarrier
つけたいなら、確実に無効化しておきましょう。
以下は詳細。
続きを読む@tamagawa_ryuji 氏からこの度和訳して発売された「SRE サイトリライアビリティエンジニアリング」をご恵贈いただきました。
英語の原本は昨年発売されており、Google のサービス運用について実践的な知見が得られる貴重な書籍ということで、去年のうちに英語版を社内で購入し、輪講しています。今回和訳本を頂きましたので、二度目となりますが早速拝読しました。
SRE (Site Reliability Engineering) という言葉を聞きなれない方のために簡単に解説しておくと、Google において古典的なシステム管理者の概念に代えて導入された、システムとその上のサービスの信頼性に責任を持つエンジニアとその仕事のやり方の体系的な概念です。
初めて読んだ際は、SRE とそれにまつわる Toil や Postmortem といった概念や SLO の定義の仕方について Google の知見を学ぶのに精一杯でした。二度目となる今回ですが、以下のような点で読む価値が確実にあると感じた次第です。
続きを読む長年 Android を使っていたんですが、最近 iPhone にしまして。
cybozu.com にリモートからアクセスする際、クライアント証明書で認証する「セキュアアクセス」という機能があるのですが、Safari で使うには証明書を読み込ませておかねばなりません。
Android では PKCS#12 形式のファイルを選択するだけで読み込めたのですが、iPhone だとユーザーインタフェースがないのですね。 調べてみると、会社の iPhone をまとめて設定するために使う「構成プロファイル」という機能があり、この一機能でクライアント証明書を設定できるようです。
構成プロファイルは .mobileconfig
という拡張子の XML ファイルで、以下のように自作できます。
Go 1.7 から本体に入った context パッケージは便利、というより今や必須の道具です。以下のように書くことで、一定時間で処理をキャンセルできたりします。
func slowOperationWithTimeout(ctx context.Context) (Result, error) { ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) defer cancel() // releases resources if slowOperation completes before timeout elapses return slowOperation(ctx) }
defer cancel()
とありますが、このようにしないとリソースリークするので context 使うときはこう書くのがパターンです。
さて、以下のプログラムですが、返ってくるデータが小さいうちは問題なく動きますが、大きなデータになると resp.Body
の読み込みで必ずエラーが返るようになります。