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