Kubernetesへ入門する際に読んだ本

こんにちは〜〜ごーすとです
今年の4月からk8sを触っているのですが、そのときから読んだ本を紹介していこうと思います

読んだ本

しくみでわかるKubernetes

読んだ本の中ではこの本が一番入門書としてはよかったです。
k8sの構築などもAWSを使うことで楽に触り始めることができますし、筆者の最短経路でk8sに触れるようになるにはという思いが込められており凄く良い本でした。
また、設計のハマりどころもどのように考えていけばいいのかなどが纏められており初学者としては助かりました。
ただDockerについてはある程度理解している必要があるのでそのような人はイラストでわかるDockerとKubernetesとかから入門するといいのかなと思います

Kubernetes完全ガイド

触り始めの頃に最初に読んだ本でしたが、僕にはむずかしかったです・・・
イラストでKubernetesの動作が纏まっているので今ではリファレンス代わりに読んだりしています。

Kubernetesで実践するクラウドネイティブDevOps

Kubernetes上のアプリケーションの運用をどう考えたらいいかなど考え方の選択肢を与えてくれる本です。
Kubernetes上のアプリケーション運用で困るようなこと解決策を理由とともにかかれているので色々落ち着いたら読み直したいですね・・・

番外編: やったこと

GORM v2のBreaking Changまとめ

変更点まとめ

パスの変更

v1

    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/postgres"

v2

    "gorm.io/gorm"
    _ "gorm.io/driver/postgres"

Transactionがデフォルトで貼られるように

GORM v2ではTransactionを常時貼るようになってます

この機能をオフにするためには以下のようにします

v2

db, _ := gorm.Open(mysql.New(conn)), &gorm.Config{
                SkipDefaultTransaction: true,
            })

Relation関数の廃棄

Relation関数がなくなりました

なのでAssociationで代用してあげる必要があります。

ちなみにこのAssoctioanクラスの関数だけGoっぽくerrorが戻り値になっています

v1

if err := db.Model(&user).Related(project).Error; err != nil {

v2

tmp := db.Model(&user).Association("Project").Find(&Project{})

Scan/FindがErrorを返さないようになっている

Findの時にRecordNotFoundだとしてもエラーを出力しないようになっています。

なのでエラーハンドリングしたい場合はTakeやFirst、Lastを使う必要があります

v1

if err := db.Table(ProjectsTableName).Where("uuid = ?", uuid).Scan(archivedPj).Error; err != nil {

v2

if err := tx.Table(ProjectsTableName).Where("uuid = ?", uuid).Take(archivedPj).Error; err != nil {

RecordNotFoundのエラーハンドリング

v1

  if res.RecordNotFound() {   
        return c.NoContent(http.StatusNoContent)
    }

v2

    if errors.Is(res.Error, gorm.ErrRecordNotFound) {
        return c.NoContent(http.StatusNoContent)
    }

DBのオープン

v1

    db, err := gorm.Open("postgres", conn)

v2

    db, err := gorm.Open(postgres.Open(conn), &gorm.Config{})

LogModeの設定

Logの出力の設定が代わりました

true or false だけではなく、InfoやWarn、Errorなどログのレベルを選択できるようになっています

v1

    // true or false
    db.LogMode(true)    

v2

    // logger.Silent or logger.Info or logger.Warn or logger.Error
    db.logger.LogMode(logger.Error)

Updateの引数にモデルの構造体が渡せなくなりました

Updateは単一のカラム更新にのみ使うように変更されています。

v1

    if err := db.Model(&cis).Where("id = ?", id).Update(cis).Error

v2

    if err := db.Model(&cis).Where("id = ?", id).Updates(cis).Error

Countの型がintからint64へ

v1

var count int
db.Table("activities").Where("project_id = ?", pj.ID).Count(&count)

v2

var count int64
db.Table("activities").Where("project_id = ?", pj.ID).Count(&count)

Deleteの変更

テーブルの全削除する場合には明示的にAllowGlobalUpdateをtrueにする必要があります

v1

db.Delete(&model.Charge{})

v2

db.Session(&gorm.Session{AllowGlobalUpdate: true}).Delete(&model.Charge{})

DockerのPHP環境にXdebugをインストールする

ただの覚え書きです

以下のようにpecl installでXdebugのダウンロード/コンパイルしたのちdocker-php-ext-enableで有効にすればおk

docker-php-ext-enableのことを摩訶不思議コマンドだと思っていたけど設定ファイルにzend_extension=hoge.soを書き出してくれるコマンドらしい。

便利~

FROM php:7.4-fpm

RUN pecl install xdebug-2.8.1 \
  && docker-php-ext-enable xdebug

Keybase.ioに登録した

タイトルどおりです。おそらく友人であるところの@mute1008の誘いからKeybase.ioに登録しました
Keybaseは公開鍵基盤の一つなんですけど、TwitterやGitHubなどといったSNSのアカウントと公開鍵を紐付けることで本人を証明したり、いろんな人とチャットができたりします
あとはKBFSと呼ばれる独自のファイルシステムもあってエンドツーエンドで暗号化されていてKeybase側からもファイルを確認できないらしいです(かっけえ・・・)

Keybase.ioを詳しい話は、以下の記事とか読んでください
https://techwave.jp/archives/introducing-keybase-chat-25081.html
https://www.nikhita.dev/introduction-to-keybase

ということで今すぐKeybase.ioに登録してぼくをフォローお願いします
https://keybase.io/5st7

HomebrewでVimをインストールする(with-override-system-viオプションが使えなくなった話)

環境

  • macOS Catalina(10.15.4)
  • Homebrew 2.2.16

動機

Qiitaの記事見てたらオプションにwith-override-system-viつけてインストールしてあげるといいよ〜と書いてあった
脳死でそのとおりにコマンド叩いたらエラー吐いてつらい気持ちになりました

$ brew install vim --2.2.16
~~省略~~
Error: invalid option: --with-override-system-vi

原因

brew infoで見てみたらそもそもオプションが消えてた

$ brew info vim
vim: stable 8.2.0700 (bottled), HEAD
~~~~~~~省略~~~~~~~~
==> Options
--HEAD
    Install HEAD version

調べてみたら2年ぐらい前からwith-override-system-viがなくなってたらしい
https://github.com/Homebrew/homebrew-core/issues/41128

解決方法

普通にインストールしてあげて普通にパスを通してあげる

$ brew install vim
$ brew unlink vim && brew link vim

シェルを再起動なりなんなりしてるとちゃんとパスが通ってることが確認できると思います

$ exec -l $SHELL
$ which vim
/usr/local/bin/vim