(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{144:function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return O}));var r=n(0),a=n.n(r);function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(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 l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?b(Object(n),!0).forEach((function(t){c(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},c=Object.keys(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r<c.length;r++)n=c[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var o=a.a.createContext({}),p=function(e){var t=a.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=p(e.components);return a.a.createElement(o.Provider,{value:t},e.children)},u={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,c=e.originalType,b=e.parentName,o=i(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,O=d["".concat(b,".").concat(m)]||d[m]||u[m]||c;return n?a.a.createElement(O,l(l({ref:t},o),{},{components:n})):a.a.createElement(O,l({ref:t},o))}));function O(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var c=n.length,b=new Array(c);b[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:r,b[1]=l;for(var o=2;o<c;o++)b[o]=n[o];return a.a.createElement.apply(null,b)}return a.a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},98:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return b})),n.d(t,"metadata",(function(){return l})),n.d(t,"toc",(function(){return i})),n.d(t,"default",(function(){return p}));var r=n(3),a=n(7),c=(n(0),n(144)),b={title:"Dependencies for Submarine"},l={unversionedId:"devDocs/Dependencies",id:"devDocs/Dependencies",isDocsHomePage:!1,title:"Dependencies for Submarine",description:"\x3c!--",source:"@site/docs/devDocs/Dependencies.md",slug:"/devDocs/Dependencies",permalink:"/docs/devDocs/Dependencies",editUrl:"https://github.com/apache/submarine/edit/master/website/docs/devDocs/Dependencies.md",version:"current",sidebar:"docs",previous:{title:"Project Architecture",permalink:"/docs/devDocs/README"},next:{title:"How to Build Submarine",permalink:"/docs/devDocs/BuildFromCode"}},i=[{value:"Kubernetes",id:"kubernetes",children:[]},{value:"KinD",id:"kind",children:[]},{value:"Java",id:"java",children:[]},{value:"Maven",id:"maven",children:[]},{value:"Docker",id:"docker",children:[]}],o={toc:i};function p(e){var t=e.components,n=Object(a.a)(e,["components"]);return Object(c.b)("wrapper",Object(r.a)({},o,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"These are the dependencies currently used by Apache Submarine.")),Object(c.b)("h2",{id:"kubernetes"},"Kubernetes"),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",{parentName:"tr",align:null},"Kubernetes Version"),Object(c.b)("th",{parentName:"tr",align:"center"},"Support?"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.13.x (or earlier)"),Object(c.b)("td",{parentName:"tr",align:"center"},"X")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.14.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.15.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.16.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.17.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"To be verified")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"1.18.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"To be verified")))),Object(c.b)("h2",{id:"kind"},"KinD"),Object(c.b)("table",null,Object(c.b)("thead",{parentName:"table"},Object(c.b)("tr",{parentName:"thead"},Object(c.b)("th",{parentName:"tr",align:null},"KinD Version"),Object(c.b)("th",{parentName:"tr",align:"center"},"Support?"))),Object(c.b)("tbody",{parentName:"table"},Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.5.x (or earlier)"),Object(c.b)("td",{parentName:"tr",align:"center"},"X")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.6.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.7.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.8.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.9.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.10.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")),Object(c.b)("tr",{parentName:"tbody"},Object(c.b)("td",{parentName:"tr",align:null},"0.11.x"),Object(c.b)("td",{parentName:"tr",align:"center"},"\u221a")))),Object(c.b)("h2",{id:"java"},"Java"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"TODO")),Object(c.b)("h2",{id:"maven"},"Maven"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"TODO")),Object(c.b)("h2",{id:"docker"},"Docker"),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},"TODO")))}p.isMDXComponent=!0}}]);