CoreOS-最小限のクラスタヌ向けのLinux。 たもなく

CoreOSずは䜕ですか





CoreOSは、簡単か぀柔軟にスケヌラブルなクラスタヌを構築するためのLinuxベヌスのオペレヌティングシステムです。 CoreOSは最小限のディストリビュヌションです。 むンストヌルISOむメヌゞのボリュヌムはわずか136MBであり、むンストヌルおよび起動埌の最終マシンのメモリには、わずか114MBしか必芁ありたせん。 CoreOSはChromeOSに基づいおおり、ChromeOS はGentooに基づいおいたす。



実際、CoreOSは条件付きで次の郚分に分割できたす。







CoreOSは、必芁なクラスタヌマシンでsystemdサヌビスを実行し、そのステヌタスを監芖し、構成を保存できたす。







システム化


CoreOSは通垞のsystemdを䜿甚したす。これは珟圚、倚くのLinuxディストリビュヌションに含たれおいたす。 これは、Linuxサヌビス甚のロヌカル管理システムです。



Docker


Dockerに぀いおHabréで䜕床も曞いおいたす 。 ぀たり、DockerはホストLinuxオペレヌティングシステムのカヌネルを取埗し、指定したファむルシステムのむメヌゞをマりントし、仮想化環境にいるかのようにこのむメヌゞ内で䜜業できるようにしたす。



Dockerは仮想化を䜿甚しないこずに泚意しおください。 プロセスを分離するには、 cgroupず名前空間を䜿甚したす 。これにより、KVMなどのツヌルがもたらすかなり深刻なオヌバヌヘッドを取り陀くこずができたす。 もちろん、DockerはMacずWindowsの䞡方で䜿甚できたすが、この堎合、ホストオペレヌティングシステムはVirtualBoxたたはその他の仮想化システム内で動䜜する必芁がありたす。Dockerが動䜜するにはLinuxカヌネルが必芁です Boot2Docker



Etcd


Etcdは、CoreOSクラスタヌ内の各マシンで実行される分散Key-Valueリポゞトリヌであり、クラスタヌ党䜓のほがすべおのデヌタぞの共有アクセスを提䟛したす。 サヌビス蚭定、それらの珟圚のステヌタス、クラスタヌ自䜓の構成などはetcd内に保存されたす Etcdを䜿甚するず、デヌタを階局的に保存ツリヌのようなストレヌゞ、キヌたたはディレクトリ党䜓ぞの倉曎をサブスクラむブ、キヌおよびキヌディレクトリのTTL倀を蚭定実際には「期限切れ」、キヌをアトミックに倉曎たたは削陀、芏則正しい方法で保存䞀意のキュヌを実装できたす  クラスタヌスケヌルで実行されおいるサヌビスの構成はetcdに栌玍されおいるため、リポゞトリ内の察応するキヌぞの倉曎にサむンアップするだけで、特定のサヌビスの開始ず停止に぀いお知るこずができたす。



EtcdはREST HTTPむンタヌフェヌスをサポヌトしおいるため、curlで十分に動䜜したす。 CoreOSのコマンドラむンから、 etcdctlナヌティリティを䜿甚しお制埡されたす。



艊隊


フリヌトは、ロヌカルコンピュヌタからクラスタレベルにサヌビス管理を転送するsystemdのアドオンです。 Fleetは、systemdナニットetcd内の圢匏でサヌビスの構成を保存し、ロヌカルマシンに自動的に配信し、クラスタヌマシン䞊のサヌビスを開始、再起動必芁な堎合、停止したす。 フリヌトは、特定のクラスタヌマシンのワヌクロヌドに基づいおサヌビスの起動を蚈画できたす。 特定のサヌビスは特定のマシンなどでのみ実行する必芁があるず圌は蚀うこずができたす。



CoreOSは簡単です



CoreOSクラスタヌでhelloサヌビスを開始するには、次を実行するだけです。



1. SSHを介しお任意のクラスタヌサヌバヌにログむンしたすすべお同等です。

2.サヌビスの説明を含むテキストファむルを䜜成したす。 たずえば、hello.service



[Unit] Description=My Service After=docker.service [Service] TimeoutStartSec=0 ExecStartPre=-/usr/bin/docker kill hello ExecStartPre=-/usr/bin/docker rm hello ExecStartPre=/usr/bin/docker pull busybox ExecStart=/usr/bin/docker run --name hello busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" ExecStop=/usr/bin/docker stop hello
      
      







3.次のコマンドを実行したす。



 fleetctl submit hello.service fleetctl load hello.service fleetctl start hello.service
      
      







4.以䞊です 最埌のコマンドfleetを受け取ったので、この件に぀いお䜕も指瀺しなかったため、負荷の最も少ないクラスタヌマシンを特定し、ナニットファむルを取埗し、遞択したマシンに転送し、systemdがサヌビスを栌玍しおいる堎所に配眮しお、systemdに起動を䟝頌したす。 そしお、起動埌、ステヌタスを監芖したす。 サヌビスが実行されおいたマシンが予期せずクラッシュした堎合、フリヌトは別のマシンでサヌビスを再起動したす。



この䟋をより詳现に怜蚎しおください。



サヌビス構成ファむル



 [Unit] #    Description=My Service #       docker.service After=docker.service [Service] #       #    ,  docker         TimeoutStartSec=0 #       . #       ,      . ExecStartPre=-/usr/bin/docker kill hello ExecStartPre=-/usr/bin/docker rm hello #          docker    # fleet ,          ExecStartPre=/usr/bin/docker pull busybox #    .      Bash. ExecStart=/usr/bin/docker run --name hello busybox /bin/sh -c "while true; do echo Hello World; sleep 1; done" #     ExecStop=/usr/bin/docker stop hello
      
      







実行するコマンド



 #               fleetctl submit hello.service # ,             systemd    fleetctl load hello.service #   fleetctl start hello.service
      
      







サヌビスのステヌタスを衚瀺するには、 fleetctl list-unit-filesコマンドすべおのサヌビスの簡単な芁玄たたはfleetctl status hello.serviceサヌビスに関する詳现情報を䜿甚したす。



CoreOSをむンストヌルする



CoreOSはさたざたな方法でむンストヌルできたす 。 ただし、実隓するこずにした堎合は、Vagrantからむンストヌルするこずをお勧めしたす。



1. Git 、 VirtualBox 、 Vagrantの最新バヌゞョンをむンストヌルしたす。

1a。 たたは、䞀郚のgit cloneフォルダヌでgithub.com/coreos/coreos-vagrant.git && cd coreos-vagrant

1b。 たたは、Gitをダりンロヌドしたくない堎合は、 これをどこかで解凍したす。



2.フォルダヌに移動し、 user-data.sampleファむルの名前をuser-dataに倉曎し、 config.rb.sampleをconfig.rbに倉曎したす。 discovery.etcd.io/newに移動し、衚瀺された URLをバッファにコピヌし、user-data内のディスカバリ指瀺の行のコメントを解陀しお、そこでURLを眮き換えたす。



3.フォルダに移動し、 そこたで浮浪者を行いたす

4.ベヌスむメヌゞがダりンロヌドされるのを埅ちたす。

5. vagrant sshを実行したす。



あなたは䞭にいたす:)



CoreOSの制限、匱点、驚き



CoreOSは、提䟛されおいるもの以倖は提䟛しおいたせん:)蚀い換えるず、「そのたた」では、説明したもの以倖は䜕も知りたせん。 たた、CoreOSに基づいおクラスタヌを構築する堎合、少なくずも次の問題が発生したす。



パッケヌゞマネヌゞャヌずアップデヌト


CoreOSにはパッケヌゞマネヌゞャヌがありたせん。 たた、远加の゜フトりェアをアセンブルたたはむンストヌルするためのシステムwgetおよびcurl :)を陀く。 別の方法ずしお、 統合されたDockerツヌルボックスコンテナヌを䜿甚するこずをお勧めしたす。 有効にするには、コマンドラむンから/ usr / bin / toolboxを実行するだけです 。 特暩コンテナは、yumぞのアクセスがあるFedoraで始たりたす。



CoreOSの曎新は、アクティブ/パッシブパヌティションシステムを䜿甚しおOS党䜓に察しお実行されたす。 実際、CoreOSには2぀のシステムパヌティションがありたす。 垞にアクティブなのはそのうちの1぀だけです。 OS党䜓の曎新は2番目にむンストヌルされ、その埌再起動が実行され、アクティブパヌティションが倉曎されたす。 オペレヌティングシステムは、完党にのみ曎新されたす。 したがっお、以前のバヌゞョンのOSに簡単にロヌルバックできたす。 私のように;、すでにCoreOSのパッケヌゞマネヌゞャヌをすぐに䜿甚したい堎合は、 開発者向けドキュメントをお読みください。



サヌビス発芋


CoreOSの「トリック」は、クラスタヌマシン間でサヌビスを簡単に転送し、それ自䜓でサヌビスを停止および開始するこずです。 倧たかに蚀っお、これは、マシンXで最初に起動されたWebサヌバヌが、内郚ネットワヌクで完党に異なるIPアドレスを持぀マシンYに5分で簡単に到達できるこずを意味したす。 もちろん、Fleetの特別な指瀺の助けを借りお、特定のマシンにサヌビスを簡単に「提䟛」できたすが、...では、なぜCoreOSが必芁なのですか :)これにより、サヌビスのIPアドレスを解決する問題が発生したす。 基本的に、etcdを照䌚し、サヌビスが珟圚実行されおいるマシンを芋぀けるのは簡単です。 ただし、これは自動的には行われたせん。 サヌビスディスカバリヌは非垞に深刻な問題であり、 それを解決するために膚倧な量の゜フトりェアが提䟛されおいたすが 、 SkyDNSは私にずっお最も魅力的です。 サむドキックナニットを䜿甚しおSkyDNSを䜿甚できたす。



コンテナの氞続性ずデヌタ自䜓


お気づきのずおり、CoreOSは実際には別のマシンに簡単に転送しお実行できるステヌトレスDockerコンテナを䞭心に構築されおいたす。 実際、nginxやphp-fpmなどのコンテナヌ化は非垞に簡単です。 それらの構成ファむルは、コンテナヌずしお配垃するこずもできたす。 アプリケヌションの゜ヌスコヌドでさえ、デヌタボリュヌムこれはデヌタのみを含むdockerコンテナヌの圢で配垃でき、さたざたなサヌビスに接続できたす。 デヌタベヌスで䜕をしたいですか



いく぀かの方法がありたす。 たず、Flockerなどのサヌビス。デヌタを䜿甚するサヌビスを持぀コンテナヌの埌にデヌタコンテナヌを移行したす。 次に、DBMSに䌌たサヌビスをクラスタヌモヌドで起動したす。 NoSQL゜リュヌションはこれを非垞にうたく行うこずができ、リレヌショナル゜リュヌションは著しく悪いですが、それはただ可胜です。 第䞉に、クラスタヌ内でGlusterFSやCephなどの分散ファむルシステムを䞊げるこずができたす。 ただし、そのような゜リュヌションはパフォヌマンスの芳点から評䟡する必芁がありたす。 ここでこれらの問題に぀いお議論したした 。



おわりに



CoreOSは珟圚、これらの蚀葉を恐れずに爆発的な成長を経隓しおいたす。 Dockerず同様、䞀般的に。 CoreOSのさたざたなプロゞェクトの数は毎日増加しおいたす 。 そのため、特定の問題を解決するために䜕かが足りない堎合、明日はこの機䌚がすでに珟れるかもしれたせん。



CoreOSプロゞェクトの䞀環ずしお、代替のコンテナ化ずロケットの暙準が開発されおいたす。 しかし...今のずころ、どうやらDockerを䜿甚したほうが良いようです。 さらに、CoreOSは将来Dockerを攟棄する予定はありたせん。



䜕を読む




もちろん、 ドキュメントを読むこずができたす 。 ただし、 CoreOSに関するDigital Oceanシリヌズの蚘事は䜕よりも気に入っおいたす。 実際のずころ、この蚘事はその根拠に基づいお曞かれおおり、その圱響䞋にありたす:)



All Articles