Kubernetes の名前は 2年ちょっと前くらいから耳にはしていたけど、全然触ったことないわりに、最近方方から聞こえてくるので触ってみることにした。
なお、基本的な内容はこちらのものを、ただコピペしてくだけの作業…
いくつかチュートリアルを続ける際に困った点
Azure を操作するために Azure-cli を Mac にインストールしていたのですが、新しいマシンを購入したので移行したところ、 az
コマンドで Azure にログインできなくなりました。
$ az login Note, we have launched a browser for you to login. For old experience with device code, use "az login --use-device-code" Please ensure you have network connection. Error detail: HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max retries exceeded with url: /common/oauth2/token (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))
これと同じメッセージを調べてみたところ、エラーメッセージにて SSL module is not available
とある SSL module が標準でついているとのことで、 python を起動してインポートしてみたところ…
python Python 3.7.0 (default, Jun 29 2018, 20:14:27) [Clang 9.0.0 (clang-900.0.39.2)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import ssl Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 98, in <module> import _ssl # if we can't import it, let the error propagate ImportError: dlopen(/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from: /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so Reason: image not found
とインポートに失敗しました。そこで、以前、 Mac OSX High Sierra では openssl という名前のパッケージが実際は libressl に変わっているということを思い出し、 python で SSL モジュールは利用できないのではないかと考えました。
この件については brew でインストールすれば解決するわけですが、せっかく Apple(BSD?) が openssl をやめて libressl にしたのに、 openssl を入れるのは負けだなと思ったので、docker でコンテナを立ち上げて、そちらで az
コマンドを使うようにしました。
dind
Kubernetes を扱うということは、 Docker もあつかうということで、 az
コマンドだけでなくて、 docker
コマンドも同じコンテナで使えないとうまくいかなそうです。たいして Docker を勉強していなかったので、 dind(Docker in Docker) というのがあるらしいので、そちらのイメージをベースに azure-cli を入れられるようにコンテナを作りました。
FROM docker:18.03.1-dind RUN mkdir /root/.azure /azure-cli VOLUME /root/.azure WORKDIR /azure-cli RUN \ apk add --no-cache curl libffi python3-dev bash openssh ca-certificates jq openssl && \ apk add --no-cache --virtual .build-deps gcc make openssl-dev libffi-dev musl-dev && \ update-ca-certificates && \ ln -s /usr/bin/python3.6 /usr/bin/python && \ ln -s /usr/bin/pip3 /usr/bin/pip && \ pip install --no-cache-dir --upgrade jmespath-terminal && \ curl -L https://aka.ms/InstallAzureCli | \ sed -e "s/tmp_XXXX/tmp_XXXXXX/g" \ -e "s/\/dev\/tty/config.txt/g" > install.sh && \ chmod +x install.sh && \ echo /azure-cli/lib >> config.txt && \ echo /azure-cli/bin >> config.txt && \ echo y >> config.txt && \ ./install.sh && \ cat /azure-cli/lib/az.completion > ~/.bashrc && \ runDeps="$( \ scanelf --needed --nobanner --recursive /usr/local \ | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ | sort -u \ | xargs -r apk info --installed \ | sort -u \ )" && \ apk add --virtual .rundeps $runDeps && \ apk del .build-deps WORKDIR / ENV PATH $PATH:/azure-cli/bin CMD bash
なお、作ったコンテナはこちらから入手可能
入門できたこと
- Kubernetes でアプリケーションをデプロイ
- Pod の数を増やす
- ローリングアップデート
- Kubernetes クラスタのアップグレード
- 実行したらサービス落ちた
入門できなかったこと
- volume などのデータの永続化
- Istio などの周辺プロダクト
以上、特に見どころのないエントリー