{"id":1048,"date":"2014-02-16T08:27:30","date_gmt":"2014-02-16T08:27:30","guid":{"rendered":"http:\/\/wp.neependra.net\/?p=1048"},"modified":"2014-02-16T08:27:30","modified_gmt":"2014-02-16T08:27:30","slug":"running-glusterfs-inside-docker","status":"publish","type":"post","link":"https:\/\/neependra.net\/index.php\/2014\/02\/16\/running-glusterfs-inside-docker\/","title":{"rendered":"Running GlusterFS inside docker container"},"content":{"rendered":"<p>As a part of <a href=\"http:\/\/www.meetup.com\/Gluster-Bangalore\/events\/164854692\/\">GlusterFS 3.5 testing and hackathon<\/a>, I decided to put <a href=\"http:\/\/www.gluster.org\/\">GlusterFS<\/a> inside a<a href=\"https:\/\/www.docker.io\"> docker container<\/a>.So I installed docker on my Fedora20 desktop<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\n$ yum install docker-io -y<br \/>\n$ systemctl enable docker.service<br \/>\nln -s &#8216;\/usr\/lib\/systemd\/system\/docker.service&#8217; &#8216;\/etc\/systemd\/system\/multi-user.target.wants\/docker.service&#8217;<br \/>\n$ systemctl start docker.service<br \/>\n$ docker version<br \/>\nClient version: 0.7.6<br \/>\n..<br \/>\nServer version: 0.7.6<br \/>\n[\/sourcecode]<\/p>\n<p>and then started a Fedora container<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\n$ docker run -i -t mattdm\/fedora \/bin\/bash<br \/>\n[\/sourcecode]<\/p>\n<p>Once I am inside the container I installed GlusterFS packages<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nbash-4.2# yum install glusterfs glusterfs-server -y<br \/>\n[\/sourcecode]<\/p>\n<p>And then tried to create volume<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nbash-4.2# \/usr\/sbin\/glusterd<br \/>\nbash-4.2# gluster volume create vol 172.17.0.3:\/mnt\/brick\/ force<br \/>\n[\/sourcecode]<\/p>\n<p><span style=\"font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 14px; line-height: 1.5em;\"><br \/>\nbut I got following error:-<br \/>\n<\/span><\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nvolume create: vol: failed: Glusterfs is not supported on brick: 172.17.0.3:\/mnt\/brick.<br \/>\nSetting extended attributes failed, reason: Operation not permitted.<br \/>\n[\/sourcecode]<\/p>\n<p>From above error it looked as setting up extended attributes are not supported, which is a basic need to use GlusteFS. So I tried to test them manually. I was able to set extended attributes in <em>user<\/em> namespace but not in <em>trusted<\/em> namespace.<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nbash-4.2# yum install attr -y<br \/>\nbash-4.2# setfattr -n user.foo1 -v &quot;bar&quot; a<br \/>\nbash-4.2# touch a; setfattr -n trusted.foo1 -v &quot;bar&quot; a<br \/>\nsetfattr: a: Operation not permitted<br \/>\n[\/sourcecode]<\/p>\n<p><span style=\"font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 14px; line-height: 1.5em;\">With some internet search I figured out that <strong>CAP_SYS_ADMIN<\/strong> is needed for setting up extended attributes in <em>trusted<\/em> namespace and to get that inside docker we need to run an image with <em>&#8211;privileged=true<\/em> option like<\/span><\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\n$ docker run &#8211;privileged=true -i -t mattdm\/fedora \/bin\/bash<br \/>\n[\/sourcecode]<\/p>\n<p>With that I was able to create the volume and start it<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nbash-4.2# gluster volume create vol 172.17.0.3:\/mnt\/brick\/ force<br \/>\nbash-4.2# gluster volume start vol<br \/>\n[\/sourcecode]<\/p>\n<p>But when I tried to mount the volume I got following error:-<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nE [mount.c:267:gf_fuse_mount] 0-glusterfs-fuse: cannot open \/dev\/fuse (No such file or directory)<br \/>\n[\/sourcecode]<\/p>\n<p>this turned out to be image specific problem, which I am using (mattdm\/fedora). I had to<em> mknod for \/dev\/fuse<\/em><\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\nbash-4.2# mknod \/dev\/fuse c 10 229<br \/>\n[\/sourcecode]<\/p>\n<p>and after that I was able to mount volume.<\/p>\n<p>On Fedroa 20 for docker version 0.7.6 the default storage driver for docker is device-mapper on which extended attributes are supported. AUFS storage driver does not support extended attributes as of now.I\u00a0have tried with <em>btrfs<\/em> storage driver with docker 0.8 as well and was able to use GlusterFS. To use <em>btrfs\u00a0<\/em>storage driver, we need to start docker daemon with following command :-<\/p>\n<p>[sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;]<br \/>\n$ docker -d -s btrfs<br \/>\n[\/sourcecode]<\/p>\n<p>Above will only work if Docker is running on a <em>btrfs<\/em> partition already prepared by the host system.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a part of GlusterFS 3.5 testing and hackathon, I decided to put GlusterFS inside a docker container.So I installed docker on my Fedora20 desktop [sourcecode language=&#8221;text&#8221; gutter=&#8221;false&#8221;] $ yum install docker-io -y $ systemctl enable docker.service ln -s &#8216;\/usr\/lib\/systemd\/system\/docker.service&#8217; &#8216;\/etc\/systemd\/system\/multi-user.target.wants\/docker.service&#8217; $ systemctl start docker.service $ docker version Client version: 0.7.6 .. Server version: 0.7.6 &#8230; <a title=\"Running GlusterFS inside docker container\" class=\"read-more\" href=\"https:\/\/neependra.net\/index.php\/2014\/02\/16\/running-glusterfs-inside-docker\/\" aria-label=\"Read more about Running GlusterFS inside docker container\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[18,24,25,29,41,42],"tags":[65,70,81,84,90,91,107,125],"class_list":["post-1048","post","type-post","status-publish","format-standard","hentry","category-docker","category-geek","category-gluster","category-learning","category-redhat","category-rhs","tag-btrfs","tag-container","tag-docker","tag-fedora","tag-geek","tag-glusterfs","tag-linux","tag-redhat"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/posts\/1048","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/comments?post=1048"}],"version-history":[{"count":0,"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/posts\/1048\/revisions"}],"wp:attachment":[{"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/media?parent=1048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/categories?post=1048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/neependra.net\/index.php\/wp-json\/wp\/v2\/tags?post=1048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}