Edited at

【2019年3月版】MiniKube で Piping-server


コンテナの、深いとこからログバック

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でいろいろやってみたいと思います。

あると便利!