そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

DockerでサクッとGrafana/InfluxDBを試してみる

用途的には以前にやってみたKibana/Elasticsearchとも重複するところだけど、まあ色々の事情で。

blue1st.hateblo.jp

ひとまず環境構築+テストデータ投入+グラフ化まで体験してみた感じでは直感的で分かりやすく好印象。

続きを読む

AnsibleでDockerコンテナをデプロイする

直近ではDocker製ツールを用いた複数サーバへのコンテナの展開を考えていたのだが・・・

blue1st-tech.hateblo.jp

常々書いているようにホスト側のCentOS7とは相性が悪いところもあり、 またトラブル時の対応方法や他のメンバーへの周知に不安があるところ。

それに今回の案件ではマルチホストネットワークやスケーリングは必要ではないわけで、 あえて新しいツールを無理に使うよりも、 サーバのセッティングの際に使用しているAnsibleを用いた方が学習コストも抑えられるしシンプルで良いと判断した。

なにより、インフラ側と開発側が共通のツールに親しんでおくことは実運用においてメリットが大きいように思う。

続きを読む

CentOS7環境でのDocker Machine/Swarm/Composeのマルチホストネットワークを試す

ここ一週間ほどDocker周辺ツールをいじっていて、 どうせだからマルチホストネットワークの雰囲気も掴んでおこうと試行錯誤していた今日この頃。

blue1st-tech.hateblo.jp

ツールそのものの使い方は把握できたしサクッといけるだろうと高をくくっていたら意外と苦戦してしまった。

結果的にいえば引っかかりどころは

  • CentOS7&firewalld環境において自動で開こうとしては失敗するポートを手動で開けておかなければいけない
  • Docker ComposeのVersion2フォーマットを把握し、単体でのlink機能から置き換える必要がある

あたりだろうか。


そんなわけで、これまで同様にVagrantで検証環境を用意して試してみた。

続きを読む

Vagrantでの検証環境の作成をもうちょっと効率よくやる

前回のDocker Machineベタに3つVagrantfileを記述してVM作ったけど、 絶対にもっちょい楽な方法あるよなーと思って調べてみたらやっぱりあった。

blue1st-tech.hateblo.jp

単一のVagrantfileファイルで複数台を管理できるっぽい。


複数のVMを用意するには…

複数ホストを用意したいような状況の場合、 どうやらVm.configure(2)内で

config.vm.define "master" do |server|
  server.vm.network "private_network", ip: "192.168.33.10"
end

みたいな感じの記述を足していけば良いらしい。

中にホスト固有の設定を記述するので、今回であればそれぞれのIPを指定しておく。


プロビジョニング

Vagrantfileを読んでみたら、どうやら実行しておきたいコマンドを記述しておくことができるらしい。

全部で必要な処理はconfig以下、個別のVMで必要なことは先の処理のserverの中へ記載する。

config.vm.provision "shell", inline: <<-SHELL
  sudo yum update
  sudo yum install -y net-tools
  sudo firewall-cmd --permanent --add-port=2376/tcp
  sudo firewall-cmd --reload
SHELL

実際の動きをログで見る限りだと、先に全体処理を行ってから個別の処理をやってくれるみたいだ。


書こうと思えばいくらでも書けそうだけど、 あまり複雑なことをやるならAnsibleとかを検討したほうが良さそう。

VMだけじゃなくて実サーバにも流用できるしね。

初めてのAnsible

初めてのAnsible

こっちはこっちで別途勉強していきたいところ。

Vagrantfile

最終的には以下の形で。

CentOS7のマシンを3台用意する。

それぞれに連番のIDを振り、共通での処理と管理用のmasterだけ開けるポートを記載している。

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

Vagrant.configure(2) do |config|
  config.vm.box = "CentOS7"
  config.vm.box_url = "https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box"

  config.vm.define "master" do |server|
    server.vm.network "private_network", ip: "192.168.33.10"
    server.vm.provision "shell", inline: <<-SHELL
       sudo firewall-cmd --permanent --add-port=3376/tcp
       sudo firewall-cmd --reload
    SHELL
  end
  config.vm.define "node1" do |server|
    server.vm.network "private_network", ip: "192.168.33.11"
  end
  config.vm.define "node2" do |server|
    server.vm.network "private_network", ip: "192.168.33.12"
  end

  config.vm.provision "shell", inline: <<-SHELL
    sudo yum update
    sudo yum install -y net-tools
    sudo firewall-cmd --permanent --add-port=2375/tcp --add-port=2376/tcp --add-port=4789/udp --add-port=7946/tcp --add-port=7946/udp
    sudo firewall-cmd --reload
  SHELL
end


使い方

単体の場合はディレクトリ直下でvagrant sshという風にやっていたのを、 記述した名前を用いてvagrant ssh masterとかvagrant ssh-config node1とかやれば個別に操作できる。


これでサクッと検証用のVMのネットワークを構築できた。

1コマンドなので気軽に作り壊しできるのが良い。

Dockerとかに比べれば流石に時間はかかるのだが、 コンテナでは検証できないような事案もあるわけで、 これはこれで非常に活用しどころが多そう。

Vagrant入門ガイド

Vagrant入門ガイド

ちなみに今やろうとしているのはDocker Machine/Docker Swarmのマルチホストネットワークの検証なんだけど、 CentOS7だとスルッとは動作してくれないところが多く、ちょっと心が折れかかってる。

個人でやるならUbuntu使いたいところだけど、会社の案件だからそう気楽にはいかないしなあ。

Docker MachineのGenericドライバでCentOS7にプロビジョニングする時に引っかかったことメモ

docker-machine -v
docker-machine version 0.7.0, build a650a40

にて。

週末に VirtualBoxドライバでdocker-machineなんかの動作を確認

blue1st-tech.hateblo.jp

意外なほどサクッと動いてくれたので意気揚々と出社してみたものの、 いざ 会社の環境(CentOS7サーバ群)でGenericドライバを使って動かそうとするとどうにも上手くいかない

ありがちなところでファイアウォールかと思いfirewalldを止めてみてもダメ、 色々いじった環境だからかと思いクリーンインストール状態のサーバを用意してもらってもダメ。

だが不思議なことに一部のサーバはすんなり動いている。


-Dオプション付けてみてもイマイチ何が引っかかってるのか分からず探し方に問題があったのかググッてもそれらしい情報も見つからずで今週前半はこの問題に頭を悩ませていたのだが、今日ついに解決法に到達!

なんのことはない、CentOS7からは非推奨になりデフォルトでインストールされなくなった net-toolsをyumで入れれば良かった のだ!!

(どうやらdocker-machineが内部的にnetstat使ってるっぽい)

(あと正確には docker-engine用にfirewalldの2376ポートを開ける 必要がある)

ログの情報も断片的だしぐぐってもドンピシャな情報も無かったしで苦労したけど、 ヒントはGithubのissueにあった。英語苦手だけど、こういうことあると勉強しなきゃなーって思わせられるところ。

そんなわけでいうべき内容はもう全部言っちゃったけど、 検証環境づくりとか詳細とか。

続きを読む

Gitlab 8.5系からのアップデート時に引っかかったとこメモ

プライベートのコード管理はGitLabをDockerで動かして使っていたりする。

↓導入とかは以下

blue1st.hateblo.jp


先日ver.8.8のリリースがあり、Dockerのリポジトリとして使えるようになったとのことで、 Docker使う頻度が高い身としてはワクワクしている今日この頃。

GitLab Container Registry | GitLab

(GitHubの有料プラン使うのも悪く無いかなと心が揺らいでたタイミングだったんだけど、 またちょっとGitLabを使い続ける理由ができてしまった。)


さて、僕が使ってるのはsameersbn氏の作ってるイメージだったりするのだけど、 これはまだ8.8はできていない様子。

github.com

8.8への対応を心待ちにしつつ、今サーバで運用しているのが8.5系だったこともあり、 ひとまず最新の8.7系にアップデートしておこう…と思ったらちょっとだけ引っかかったのでメモ。


ひっかかったところ

とりあえずものは試しでdocker-compose.ymlのimageを最新のsameersbn/gitlab:8.7.6に書き換えてコンテナを再起動させてみたところ、立ち上がらない感じ。

docker-comose logs コマンドで確認する限りでは、どうやらMigrating database...あたりで止まっている。

8.5から一足飛びだからまずいのかと思い、8.6系でやってみたが同じくダメ。

より詳しくログを見ていくと、下記のメッセージがあった。

 You must enable the pg_trgm extension. You can do so by running "CREATE EXTENSION pg_trgm;" as a PostgreSQL super user, this must be done for every GitLab database. For more information see http://www.postgresql.org/docs/current/static/sql-createextension.html/home/git/gitlab/db/migrate/20160226114608_add_trigram_indexes_for_searching.rb:8:in `up'

どうやらGitLabで使ってるPostgresSQLのDBにエクステンションを加えろとのこと。

対応

というわけで、コンテナに入り指定されたクエリを実行すればよさそう。

docker-compose exec postgresql

でコンテナに入り、

psql -Upostgres -dgitlabhq_production

でGitLabで使用してるDBに入る。

\d #テーブル確認
CREATE EXTENSION pg_trgm;
\q

を実行してexitでコンテナから抜ける。


これらの作業を行った後、docker-compose.ymlのgitlabのバージョンを8.6.0を経由して8.7.6に上げることができた。

Dockerのプライベートリポジトリは現状Docker-Registryを使っているんだけど、 良い感じのWebUIが見つからなくてしんどいなーと思っていたところなんで、8.8は凄く楽しみ。

blue1st.hateblo.jp

Docker Machine/Swarm/Compose とりあえず触ってみたメモ

Dockerを使ってみたい案件があり、デプロイ方法について色々検討している今日この頃。

新しいツールということもあって、 軽くググってみただけでもKubernetesとかMesosとかあるいはもっと別な方法が色々と出てくるし、 逆にいえば「これが決定版!」とはまだどれも言えそうにはない雰囲気。

サードパーティ製のツールはどれもそれなりに利点はありそうだけど、 一方で学習コストが高くついて辛い感じもあり、 また個人的にはDocker Compose使って作業してたんでそれを流用できないというのも気が進まないポイントであった。

実際のとこそこまで機能はいらないし、いっそConsulのイベント機能で無理やり…とか考えたりもした。


そんな感じで正直なところ迷走していたのだが、 公式ツールであるところのSwarmが去年末の段階で1.0.0をリリースしていたらしいということに今更になって気づく。

(なんでか見逃してましたね。)

公式ツールという安心感もあるし、何より使い慣れたComposeも使える!

というわけでひとまず使い方を勉強してみた。

続きを読む