Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
systemdざっくり入門
GMO Pepabo, Inc.
Uchio Kondo
2016/04/23 コンテナ型仮想化の情報交換会@福岡
人間たちとsystemd
人間の紹介
近藤うちお
> GMOペパボ所属
> 技術基盤チーム 🍮
> 福岡支社勤務
> Fukuoka.rb
> RailsGirls Fukuoka #1 総合雑用/コーチまとめ
!?
興味
> Ruby / Golangを少々
> Docker / LXC
> Puppet
> Hashicorp tools
> OpenStack
> Electron / React
http://www.slideshare.net/u...
7 years old Rubyist
> Rails 2.1.0 ごろからのルビースト(2008 )
> Rubyをこじらせて著作あり
> Web+DB Press Ruby連載(2012 2014)
> パーフェクトRuby (2013)
...
Founder of
制限事項
> 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スクリプト)
- ...
Rethinking of PID 1
> 長文だが…
> ざっくり
> 起動スクリプト、結局全部シェルスクリプトだったり、一
個一個起動でしんどかったり、cgroupとかナウい奴との
連携も大変だよね……
> そこでsystemd、という感じ...
systemdを
使ってみる
Unitファイル
> 独自形式(ini風)
> 宣言的
> 「target」「mount」「service」「device」
などの種類がある
> Unit同士は依存関係がある
例: バイナリ一個のサービス
例: バイナリ一個のサービス
説明のほか、依存するUnitファイル、

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

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

cgroupsの制限など
ランレベル相当を記述
例: 定期実行タイマー
Logging
> journald というサービスが担当する
> systemdの一部という扱い
> サービス側は、基本はとにかく標準出力にログを出せばいい
(12factor app感)
> 罠: systemd 208 では、journa...
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
>...
セットするとどうなる?
こういう感じになる
> 無事、CPUを10秒占有した後killされる
もう一つの方法
> man systemd.resource-control
cgroupとの
連携
systemd-cgtop
CPUQuota= してみましょう
なるほど
へ∼
cgroupなので
> 動的にリソースの利用率を変更することも可能
> demoします
どっちがいいんだろう……
> man見た感じの印象、resource-control押し。
> Also note that LimitRSS= is not
implemented on Linux, and setting it has n...
systemdと
ファイルシステムの 分離
PrivateTmp設定
自動でディレクトリができる
※ サービスを落とすとディレクトリも消える
サービス側では/tmp
深追い
> 起動前に
> ファイルシステムを unshare する
> /tmp を /tmp/systemd-private-*** に

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

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

(mount、ネットワーク、P...
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もいじれます)
> CapabilityBo...
systemdのメリット所感
> Unitファイルで宣言的にサービス定義、

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

詳しくなくても、systemdのディレクティブが
ラップし...
container vs systemd
> systemdだけでもできることが結構ある
> できないこともある。PIDの分離とかがそう
> Dockerとsystemdの連携の例もある
> http://enakai00.hatenablog...
Try!
systemd
参考文献
> Systemd入門シリーズ (id:enakai00 さん)
> http://enakai00.hatenablog.com/entry/20130914/1379146157
> というか非常に詳しく、僕の発表要るんだろうか…...
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
人間たちとsystemd
Upcoming SlideShare
Loading in …5
×

人間たちとsystemd

1,255 views

Published on

@コンテナ勉強会福岡
http://ct-study.connpass.com/event/28449/

Published in: Technology
  • Get the best essay, research papers or dissertations. from ⇒ www.HelpWriting.net ⇐ A team of professional authors with huge experience will give u a result that will overcome your expectations.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

人間たちとsystemd

  1. 1. systemdざっくり入門 GMO Pepabo, Inc. Uchio Kondo 2016/04/23 コンテナ型仮想化の情報交換会@福岡 人間たちとsystemd
  2. 2. 人間の紹介
  3. 3. 近藤うちお > GMOペパボ所属 > 技術基盤チーム 🍮 > 福岡支社勤務 > Fukuoka.rb > RailsGirls Fukuoka #1 総合雑用/コーチまとめ
  4. 4. !?
  5. 5. 興味 > Ruby / Golangを少々 > Docker / LXC > Puppet > Hashicorp tools > OpenStack > Electron / React http://www.slideshare.net/udzura/hashicorp-tools
  6. 6. 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!]
  7. 7. Founder of
  8. 8. 制限事項 > OSなどのレイヤー、正直わかっていないし、
 カーネルのコードも読んだことがありません > 「実は……さっきから足が震えているッ……」
  9. 9. 人間たちのための
 systemd概要
  10. 10. init(あるいはその代替) > 最初に起動して、たくさんのサービスどもを
 立ち上げて管理する > CentOS 5 など … sysvinit > CentOS 6 / Ubuntu … Upstart > OS X … launchd > ……
  11. 11. init script
  12. 12. Upstart
  13. 13. 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 から利用は可能
  14. 14. Rethinking of PID 1 > 長文だが… > ざっくり > 起動スクリプト、結局全部シェルスクリプトだったり、一 個一個起動でしんどかったり、cgroupとかナウい奴との 連携も大変だよね…… > そこでsystemd、という感じらしい ※ http://0pointer.de/blog/projects/systemd.html
  15. 15. systemdを 使ってみる
  16. 16. Unitファイル > 独自形式(ini風) > 宣言的 > 「target」「mount」「service」「device」 などの種類がある > Unit同士は依存関係がある
  17. 17. 例: バイナリ一個のサービス
  18. 18. 例: バイナリ一個のサービス 説明のほか、依存するUnitファイル、
 起動順序を記述 コマンド、実行ユーザー、
 前後に発行するコマンド、環境変数、
 cgroupsの制限など ランレベル相当を記述
  19. 19. 例: 定期実行タイマー
  20. 20. Logging > journald というサービスが担当する > systemdの一部という扱い > サービス側は、基本はとにかく標準出力にログを出せばいい (12factor app感) > 罠: systemd 208 では、journaldを再起動すると
 サービスが落ちることもある…… > CentOS 7.1 のデフォルト > CentOS 7.2でsystemd 219になり、直ってる
  21. 21. systemdと
 リソース制限
  22. 22. ulimit > リソースをいい感じに制限するやつ > CPU、メモリ、ファイルディスクリプタ数……
  23. 23. Unitファイル > Unitファイルはシェルスクリプトじゃない > initスクリプトみたいにulimitを書けばいいとい う話じゃない > ulimitはバイナリではないのでExecStartPreでキックでき ない、など > バイナリひとつみたいなときは、ラッパーをかま す?いやいや……
  24. 24. man systemd.exec http://www.freedesktop.org/software/systemd/man/systemd.exec.html#LimitCPU=
  25. 25. man systemd.exec > Unitファイルに宣言的に書く→わかりやすい! > ulimitでいうどれに相当するかが書いてあって 便利 > LimitCPU= ➡ ulimit -t > LimitRSS= ➡ ulimit -m > LimitNOFILE= ➡ ulimit -n
  26. 26. セットするとどうなる?
  27. 27. こういう感じになる > 無事、CPUを10秒占有した後killされる
  28. 28. もう一つの方法 > man systemd.resource-control
  29. 29. cgroupとの 連携
  30. 30. systemd-cgtop
  31. 31. CPUQuota= してみましょう
  32. 32. なるほど
  33. 33. へ∼
  34. 34. cgroupなので > 動的にリソースの利用率を変更することも可能 > demoします
  35. 35. どっちがいいんだろう…… > man見た感じの印象、resource-control押し。 > Also note that LimitRSS= is not implemented on Linux, and setting it has no effect. > ????? > ulimitから移行しやすいようにLimit*がある感じ。 > なるべくresource-controlしたほうがいいのでは
  36. 36. systemdと ファイルシステムの 分離
  37. 37. PrivateTmp設定
  38. 38. 自動でディレクトリができる ※ サービスを落とすとディレクトリも消える
  39. 39. サービス側では/tmp
  40. 40. 深追い > 起動前に > ファイルシステムを unshare する > /tmp を /tmp/systemd-private-*** に
 バインドマウントする > というだけ > なので正確には、mount namespaceの分離を 利用している
  41. 41. unshare(2) とは > Linux namespaceとは > プロセスごとに、アクセスできるリソースを分けることが できる機能 > unshare を呼ぶと当該プロセスで
 新しいネームスペースを作る
 (mount、ネットワーク、PID……)
  42. 42. systemdの例 mnt のネームスペース だけが変わっている ことがわかる
  43. 43. その他のmount分離 > http://enakai00.hatenablog.com/entry/20130923/1379927579
  44. 44. ReadOnlyDirectries
  45. 45. そのプロセスからは変更できない > 一方で、他のプロセスからは可能
  46. 46. そのプロセスでは > こちらも、unshareされたあと、
 /etc/readonly-test をroでバインドマウントしなお していることがわかる > 一方、他のプロセスではそのマウントが確認できない
  47. 47. もう少しだけ 深追い
  48. 48. unshare になろう > hibomaさんという方の記事 > rubyで unshare(2) 呼び出して マウント名前空間を分離 > http://d.hatena.ne.jp/hiboma/20120518/1337337393 > 拡張ライブラリ書かなくて呼び出せるようなの で便利
  49. 49. irbでやろう
  50. 50. irbでやろう
  51. 51. 総括
  52. 52. systemd > ただのinitの代替ではない > cgroupやLinux namespaceと
 結構密接に連携でき、色々な使い道がありそう > (そういえば割愛しましたが、capabilityもいじれます) > CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW …
  53. 53. systemdのメリット所感 > Unitファイルで宣言的にサービス定義、
 依存、リソースの配分、分離を定義できる > cgroup/linux namespaceの詳細なAPIに
 詳しくなくても、systemdのディレクティブが ラップしてくれるので、容易に利用できる > systemdは人間たちに優しい!
  54. 54. container vs systemd > systemdだけでもできることが結構ある > できないこともある。PIDの分離とかがそう > Dockerとsystemdの連携の例もある > http://enakai00.hatenablog.com/entry/20140427/1398576165 > 相反するものでもなく、得意分野で使い分け
  55. 55. Try! systemd
  56. 56. 参考文献 > 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

×