遅寝エンジニアが1か月で睡眠効率1.5倍になった結果の考察を書き留めておく

f:id:komeiy:20190622173420j:plain:w1024

睡眠の話です。心身の状態に密接に関係するためパフォーマンスに大きく関係します。 結果をタイトルに書きましたが、結構効果があったのでいつもと違うジャンルですが書いておきます。

続きを読む

GCP の Interconnect や CloudVPN に GCS のトラフィックを乗せる方法

GCP の Interconnect や CloudVPN に GCS のトラフィックを乗せる方法を調べた時にいい感じにまとまったページがなかったのでメモしておきます。

概要

まずなんでこれをやりたいかというと、まず初めに 転送コスト です。コストがかかる方向は制限されますが、結構ばかにならないです。 例えば Partner Interconnect であれば 1/2 から 1/3 程度のコストに抑えられます(※ 記事執筆時点の情報。ポート利用料など別課金あり)

続きを読む

KubernetesのNetworkPolicyとかNodeAffinityやinitContainersを備忘録的にメモ

f:id:komeiy:20150107164847j:plain

タイトルの通りですが、備忘録です。 色々と機能あるので知らないことがいっぱいです。記憶定着させる意味も込めて書いているのでそんなたいした内容はないです。

続きを読む

Kubernetes の dev 環境 では skaffold + kustomize が超便利な話。〜 CI/CD を考えてみた 〜

f:id:komeiy:20150107164847j:plain

Kubernetes の CD (継続的デリバリー)の話です。

Kubernetes って便利だなって思う反面、いちいちコンテナのイメージをビルドしたりプッシュしたり Kubetenetes へデプロイしたりするのが非常に面倒になってきました。みんなそうですよね。Dev 環境だけでも簡単にデプロイ環境作れないかなと思って色々試してみました。

ちなみに Kubernetes の基礎知識が足りてないな、知識ちゃんと保管したいな・・・って人は以下の参考書がオススメです。 かなり詳細にそして網羅されているので、これ一冊読んでおけば大丈夫です。電子書籍版もあります。

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)

skaffold について

Google が開発している Kubernetes 向けの CD ができるツールです。特にサーバとかいらないのでお手軽に環境が作れます。

Kobito.GGXaP1.png

上記の図の通り、build, push, deploy の一連の流れを組むことができます。

https://github.com/GoogleContainerTools/skaffold

今回は、Dev 環境で skaffold dev を主に使っているのですが、一連の流れをコマンド一発で実現できますし、ログを垂れ流してくれるのが嬉しいですね。

kustomize について

Dev 用の yaml と Prd 用の yaml を生成するためにつかっています。 base に対して環境ごとの overlay を適用するため、以下のようなディレクトリ構造にしています。

├── base
│   ├── kustomization.yaml
│   ├── cert-secret.yaml
│   ├── deployment-app.yaml
│   ├── env-map.yaml
│   └── service.yaml
├── overlays
│   ├── development
│   │   └── kustomization.yaml
│   └── production
│       ├── kustomization.yaml
│       ├── service.yaml

以下のようなコマンドで development の yaml を生成しています。

kustomize build overlays/development/ > dev-k8s.yaml

環境準備

まずは skaffold をインストールします。MAC OSX だと以下の通りです。 特にサーバコンポーネントを入れる必要などはありません。

curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-darwin-amd64 && chmod +x skaffold && sudo mv skaffold /usr/local/bin

次に skaffold のレポジトリをクローンします。

git clone https://github.com/GoogleContainerTools/skaffold

以下に各種設定ファイルがあります。

cd examples/getting-started

skaffold.yaml を見てみます。

Docker file を元にイメージをビルドして gcr にあげて、kubernetesk8s-pod.yaml を元にデプロイします。

次は以下のコマンドで実行してみます。

skaffold dev

docker build / docker push / kubectl apply が実行され、 Hello world! が表示されます。

[getting-started] Hello world!

さて、このまま main.go を書き換えてみましょう。再度一連の流れが走り、以下の通り出力が変わります。

[getting-started] Hello jerry!

skaffold の簡単な使い方とインストールは大丈夫ですね。 次に kustomize をインストールします。

brew install kustomize

kubernetes のデプロイ環境構築

skaffold も踏まえて以下のディレクトリ構造にしました。kubesec で復号化したファイルを元に kustomize でマニュフェストを生成しています。そのため、非暗号化テキストが入るため、manifest 配下を .gitignore に入れるようにしています。

├── README.md
├── base
│   ├── kustomization.yaml
│   ├── cert-secret.yaml
│   ├── deployment-app.yaml
│   ├── env-map.yaml
│   └── service.yaml
├── depoly_dev.sh
├── manifest
│   ├── dev-k8s.yaml
│   └── prd-k8s.yaml
├── overlays
│   ├── development
│   │   └── kustomization.yaml
│   └── production
│       ├── kustomization.yaml
│       ├── service.yaml
└── skaffold.yaml

Dev 環境のデプロイ

流れは以下の通りです。

- アプリケーションの更新
  -  skaffold dev を実行 -> Dockerfile(ないしは関連するファイル) の更新 -> 動作確認- > Dockerfile(ないしは関連するファイル) の更新 -> 動作確認
- kubernetes のマニュフェスト更新
  - skaffold dev を実行 -> マニュフェストの更新 -> 動作確認 -> マニュフェストの更新 -> 動作確認

ちなみに、アプリケーションと kubernetes のマニュフェストは別のレポジトリで管理しています。そのため、github submodule を使ってマニュフェスト側に取り込んでいます。

マニュフェストの生成部分を説明していなkったので説明しておきます。kustomize では、 base ないしは overlay、kustomization.yaml を更新してマニュフェストを生成します。

kustomize build overlays/development/ > dev-k8s.yaml

overlays/production/kustomization.yaml を見て見ます。namespace やファイルの頭、label に dev を一括で入れてくれます。image tag は base 側では指定せずにこちらで上書きします。

namespace: dev
bases:
- ../../base
namePrefix: dev-
commonLabels:
  env: dev
patches:
- service.yaml
imageTags:
- name: <private registry>/test-app
  newTag: "0.3"

あとは skaffold dev 叩けば OK です。

depoly_dev.sh は Kustomize や submodule 周りの処理をまとめたものです。 depoly_dev.sh を実行して必要な操作をワンコマンドで実行します。

Prd 環境のデプロイ

Prd では別のデプロイ方法を利用しています。 Devで気がすむまでテストをしているので、作業は少ないです。ある程度手作業を入れながら慎重に実施する方針で考えています。

少し話が逸れますが、 Prd 環境では Kustomize を利用してサービスも上書きしています。イメージを掴むためにサンプルを書いておきます。

apiVersion: v1
kind: Service
metadata:
  name: test-lb
spec:
  type: LoadBalancer
  ports:
    - name: "ldap-port"
      protocol: "TCP"
      port: 80
      targetPort: 80
  selector:
    app: test-subldap
apiVersion: v1
kind: Service
metadata:
  name: test-lb
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10

本題に戻ります。image の作成には CircleCI を使っています。 tag がつくと CircleCI が docker registry に push するようにしています。

シンプルすぎてこれといってないですが、 .circleci/config.yml は以下の通りです。 本当はブランチの名前ごとに処理を分岐して CircleCI 側でもう少し処理するのが良いですね。

version: 2
jobs:
  build:
    docker:
      - image: circleci/golang:1.9.3
    working_directory: ~/app
    steps:
      - setup_remote_docker:
          docker_layer_caching: true
      - checkout
      - run:
          name: Build
          command: docker build -t ${IMAGE_NAME}:latest .
      - run:
          name: Tag to latest
          command: docker tag ${IMAGE_NAME}:latest ${OWNER}/${IMAGE_NAME}:$CIRCLE_TAG
      - run:
          name: Docker Login
          command: docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} <private registry>
      - run:
          name: Push image to registory
          command: docker push ${OWNER}/${IMAGE_NAME}
workflows:
  version: 2
  build:
    jobs:
      - build:
          filters:
            branches:
              ignore: /.*/
            tags:
              only: /.*/

このような .circleci/config.yml になっているので、以下のように tag を push するとビルドが走るようになっています。Dev でテストして満足いったら tag つけるだけという感じです。

git tag 0.3
git push origin --tags

Kustomize で Prd 用のマニュフェストを生成して(これも Dev で検証しているので、共通の base ファイルは更新されている前提です)、kubernetes 側に適用します。

kubectl apply -f prd-k8s.yaml

一連の流れは bot 化しても良いかなと思いましたが、こなれてくるまで一旦手動にしています。

まとめ

kubernetes の CD はなかなかこれというのが見つからず、skaffold は割とシンプルで手元で試せるので面白かったです。一つ難点があるとすれば、手元のクレデンシャルに従って kubernetes にデプロイされるため環境間違いが怖いなというところです。spinnaker もいいかなと思いましたが、今回の環境にはオーバースペックかなと思ったので、また改めて機会をみてトライしてみようかなと思います。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)

入門 Kubernetes

入門 Kubernetes

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

完全食・MRPなマイオプレックス1ヶ月飲んだら効果があったのでレビューしてみる

エンジニアの食生活的なお話です。 栄養とか体調には昔から凝ってまして、特にエンジニアは座りっぱなしだったり不規則な生活をすることが多いですし、コーラがぶがぶ飲んでる人とか多いですよね。それはさておき、業務時間でのパフォーマンスは健康体であることが非常に大きく関わるので、すごい大事って話です。

まず、MRPって何?ってところですが、置き換え食的なものです。 「Meal Replacement Powder」の略らしいです。

私はお昼ご飯をこれに変えてます。全部じゃないです。 週の2〜3をマイオプレックス+牛乳にしています。

f:id:komeiy:20181112121909j:plain

マイオプレックスが買えなくなってしまったので、このページの最後に代替えを書いておきます。

結論書いておきます。よかったのは以下の3点です。

  1. 自由な時間が増えた

  2. 体重が3キロくらい減った

  3. 節約になった

個別で解説しておきます。

1. 自由な時間が増えた

個人的な1番はこれです。自席周辺で全部済むので、かなり時間節約になります。 ニュースみながら 5 分くらいで済みます。あとは洗う時間だけです。 ちなみにこの記事も時間ができた昼休みに書いています。

メリハリが欲しい性格なので、情報収集などは休憩中にまとめて業務時間には集中して一つのことに専念したりしたいです。(現実問題難しいけど)

こういう自分で自由に過ごせる時間が増えるのは想像以上にいいことだと思います。

2. 痩せた(体重が3キロくらい減った)

ダイエットをするつもりはなかったのですが、おおよそ3キロくらい平均落ちました。元々体重は平均より少ないのです。 運動したりもしますし人一倍食生活は好きで気を遣っているので色々要因はあるかもしれませんが、3キロのうちの大半はこれが寄与していると思います。気を遣っていると言いましたが、月に1〜2回ほど二郎インスパイアのラーメン食べたりもしますし、毎日ピリピリして摂生しているわけではないです。

  • マイオプレックス+ローソンの低脂肪乳(厳密には牛乳じゃない)
  • マイオプレックス(ハーフ)+ローソンの低脂肪乳+甘栗

こんな感じで適当に組み合わせてその日の気分で運用してます。

3. 節約になった

iHerbで買うと一食分のマイプレックスが260円くらいです。 為替によって変動しますが、5200円 - 5500円くらいで20食分です。 そこに 5% 引きのクーポン QIG949 を入れるとそれくらいになります。

ちなみにマイオプレックスの購入はこちらです ※ 2019年2月追記: 買えなくなっているようですね。。ページの最後に代替品を紹介しています。

その他

あと個人的に良かったなと思う点を何個か。

a. 昼食後の眠気が来たりはほとんどないです。

もともとそんなにないですが、ほぼ皆無って感じです。安定しているイメージです。 1. で書きましたがある程度時間も創出できますしとても良いです。

昼ごはんダラダラ食べる -> 食後眠い なサイクルと比べると日々の積み重ねではだいぶ時間が変わります。

b. たまに食べる普通の昼ごはんが美味しい

週2から3にしているのは、やっぱり誰かとお昼食べたかったりするのでそうしいてるのですが、毎日だとまたここか的な飽きもあるのですが、久しぶりにいくとかなり美味しく感じます。最高です。

c. 腹持ち

これもよく聞かれますが、実は半分で十分なので全部飲んでないです。その場合、だいたい正午にたべて夕方5時くらいまではもつイメージです。適当におやつ食べます(ちゃんとしたもの)。食事は小分けの方が好きなので悪くないです。

d. 栄養素について

公式ページに書いてます。

こうしてみるとビタミンB1・B2入ってないんだとか発見もありますが、割とまんべんなく入っていると思います。わかると思いますが全食置き換えでなくて、ちゃんと別のタイミングでもまんべんなく取るべきです。

ちなみに、COMPとの比較はこちらがとてもわかりやすかったです。

完全栄養食品・MRPの比較 | 完全食(完全栄養食)

マイプレックスの購入先について

iHerb から買いました。こちらです。味はチョコレートを買いました。海外ですが1週間くらいで届きました。プロテインとかもあるのでここでまとめて買ってます。

マイプレックスは買えなくなってしまったので、代替品だとこの辺りかなと思います。

粉ではなく食事がよければ以下がオススメです。 komeiy.hatenablog.com

まとめ

色々書きましたが、一番大きかったのは時間のゆとりです。 これらの商品を毎日絶対食べるっていうのはオススメはしませんが、使い方次第ではかなり有益なものだと思います。

頑張りすぎず日々の生活に少しでも取り込めると良いエンジニアライフが送れるのでは?


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。