Help us understand the problem. What is going on with this article?

【etcd】とりあえずetcd(v2) コンテナを動かす

More than 3 years have passed since last update.

etcdのv2(最新はv3)のコンテナを起動し使ってみるところまで。

Vagrantfile

使用するVagrantfile。
Dockerのインストール&quay.io/coreos/etcd:v2.3.7イメージをpullする。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # If true, then any SSH connections made will enable agent forwarding.
  # Default value: false
  config.ssh.forward_agent = true

  config.vm.define "host" do |d|
    d.vm.box = "ubuntu/trusty64"
    d.vm.network :private_network, ip: "192.168.33.10", virtualbox__intnet: "intnet"

    d.vm.provision "docker" do |d|
       d.pull_images "quay.io/coreos/etcd:v2.3.7"
    end
  end
end
$ docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
quay.io/coreos/etcd   v2.3.7              e81032a59e55        5 months ago        32.29 MB

etcdコンテナの起動

$ docker run -d --name etcd -p 2379:2379 -p 4001:4001 quay.io/coreos/etcd:v2.3.7 --advertise-client-urls 'http://192.168.33.10:2379,http://192.168.33.10:4001' --listen-client-urls 'http://0.0.0.0:2379,http://0.0.0.0:4001'

$ docker ps 
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                                NAMES
4e71ac2989c1        quay.io/coreos/etcd:v2.3.7   "/etcd --advertise-cl"   52 seconds ago      Up 51 seconds       0.0.0.0:2379->2379/tcp, 2380/tcp, 0.0.0.0:4001->4001/tcp, 7001/tcp   etcd

v2 API

APIをいくつか実行してみる

Version

/versionで動作確認。

$ curl http://127.0.0.1:2379/version | jq . 
{
  "etcdcluster": "2.3.0",
  "etcdserver": "2.3.7"
}

Key/Valueのセット

Let's set the first key-value pair in the datastore. In this case the key is /message and the value is Hello world.

/messageキーに"Hello world"をセットする

$ curl http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello world" | jq . 
{
  "node": {
    "createdIndex": 4,
    "modifiedIndex": 4,
    "value": "Hello world",
    "key": "/message"
  },
  "action": "set"
}

KeyからValueを取得

We can get the value that we just set in /message by issuing a GET request:

同じエンドポイントに対しGETリクエストでValueを取得。

$ curl http://127.0.0.1:2379/v2/keys/message | jq . 
{
  "node": {
    "createdIndex": 4,
    "modifiedIndex": 4,
    "value": "Hello world",
    "key": "/message"
  },
  "action": "get"
}

etcdctl

インストール

$ curl -L  https://github.com/coreos/etcd/releases/download/v2.3.7/etcd-v2.3.7-linux-amd64.tar.gz -o etcd-v2.3.7-linux-amd64.tar.gz
$ tar xzvf etcd-v2.3.7-linux-amd64.tar.gz
$ cd etcd-v2.3.7-linux-amd64
$ ./etcdctl cluster-health
member ce2a822cea30bfca is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy

つかう

$ ./etcdctl --endpoint="http://127.0.0.1:2379" --no-sync get  message 
Hello world
$ ./etcdctl --endpoint="http://127.0.0.1:2379" --no-sync set some-key some-value
some-value
$ ./etcdctl --endpoint="http://127.0.0.1:2379" --no-sync get some-key 
some-value

endpointはデフォルトでhttp://127.0.0.1:2379なのでいらないけどいちおう。

参考

http://stackoverflow.com/questions/33134126/getting-connection-refused-when-trying-to-access-etcd-from-within-a-docker-con

https://coreos.com/etcd/docs/latest/docker_guide.html

https://coreos.com/etcd/docs/latest/v2/api.html#getting-the-etcd-version

https://github.com/coreos/etcd/releases?after=v3.0.0

https://github.com/coreos/etcd/blob/master/etcdctl/READMEv2.md

Yarimizu14
メモ
abeja
「ディープラーニング」を活用し、多様な業界、シーンにおけるビジネスの効率化・自動化を促進するベンチャー企業です。
https://abejainc.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away