KubernetestとWindows Server Containerでコンテナクラスタ環境を構築する際、コンテナ間ネットワークの構築を自動的に構成する方法について解説します。マネジメントプレーンであるKubernetes、ネットワークのコントロールプレーンの一つであるFlannelと各Windowsノードで実際のルーティング設定を行うCNIについて解説します。さらにWindows Server 1709以降でKubernetes対応したといわれるWindows Containerのネットワーク機能、Host Networking Service (HNS)についても解説します。
5. タブ補完
例えば、sys モジュールのメソッド、属性を表示したい
In [1]: import s[TAB] # <- sまでタイプしてTAB モジュール補完候補表示
set setattr slice sorted staticmethod str sum
super sys
In [2]: import sys
In [3]: sys.[TAB] # <- sys.までタイプしてTAB補完候補表示
In [4]: sys.__class__
.sys.__class__ sys.__delattr__ ...
6. イントロスペクション
例えば、re モジュールについて調べたい
In [1]: import re
In [2]: re? # オブジェクトに関する情報を表示(省略あり)
In [3]: re?? # オブジェクトに関する情報を表示(省略なし)
In [4]: %pdoc re # docstring表示
In [5]: %pdef re.search # re.searchの宣言部表示
In [6]: %psource re.search #re.search メソッドのソースコード表示
In [7]: %p?le re.search #re.search が定義されているファイルのソースコードを表示
7. マジックコマンド
IPythonの独自のコマンド
%[TAB] #マジックコマンドの一覧
%alias %autocall %autoindent ...
※automagicがON(デフォルトでON)だと、%を付けなくても実行できる。
In [1]: alias #これで実行できる
ところでマジックコマンドに定義されてないのに、ls とかが動くのはなぜ?
%alias #シェルコマンドがマップされている
[('cat', 'cat'), ('clear', 'clear'), ('less', 'less'), ('mkdir', 'mkdir'), ...]
%alias d date # エイリアスの追加。 dと打つとdateが実行される
8. シェルアクセス
IPythonを終了せずにシェルコマンドを実行したい
In [1]: !cal # cal コマンドが直接シェルに渡される
In [2]: d = !date # date コマンドの結果を d に代入
In [3]: d # <class 'IPython.genutils.SList'> 特殊なリストになる
In [4]: !echo $$PATH # $$で環境変数へのアクセス
9. キャッシュ
アウトプットキャッシュ
Out という辞書に格納
_1 == Out[1] == _oh[1]
_, __, ___ ※ 最新3つの履歴
インプットキャッシュ
In という辞書に格納
_i1 == In[1]
_i, _ii, _iii ※ 最新3つの履歴
In [1]: print datetime.now()
datetime.nowをもう一回実行したい
In [2]: _i1 # これだと文字列が入ってるだけなので
Out[2]: u'print datetime.now()n'
In [3]: exec _i1 #ひとつ前のを実行なら、 exec _i だけでもオッケー。もしくは、%r でも可。
10. 履歴
In [1]: _dh # cd したディレクトリが入った辞書(終了後も保存)
In [2]: _oh # Out の履歴が入った辞書
In [3]: %hist # 実行コマンド履歴(In の履歴)
In [4]: %rep # 直前のOutを次のプロンプトに表示
In [0]: spam = python
In [1]: spam
Out [1]: python
In [2]: %rep
In [3]: python
%rep に引数を渡すことも出来る。 %rep 1 とか %rep 1-3 5 とか %rep datetime とかも可
しかし、なぜか自分の Leopard python2.5.1 ipython0.91で動かない!Linuxでは動いた。
%rep datetime と文字列を指定した
場合は、履歴をたどって最初にその
文字列が見つかったOutを使用する
11. ブックマーク
よく行くディレクトリをブックマークしておきたい
In [1]: %bookmark home #カレントディレクトリをブックマーク
In [2]: %bookmark -l #ブックマーク一覧
Current bookmarks:
home -> /Users/hfunai
In [3]: cd -b home # home=/Users/hfunai へ移動
In [4]: %bookmark -d home # ブックマークからhomeを削除
ブックマークは、IPythonを終了しても保存される
13. ディレクトリスタック
In [1]: %pushd # カレントディレクトリをスタックに入れる
Out[0]: [' ']
In [2]: %dirs # ディレクトリスタックを表示
Out[1]: [' ']
In [3]: %cd /SourceCodes
In [4]: %pushd # カレントディレクトリをスタックに入れる
Out[3]: [' /SourceCodes', ' ']
In [5]: %cd /usr/lib/python2.5/site-packages/
In [6]: %popd # ディレクトリスタックの[0]へ移動
In [7]: %pwd # '/Users/hfunai/SourceCodes' を表示
14. ストレージ
IPython終了後も値を保存しておいて、また使いたい
In [1]: spam = Python Tokai
In [2]: %store spam
一旦、IPythonを終了
In [1]: spam
Out[1]: 'python tokai' #spamを上書き
In [2]: spam = Python Nagoya
In [3]: store -r spam # Python Tokai が復活(もう一度保存するまで前の値が残ってる)
In [4]: store -d spam # Python Tokai がをストレージから削除
In [5]: store # 引数なしだと一覧表示
15. マクロ
%macro [マクロ名] 1-3 5
In [1]: import os
In [2]: import sys
ln [3]: import re
In [4]: from datetime import datetiem # spellミス!
In [5]: from datetime import datetime
%macro mymacro 1-3 5 # 4は飛ばす
In [6]: mymacro #マクロを実行
マクロはストレージに
保存しておくと便利
16. ログ
ログをファイルに保存する
%logstart
In [1]: import os
In [2]: import sys
In [3]: import re
%logstop # %logo?で一時的に停止、%logonで再開
IPythonを抜けて、シェルで実行
$ ipython -logplay ipython_log.py
ログファイルの内容を実行してから、IPythonシェルが開始する。
17. ソースコード編集
In [1]: %cpaste #クリップボードにあるソースをペーストしたいとき
In [2]: %edit #エディタを開いて編集(設定ファイルでエディタを指定)
In [3]: %edit 1-10 #1-10のInをエディタで
In [4]: %save 1-10 #1-10のInをファイルへ保存
簡易バージョン管理
%editごとに一時ファイルが作成されるのを利用
In [5]: %edit _i2 # In [2] の内容を編集
In [6]: %edit _i3 # In [3] の内容を編集
クラスとか関数を定義したいとき
は、%editで書くと、便利。
export EDITOR=vim
しておきましょう。
簡易バージョン管理は別に使わない
よなあ。