Skip to content

Instantly share code, notes, and snippets.

@udzura
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save udzura/e4edaea8de7d7bdf1499 to your computer and use it in GitHub Desktop.
Save udzura/e4edaea8de7d7bdf1499 to your computer and use it in GitHub Desktop.
Fukuoka.go & Fukuoka.rb 合同勉強会 はっぴょうしりょう

最近やってること

  • @ Fukuoka.go & Fukuoka.rb 合同勉強会
  • Uchio KONDO

おわび

  • Terraform の話をしようと思っていましたが
  • 触れなかった...
  • ......
  • IAMのDSL gemも作りかけ...
  • ......

最近やってることの話します

で、誰案件

  • @udzura / Uchio KONDO
  • GMOペパボ技術基盤ティーム
  • Ruby厨歴5年ぐらい
  • 所属: Fukuoka.rb (って言ってもそろそろ良いはず)
  • #markdown2inao ユーザ会だった(?)

[PR]

  • どうしても貼らなければいけないやつ

Fukuoka.rb について

RubyKaja 2014!!!

さて、

最近やってる

  • Docker
  • Puppet/Chef
  • Serverspec

今日にふさわしいですn

  • Docker => Go
  • Puppet/Chef => Ruby
  • Serverspec => Ruby
  • やった!!!1

Docker で Puppet/Chef のテストをするよ

Puppet/Chef

  • プロビジョニングは良いけど、壊れないようにするの結構大変
  • Chefは激しくバージョンが上がるのでこれもつらい

手動実行

  • 確認のため
  • めっちゃ時間かかる

自動化だ!

  • vagrant up --provision 時間かかr

Docker

  • 軽いのでは?

実際にやってみた

Dockerfile

  • 色々頑張った
  • 各環境用にまっさらなベースコンテナつくったり...
  • Ruby 2.0.0 のrpmをつくったり...
  • LTなんで詳細は話さない...(ぇ

sshd を上げておく

  • 昔はinitで全部上げられたらしいけど、今はだめぽ
  • 以前の担当者さんの残したやつをベースに...
RUN yum install -y openssh-server
RUN mkdir /root/.ssh
RUN sed -i s/UsePAM\ yes/UsePAM\ no/ /etc/ssh/sshd_config
RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
RUN ( cd /etc/ssh; \
      ssh-keygen -t rsa -f ssh_host_rsa_key -N ''; \
      ssh-keygen -t dsa -f ssh_host_dsa_key -N '' )
ADD ./misc/id_rsa.pub /root/.ssh/authorized_keys
RUN chown root:root /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/authorized_keys
  • そしたら docker run ... $IMAGE_NAME /usr/sbin/sshd -D でよさげ。ふつうにsshできる

Puppet apply

ssh_cmd="ssh root@$ssh_host -p$port -i./misc/id_rsa -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null"
$ssh_cmd \
  FACTER_IN_DOCKER=true \
  puppet apply \
  --environment=development \
  --modulepath=/var/puppet/modules:... \
  --color=true \
  --detailed-exitcodes \
  --evaltrace \
  /var/puppet/manifests/site.pp

Chef なら

$ssh_cmd \
    IN_DOCKER=true \
    chef-solo \
    -c /etc/chef-solo.rb \
    -j /var/chef/nodes/${role}.json

Serverspec

  • 環境変数によってSSHモードとExecモード分ける
if ENV['FORCE_EXEC']
  include SpecInfra::Helper::Exec
else
  include SpecInfra::Helper::Ssh
end
  • ほか、色々細かいハックした... いつかちゃんとまとめるYO

こんな感じで

role=$1
$ssh_cmd "cd /var/puppet && FORCE_EXEC=1 CI=1 bundle exec rake spec:${role}"

その他 Docker っぽさ

  • Docker、その現実

失敗したイメージはタグつけてコミットする

id=$(docker run ... $IMAGE_NAME /usr/sbin/sshd -D)
# ...
if [ $status -ne 0 ]; then
    failed_name="foobarpj/failed:$BUILD_NUMBER.$( date +%Y%m%d%H%M%S )"
    docker commit $id $failed_name
    echo "****************************************************"
    echo "Please check it out -> image_name:tag = $failed_name"
    echo "****************************************************"
fi
  • 調査に便利
  • 何を消せば良いかも把握しやすいね

boot2docker

ワンスクリプトでやる

if which boot2docker 2>/dev/null; then
    vm_name=${2:-boot2docker-vm-vboxfs}
    ssh_host=$( boot2docker --vm=$vm_name ip 2>/dev/null )
    export DOCKER_HOST="tcp://$ssh_host:2375"
else
    ssh_host=localhost
fi

Dockerで困ったこと

  • iptables動かない...
  • ntpd立ち上がらない...
  • nrpe立ち上がらな(ry
  • 調査しようにもstraceが立ち上がらな(ry

Docker内部、結構権限が制限される

たとえば

  • CAP_SYS_TIME が許可されない
    • date -s もできない
  • CAP_SYS_PTRACE がない
    • strace: ptrace(PTRACE_TRACEME, ...): Permission denied ...

補足

  • もしかしたら --privileged をつけるといいかも? (@tmtms さん)

Linuxカーネル勉強しないといけない...

  • 結構namespaceだのunshareだの出てくる感じに...
  • 今日書いたこと、弊社インフラエンジニア氏の受け売りです...

まとめ

  • Docker、かなりカーネルの知識が必要なのでは...
  • インフラエンジニアの方に色々質問すると良いかも
  • 優秀なインフラエンジニアのいる弊社に入社すると便利

優秀なインフラエンジニアのいる弊社に入社すると便利

東京風まとめ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment