{"action":"created","comment":{"url":"https://api.github.com/repos/rook/rook/pulls/comments/191004211","pull_request_review_id":123498618,"id":191004211,"diff_hunk":"@@ -0,0 +1,157 @@\n+# Add NFS to Rook\n+\n+## Overview\n+\n+Rook is an open source orchestrator for distributed storage systems running in kubernetes, currently in alpha state and has focused initially on orchestrating Ceph on top of Kubernetes. This document explores a design to add NFS to Rook. This is a part of the rook feature request [#1551](https://github.com/rook/rook/issues/1502).\n+\n+## Rook Architecture\n+\n+Rook turns distributed storage software into a self-managing, self-scaling, and self-healing storage services. It does this by automating deployment, bootstrapping, configuration, provisioning, scaling, upgrading, migration, disaster recovery, monitoring, and resource management. Rook uses the facilities provided by the underlying cloud-native container management, scheduling and orchestration platform to perform its duties.\n+![Rook Architecture on Kubernetes](../Documentation/media/rook-architecture.png)\n+\n+## Network File System (NFS)\n+\n+NFS allows remote hosts to mount file systems over a network and interact with those file systems as though they are mounted locally. This enables system administrators to consolidate resources onto centralized servers on the network.\n+\n+## Why NFS?\n+\n+NFS is widely used for persistent storage in kubernetes cluster. Using NFS storage is a convenient and easy way to provision storage for applications.\n+An NFS volume allows an existing NFS (Network File System) share to be mounted into the pod.\n+The contents of an NFS volume are preserved and the volume is merely unmounted if the pod is stopped/destroyed. This means that an NFS volume can be pre-populated with data, and that data can be “handed off” between pods.\n+NFS supports multiple read/write simultaneously so a single share can be attached to multiple pods.\n+\n+## Design\n+\n+Rook brings storage platforms to Kubernetes with a fully Kubernetes-native design. It integrates deeply into cloud native environments leveraging extension points and providing a seamless experience for scheduling, lifecycle management, resource management, security, monitoring, and user experience.\n+With this project Rook is providing another widely adopted storage option for admins and users of cloud-native environments. This project will automate NFS starting from its configuration (such as allowed hosts, read/write permissions etc.) to deployment and provisioning. The operations on NFS which cannot be done natively by Kubernetes will be automated.\n+NFS doesn’t provide an internal provisioner for kubernetes, so Rook is needed as an external provisioner.\n+\n+### Initial Setup\n+\n+The flow of creating NFS backed storage in Rook is\n+1. The settings are determined and saved in an NFS server CRD (rook-nfs.yaml)\n+2. `kubectl create -f rook-nfs.yaml`\n+3. Rook is notified of the new CRD\n+   - Rook starts the NFS daemon on the desired nodes in the cluster\n+   - Rook creates a storage class\n+4. The pod which requires NFS storage creates a PVC to consume the volume.\n+\n+### Deployed service\n+\n+When the NFS CRD instance is created, Rook responds to this request by starting the NFS daemon with the configuration and exports stated in the CRD and creates a service to expose NFS.","path":"design/nfs.md","position":41,"original_position":41,"commit_id":"14cb1ac68a50ad7a1c4588822821b14c1cc66b8f","original_commit_id":"14cb1ac68a50ad7a1c4588822821b14c1cc66b8f","user":{"login":"travisn","id":1048514,"avatar_url":"https://avatars0.githubusercontent.com/u/1048514?v=4","gravatar_id":"","url":"https://api.github.com/users/travisn","html_url":"https://github.com/travisn","followers_url":"https://api.github.com/users/travisn/followers","following_url":"https://api.github.com/users/travisn/following{/other_user}","gists_url":"https://api.github.com/users/travisn/gists{/gist_id}","starred_url":"https://api.github.com/users/travisn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/travisn/subscriptions","organizations_url":"https://api.github.com/users/travisn/orgs","repos_url":"https://api.github.com/users/travisn/repos","events_url":"https://api.github.com/users/travisn/events{/privacy}","received_events_url":"https://api.github.com/users/travisn/received_events","type":"User","site_admin":false},"body":"Could this section be merged with step 3 in the previous section? There is some overlap.","created_at":"2018-05-25T20:37:54Z","updated_at":"2018-05-25T21:04:34Z","html_url":"https://github.com/rook/rook/pull/1740#discussion_r191004211","pull_request_url":"https://api.github.com/repos/rook/rook/pulls/1740","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/rook/rook/pulls/comments/191004211"},"html":{"href":"https://github.com/rook/rook/pull/1740#discussion_r191004211"},"pull_request":{"href":"https://api.github.com/repos/rook/rook/pulls/1740"}}},"pull_request":{"url":"https://api.github.com/repos/rook/rook/pulls/1740","id":190426840,"html_url":"https://github.com/rook/rook/pull/1740","diff_url":"https://github.com/rook/rook/pull/1740.diff","patch_url":"https://github.com/rook/rook/pull/1740.patch","issue_url":"https://api.github.com/repos/rook/rook/issues/1740","number":1740,"state":"open","locked":false,"title":"Design document for adding NFS as storage backend","user":{"login":"rohan47","id":11498120,"avatar_url":"https://avatars0.githubusercontent.com/u/11498120?v=4","gravatar_id":"","url":"https://api.github.com/users/rohan47","html_url":"https://github.com/rohan47","followers_url":"https://api.github.com/users/rohan47/followers","following_url":"https://api.github.com/users/rohan47/following{/other_user}","gists_url":"https://api.github.com/users/rohan47/gists{/gist_id}","starred_url":"https://api.github.com/users/rohan47/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohan47/subscriptions","organizations_url":"https://api.github.com/users/rohan47/orgs","repos_url":"https://api.github.com/users/rohan47/repos","events_url":"https://api.github.com/users/rohan47/events{/privacy}","received_events_url":"https://api.github.com/users/rohan47/received_events","type":"User","site_admin":false},"body":"Signed-off-by: rohan47 <rohanrgupta1996@gmail.com>\r\n\r\nDesign documentation for the feature request #1551 \r\n\r\n[skip ci]","created_at":"2018-05-24T21:34:58Z","updated_at":"2018-05-25T21:04:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fe12e0a10b77e7a808a55258fb7657bffed820a5","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/rook/rook/pulls/1740/commits","review_comments_url":"https://api.github.com/repos/rook/rook/pulls/1740/comments","review_comment_url":"https://api.github.com/repos/rook/rook/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rook/rook/issues/1740/comments","statuses_url":"https://api.github.com/repos/rook/rook/statuses/14cb1ac68a50ad7a1c4588822821b14c1cc66b8f","head":{"label":"rohan47:nfs-design-doc","ref":"nfs-design-doc","sha":"14cb1ac68a50ad7a1c4588822821b14c1cc66b8f","user":{"login":"rohan47","id":11498120,"avatar_url":"https://avatars0.githubusercontent.com/u/11498120?v=4","gravatar_id":"","url":"https://api.github.com/users/rohan47","html_url":"https://github.com/rohan47","followers_url":"https://api.github.com/users/rohan47/followers","following_url":"https://api.github.com/users/rohan47/following{/other_user}","gists_url":"https://api.github.com/users/rohan47/gists{/gist_id}","starred_url":"https://api.github.com/users/rohan47/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohan47/subscriptions","organizations_url":"https://api.github.com/users/rohan47/orgs","repos_url":"https://api.github.com/users/rohan47/repos","events_url":"https://api.github.com/users/rohan47/events{/privacy}","received_events_url":"https://api.github.com/users/rohan47/received_events","type":"User","site_admin":false},"repo":{"id":127197958,"name":"rook","full_name":"rohan47/rook","owner":{"login":"rohan47","id":11498120,"avatar_url":"https://avatars0.githubusercontent.com/u/11498120?v=4","gravatar_id":"","url":"https://api.github.com/users/rohan47","html_url":"https://github.com/rohan47","followers_url":"https://api.github.com/users/rohan47/followers","following_url":"https://api.github.com/users/rohan47/following{/other_user}","gists_url":"https://api.github.com/users/rohan47/gists{/gist_id}","starred_url":"https://api.github.com/users/rohan47/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rohan47/subscriptions","organizations_url":"https://api.github.com/users/rohan47/orgs","repos_url":"https://api.github.com/users/rohan47/repos","events_url":"https://api.github.com/users/rohan47/events{/privacy}","received_events_url":"https://api.github.com/users/rohan47/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rohan47/rook","description":"File, Block, and Object Storage Services for your Cloud-Native Environment","fork":true,"url":"https://api.github.com/repos/rohan47/rook","forks_url":"https://api.github.com/repos/rohan47/rook/forks","keys_url":"https://api.github.com/repos/rohan47/rook/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rohan47/rook/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rohan47/rook/teams","hooks_url":"https://api.github.com/repos/rohan47/rook/hooks","issue_events_url":"https://api.github.com/repos/rohan47/rook/issues/events{/number}","events_url":"https://api.github.com/repos/rohan47/rook/events","assignees_url":"https://api.github.com/repos/rohan47/rook/assignees{/user}","branches_url":"https://api.github.com/repos/rohan47/rook/branches{/branch}","tags_url":"https://api.github.com/repos/rohan47/rook/tags","blobs_url":"https://api.github.com/repos/rohan47/rook/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rohan47/rook/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rohan47/rook/git/refs{/sha}","trees_url":"https://api.github.com/repos/rohan47/rook/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rohan47/rook/statuses/{sha}","languages_url":"https://api.github.com/repos/rohan47/rook/languages","stargazers_url":"https://api.github.com/repos/rohan47/rook/stargazers","contributors_url":"https://api.github.com/repos/rohan47/rook/contributors","subscribers_url":"https://api.github.com/repos/rohan47/rook/subscribers","subscription_url":"https://api.github.com/repos/rohan47/rook/subscription","commits_url":"https://api.github.com/repos/rohan47/rook/commits{/sha}","git_commits_url":"https://api.github.com/repos/rohan47/rook/git/commits{/sha}","comments_url":"https://api.github.com/repos/rohan47/rook/comments{/number}","issue_comment_url":"https://api.github.com/repos/rohan47/rook/issues/comments{/number}","contents_url":"https://api.github.com/repos/rohan47/rook/contents/{+path}","compare_url":"https://api.github.com/repos/rohan47/rook/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rohan47/rook/merges","archive_url":"https://api.github.com/repos/rohan47/rook/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rohan47/rook/downloads","issues_url":"https://api.github.com/repos/rohan47/rook/issues{/number}","pulls_url":"https://api.github.com/repos/rohan47/rook/pulls{/number}","milestones_url":"https://api.github.com/repos/rohan47/rook/milestones{/number}","notifications_url":"https://api.github.com/repos/rohan47/rook/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rohan47/rook/labels{/name}","releases_url":"https://api.github.com/repos/rohan47/rook/releases{/id}","deployments_url":"https://api.github.com/repos/rohan47/rook/deployments","created_at":"2018-03-28T21:00:27Z","updated_at":"2018-05-24T19:24:24Z","pushed_at":"2018-05-24T21:29:52Z","git_url":"git://github.com/rohan47/rook.git","ssh_url":"git@github.com:rohan47/rook.git","clone_url":"https://github.com/rohan47/rook.git","svn_url":"https://github.com/rohan47/rook","homepage":"https://rook.io","size":5144,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rook:master","ref":"master","sha":"cf5b60561edf3339811740d3b1b5af7d6d88ed72","user":{"login":"rook","id":22860722,"avatar_url":"https://avatars1.githubusercontent.com/u/22860722?v=4","gravatar_id":"","url":"https://api.github.com/users/rook","html_url":"https://github.com/rook","followers_url":"https://api.github.com/users/rook/followers","following_url":"https://api.github.com/users/rook/following{/other_user}","gists_url":"https://api.github.com/users/rook/gists{/gist_id}","starred_url":"https://api.github.com/users/rook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rook/subscriptions","organizations_url":"https://api.github.com/users/rook/orgs","repos_url":"https://api.github.com/users/rook/repos","events_url":"https://api.github.com/users/rook/events{/privacy}","received_events_url":"https://api.github.com/users/rook/received_events","type":"Organization","site_admin":false},"repo":{"id":62921553,"name":"rook","full_name":"rook/rook","owner":{"login":"rook","id":22860722,"avatar_url":"https://avatars1.githubusercontent.com/u/22860722?v=4","gravatar_id":"","url":"https://api.github.com/users/rook","html_url":"https://github.com/rook","followers_url":"https://api.github.com/users/rook/followers","following_url":"https://api.github.com/users/rook/following{/other_user}","gists_url":"https://api.github.com/users/rook/gists{/gist_id}","starred_url":"https://api.github.com/users/rook/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rook/subscriptions","organizations_url":"https://api.github.com/users/rook/orgs","repos_url":"https://api.github.com/users/rook/repos","events_url":"https://api.github.com/users/rook/events{/privacy}","received_events_url":"https://api.github.com/users/rook/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rook/rook","description":"File, Block, and Object Storage Services for your Cloud-Native Environment","fork":false,"url":"https://api.github.com/repos/rook/rook","forks_url":"https://api.github.com/repos/rook/rook/forks","keys_url":"https://api.github.com/repos/rook/rook/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rook/rook/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rook/rook/teams","hooks_url":"https://api.github.com/repos/rook/rook/hooks","issue_events_url":"https://api.github.com/repos/rook/rook/issues/events{/number}","events_url":"https://api.github.com/repos/rook/rook/events","assignees_url":"https://api.github.com/repos/rook/rook/assignees{/user}","branches_url":"https://api.github.com/repos/rook/rook/branches{/branch}","tags_url":"https://api.github.com/repos/rook/rook/tags","blobs_url":"https://api.github.com/repos/rook/rook/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rook/rook/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rook/rook/git/refs{/sha}","trees_url":"https://api.github.com/repos/rook/rook/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rook/rook/statuses/{sha}","languages_url":"https://api.github.com/repos/rook/rook/languages","stargazers_url":"https://api.github.com/repos/rook/rook/stargazers","contributors_url":"https://api.github.com/repos/rook/rook/contributors","subscribers_url":"https://api.github.com/repos/rook/rook/subscribers","subscription_url":"https://api.github.com/repos/rook/rook/subscription","commits_url":"https://api.github.com/repos/rook/rook/commits{/sha}","git_commits_url":"https://api.github.com/repos/rook/rook/git/commits{/sha}","comments_url":"https://api.github.com/repos/rook/rook/comments{/number}","issue_comment_url":"https://api.github.com/repos/rook/rook/issues/comments{/number}","contents_url":"https://api.github.com/repos/rook/rook/contents/{+path}","compare_url":"https://api.github.com/repos/rook/rook/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rook/rook/merges","archive_url":"https://api.github.com/repos/rook/rook/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rook/rook/downloads","issues_url":"https://api.github.com/repos/rook/rook/issues{/number}","pulls_url":"https://api.github.com/repos/rook/rook/pulls{/number}","milestones_url":"https://api.github.com/repos/rook/rook/milestones{/number}","notifications_url":"https://api.github.com/repos/rook/rook/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rook/rook/labels{/name}","releases_url":"https://api.github.com/repos/rook/rook/releases{/id}","deployments_url":"https://api.github.com/repos/rook/rook/deployments","created_at":"2016-07-08T22:45:05Z","updated_at":"2018-05-25T19:46:26Z","pushed_at":"2018-05-25T20:57:29Z","git_url":"git://github.com/rook/rook.git","ssh_url":"git@github.com:rook/rook.git","clone_url":"https://github.com/rook/rook.git","svn_url":"https://github.com/rook/rook","homepage":"https://rook.io","size":5141,"stargazers_count":2852,"watchers_count":2852,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":313,"mirror_url":null,"archived":false,"open_issues_count":205,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":313,"open_issues":205,"watchers":2852,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rook/rook/pulls/1740"},"html":{"href":"https://github.com/rook/rook/pull/1740"},"issue":{"href":"https://api.github.com/repos/rook/rook/issues/1740"},"comments":{"href":"https://api.github.com/repos/rook/rook/issues/1740/comments"},"review_comments":{"href":"https://api.github.com/repos/rook/rook/pulls/1740/comments"},"review_comment":{"href":"https://api.github.com/repos/rook/rook/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rook/rook/pulls/1740/commits"},"statuses":{"href":"https://api.github.com/repos/rook/rook/statuses/14cb1ac68a50ad7a1c4588822821b14c1cc66b8f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"travisn"}}