(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{115:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return o})),n.d(t,"metadata",(function(){return c})),n.d(t,"toc",(function(){return s})),n.d(t,"default",(function(){return u}));var r=n(3),a=n(7),i=(n(0),n(136)),o={title:"Submarine on K8s"},c={unversionedId:"adminDocs/k8s/README",id:"adminDocs/k8s/README",isDocsHomePage:!1,title:"Submarine on K8s",description:"\x3c!--",source:"@site/docs/adminDocs/k8s/README.md",slug:"/adminDocs/k8s/README",permalink:"/docs/adminDocs/k8s/README",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/adminDocs/k8s/README.md",version:"current",sidebar:"docs",previous:{title:"Building Submarine Spark Security Plugin",permalink:"/docs/userDocs/submarine-security/spark-security/build-submarine-spark-security-plugin"},next:{title:"Setup a Kubernetes cluster using Kind",permalink:"/docs/adminDocs/k8s/kind"}},s=[{value:"Install Submarine",id:"install-submarine",children:[{value:"Setup Kubernetes",id:"setup-kubernetes",children:[]},{value:"Install Submarine Use Helm Charts",id:"install-submarine-use-helm-charts",children:[]}]}],b={toc:s};function u(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(i.b)("wrapper",Object(r.a)({},b,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("p",null,"Submarine for K8s supports distributed TensorFlow and PyTorch."),Object(i.b)("p",null,"Submarine can run on K8s >= ",Object(i.b)("inlineCode",{parentName:"p"},"1.14"),", supports features like GPU isolation."),Object(i.b)("p",null,"We have validated Submarine on the following versions:"),Object(i.b)("table",null,Object(i.b)("thead",{parentName:"table"},Object(i.b)("tr",{parentName:"thead"},Object(i.b)("th",{parentName:"tr",align:null},"K8s Version"),Object(i.b)("th",{parentName:"tr",align:"center"},"Support?"))),Object(i.b)("tbody",{parentName:"table"},Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.13.x (or earlier)"),Object(i.b)("td",{parentName:"tr",align:"center"},"X")),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.14.x"),Object(i.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.15.x"),Object(i.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.16.x"),Object(i.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.17.x"),Object(i.b)("td",{parentName:"tr",align:"center"},"To be verified")),Object(i.b)("tr",{parentName:"tbody"},Object(i.b)("td",{parentName:"tr",align:null},"1.18.x"),Object(i.b)("td",{parentName:"tr",align:"center"},"To be verified")))),Object(i.b)("h2",{id:"install-submarine"},"Install Submarine"),Object(i.b)("h3",{id:"setup-kubernetes"},"Setup Kubernetes"),Object(i.b)("p",null,"Submarine can be deployed on any K8s environment if version matches. If you don't have a running K8s, you can set up a K8s using ",Object(i.b)("a",{parentName:"p",href:"https://www.docker.com/products/docker-desktop"},"Docker Desktop"),", ",Object(i.b)("a",{parentName:"p",href:"https://kubernetes.io/docs/tasks/tools/install-minikube/"},"MiniKube"),", or ",Object(i.b)("a",{parentName:"p",href:"https://kind.sigs.k8s.io/"},"kind, Kubernetes-in-Docker"),"."),Object(i.b)("p",null,"From our experiences, Docker Desktop is an easier choice."),Object(i.b)("h3",{id:"install-submarine-use-helm-charts"},"Install Submarine Use Helm Charts"),Object(i.b)("p",null,"After you have an up-and-running K8s, you can follow ",Object(i.b)("a",{parentName:"p",href:"helm"},"Submarine Helm Charts Guide")," to deploy Submarine services on K8s cluster in minutes."))}u.isMDXComponent=!0},136:function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return d}));var r=n(0),a=n.n(r);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var b=a.a.createContext({}),u=function(e){var t=a.a.useContext(b),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},l=function(e){var t=u(e.components);return a.a.createElement(b.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},m=a.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,o=e.parentName,b=s(e,["components","mdxType","originalType","parentName"]),l=u(n),m=r,d=l["".concat(o,".").concat(m)]||l[m]||p[m]||i;return n?a.a.createElement(d,c(c({ref:t},b),{},{components:n})):a.a.createElement(d,c({ref:t},b))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,o[1]=c;for(var b=2;b<i;b++)o[b]=n[b];return a.a.createElement.apply(null,o)}return a.a.createElement.apply(null,n)}m.displayName="MDXCreateElement"}}]);