repl.info

Kubernetes入門記録(まずは起動してみよう編)

今回はminikubeを使ってローカルに環境を作って、MySQLを建てる。なお、「やってみた」以上の情報はない。完全に自分用のメモです。

minikubeのインストール

minikubeはローカルでKubernetesを動かすためのツールで、docker-machineのようなものと思えばわかりやすかった。kubernetes/minikube の通りにインストールすればOK。

kubectlのインストール

Kubernetesを操作するためのツールで、これはdockerに相当するのかな。Installing and Setting up kubectl を見てインストールすればOK。

Kubernetes環境を起動する

minikubeで一発起動する。便利〜。

$ minikube start

GUIもあるようで、proxyコマンドで起動できる。めちゃ楽だ。

$ kubectl proxy

Starting to serve on 127.0.0.1:8001

mysqlをKubernetes上で動かす

yamlで定義を書ける。まずは見よう見まねで書いてみた。複数の定義を1つのファイルにまとめることもできるみたい。ReplicationControllerは対象Podをいくつ起動するか決めて、その数を維持してくれるようなものかな。ServiceはPodに対するNetworkProxy的なものか。LoadBalanceもできる。他の細かい項目はおいおい…

apiVersion: v1

kind: ReplicationController

metadata:

  name: mysql

spec:

  replicas: 1

  selector:

    app: mysql

  template:

    metadata:

      name: mysql

      labels:

        app: mysql

    spec:

      containers:

      - name: mysql

        image: mysql

        env:

        - name: MYSQL_ROOT_PASSWORD

          value: passw0rd

        ports:

        - containerPort: 3306

---

apiVersion: v1

kind: Service

metadata:

  name: mysql

spec:

  ports:

  - port: 3306

    targetPort: 3306

    protocol: TCP

  type: LoadBalancer

  selector:

    app: mysql

で、createコマンドでReplicationControllerとServiceが作成されて、しばらくすると利用可能になる。

$ kubectl create -f ./mysql.yml

replicationcontroller "mysql" created

service "mysql" created

ローカルからMySQLに繋ぐ方法として、minikubeに接続先を教えて貰うか、port-forwardコマンドを使うことができた。minikubeを使う場合は以下のコマンドでIPアドレスとポートを入手できる。

$ minikube service mysql --url

http://192.168.99.101:31785

後はmysqlコマンドで繋いでやればOK。このやりかただと、Service経由での接続になるのかな。kubectlでサービスを見ると、3306番ポートを31785番ポートにフォワードするようになっていた。

$ mysql -uroot -p -h 192.168.99.101 --port 31785

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 5.7.17 MySQL Community Server (GPL)



Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.



Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql>

もう1つの方法、port-forwardも試しておく。こちらはkubetlコマンド。

podと直接やりとりできるようになる。大量のwwwノードがいるとき、特定のノードとだけ通信したいような時に使えそう。

 

$ kubectl get pods

NAME READY STATUS RESTARTS AGE

mysql-8kd4q 1/1 Running 0 12m

$ kubectl port-forward mysql-8kd4q 3306 3306

Forwarding from [::1]:3306 -> 3306

E0201 01:54:16.675158 13129 portforward.go:209] Unable to create listener: Error listen tcp4 127.0.0.1:3306: bind: address already in use

E0201 01:54:16.675354 13129 portforward.go:209] Unable to create listener: Error listen tcp6 [::1]:3306: bind: address already in use

Unable to listen on port 3306: All listeners failed to create with the following errors: listen tcp4 127.0.0.1:3306: bind: address already in use, listen tcp6 [::1]:3306: bind: address already in use

Handling connection for 3306

まとめ

minikubeを使って手元のマシンにKubernetes環境を構築した。その上でMySQLを動かし、手元から接続することができた。

CLIツール、かゆいところに手が届く感じでとても好印象。

参考

minikubeでローカルKubernetesクラスタを5分でつくる方法