Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

koinori
最近の記事はタグが5つじゃ足りない。
pro-japan
さまざまな価値観を持ち、日々変化し続ける技術を探究し、チャレンジし続けることで、楽しみながら「あったらいいな」を創り上げ、実現します。
https://www.pro-japan.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away