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分でつくる方法

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *