blob: 0e6f27d4333f08e8ffa29e8c0ee603549f9a8c37 [file] [log] [blame]
"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4034,5238],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function s(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function c(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},l=Object.keys(e);for(r=0;r<l.length;r++)a=l[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)a=l[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var o=r.createContext({}),i=function(e){var t=r.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},u=function(e){var t=i(e.components);return r.createElement(o.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,o=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=i(a),m=n,h=d["".concat(o,".").concat(m)]||d[m]||p[m]||l;return a?r.createElement(h,s(s({ref:t},u),{},{components:a})):r.createElement(h,s({ref:t},u))}));function h(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,s=new Array(l);s[0]=m;var c={};for(var o in t)hasOwnProperty.call(t,o)&&(c[o]=t[o]);c.originalType=e,c[d]="string"==typeof e?e:n,s[1]=c;for(var i=2;i<l;i++)s[i]=a[i];return r.createElement.apply(null,s)}return r.createElement.apply(null,a)}m.displayName="MDXCreateElement"},50613:(e,t,a)=>{a.r(t),a.d(t,{contentTitle:()=>s,default:()=>d,frontMatter:()=>l,metadata:()=>c,toc:()=>o});var r=a(87462),n=(a(67294),a(3905));const l={title:"Learn More about Apache CloudStack"},s=void 0,c={type:"mdx",permalink:"/learn-more",source:"@site/src/pages/learn-more.mdx",title:"Learn More about Apache CloudStack",description:"Learn More about Apache CloudStack",frontMatter:{title:"Learn More about Apache CloudStack"}},o=[],i={toc:o},u="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("section",{class:"m80px"},(0,n.kt)("div",{class:"container"},(0,n.kt)("div",{class:"row"},(0,n.kt)("div",{class:"col"},(0,n.kt)("div",{class:"section-title text-center mb-5"},"Learn More about Apache CloudStack"))),(0,n.kt)("div",{class:"row"},(0,n.kt)("div",{class:"col-lg-6 mb-4"},(0,n.kt)("div",{class:"apache-card bgd-blue"},(0,n.kt)("div",{class:"img-holder"},(0,n.kt)("img",{src:"/img/Apache%20CloudStack%20at%20a%20Glance_img.png",alt:"",width:"100%"})),(0,n.kt)("div",{class:"apache-card-body"},(0,n.kt)("div",{class:"apache-card-title"},"Apache CloudStack at a Glance"),(0,n.kt)("p",null,"Learn more about Apache CloudStack and the capabilities it provides for IaaS builders"),(0,n.kt)("a",{href:"/files/cloudstack-at-a-glance.pdf",class:"btn btn-primary btn-dark-blue"},"Download")))),(0,n.kt)("div",{class:"col-lg-6 mb-4"},(0,n.kt)("div",{class:"apache-card bgd-dark-blue"},(0,n.kt)("div",{class:"img-holder"},(0,n.kt)("img",{src:"/img/ATT-Gitops.jpg",alt:""})),(0,n.kt)("div",{class:"apache-card-body"},(0,n.kt)("p",null,(0,n.kt)("br",null),"During the annual CloudStack Collaboration Conference 2023, Alex Dometrius, Associate Director - Technology at AT&T, presented their journey with Apache CloudStack."),(0,n.kt)("a",{href:"/blog/cloudstack-and-gitops-at-scale",class:"btn btn-primary"},"Read more"))))),(0,n.kt)("div",{class:"row"},(0,n.kt)("div",{class:"col-lg-3 mb-4"},(0,n.kt)("div",{class:"apache-card card-border"},(0,n.kt)("div",{class:"img-holder"},(0,n.kt)("img",{src:"/img/Delivering%20Public%20Cloud%20Services_img.png",alt:"",width:"100%"})),(0,n.kt)("div",{class:"apache-card-body"},(0,n.kt)("p",{class:"blue-title"},"SOLUTION BRIEF"),(0,n.kt)("div",{class:"apache-card-title"},"Delivering Public Cloud Services with CloudStack"),(0,n.kt)("p",null,"Discover how to use CloudStack to provision public cloud services and improve your profitability"),(0,n.kt)("a",{href:"/files/acs-public-cloud-solution-brief.pdf",class:"btn btn-primary"},"Download")))),(0,n.kt)("div",{class:"col-lg-3 mb-4"},(0,n.kt)("div",{class:"apache-card card-border"},(0,n.kt)("div",{class:"img-holder"},(0,n.kt)("img",{src:"/img/IKOULA_img.png",alt:"",width:"100%"})),(0,n.kt)("div",{class:"apache-card-body"},(0,n.kt)("p",{class:"blue-title"},"CASE STUDY"),(0,n.kt)("div",{class:"apache-card-title"},"IKOULA - The cloud leader & innovator in France"),(0,n.kt)("p",null,"IKOULA Simplifies the Management of Large-Scale Cloud Infrastructure with CloudStack and XCP-ng"),(0,n.kt)("a",{href:"/files/acs-case-study-ikoula-2021.pdf",class:"btn btn-primary"},"Download")))),(0,n.kt)("div",{class:"col-lg-6 mb-4"},(0,n.kt)("div",{class:"apache-card card-border"},(0,n.kt)("div",{class:"img-holder"},(0,n.kt)("img",{src:"/img/Your.Online_img.png",alt:"",width:"100%"})),(0,n.kt)("div",{class:"apache-card-body pt-0"},(0,n.kt)("p",{class:"blue-title"},"CASE STUDY"),(0,n.kt)("div",{class:"apache-card-title"},"Your.Online \u2013 A leading European online services platform"),(0,n.kt)("p",null,"Future-Proof Open-Source Platform Hosting Millions of Websites for Your.Online Powered by CloudStack, KVM and Ceph"),(0,n.kt)("a",{href:"/files/acs-case-study-your-online.pdf",class:"btn btn-primary"},"Download"))))))))}d.isMDXComponent=!0},85162:(e,t,a)=>{a.d(t,{Z:()=>s});var r=a(67294),n=a(86010);const l={tabItem:"tabItem_Ymn6"};function s(e){let{children:t,hidden:a,className:s}=e;return r.createElement("div",{role:"tabpanel",className:(0,n.Z)(l.tabItem,s),hidden:a},t)}},74866:(e,t,a)=>{a.d(t,{Z:()=>E});var r=a(87462),n=a(67294),l=a(86010),s=a(12466),c=a(16550),o=a(91980),i=a(67392),u=a(50012);function d(e){return function(e){var t;return(null==(t=n.Children.map(e,(e=>{if(!e||(0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))?void 0:t.filter(Boolean))??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:r,default:n}}=e;return{value:t,label:a,attributes:r,default:n}}))}function p(e){const{values:t,children:a}=e;return(0,n.useMemo)((()=>{const e=t??d(a);return function(e){const t=(0,i.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const r=(0,c.k6)(),l=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,o._X)(l),(0,n.useCallback)((e=>{if(!l)return;const t=new URLSearchParams(r.location.search);t.set(l,e),r.replace({...r.location,search:t.toString()})}),[l,r])]}function g(e){const{defaultValue:t,queryString:a=!1,groupId:r}=e,l=p(e),[s,c]=(0,n.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=a.find((e=>e.default))??a[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:l}))),[o,i]=h({queryString:a,groupId:r}),[d,g]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,l]=(0,u.Nk)(a);return[r,(0,n.useCallback)((e=>{a&&l.set(e)}),[a,l])]}({groupId:r}),b=(()=>{const e=o??d;return m({value:e,tabValues:l})?e:null})();(0,n.useLayoutEffect)((()=>{b&&c(b)}),[b]);return{selectedValue:s,selectValue:(0,n.useCallback)((e=>{if(!m({value:e,tabValues:l}))throw new Error(`Can't select invalid tab value=${e}`);c(e),i(e),g(e)}),[i,g,l]),tabValues:l}}var b=a(72389);const f={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function v(e){let{className:t,block:a,selectedValue:c,selectValue:o,tabValues:i}=e;const u=[],{blockElementScrollPositionUntilNextRender:d}=(0,s.o5)(),p=e=>{const t=e.currentTarget,a=u.indexOf(t),r=i[a].value;r!==c&&(d(t),o(r))},m=e=>{var t;let a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{const t=u.indexOf(e.currentTarget)+1;a=u[t]??u[0];break}case"ArrowLeft":{const t=u.indexOf(e.currentTarget)-1;a=u[t]??u[u.length-1];break}}null==(t=a)||t.focus()};return n.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":a},t)},i.map((e=>{let{value:t,label:a,attributes:s}=e;return n.createElement("li",(0,r.Z)({role:"tab",tabIndex:c===t?0:-1,"aria-selected":c===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:p},s,{className:(0,l.Z)("tabs__item",f.tabItem,null==s?void 0:s.className,{"tabs__item--active":c===t})}),a??t)})))}function k(e){let{lazy:t,children:a,selectedValue:r}=e;const l=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=l.find((e=>e.props.value===r));return e?(0,n.cloneElement)(e,{className:"margin-top--md"}):null}return n.createElement("div",{className:"margin-top--md"},l.map(((e,t)=>(0,n.cloneElement)(e,{key:t,hidden:e.props.value!==r}))))}function y(e){const t=g(e);return n.createElement("div",{className:(0,l.Z)("tabs-container",f.tabList)},n.createElement(v,(0,r.Z)({},e,t)),n.createElement(k,(0,r.Z)({},e,t)))}function E(e){const t=(0,b.Z)();return n.createElement(y,(0,r.Z)({key:String(t)},e))}},92065:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var r=a(67294),n=a(52263),l=a(70179),s=a(50613),c=a(74866),o=a(85162);function i(){const{siteConfig:e}=(0,n.Z)();return r.createElement("header",{class:"header-kubernetes header-homepage"},r.createElement("div",{class:"container"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col-lg-6"},r.createElement("h1",null,r.createElement("strong",null,"Kubernetes on",r.createElement("br",null)," CloudStack")," in Production"),r.createElement("p",{class:"px18 k-subtitle"},"Reduces operational overhead and infrastructure costs")),r.createElement("div",{class:"col-lg-6"},r.createElement("img",{src:"/img/CloudStack_release_illustration2.png",class:"img-fluid mtm50",alt:""})))))}function u(){return r.createElement(l.Z,{title:"Kubernetes on CloudStack in Production",description:"Kubernetes on CloudStack in Production"},r.createElement(i,null),r.createElement("main",null,r.createElement("section",null,r.createElement("div",{class:"container"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col-lg-6 order-lg-2"},r.createElement("h2",{class:"section-title mt-lg-5"},"About Apache CloudStack"),r.createElement("p",{class:"px18"},"Apache CloudStack is an open-source IaaS platform that is used to build public or private cloud environments. CloudStack allows you to easily deploy Kubernetes clusters into your own infrastructure without worrying about the underlying infrastructure and removing the coupling to specific virtualization platforms. It also allows easy deployment of Kubernetes as a Service (KaaS) offerings."),r.createElement("p",{class:"px18"},"Host your Kubernetes clusters on it to simplify your work and ensure consistent and predictable behavior of your applications, no matter the underlying infrastructure."),r.createElement("p",{class:"px18"},"CloudStack provides a Kubernetes Cluster API Provider and also the CloudStack Kubernetes Service - giving a choice of integration techniques."),r.createElement("p",{class:"px18"},"CloudStack is in widespread production usage at many of the world\u2019s largest organizations including many Fortune 500 companies. It includes the entire \u201cstack\u201d of features you need: compute orchestration, Network-as-a-Service, user and account management, a complete and open native API, resource accounting, and a first-class User Interface.")),r.createElement("div",{class:"col-lg-6 margin-second text-center"},r.createElement("a",{href:"https://docs.google.com/forms/d/e/1FAIpQLScPHIRetdt-pxPT62IesXMoQUmhQ8ATGKcYZa507mB9uwzn-Q/viewform",target:"_blank"},r.createElement("img",{src:"/img/CloudStack_survey2.png",class:"img-fluid",alt:"CloudStack survey"})))))),r.createElement("section",{class:"bgr-gray"},r.createElement("div",{class:"container"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col-lg-6"},r.createElement("div",{class:"section-title"},"Explore the Kubernetes Cluster API Provider for Apache CloudStack"),r.createElement("p",{class:"px18 mt-4"},"The Kubernetes Cluster API (CAPI) provider for Apache CloudStack allows Ku- bernetes users to build and manage resources on Apache CloudStack. The pro- vider is available under the Apache 2 open-source license and is managed by the Cloud Native Computing Foundation (CNCF). The Cluster API brings declara- tive, Kubernetes-style APIs to cluster creation, configuration and management. The API itself is shared across multiple cloud providers allowing for true Apache CloudStack hybrid deployments of Kubernetes. It is built atop the lessons learned from previous cluster managers such as kops and kubicorn.")),r.createElement("div",{class:"col-lg-6"},r.createElement("iframe",{width:"100%",height:"315",src:"https://www.youtube.com/embed/NcfVkVT48Kk",title:"Bootstrapping K8S Cluster using CAPC - Apache CloudStack - Kubernetes",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowfullscreen:""}))))),r.createElement("div",{class:"container"},r.createElement("section",{class:"dark-blue p-5 right-banner"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col-lg-7"},r.createElement("h2",{class:"section-title"},"Launching a Kubernetes cluster on Apache CloudStack"),r.createElement("p",{class:"px18 mt-4"},"If users want to launch a Kubernetes cluster on Apache Cloudstack, they can check out the Getting Started Guide to create your first Kubernetes cluster on Apache CloudStack using Cluster API."),r.createElement("p",{class:"px18 mb-4"},"CloudStack hybrid deployments of Kubernetes. It is built atop the lessons learned from pre- vious cluster managers such as kops and kubicorn."))))),r.createElement("section",{class:"m80px"},r.createElement("div",{class:"container"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col-lg-6 order-lg-2"},r.createElement("h2",{class:"section-title mb-4"},"Explore the CloudStack Kubernetes Service"),r.createElement("p",{class:"px18"},"The CloudStack Kubernetes Service (CKS) gives Cloud Service Providers a Container as a Service (CaaS) offering within their existing IaaS environments, with no disruption to user experience or business process."),r.createElement("p",{class:"px18"},"The CloudStack Kubernetes Service is developed as a plug-in to Apache CloudStack. It gives users the ability to create Kubernetes clusters within an existing multi-tenant environment provided by CloudStack. The user experience is seamless: users can now manage container clusters and deploy & manage cloud-native applications all in the same user-interface they use to manage their existing compute, network and storage.")),r.createElement("div",{class:"col-lg-6 text-center"},r.createElement("img",{src:"/img/apache_cloudstack_services.png",alt:"",class:"img-fluid"}))))),r.createElement("section",{class:"light-blue"},r.createElement("div",{class:"container"},r.createElement("div",{class:"row"},r.createElement("div",{class:"col text-center"},r.createElement("div",{class:"section-title mb-4"},"Use Cases"))),r.createElement("div",{class:"row"},r.createElement("div",{class:"col col-lg-9 offset-lg-2"},r.createElement(c.Z,{className:"tabbed-examples tab-box"},r.createElement(o.Z,{value:"self\u2013healing",label:"Self\u2013Healing",default:!0},r.createElement("div",{class:"row p-4"},r.createElement("div",{class:"col-lg-2 text-center"},r.createElement("img",{src:"/img/kubernetes_healing_icon.svg",alt:"Self\u2013Healing",class:"mb-4"})),r.createElement("div",{class:"col-lg-10"},r.createElement("p",{class:"px18"},r.createElement("strong",null,"The ClusterAPI provides self-healing when a Kubernetes node fails, spawning new Instances of the pod on a new node, as native Kubernetes does not have the ability to provision new infrastructure when this occurs.")," Since ClusterAPI manages infrastructure and Kubernetes at the same time, it can throw more resources onto CloudStack when a failure occurs."),r.createElement("p",{class:"px18"},"The MachineHealthCheck controller is used to monitor and certify the health of the control plane of the work nodes, guaranteeing the integrity of the services. When a node fails, or resources are insufficient, or the services are unavailable, a new node is provisioned and added to the cluster. In this case, Kubernetes will reschedule the podes from failed nodes.")))),r.createElement(o.Z,{value:"mcm",label:"Multiple Cluster Management"},r.createElement("div",{class:"row p-4"},r.createElement("div",{class:"col-lg-2 text-center"},r.createElement("img",{src:"/img/multi-cluster_icon.svg",alt:"Multiple Cluster Management",class:"mb-4"})),r.createElement("div",{class:"col-lg-10"},r.createElement("p",{class:"px18"},"When Kubernetes cluster expansion is considered, ClusterAPI provides support for a range of different providers, including Apache CloudStack. This ClusterAPI capability is important for companies that use heterogeneous providers from different service providers."),r.createElement("p",{class:"px18"},"The ClusterAPI abstracts away the different deployment mechanisms that are offered by various providers and infrastructure vendors, allowing operators to fully standardize the entire deployment, regardless of vendor or datacenter or edge. As a result, operators have more control over the entire application environment in a standardized approach to cluster lifecycle management, enabling reuse of existing components across multiple clusters, thus reducing rework.")))),r.createElement(o.Z,{class:"nav-link",value:"scaling",label:"Scaling"},r.createElement("div",{class:"row p-4"},r.createElement("div",{class:"col-lg-2 text-center"},r.createElement("img",{src:"/img/scaling_icon.svg",alt:"Scaling",class:"mb-4"})),r.createElement("div",{class:"col-lg-10"},r.createElement("p",{class:"px18"},"Application workload is often unpredictable, and to scale up and down Kubernetes clusters, the ClusterAPI facilitates scaling when workloads change. The main task of the ClusterAPI is to ensure that there is enough capacity to meet the current demand for access to the application, also guaranteeing redundancy so that, if a control plane fails, another can attend."),r.createElement("p",{class:"px18"},"With the Kubeadm Control Plane provider (KCP), the operator can declaratively expand the Kubernetes control plane, thus managing availability and ensuring that the control nodes are organized, minimizing failures during the cluster lifecycle."),r.createElement("p",{class:"px18"},"For worker nodes, just specify the number of nodes; the clusterAPI will provision the new CloudStack Instances and add them to the cluster. When using the Cluster Autoscaler, the number of worker nodes is automatically adjusted to the number of pods needed, thus meeting the access demand. Metrics can refer to application workload or average CPU usage for cluster tuning.")))))))))),r.createElement(s.default,null))}}}]);