はじまる

適当な事を適当に書く

Kubernates Tutorial 1

Minikube をダウンロード&インストールする

~/H/kubernates-tutorial ❯❯❯ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \
cmdand>   chmod +x minikube && \
cmdand cmdand>   sudo mv minikube /usr/local/bin/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 40.5M  100 40.5M    0     0  7278k      0  0:00:05  0:00:05 --:--:-- 9106k
Password:
~/H/kubernates-tutorial ❮❮❮

xhyve をインストールする。ここではやくもエラー。既存の docker-machine コマンドと衝突した。

~/H/kubernates-tutorial ❯❯❯ brew install docker-machine-driver-xhyve
==> Installing dependencies for docker-machine-driver-xhyve: docker-machine, libev
==> Installing docker-machine-driver-xhyve dependency: docker-machine
==> Downloading https://homebrew.bintray.com/bottles/docker-machine-0.14.0.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring docker-machine-0.14.0.high_sierra.bottle.tar.gz
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/docker-machine
Target /usr/local/bin/docker-machine
already exists. You may want to remove it:
  rm '/usr/local/bin/docker-machine'

To force the link and overwrite all conflicting files:
  brew link --overwrite docker-machine

To list all files that would be deleted:
  brew link --overwrite --dry-run docker-machine

Possible conflicting files are:
/usr/local/bin/docker-machine -> /Applications/Docker.app/Contents/Resources/bin/docker-machine
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

To have launchd start docker-machine now and restart at login:
  brew services start docker-machine
Or, if you don't want/need a background service you can just run:
  docker-machine start
==> Summary
🍺  /usr/local/Cellar/docker-machine/0.14.0: 11 files, 32.1MB
==> Installing docker-machine-driver-xhyve dependency: libev
==> Downloading https://homebrew.bintray.com/bottles/libev-4.24.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring libev-4.24.high_sierra.bottle.tar.gz
🍺  /usr/local/Cellar/libev/4.24: 12 files, 432.8KB
==> Installing docker-machine-driver-xhyve
==> Downloading https://homebrew.bintray.com/bottles/docker-machine-driver-xhyve-0.3.3.high_sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring docker-machine-driver-xhyve-0.3.3.high_sierra.bottle.1.tar.gz
==> Caveats
This driver requires superuser privileges to access the hypervisor. To
enable, execute
    sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
    sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
==> Summary
🍺  /usr/local/Cellar/docker-machine-driver-xhyve/0.3.3: 3 files, 10.5MB
~/H/kubernates-tutorial ❯❯❯

overwrite するとなにかあるかもなので、中止。

Kubernates Tutorial メモ

はじめに

Docker と Docker Swarm の復習をしたので、今度は Kubernates を調べる。Docker イメージ/コンテナの運用を Swarm でやるの面倒そうだし、Docker イメージ/コンテナの稼働/運用ツールのデファクトスタンダードが Kubernates なので、遅ればせながらやる。

なにをやる

これをやる。

kubernetes.io

docker やり直しメモ(5) Stacks

サービスにアプリを追加する。

docker-compose.txt を更新する

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

更新した docker-compose を service に反映する。

~/H/docker5 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
myvm1   -        virtualbox   Stopped                 Unknown
myvm2   -        virtualbox   Stopped                 Unknown
~/H/docker5 ❯❯❯ docker-machine env myvm1
Error checking TLS connection: Host is not running
~/H/docker5 ❯❯❯ docker-machine restart myvm1                                                                                                                                                                                     ⏎
Restarting "myvm1"...
Starting "myvm1"...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Machine "myvm1" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
~/H/docker5 ❯❯❯ docker-machine restart myvm2
Restarting "myvm2"...
Starting "myvm2"...
(myvm2) Check network to re-create if needed...
(myvm2) Waiting for an IP...
Machine "myvm2" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
~/H/docker5 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce
~/H/docker5 ❯❯❯ eval $(docker-machine env myvm1)
~/H/docker5 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab
Updating service getstartedlab_web (id: nuigb1fokw9ryei8v9ygyppfw)
Creating service getstartedlab_visualizer
~/H/docker5 ❯❯❯

新しく追加した visualizer のプロセス(コンテナ)が稼働している。

~/H/docker5 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED              STATUS              PORTS               NAMES
cabd5ef4f45a        dockersamples/visualizer:stable   "npm start"         About a minute ago   Up About a minute   8080/tcp            getstartedlab_visualizer.1.2ijfurtaxb4p6k88wyxv2gq1i
00c32794b3f2        me/get-started:part2   "python app.py"     About a minute ago   Up About a minute   80/tcp              getstartedlab_web.3.bhvt6rtjp6xevxfpheo5m98x0
a8491d81ad2e        me/get-started:part2   "python app.py"     About a minute ago   Up About a minute   80/tcp              getstartedlab_web.1.rsm3ejgwtz50fqavmfyh4fx8t

Webブラウザで 8080ポートに接続すると visualizer, 80ポートに接続すると従来のWebアプリを表示できるように変更された。 http://192.168.99.100:8080 gyazo.com

http://192.168.99.100:80 gyazo.com

サービスにDB(Redis)を追加する

docker-compose.txt に redis を追記。

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repo:tag
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - "/home/docker/data:/data"
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes
    networks:
      - webnet
networks:
  webnet:

swarm manager のなかに data ディレクトリをつくる

docker-machine ssh myvm1 "mkdir ./data"

新しい docker-compose.txt をデプロイする

~/H/docker5 ❯❯❯ eval $(docker-machine env myvm1)
~/H/docker5 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab
Updating service getstartedlab_visualizer (id: r2qmkaa6o5slmt8jhzwmcr4ti)
Creating service getstartedlab_redis
Updating service getstartedlab_web (id: nuigb1fokw9ryei8v9ygyppfw)

redis のプロセスが追加されて稼働を開始した。

~/H/docker5 ❯❯❯ docker service ls
ID                  NAME                       MODE                REPLICAS            IMAGE                             PORTS
lvucco4osp67        getstartedlab_redis        replicated          1/1                 redis:latest                      *:6379->6379/tcp
r2qmkaa6o5sl        getstartedlab_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
nuigb1fokw9r        getstartedlab_web          replicated          5/5                 me/get-started:part2   *:80->80/tcp

Redis にデータを保存するようになったので、アクセスカウンターが動くようになった。

gyazo.com

gyazo.com

docker やり直しメモ(4) 横道

# マシン再起動の後
~/H/docker4 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
myvm1   -        virtualbox   Stopped                 Unknown
myvm2   -        virtualbox   Stopped                 Unknown

# DOCKER* の環境変数は設定されていない状態
~/H/docker4 ❯❯❯ env|ag DOCKER

# 前述の2つのVM(Swarm の node)を起動する
~/H/docker4 ❯❯❯ docker-machine restart myvm1
Restarting "myvm1"...
Starting "myvm1"...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Machine "myvm1" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

~/H/docker4 ❯❯❯ docker-machine restart myvm2                                                                                                                                                                                     ⏎
Restarting "myvm2"...
Starting "myvm2"...
(myvm2) Check network to re-create if needed...
(myvm2) Waiting for an IP...
Machine "myvm2" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

# docker-machine の起動状態を確認
~/H/docker4 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce

~/H/docker4 ❯❯❯ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

~/H/docker4 ❯❯❯ docker stack ls
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

~/H/docker4 ❯❯❯ docker-machine env myvm1                                                                                                                                                                                         ⏎
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/satoru/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)

# 手元から myvm1(swarm manager)の中にはいる
~/H/docker4 ❯❯❯ eval $(docker-machine env myvm1)

# myvm1(swarm manager)の中でスタックの確認
~/H/docker4 ❯❯❯ docker stack ls
NAME                SERVICES
getstartedlab       1

# myvm1(swarm manager)の中でコンテナ稼働中。
~/H/docker4 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
b559f4feca31        me/get-started:part2   "python app.py"     2 minutes ago       Up 2 minutes        80/tcp              getstartedlab_web.1.jibwht3xvh0nccpanxhe0e7f3
2f912f6c0e01        me/get-started:part2   "python app.py"     3 minutes ago       Up 3 minutes        80/tcp              getstartedlab_web.3.8bk7vrtv5s20l14p9bv03l3x7
0731ecaad1ed        me/get-started:part2   "python app.py"     3 minutes ago       Up 3 minutes        80/tcp              getstartedlab_web.2.tr8aftd3w451d4twq8s39rndr
~/H/docker4 ❯❯❯

アプリが稼働している。 host が myvm1 gyazo.com

host が myvm2 gyazo.com

~/H/docker4 ❯❯❯ docker ps
CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
b559f4feca31        me/get-started:part2   "python app.py"     2 minutes ago       Up 2 minutes        80/tcp              getstartedlab_web.1.jibwht3xvh0nccpanxhe0e7f3
2f912f6c0e01        me/get-started:part2   "python app.py"     3 minutes ago       Up 3 minutes        80/tcp              getstartedlab_web.3.8bk7vrtv5s20l14p9bv03l3x7
0731ecaad1ed        me/get-started:part2   "python app.py"     3 minutes ago       Up 3 minutes        80/tcp              getstartedlab_web.2.tr8aftd3w451d4twq8s39rndr

停止する

~/H/docker4 ❯❯❯ docker-machine stop myvm2
Stopping "myvm2"...
Machine "myvm2" was stopped.
~/H/docker4 ❯❯❯ docker-machine stop myvm1
Stopping "myvm1"...
Machine "myvm1" was stopped.

docker やり直しメモ(4)

パート4:群(Swarm)

Get Started, Part 4: Swarms | Docker Documentation の内容をやります。

1. スウォームとは

Dockerを実行していてクラスタに参加しているマシンのグループです。クラスタswarm manager によって管理されます。 スウォームに参加しているマシンは、物理マシン・仮想マシン両方の場合で、ノードとよばれます。スウォームマネージャーは、スウォーム内であなたのコマンドを実行できる唯一のマシンです。スウォームマネージャーは、他のマシンがスウォームにワーカーとして参加することも許可できます。ワーカーは、能力を提供するためだけに存在し、他のマシンに何ができるかできないかを伝える権限を持っていません。

~/H/docker2 ❯❯❯ docker swarm --help

Usage:  docker swarm COMMAND

Manage Swarm

Options:


Commands:
  ca          Display and rotate the root CA
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  leave       Leave the swarm
  unlock      Unlock swarm
  unlock-key  Manage the unlock key
  update      Update the swarm

Run 'docker swarm COMMAND --help' for more information on a command.

2. スウォームを作成する

VMを作成する。

docker-machine コマンドを利用して、仮想マシンを2つ作成してみます。この動作には virtualbox が必要です。

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

こんな感じになります。

~/H/docker4 ❯❯❯ docker-machine create --driver virtualbox myvm1
Running pre-create checks...
(myvm1) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(myvm1) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce
(myvm1) Downloading /Users/satoru/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...
(myvm1) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(myvm1) Copying /Users/satoru/.docker/machine/cache/boot2docker.iso to /Users/satoru/.docker/machine/machines/myvm1/boot2docker.iso...
(myvm1) Creating VirtualBox VM...
(myvm1) Creating SSH key...
(myvm1) Starting the VM...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env myvm1

Virtualbox の画面でも仮想マシンが作成されていますね。

gyazo.com

VMIPアドレスを確認する

~/H/docker4 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce

Swarm を初期化する

myvm1を swarm manager に指定します。

~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (ph13skaro0wq0010iau1jt5i5) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

myvm2 を ノードとして swarm に追加します。

~/H/docker4 ❯❯❯ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377"
This node joined a swarm as a worker.
~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ph13skaro0wq0010iau1jt5i5 *   myvm1               Ready               Active              Leader              18.05.0-ce
xyqexicll5f17le0n4w5e6epu     myvm2               Ready               Active                                  18.05.0-ce

環境変数を確認します。

自分のローカルにmyvm1の環境変数を設定します。

~/H/docker4 ❯❯❯ eval $(docker-machine env myvm1)
~/H/docker4 ❯❯❯ env|ag DOCKER
DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/myvm1
DOCKER_MACHINE_NAME=myvm1