ひよこ、通勤中。

通勤中の電車の中でひよこは何を思うのか。

Docker/kubernetes関連本メモ

これ読みながらのメモ

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

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

alias:

  • k: kubectl

Dockerコンテナのdeploy

  • --nameは本番環境では使わない -docker image prune
    • 現時点で使ってないimageの削除
  • docker container stats [container id]
    • container を top する

docker-compose

  • --build option で毎回ビルド
  • volumes
    • local:dest
  • container-name で名前つけれる

実用的なコンテナ構築とデプロイ

  • データはData Volumeコンテナに持たせる
  • busybox
    • data volumeとかに使われる最小限の軽量OS
  • --volume-from [volume container name]
    • volumeが共有される

local(Docker for Mac)でkubenetes

  1. kubenetesのpreferenceからkubenetesを起動
  2. kubectxコマンドで確認するとdocker-for-desktop というクラスタができている

training

  • k proxy でpodたちと通信できるproxyが立ち上がる
  • k exec -it POD COMMAND -c CONTAINER で実行中のコンテナに入る

deploy

  • k rollout history deploy DEPLOY でdeployのhistoryが見えれる。(--recordつけてapplyしたdeploymentの)
  • k rollout history deployment DEPLOYでrollback

service (svc)

  • cluster内のserviceは Service名.Namespace名.svc.local で名前解決できる
  • ClusterIP Service(default): 内部IPアドレスにserviceを公開できる
  • NodePort Service: 各ノード上からServiceポートに接続するためのglobalなportを空ける
  • LoadBalancer Service: クラウドで提供されているロードバランサと連携する
  • ExternalName Service: kuberenetesから外部ホストを解決するためのえい

いつも使うkubectlのコマンド

切り替え

  • 使ったことあるクラスタ一覧: kubectx
  • クラスタ切り替えkubectx <NAME>

  • 使ったことあるnamespace: kubens

  • namespace切り替え: kubens <NAME>

brew install kubectxでkubectxとkubensが入る (ahmetb/kubectx: Fast way to switch between clusters and namespaces in kubectl)

よく使うやつ

  • pod一覧 k get pods --sort-by=.metadata.creationTimestamp

alias: kubectl -> k

関数の引数を固定した関数を作る

functools.partialを使うと引数を固定した関数を作ることができる。

例えば以下のような引数を2つ受け取る関数args2を、functools.partialを使って1つ目の引数aを固定したargs1を作ると以下のような感じに使える。

import functools

def args2(a, b):
    print(f"a:{a} b:{b}")

args1 = functools.partial(args2, 'a')
args1('b')
# a:a b:b

しゃべる英語めも

日常会話

  • 平凡な mediocrity
  • がんばる
    • 努力する strive
    • もがき苦しみながらがんばる struggle
  • しようとしている I'd try to ~
  • XX時ならいいよ Any time after/before XX is fine.
  • こっそり見る sneak a peek
  • 頼みを受ける/断る accept/refuse

自己紹介

  • はじめまして(ビジネス) Pleased to meet you
  • {NAME}って呼んでね you can call me {NAME}
  • 20代後半です I'm late twenties.
  • 以前は〜に勤めていました。 I worked for ... .
  • 〜については結構経験があります。 I have a lot of experience in ...
  • 専門は〜です。 My specialty is ...

仕事便利フェーズ

  • 〜について話しますね Let's me explain about... .
  • 無料 for free / free of charge
  • 〜をお願いする I ask - to ~

食べ物

  • もやし bean sprout
  • なす egg plant

モデルを学習させるときのスクリプトテンプレート in Python

  • 標準出力とファイルのログを書き出す
  • 好きなコア数で並列処理する
  • デバッグ中はデータ数少なくしたい

みたいなときこんな感じでかいたの使ってる

import time
import argparse
import logging
import multiprocessing
from pathlib import Path

logger = logging.getLogger(__name__)
fmt = logging.Formatter('%(asctime)s [%(levelname)s] %(message)s')
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(fmt)
logger.setLevel(logging.DEBUG)
logger.addHandler(stream_handler)
logger.propagate = False


def main(args):
    logger.debug('log test')
    pass


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--limit', default=None, type=int, help='Max data size')
    parser.add_argument('--log', default=None, type=str,
                        help='Path to log file.')
    parser.add_argument('--cpu', default=multiprocessing.cpu_count(), type=int)
    args = parser.parse_args()
    if args.log is not None:
        path = Path(args.log)
        path.parent.mkdir(parents=True, exist_ok=True)
        handler = logging.FileHandler(path, 'w')
        handler.setLevel(logging.DEBUG)
        logger.addHandler(handler)

    start = time.time()
    main(args)
    t = time.time() - start
    logger.info(f'Time: {t / 60:,.0f} min {t % 60:,.0f} sec')

ひらがな <-> カタカナ in pandas

import pandas as pd


def katakana_to_hiragana(text):
    d = {i: i - 0x60 for i in range(ord('ァ'), ord('ァ') + 86)}
    return text.str.translate(d)


def hiragana_to_katakana(text):
    d = {i - 0x60: i for i in range(ord('ァ'), ord('ァ') + 86)}
    return text.str.translate(d)


s = pd.Series(['あいう', 'アイウ', 'あqwせdrftgyふじこlp;'])
katakana_to_hiragana(s)
# 0                 あいう
# 1                 あいう
# 2    あqwせdrftgyふじこlp;
hiragana_to_katakana(s)
# 0                 アイウ
# 1                 アイウ
# 2    アqwセdrftgyフジコlp;