Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.
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
Próxima SlideShare
Cargando en…5
×

人間たちとsystemd

1.282 visualizaciones

Publicado el

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

Publicado en: Tecnología
  • Inicia sesión para ver los comentarios

  • Sé el primero en recomendar esto

人間たちと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

×