今回は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ツール、かゆいところに手が届く感じでとても好印象。
2 Comments