SlideShare a Scribd company logo
systemdざっくり入門
GMO Pepabo, Inc.
Uchio Kondo
2016/04/23 コンテナ型仮想化の情報交換会@福岡
人間たちとsystemd
人間の紹介
人間たちとsystemd
近藤うちお
> GMOペパボ所属
> 技術基盤チーム 🍮
> 福岡支社勤務
> Fukuoka.rb
> RailsGirls Fukuoka #1 総合雑用/コーチまとめ
人間たちとsystemd
人間たちとsystemd
!?
興味
> Ruby / Golangを少々
> Docker / LXC
> Puppet
> Hashicorp tools
> OpenStack
> Electron / React
http://www.slideshare.net/udzura/hashicorp-tools
7 years old Rubyist
> Rails 2.1.0 ごろからのルビースト(2008 )
> Rubyをこじらせて著作あり
> Web+DB Press Ruby連載(2012 2014)
> パーフェクトRuby (2013)
> パーフェクトRails (2014)
> Web+DB Press vol. 92 新人特集号 [New!]
人間たちとsystemd
人間たちとsystemd
Founder of
人間たちとsystemd
制限事項
> OSなどのレイヤー、正直わかっていないし、

カーネルのコードも読んだことがありません
> 「実は……さっきから足が震えているッ……」
人間たちのための

systemd概要
init(あるいはその代替)
> 最初に起動して、たくさんのサービスどもを

立ち上げて管理する
> CentOS 5 など … sysvinit
> CentOS 6 / Ubuntu … Upstart
> OS X … launchd
> ……
init script
Upstart
systemdざっくり
採用
ディストリ
サービス

定義
OS

縛り
cgroup/
namespace
と連携
操作コマンド
init
script
CentOS 5
などいろいろ
init script

(Shellスクリプト)
- ない
スクリプト直

/service
Upstart
CentOS 6
最近までの
Ubuntu
独自形式の

conf
(/etc/init/*.conf)
- ない service/initctl
systemd
CentOS 7
Ubuntu 15.10
ほか
Unitファイル
Linux

のみ
やっていく
systemctl

(/service)
※ Ubuntu 13.04 から利用は可能
Rethinking of PID 1
> 長文だが…
> ざっくり
> 起動スクリプト、結局全部シェルスクリプトだったり、一
個一個起動でしんどかったり、cgroupとかナウい奴との
連携も大変だよね……
> そこでsystemd、という感じらしい
※ http://0pointer.de/blog/projects/systemd.html
systemdを
使ってみる
Unitファイル
> 独自形式(ini風)
> 宣言的
> 「target」「mount」「service」「device」
などの種類がある
> Unit同士は依存関係がある
例: バイナリ一個のサービス
例: バイナリ一個のサービス
説明のほか、依存するUnitファイル、

起動順序を記述
コマンド、実行ユーザー、

前後に発行するコマンド、環境変数、

cgroupsの制限など
ランレベル相当を記述
例: 定期実行タイマー
Logging
> journald というサービスが担当する
> systemdの一部という扱い
> サービス側は、基本はとにかく標準出力にログを出せばいい
(12factor app感)
> 罠: systemd 208 では、journaldを再起動すると

サービスが落ちることもある……
> CentOS 7.1 のデフォルト
> CentOS 7.2でsystemd 219になり、直ってる
systemdと

リソース制限
ulimit
> リソースをいい感じに制限するやつ
> CPU、メモリ、ファイルディスクリプタ数……
Unitファイル
> Unitファイルはシェルスクリプトじゃない
> initスクリプトみたいにulimitを書けばいいとい
う話じゃない
> ulimitはバイナリではないのでExecStartPreでキックでき
ない、など
> バイナリひとつみたいなときは、ラッパーをかま
す?いやいや……
man systemd.exec
http://www.freedesktop.org/software/systemd/man/systemd.exec.html#LimitCPU=
man systemd.exec
> Unitファイルに宣言的に書く→わかりやすい!
> ulimitでいうどれに相当するかが書いてあって
便利
> LimitCPU= ➡ ulimit -t
> LimitRSS= ➡ ulimit -m
> LimitNOFILE= ➡ ulimit -n
セットするとどうなる?
こういう感じになる
> 無事、CPUを10秒占有した後killされる
もう一つの方法
> man systemd.resource-control
cgroupとの
連携
人間たちとsystemd
systemd-cgtop
CPUQuota= してみましょう
なるほど
へ∼
cgroupなので
> 動的にリソースの利用率を変更することも可能
> demoします
人間たちとsystemd
どっちがいいんだろう……
> man見た感じの印象、resource-control押し。
> Also note that LimitRSS= is not
implemented on Linux, and setting it has no
effect.
> ?????
> ulimitから移行しやすいようにLimit*がある感じ。
> なるべくresource-controlしたほうがいいのでは
systemdと
ファイルシステムの 分離
PrivateTmp設定
自動でディレクトリができる
※ サービスを落とすとディレクトリも消える
サービス側では/tmp
深追い
> 起動前に
> ファイルシステムを unshare する
> /tmp を /tmp/systemd-private-*** に

バインドマウントする
> というだけ
> なので正確には、mount namespaceの分離を
利用している
unshare(2) とは
> Linux namespaceとは
> プロセスごとに、アクセスできるリソースを分けることが
できる機能
> unshare を呼ぶと当該プロセスで

新しいネームスペースを作る

(mount、ネットワーク、PID……)
systemdの例
mnt のネームスペース
だけが変わっている
ことがわかる
その他のmount分離
> http://enakai00.hatenablog.com/entry/20130923/1379927579
ReadOnlyDirectries
そのプロセスからは変更できない
> 一方で、他のプロセスからは可能
そのプロセスでは
> こちらも、unshareされたあと、

/etc/readonly-test をroでバインドマウントしなお
していることがわかる
> 一方、他のプロセスではそのマウントが確認できない
もう少しだけ
深追い
unshare になろう
> hibomaさんという方の記事
> rubyで unshare(2) 呼び出して マウント名前空間を分離
> http://d.hatena.ne.jp/hiboma/20120518/1337337393
> 拡張ライブラリ書かなくて呼び出せるようなの
で便利
irbでやろう
irbでやろう
総括
systemd
> ただのinitの代替ではない
> cgroupやLinux namespaceと

結構密接に連携でき、色々な使い道がありそう
> (そういえば割愛しましたが、capabilityもいじれます)
> CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW …
systemdのメリット所感
> Unitファイルで宣言的にサービス定義、

依存、リソースの配分、分離を定義できる
> cgroup/linux namespaceの詳細なAPIに

詳しくなくても、systemdのディレクティブが
ラップしてくれるので、容易に利用できる
> systemdは人間たちに優しい!
container vs systemd
> systemdだけでもできることが結構ある
> できないこともある。PIDの分離とかがそう
> Dockerとsystemdの連携の例もある
> http://enakai00.hatenablog.com/entry/20140427/1398576165
> 相反するものでもなく、得意分野で使い分け
Try!
systemd
参考文献
> Systemd入門シリーズ (id:enakai00 さん)
> http://enakai00.hatenablog.com/entry/20130914/1379146157
> というか非常に詳しく、僕の発表要るんだろうか……
> systemd徹底入門@Linux女子部 (同)
> http://www.slideshare.net/enakai/linux-27872553
> 僕の発表ry
> consul-templateをsystemdで動かすときの学び
> http://tomohisaoda.com/posts/2015/use_systemd_with_consul-template.html

More Related Content

PDF
ペパボ福岡支社におけるRubyの活用事例
PDF
ペパボのサービスとRuby
PDF
Ruby way-openstack.keynote
PDF
minneで学ぶクラウド脳
PDF
俺とDockerとtDiaryとkubernetes
PDF
OSC 2013 .Enterprise
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PDF
Rubyボードハンズオンテキスト
ペパボ福岡支社におけるRubyの活用事例
ペパボのサービスとRuby
Ruby way-openstack.keynote
minneで学ぶクラウド脳
俺とDockerとtDiaryとkubernetes
OSC 2013 .Enterprise
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Rubyボードハンズオンテキスト

What's hot (20)

PDF
Python × Herokuで作る 雑談slack bot
PDF
GR-CITRUSの紹介
PDF
PDF
Building Static Website With Github And Jekyll
PDF
東京Node学園 今できる通信高速化にトライしてみた
PDF
Ruby on cygwin (2019/8月号)
PPTX
Hubotを使ってbotをつくろう!
PDF
RubyではじめるIoT(Wakayama.rb活動報告)
KEY
OSS Reporting Solution ThinReports
PPT
分散Key/Valueストア Kai 事例紹介
KEY
hubotで快適BOT生活
PPTX
Android 開発を加速するオープンソースライブラリ
PPTX
GitLab Meetup Tokyo#2 Rancher gitlab container registry
PDF
hubot-slack v4移行時のハマりどころ #hubot_chatops
PPTX
Rancher jp1周年振り返り anniversary meetup slide summary
PDF
Hubotをはじめる
PPTX
Node.js×mongo dbで3年間サービス運用してみた話
PDF
Rubyistのためのkotlin紹介
PDF
Kotlinの紹介
PPTX
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Python × Herokuで作る 雑談slack bot
GR-CITRUSの紹介
Building Static Website With Github And Jekyll
東京Node学園 今できる通信高速化にトライしてみた
Ruby on cygwin (2019/8月号)
Hubotを使ってbotをつくろう!
RubyではじめるIoT(Wakayama.rb活動報告)
OSS Reporting Solution ThinReports
分散Key/Valueストア Kai 事例紹介
hubotで快適BOT生活
Android 開発を加速するオープンソースライブラリ
GitLab Meetup Tokyo#2 Rancher gitlab container registry
hubot-slack v4移行時のハマりどころ #hubot_chatops
Rancher jp1周年振り返り anniversary meetup slide summary
Hubotをはじめる
Node.js×mongo dbで3年間サービス運用してみた話
Rubyistのためのkotlin紹介
Kotlinの紹介
Rancherで簡単に作るk8s環境 Kubernetes meetup tokyo #4 LT kubernetes on rancher
Ad

Similar to 人間たちとsystemd (20)

PPTX
Ruby on Rails を用いたWEBアプリケーションの開発
PDF
インフラ自動化とHashicorp tools
ODP
とっとるびー(2回目)発表資料
PDF
コミュニティのある風景
PPTX
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
PDF
RubyKaigi Lightning Talks TwYM episode2
PPT
ROMA on JRuby at JRubyKaigi 2010
PDF
長いの
PPTX
20111029 rubyon php
PDF
【とらラボLT】go言語でのweb apiの作り方3選
PDF
ros2_cmd_api : ROS2コマンド機能のAPIを提供するROS2パッケージ.pdf
PDF
dokku を本番環境で使ってみた話
PPT
JavaEdge第3回ライブセッション
PDF
20150228_渋谷Webエンジニア朝会LT資料
PDF
RでつくるWebアプリ~rApache編~
PDF
ROS2.0時代に備えたc++11/14
PDF
Rubyの仕事で食べていくために僕らは!
ODP
高トラフィックサイトをRailsで構築するためのTips基礎編
PDF
nomlab_okayamaruby_slide
PDF
Ruby 3.0.0 コネタ集
Ruby on Rails を用いたWEBアプリケーションの開発
インフラ自動化とHashicorp tools
とっとるびー(2回目)発表資料
コミュニティのある風景
CouchDB+OpenSocial - OSC 2009/Fall Tokyo
RubyKaigi Lightning Talks TwYM episode2
ROMA on JRuby at JRubyKaigi 2010
長いの
20111029 rubyon php
【とらラボLT】go言語でのweb apiの作り方3選
ros2_cmd_api : ROS2コマンド機能のAPIを提供するROS2パッケージ.pdf
dokku を本番環境で使ってみた話
JavaEdge第3回ライブセッション
20150228_渋谷Webエンジニア朝会LT資料
RでつくるWebアプリ~rApache編~
ROS2.0時代に備えたc++11/14
Rubyの仕事で食べていくために僕らは!
高トラフィックサイトをRailsで構築するためのTips基礎編
nomlab_okayamaruby_slide
Ruby 3.0.0 コネタ集
Ad

More from Uchio Kondo (8)

PDF
Puppet of-2015-forupload
PDF
Hashicorpツールズ
PDF
Consul は 全自動オーケストレーションの 夢を見るか?
PDF
Drone.io のご紹介
PDF
Testing in Sinatra
PDF
Start-padrino
PDF
Rubyist started to learn Groovy - things important to leran new LL
PDF
otomodachi-kakumei
Puppet of-2015-forupload
Hashicorpツールズ
Consul は 全自動オーケストレーションの 夢を見るか?
Drone.io のご紹介
Testing in Sinatra
Start-padrino
Rubyist started to learn Groovy - things important to leran new LL
otomodachi-kakumei

人間たちとsystemd