コンテナの、深いとこからログバック
Docker on DockerしてたりKubernetesで遊んでたりすると、コンテナの深いところの狭いターミナルでちまちまログをつついたり設定ファイルをいじっているのをホスト側に持ってきてdiffとって2ペインでスクロール連動しながら見比べたいとかやっぱりサクラエディタでブロック範囲のカット&ペーストしたいとかいろいろあるわけです。
頑張ってAlpineで小さなコンテナ作ってもなんかうまくいかない、shで入ってみたけど viなんか入れてないのよ、Alpineだし。でも curlはあるよね?なんて時に Piping Serverの時間ですよ!!
こちらの記事でご紹介されてます。
はい、私もしたいです!ということで、さくっとMinikubeで立ててみたいと思います。
Minikube起動
これはWindows10 Proで Hyper-V の Minikubeを使っております。"管理者として実行"のターミナルを開きます。
とりあえず、minikubeをスタート。
> minikube start
minikube の起動が若干、遅いのでその間に以下のようなK8s用のyamlファイルを作成しておきます。
YMALファイルの準備
今回は通常のpiping-serverではなく、bytenode-piping-serverの方を使ってみます。
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: piping-server
labels:
app: piping-server
spec:
replicas: 1
selector:
matchLabels:
app: piping-server
template:
metadata:
labels:
app: piping-server
spec:
containers:
- name: piping-server
image: nwtgck/bytenode-piping-server
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: "0.3"
memory: "300Mi"
ports:
- name: http-8080
hostPort: 8080
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: piping-server-svc
spec:
ports:
- name: http-8080
port: 8080
nodePort: 30080
selector:
app: piping-server
type: NodePort
CPUが0.3のメモリ300Miはなんとなくです。もっと少なくてもいいかもしれません。
またMinikubeなのでNodeIp:30080でexposeするように指定してあります。
yaml一本でdeplomentとserviceを書けるのはいいですね〜!
YAMLをapply
さて、Minikubeが立ち上がったところで設定ファイルをapply
します。
>kubectl apply -f piping-server.yml
deployment.extensions "piping-server" created
service "piping-server-svc" created
deplomentとserviceがちゃんと作られました。
podはどうなったでしょうか?
>kubectl get pods
NAME READY STATUS RESTARTS AGE
piping-server-648f9f4b9d-xsg2d 1/1 Running 0 1m
お、無事に動いているようです!
続いてもうちょっと詳しく状態を伺ってみます。
>kubectl describe pod piping-server-648f9f4b9d-xsg2d
Name: piping-server-648f9f4b9d-xsg2d
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: minikube/192.168.1.140
Start Time: Tue, 05 Mar 2019 14:24:05 +0900
Labels: app=piping-server
pod-template-hash=648f9f4b9d
Annotations: <none>
Status: Running
IP: 172.17.0.5
Controlled By: ReplicaSet/piping-server-648f9f4b9d
Containers:
piping-server:
Container ID: docker://734527d2e31a49a8bf893ae172c0edaa80336b1238d0cba326c66ae2afb1d08e
Image: nwtgck/bytenode-piping-server
Image ID: docker-pullable://nwtgck/bytenode-piping-server@sha256:82afcb913d1bf37f6fbebdd6a3d45f4bc1da4424a2905cf6f85290125b2a932a
Port: 8080/TCP
Host Port: 8080/TCP
State: Running
Started: Tue, 05 Mar 2019 14:24:06 +0900
Ready: True
Restart Count: 0
Limits:
cpu: 300m
memory: 300Mi
Requests:
cpu: 300m
memory: 300Mi
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-pq2lq (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-pq2lq:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-pq2lq
Optional: false
QoS Class: Guaranteed
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 1m default-scheduler Successfully assigned default/piping-server-648f9f4b9d-xsg2d to minikube
Normal Pulled 1m kubelet, minikube Container image "nwtgck/bytenode-piping-server" already present on machine
Normal Created 1m kubelet, minikube Created container
Normal Started 1m kubelet, minikube Started container
Docker imageが無事にpullされてpodがminikubeノード上で無事に割り当てられたのが確認できました。
さっそくminikubeのコマンドからpiping-server-svcのexposeをブラウザで確認いたします。
>minikube service piping-server-svc
- Opening kubernetes service default/piping-server-svc in default browser...
はい、ブラウザ、開きますっ!
・・・といってもまぁブラウザはおまけみたいなものなので早速、コンテナの奥地からいじりたい設定ファイルを取り出してみます。
ファイルの送信
とりあえず受け取る方から/yaml
と適当なパスを指定して接続を待ち受けておきます。
$ curl http://192.168.1.140:30080/yaml > cli.yaml
続いて送り側から上記で待ち受けた/yaml
に対して、取り出したいファイルをパイプで投げつけます。
$ cat docker-compose-cli.yaml | curl -T - http://192.168.1.140:30080/yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3379 0 124 0 3255 1137 29862 --:--:-- --:--:-- --:--:-- 31000[INFO] Waiting for 1 receiver(s)...
[INFO] 1 receiver(s) has/have been connected.
Start sending!
[INFO] Sending Successful!
サクッと送信完了!
そして受信側でも、
$ curl http://192.168.1.140:30080/yaml > cli.yaml
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3243 0 3243 0 0 39 0 --:--:-- 0:01:21 --:--:-- 819
到着!!
無事に設定ファイルが取り出せました!!
フォルダをtar.gzで圧縮して送信
つづいてWindowsのフォルダ共有がいちいち面倒な時にサクッとフォルダごと送信です。
$ curl http://192.168.1.140:30080/somebigfolder| tar zxv
$ tar zfcp - ./somebigfolder | curl -T - http://192.168.1.140:30080/somebigfolder
こんな感じでサクッと送れてしまいます。
Docker Image のサーバー間コピー
$ curl http://192.168.1.140:30080/dockerim | gzip -d | sudo docker load
$ sudo docker save <image tag> | gzip -c | curl -T - http://192.168.1.140:30080/dockerim
引き続きpiping-serverでいろいろやってみたいと思います。
あると便利!