62 lines
70 KiB
HTML
62 lines
70 KiB
HTML
<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Documentation for 3Engines services and products"><meta name=author content=3Engines><link rel=canonical href=https://docs.3Engines.com/kubernetes/How-to-install-Rancher-RKE2-Kubernetes-on-3Engines-Cloud-cloud.html.html><link rel=icon href=../assets/favicon.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.6.14"><title>How to install Rancher RKE2 Kubernetes on 3Engines Cloud🔗 - 3Engines Documentation</title><link rel=stylesheet href=../assets/stylesheets/main.342714a4.min.css><link rel=stylesheet href=../assets/stylesheets/palette.06af60db.min.css><script src=https://unpkg.com/iframe-worker/shim></script><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../stylesheets/extra.css><script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <link href="../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>
|
||
html.glightbox-open { overflow: initial; height: 100%; }
|
||
.gslide-title { margin-top: 0px; user-select: text; }
|
||
.gslide-desc { color: #666; user-select: text; }
|
||
.gslide-image img { background: white; }
|
||
.gscrollbar-fixer { padding-right: 15px; }
|
||
.gdesc-inner { font-size: 0.75rem; }
|
||
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);}
|
||
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);}
|
||
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}</style> <script src="../assets/javascripts/glightbox.min.js"></script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=blue-grey data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#how-to-install-rancher-rke2-kubernetes-on-3engines-cloud class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../index.html title="3Engines Documentation" class="md-header__button md-logo" aria-label="3Engines Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> 3Engines Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> How to install Rancher RKE2 Kubernetes on 3Engines Cloud🔗 </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=blue-grey data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../index.html class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../cloud/cloud.html.html class=md-tabs__link> Cloud </a> </li> <li class=md-tabs__item> <a href=../datavolume/datavolume.html.html class=md-tabs__link> Data Volume </a> </li> <li class=md-tabs__item> <a href=../networking/networking.html.html class=md-tabs__link> Networking </a> </li> <li class=md-tabs__item> <a href=../s3/s3.html.html class=md-tabs__link> S3 </a> </li> <li class=md-tabs__item> <a href=../windows/windows.html.html class=md-tabs__link> Windows </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../index.html title="3Engines Documentation" class="md-nav__button md-logo" aria-label="3Engines Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> 3Engines Documentation </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../index.html class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex=0> <span class=md-ellipsis> Cloud </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Cloud </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../cloud/cloud.html.html class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../cloud/Dashboard-Overview-Project-Quotas-And-Flavors-Limits-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Dashboard Overview – Project Quotas And Flavors Limits on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-access-the-VM-from-OpenStack-console-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to access the VM from OpenStack console on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-clone-existing-and-configured-VMs-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to clone existing and configured VMs on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-fix-unresponsive-console-issue-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to fix unresponsive console issue on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-generate-ec2-credentials-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to generate and manage EC2 credentials on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-generate-or-use-Application-Credentials-via-CLI-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to generate or use Application Credentials via CLI on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-use-GUI-in-Linux-VM-on-3Engines-Cloud-and-access-it-from-local-Linux-computer.html.html class=md-nav__link> <span class=md-ellipsis> How to Use GUI in Linux VM on 3Engines Cloud and access it From Local Linux Computer </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-To-Create-a-New-Linux-VM-With-NVIDIA-Virtual-GPU-in-the-OpenStack-Dashboard-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How To Create a New Linux VM With NVIDIA Virtual GPU in the OpenStack Dashboard Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-use-Docker-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to install and use Docker on Ubuntu 24.04 </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-use-Security-Groups-in-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to use Security Groups in Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-key-pair-in-OpenStack-Dashboard-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create key pair in OpenStack Dashboard on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-new-Linux-VM-in-OpenStack-Dashboard-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create new Linux VM in OpenStack Dashboard Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-install-Python-virtualenv-or-virtualenvwrapper-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to install Python virtualenv or virtualenvwrapper on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-start-a-VM-from-a-snapshot-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to start a VM from a snapshot on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/Status-Power-State-and-dependences-in-billing-of-instances-VMs-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Status Power State and dependencies in billing of instance VMs on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-upload-your-custom-image-using-OpenStack-CLI-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to upload your custom image using OpenStack CLI on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/VM-created-with-option-Create-New-Volume-No-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> VM created with option Create New Volume No on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/VM-created-with-option-Create-New-Volume-Yes-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> VM created with option Create New Volume Yes on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/What-is-an-OpenStack-domain-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> What is an OpenStack domain on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/What-is-an-OpenStack-project-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> What is an OpenStack project on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-a-Linux-VM-and-access-it-from-Windows-desktop-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create a Linux VM and access it from Windows desktop on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-a-Linux-VM-and-access-it-from-Linux-command-line-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create a Linux VM and access it from Linux command line on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/DNS-as-a-Service-on-3Engines-Cloud-Hosting.html.html class=md-nav__link> <span class=md-ellipsis> DNS as a Service on 3Engines Cloud Hosting </span> </a> </li> <li class=md-nav__item> <a href=../cloud/What-Image-Formats-are-available-in-OpenStack-3Engines-Cloud-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> What Image Formats are Available in OpenStack 3Engines Cloud cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-upload-custom-image-to-3Engines-Cloud-cloud-using-OpenStack-Horizon-dashboard.html.html class=md-nav__link> <span class=md-ellipsis> How to upload custom image to 3Engines Cloud cloud using OpenStack Horizon dashboard </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-Windows-VM-on-OpenStack-Horizon-and-access-it-via-web-console-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create Windows VM on OpenStack Horizon and access it via web console on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-transfer-volumes-between-domains-and-projects-using-Horizon-dashboard-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to transfer volumes between domains and projects using Horizon dashboard on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/Spot-instances-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Spot instances on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-instance-snapshot-using-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create instance snapshot using Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-start-a-VM-from-instance-snapshot-using-Horizon-dashboard-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to start a VM from instance snapshot using Horizon dashboard on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/How-to-create-a-VM-using-the-OpenStack-CLI-client-on-3Engines-Cloud-cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create a VM using the OpenStack CLI client on 3Engines Cloud cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/OpenStack-user-roles-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> OpenStack User Roles on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/Resizing-a-virtual-machine-using-OpenStack-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Resizing a virtual machine using OpenStack Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../cloud/Block-storage-and-object-storage-performance-limits-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Block storage and object storage performance limits on 3Engines Cloud </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Data Volume </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Data Volume </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../datavolume/datavolume.html.html class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-attach-a-volume-to-VM-less-than-2TB-on-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to attach a volume to VM less than 2TB on Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-attach-a-volume-to-VM-more-than-2TB-on-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to attach a volume to VM more than 2TB on Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/Ephemeral-vs-Persistent-storage-option-Create-New-Volume-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Ephemeral vs Persistent storage option Create New Volume on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-export-a-volume-over-NFS-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to export a volume over NFS on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-export-a-volume-over-NFS-outside-of-a-project-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to export a volume over NFS outside of a project on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-extend-the-volume-in-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to extend the volume in Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-mount-object-storage-in-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to mount object storage in Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-move-data-volume-between-two-VMs-using-OpenStack-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to move data volume between two VMs using OpenStack Horizon on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-many-objects-can-I-put-into-Object-Storage-container-bucket-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How many objects can I put into Object Storage container bucket on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-create-volume-Snapshot-and-attach-as-Volume-on-Linux-or-Windows-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create volume Snapshot and attach as Volume on Linux or Windows on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/Volume-snapshot-inheritance-and-its-consequences-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Volume snapshot inheritance and its consequences on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-To-Create-Backup-Of-Your-Volume-From-Windows-Machine-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Create Backup of Your Volume From Windows Machine on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-To-Attach-Volume-To-Windows-VM-On-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How To Attach Volume To Windows VM On 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-create-or-delete-volume-snapshot-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create or delete volume snapshot on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/How-to-restore-volume-from-snapshot-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to restore volume from snapshot on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../datavolume/Bootable-versus-non-bootable-volumes-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Bootable versus non-bootable volumes on 3Engines Cloud </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex=0> <span class=md-ellipsis> Networking </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=false> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Networking </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../networking/networking.html.html class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-can-I-access-my-VMs-using-names-instead-of-IP-addresses-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How can I access my VMs using names instead of IP addresses on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-Add-or-Remove-Floating-IPs-to-your-VM-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Add or Remove Floating IP’s to your VM on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/Cannot-access-VM-with-SSH-or-PING-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Cannot access VM with SSH or PING on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/Cannot-ping-VM-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Cannot ping VM on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-connect-to-your-virtual-machine-via-SSH-in-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to connect to your virtual machine via SSH in Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-create-a-network-with-router-in-Horizon-Dashboard-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to create a network with router in Horizon Dashboard on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-can-I-open-new-ports-port-80-for-http-for-my-service-or-instance-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How can I open new ports for http for my service or instance on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/Generating-a-SSH-keypair-in-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Generating an SSH keypair in Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-add-SSH-key-from-Horizon-web-console-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to add SSH key from Horizon web console on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-is-my-VM-visible-in-the-internet-with-no-Floating-IP-attached-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How is my VM visible in the internet with no Floating IP attached on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-run-and-configure-Firewall-as-a-service-and-VPN-as-a-service-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to run and configure Firewall as a service and VPN as a service on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../networking/How-to-Import-SSH-Public-Key-to-OpenStack-Horizon-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to import SSH public key to OpenStack Horizon on 3Engines Cloud </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> S3 </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> S3 </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../s3/s3.html.html class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-delete-large-S3-bucket-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Delete Large S3 Bucket on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-mount-object-storage-container-as-a-file-system-in-Linux-using-s3fs-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Mount Object Storage Container as a File System in Linux Using s3fs on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/Bucket-sharing-using-s3-bucket-policy-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Bucket sharing using s3 bucket policy on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-use-Object-Storage-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to use Object Storage on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-access-private-object-storage-using-S3cmd-or-boto3-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to access private object storage using S3cmd or boto3 on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-To-Install-boto3-In-Windows-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Install Boto3 in Windows on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/Server-Side-Encryption-with-Customer-Managed-Keys-SSE-C-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Server-Side Encryption with Customer-Managed Keys (SSE-C) on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-mount-object-storage-container-from-3Engines-Cloud-as-file-system-on-local-Windows-computer.html.html class=md-nav__link> <span class=md-ellipsis> How to mount object storage container from 3Engines Cloud as file system on local Windows computer </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-install-s3cmd-on-Linux-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to install s3cmd on Linux on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-access-object-storage-from-3Engines-Cloud-using-boto3.html.html class=md-nav__link> <span class=md-ellipsis> How to access object storage from 3Engines Cloud using boto3 </span> </a> </li> <li class=md-nav__item> <a href=../s3/How-to-access-object-storage-from-3Engines-Cloud-using-s3cmd.html.html class=md-nav__link> <span class=md-ellipsis> How to access object storage from 3Engines Cloud using s3cmd </span> </a> </li> <li class=md-nav__item> <a href=../s3/Configuration-files-for-s3cmd-command-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Configuration files for s3cmd command on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../s3/S3-bucket-object-versioning-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> S3 bucket object versioning on 3Engines Cloud </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Windows </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Windows </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../windows/windows.html.html class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../windows/How-to-access-a-VM-from-Windows-PuTTY-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to access a VM from Windows PuTTY on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../windows/Connecting-to-a-Windows-VM-via-RDP-through-a-Linux-bastion-host-port-forwarding-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Connecting to a Windows VM via RDP through a Linux bastion host port forwarding on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../windows/How-to-connect-to-a-virtual-machine-via-SSH-from-Windows-10-Command-Prompt-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to connect to a virtual machine via SSH from Windows 10 Command Prompt on 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../windows/How-To-Create-SSH-Key-Pair-In-Windows-On-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Create SSH Key Pair in Windows 10 On 3Engines Cloud </span> </a> </li> <li class=md-nav__item> <a href=../windows/Can-I-change-my-password-through-RDP-on-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> Can I change my password through RDP on 3Engines Cloud? </span> </a> </li> <li class=md-nav__item> <a href=../windows/How-To-Create-SSH-Key-Pair-In-Windows-11-On-3Engines-Cloud.html.html class=md-nav__link> <span class=md-ellipsis> How to Create SSH Key Pair in Windows 11 On 3Engines Cloud </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="On this page"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> On this page </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-we-are-going-to-cover class=md-nav__link> <span class=md-ellipsis> What We Are Going To Cover🔗 </span> </a> </li> <li class=md-nav__item> <a href=#prerequisites class=md-nav__link> <span class=md-ellipsis> Prerequisites🔗 </span> </a> </li> <li class=md-nav__item> <a href=#step-1-perform-the-preliminary-setup class=md-nav__link> <span class=md-ellipsis> Step 1 Perform the preliminary setup🔗 </span> </a> <nav class=md-nav aria-label="Step 1 Perform the preliminary setup🔗"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#preparation-step-1-create-new-project class=md-nav__link> <span class=md-ellipsis> Preparation step 1 Create new project🔗 </span> </a> </li> <li class=md-nav__item> <a href=#preparation-step-2-create-application-credentials class=md-nav__link> <span class=md-ellipsis> Preparation step 2 Create application credentials🔗 </span> </a> </li> <li class=md-nav__item> <a href=#preparation-step-3-keypair-operational class=md-nav__link> <span class=md-ellipsis> Preparation step 3 Keypair operational🔗 </span> </a> </li> <li class=md-nav__item> <a href=#preparation-step-4-authenticate-to-the-newly-formed-project class=md-nav__link> <span class=md-ellipsis> Preparation step 4 Authenticate to the newly formed project🔗 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-2-use-terraform-configuration-for-rke2-from-3enginess-github-repository class=md-nav__link> <span class=md-ellipsis> Step 2 Use Terraform configuration for RKE2 from 3Engines’s GitHub repository🔗 </span> </a> </li> <li class=md-nav__item> <a href=#step-3-provision-an-rke2-cluster class=md-nav__link> <span class=md-ellipsis> Step 3 Provision an RKE2 cluster🔗 </span> </a> <nav class=md-nav aria-label="Step 3 Provision an RKE2 cluster🔗"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#enter-data-in-file-terraformtfvars class=md-nav__link> <span class=md-ellipsis> Enter data in file terraform.tfvars🔗 </span> </a> </li> <li class=md-nav__item> <a href=#run-terraform-to-provision-rke2-cluster class=md-nav__link> <span class=md-ellipsis> Run Terraform to provision RKE2 cluster🔗 </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#step-4-demonstrate-cloud-native-integration-covered-by-the-repo class=md-nav__link> <span class=md-ellipsis> Step 4 Demonstrate cloud-native integration covered by the repo🔗 </span> </a> </li> <li class=md-nav__item> <a href=#implementation-details class=md-nav__link> <span class=md-ellipsis> Implementation details🔗 </span> </a> </li> <li class=md-nav__item> <a href=#further-customization class=md-nav__link> <span class=md-ellipsis> Further customization🔗 </span> </a> </li> <li class=md-nav__item> <a href=#what-to-do-next class=md-nav__link> <span class=md-ellipsis> What To Do Next🔗 </span> </a> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=how-to-install-rancher-rke2-kubernetes-on-3engines-cloud>How to install Rancher RKE2 Kubernetes on 3Engines Cloud<a href=#how-to-install-rancher-rke2-kubernetes-on-brand-name title="Permalink to this headline">🔗</a><a class=headerlink href=#how-to-install-rancher-rke2-kubernetes-on-3engines-cloud title="Permanent link">¶</a></h1> <p><a href=https://docs.rke2.io/ >RKE2</a> - Rancher Kubernetes Engine version 2 - is a Kubernetes distribution provided by SUSE. Running a self-managed RKE2 cluster in 3Engines Cloud cloud is a viable option, especially for those seeking smooth integration with Rancher platform and customization options.</p> <p>An RKE2 cluster can be provisioned from Rancher GUI. However, in this article we use Terraform, which enables streamlined, automated cluster creation. We also use OpenStack Cloud Controller Manager (CCM) to integrate RKE2 cluster with the wider OpenStack environment. Using the customized version of CCM enables us to take advantage of 3Engines Cloud cloud-native features. The end result is</p> <blockquote> <ul> <li>a provisioned RKE2 cluster</li> <li>running under OpenStack, with</li> <li>an integrated OpenStack Cloud Controller Manager.</li> </ul> </blockquote> <p>We also illustrate the coding techniques used, in case you want to enhance the RKE2 implementation further.</p> <h2 id=what-we-are-going-to-cover>What We Are Going To Cover<a href=#what-we-are-going-to-cover title="Permalink to this headline">🔗</a><a class=headerlink href=#what-we-are-going-to-cover title="Permanent link">¶</a></h2> <blockquote> <ul> <li>Perform the preliminary setup</li> </ul> <blockquote> <ul> <li>Create new project</li> <li>Create application credentials</li> <li>Have keypair operational</li> <li>Authenticate to the newly formed project</li> </ul> </blockquote> <ul> <li>Use Terraform configuration for RKE2 from 3Engines’s GitHub repository</li> <li>Provision an RKE2 cluster</li> <li>Demonstrate the incorporated cloud-native load-balancing</li> <li>Implementation details</li> <li>Further customization</li> </ul> </blockquote> <p>The code is tested on Ubuntu 22.04.</p> <h2 id=prerequisites>Prerequisites<a href=#prerequisites title="Permalink to this headline">🔗</a><a class=headerlink href=#prerequisites title="Permanent link">¶</a></h2> <p>No. 1 <strong>Account</strong></p> <p>You need a 3Engines Cloud hosting account with access to the Horizon interface: <a href=https://horizon.3Engines.com>https://horizon.3Engines.com</a>.</p> <p>No. 2 <strong>Terraform available on your local command line</strong></p> <p>See <a href=../openstackdev/Generating-and-authorizing-Terraform-using-Keycloak-user-on-3Engines-Cloud.html.html>Generating and authorizing Terraform using Keycloak user on 3Engines Cloud</a></p> <p>No. 3 <strong>Python virtual environment sourced</strong></p> <p><a href=../cloud/How-to-install-Python-virtualenv-or-virtualenvwrapper-on-3Engines-Cloud.html.html>How to install Python virtualenv or virtualenvwrapper on 3Engines Cloud</a></p> <p>No. 4 <strong>OpenStack CLI installed locally</strong></p> <p>When installed, you will have access to <strong>openstack</strong> command and will be able to communicate with the OpenStack cloud:</p> <p><a href=../accountmanagement/How-to-activate-OpenStack-CLI-access-to-3Engines-Cloud-cloud-using-one-or-two-factor-authentication.html.html>How to activate OpenStack CLI access to 3Engines Cloud cloud using one- or two-factor authentication</a></p> <p>No. 5 <strong>kubectl tool installed locally</strong></p> <p>Standard types of <strong>kubectl</strong> installation are described on <a href=https://kubernetes.io/docs/tasks/tools/ >Install Tools page</a> of the official Kubernetes site.</p> <p>No. 6 <strong>Available key pair in OpenStack</strong></p> <p><a href=../cloud/How-to-create-key-pair-in-OpenStack-Dashboard-on-3Engines-Cloud.html.html>How to create key pair in OpenStack Dashboard on 3Engines Cloud</a>.</p> <p>No. 7 <strong>Application credentials</strong></p> <p>The following article describes how to create and use application credentials, using CLI:</p> <p><a href=../cloud/How-to-generate-or-use-Application-Credentials-via-CLI-on-3Engines-Cloud.html.html>How to generate or use Application Credentials via CLI on 3Engines Cloud</a></p> <p>In this article, we shall create application credentials through Horizon but with a specific selection of user roles.</p> <p>No. 8 <strong>Projects, roles, users and groups</strong></p> <p>Option <strong>Identity</strong> lists available projects, roles, users and groups. See <a href=../cloud/What-is-an-OpenStack-project-on-3Engines-Cloud.html.html>What is an OpenStack project on 3Engines Cloud</a></p> <p>No. 9 <strong>Experience with Kubernetes and Helm</strong></p> <p>To follow up on this article, you should know your way around Kubernetes in general. Having the actual experience of using it on 3Engines Cloud cloud, would be even better. For a series of article on Kubernetes, see <a href=kubernetes.html.html>KUBERNETES</a>.</p> <p>To perform the installation required in this article, one of the steps will be to create Helm CRD and use it. This article shows the basics of using Helm <a href=Deploying-Helm-Charts-on-Magnum-Kubernetes-Clusters-on-3Engines-Cloud-Cloud.html.html>Deploying Helm Charts on Magnum Kubernetes Clusters on 3Engines Cloud Cloud</a>.</p> <p>No. 10 <strong>Cloud Controller Manager</strong></p> <p>Within a general Kubernetes environment, <a href=https://kubernetes.io/docs/concepts/architecture/cloud-controller/ >the Cloud Controller Manager (CCM)</a> allows Kubernetes to integrate with cloud provider APIs. It abstracts cloud-specific logic and manages and synchronizes resources between Kubernetes and the underlying cloud infrastructure. Also, it provides controllers for Nodes, Routes, Services and Volumes.</p> <p>Under OpenStack, CCM integrates with OpenStack APIs. The code used here is from a concrete repository for Cloud Controller Manager – <a href=https://github.com/kubernetes/cloud-provider-openstack>https://github.com/kubernetes/cloud-provider-openstack</a> It implements the above mentioned (as well as) other OpenStack-Kubernetes integrations.</p> <p>No. 11 <strong>rke2-terraform repository</strong></p> <p>You will need to download the following repository</p> <blockquote> <p><a href=https://github.com/3Engines/K8s-samples/tree/main/rke2-terraform>https://github.com/3Engines/K8s-samples/tree/main/rke2-terraform</a></p> </blockquote> <p>in order to install install Terraform manifests for provisioning of RKE2 on 3Engines Cloud using Terraform.</p> <p>No. 12 <strong>Customize the cloud configuration for Terraform</strong></p> <p>One of the files downloaded from the above link will be <strong>variables.tf</strong>. It contains definitions of region, cluster name and many other variables. The default value for region is <strong>WAW3-2</strong> so customize it for your own cloud.</p> <p><a class=glightbox href=../_images/customize_the_cloud.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=customize_the_cloud.png src=../_images/customize_the_cloud.png></a></p> <h2 id=step-1-perform-the-preliminary-setup>Step 1 Perform the preliminary setup<a href=#step-1-perform-the-preliminary-setup title="Permalink to this headline">🔗</a><a class=headerlink href=#step-1-perform-the-preliminary-setup title="Permanent link">¶</a></h2> <p>Our objective is to create a Kubernetes cluster, which runs in the cloud environment. RKE2 software packages will be installed on cloud virtual machines playing roles of Kubernetes master and worker nodes. Also, several other OpenStack resources will be created along.</p> <p>As part of the preliminary setup to provision these resources we will:</p> <blockquote> <ul> <li>Create a dedicated OpenStack project to isolate all resources dedicated to the cluster</li> <li>Create application credentials</li> <li>Ensure a key pair is enabled for the project</li> <li>Source locally the RC file for this project</li> </ul> </blockquote> <p>We here provide the instruction to install the project, credentials, key pair and source locally the RC file.</p> <h3 id=preparation-step-1-create-new-project>Preparation step 1 Create new project<a href=#preparation-step-1-create-new-project title="Permalink to this headline">🔗</a><a class=headerlink href=#preparation-step-1-create-new-project title="Permanent link">¶</a></h3> <p>First step is to create a new project use Horizon UI. Click on Identity → Projects. Fill in the name of the project on the first tab:</p> <p><a class=glightbox href=../_images/image-2024-7-29_9-56-44.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-29_9-56-44.png src=../_images/image-2024-7-29_9-56-44.png></a></p> <p>In the second tab, ensure that the user you operate with is added as a project member with: “member”, “load-balancer_member” and “creator” roles.</p> <p><a class=glightbox href=../_images/image-2024-7-29_9-54-45.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-29_9-54-45.png src=../_images/image-2024-7-29_9-54-45.png></a></p> <p>Then click on “Create Project”. Once the project is created, switch to the context of this project from top left menu:</p> <p><a class=glightbox href=../_images/image-2024-7-23_16-5-28.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-23_16-5-28.png src=../_images/image-2024-7-23_16-5-28.png></a></p> <h3 id=preparation-step-2-create-application-credentials>Preparation step 2 Create application credentials<a href=#preparation-step-2-create-application-credentials title="Permalink to this headline">🔗</a><a class=headerlink href=#preparation-step-2-create-application-credentials title="Permanent link">¶</a></h3> <p>The next step is to create an application credential that will be used to authenticate the OpenStack Cloud Controller Manager (used for automated load balancer provisioning). To create one, go to menu <strong>Identity</strong> → <strong>Application Credentials</strong>. Fill in the form as per the below example, passing all available roles (“member”, “load-balancer_member”, “creator”, “reader”) roles to this credential. Set the expiry date to a date in the future.</p> <p><a class=glightbox href=../_images/image-2024-7-29_10-2-57.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-29_10-2-57.png src=../_images/image-2024-7-29_10-2-57.png></a></p> <p>After clicking on <strong>Create Application Credential</strong>, copy both application ID and credential secret in a safe place. The window will be only displayed once, so the best solution is to download files <strong>openrc</strong> and <strong>clouds.yaml</strong>, which will both contain the required values.</p> <p><a class=glightbox href=../_images/credentials_first_time.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=credentials_first_time.png src=../_images/credentials_first_time.png></a></p> <p>Prerequisite No. 7 contains a complete guide to application credentials.</p> <h3 id=preparation-step-3-keypair-operational>Preparation step 3 Keypair operational<a href=#preparation-step-3-keypair-operational title="Permalink to this headline">🔗</a><a class=headerlink href=#preparation-step-3-keypair-operational title="Permanent link">¶</a></h3> <p>Before continuing, ensure you have a keypair available. If you already had a keypair in your main project, this keypair will be available also for the newly created project. If you do not have one yet, create it from the left menu <strong>Project</strong> → <strong>Compute</strong> → <strong>Key Pairs</strong>. For additional details, visit Prerequisite No. 6.</p> <h3 id=preparation-step-4-authenticate-to-the-newly-formed-project>Preparation step 4 Authenticate to the newly formed project<a href=#preparation-step-4-authenticate-to-the-newly-formed-project title="Permalink to this headline">🔗</a><a class=headerlink href=#preparation-step-4-authenticate-to-the-newly-formed-project title="Permanent link">¶</a></h3> <p>Lastly, download the RC file corresponding to the new project from Horizon GUI, then source this file in your local Linux terminal. See Prerequisite No. 4.</p> <h2 id=step-2-use-terraform-configuration-for-rke2-from-3enginess-github-repository>Step 2 Use Terraform configuration for RKE2 from 3Engines’s GitHub repository<a href=#step-2-use-terraform-configuration-for-rke2-from-3Engines-s-github-repository title="Permalink to this headline">🔗</a><a class=headerlink href=#step-2-use-terraform-configuration-for-rke2-from-3enginess-github-repository title="Permanent link">¶</a></h2> <p>We added folder <strong>rke2-terraform</strong> to 3Engines’s <a href=https://github.com/3Engines/K8s-samples/tree/main/rke2-terraform>K8s-samples GitHub repository</a>, from Prerequisite No. 11. This project includes configuration files to provision an RKE2 cluster on 3Engines clouds and can be used as a starter pack for further customizations to your specific requirements.</p> <p><a class=glightbox href=../_images/image-2024-7-26_12-36-54.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-26_12-36-54.png src=../_images/image-2024-7-26_12-36-54.png></a></p> <p>In this section, we briefly introduce this repository, explaining the content and purpose of the specific configuration files. These files are the actual commands to Terraform and are defined in its standard files, with the extension <strong>.tf</strong>.</p> <dl> <dt>variables.tf</dt> <dd>Contains key variables that specify configuration of our cluster e.g. <strong>number of worker nodes</strong>, <strong>cloud region</strong> where the cluster will be placed, <strong>name of the cluster</strong>. Most of these variables have their default values set and you can modify these defaults directly in the file. The variables with no defaults (secret, sensitive data) should have their values provided separately, via the use of <strong>tfvars</strong> file, which is explained in the next section.</dd> <dt>providers.tf</dt> <dd>Used for declaring and configuring Terraform providers. In our case, we only use OpenStack provider, which is provisioning cloud resources that form the cluster.</dd> <dt>main.tf</dt> <dd>Contains declaration of resources to be created by Terraform. Several OpenStack resources are required to form a cluster e.g. a Network, Subnet, Router, Virtual Machines and others. Review the file for details and customize to your preference.</dd> <dt>security-groups.tf</dt> <dd>Contains declaration of security groups and security group rules used in OpenStack to open specific ports on virtual machines forming the cluster. Thus, the communication from selected sources gets enabled on each VM. Modify the file to customize.</dd> <dt>cloud-init-masters.yml.tpl</dt> <dd>and</dd> <dt>cloud-init-workers.yml.tpl</dt> <dd> <p>These two are template files used to create <em>cloud-init</em> files, which in turn are used for bootstrapping the created virtual machines:</p> <blockquote> <ul> <li>ensuring certain packages are installed on these VMs,</li> <li>creating and running scripts on them etc.</li> </ul> </blockquote> <p>The content of these templates gets populated based on the user-data section in virtual machine declarations in <strong>main.conf</strong>.</p> <p>One of the primary functions of each <em>cloud-init</em> file is to install rke2 on both master and worker nodes.</p> </dd> </dl> <h2 id=step-3-provision-an-rke2-cluster>Step 3 Provision an RKE2 cluster<a href=#step-3-provision-an-rke2-cluster title="Permalink to this headline">🔗</a><a class=headerlink href=#step-3-provision-an-rke2-cluster title="Permanent link">¶</a></h2> <p>Let’s provision an RKE2 Kubernetes cluster now. This will consist of the following steps:</p> <blockquote> <ul> <li>Clone the github repository</li> <li>Adjust the defaults in <strong>variables.tf</strong></li> <li>Create file <strong>terraform.tfvars</strong>, with secrets</li> <li>Initialize, plan and apply the Terraform configurations</li> <li>Use the retrieved <strong>kubeconfig</strong> to access the cluster with <strong>kubectl</strong></li> </ul> </blockquote> <p>The first step is to clone the github repository. We clone the entire repo but just leave the <strong>rke2-terraform</strong> folder with the below commands:</p> <div class=highlight><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>git clone https://github.com/3Engines/K8s-samples
|
||
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>mkdir ~/rke2-terraform
|
||
</span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a>mv ~/K8s-samples/rke2-terraform/* ~/rke2-terraform
|
||
</span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>rm K8s-samples/ -rf
|
||
</span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a>cd rke2-terraform
|
||
</span></code></pre></div> <p>As mentioned in Prerequisite No. 12, inspect and eventually change the value of the default settings in <strong>variables.tf</strong> e.g. change the name of the cluster, cloud region or virtual machine settings.</p> <p>In our case, we stick to the defaults.</p> <p>Note</p> <p>Highly available control plane is currently not covered by this repository. Also, setting number of master nodes to a value other than 1 is <strong>not</strong> supported.</p> <h3 id=enter-data-in-file-terraformtfvars>Enter data in file terraform.tfvars<a href=#enter-data-in-file-terraform-tfvars title="Permalink to this headline">🔗</a><a class=headerlink href=#enter-data-in-file-terraformtfvars title="Permanent link">¶</a></h3> <p>The next step is to create file <strong>terraform.tfvars</strong>, with the following contents:</p> <div class=highlight><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a>ssh_keypair_name = "your_ssh_keypair_name"
|
||
</span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a>project_id = "your_project_id"
|
||
</span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a>public_key = "your_public_key"
|
||
</span><span id=__span-1-4><a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a>application_credential_id = "your_app_credential_id"
|
||
</span><span id=__span-1-5><a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a>application_credential_secret = "your_app_credential_secret"
|
||
</span></code></pre></div> <dl> <dt>Get ssh_keypair_name</dt> <dd>Choose one from the list shown after <strong>Compute</strong> -> <strong>Key Pairs</strong>.</dd> <dt>Get project_id</dt> <dd>To get <strong>project_id</strong>, the easiest way is to list all of the projects with <strong>Identity</strong> -> <strong>Projects</strong>, click on project name and read the <strong>ID</strong>.</dd> <dt>Get public_key</dt> <dd>To get <strong>public_key</strong>, execute <strong>Compute</strong> -> <strong>Key Pairs</strong> and click on the name of the keypair name you have entered for variable <strong>ssh_keypair_name</strong>.</dd> <dt>Get application_credential_id</dt> <dd>Get application credential <strong>ID</strong> from one of the files <strong>openrc</strong> or <strong>clouds.yaml</strong>.</dd> <dt>Get application_credential_secret</dt> <dd>The same, only for secret.</dd> </dl> <h3 id=run-terraform-to-provision-rke2-cluster>Run Terraform to provision RKE2 cluster<a href=#run-terraform-to-provision-rke2-cluster title="Permalink to this headline">🔗</a><a class=headerlink href=#run-terraform-to-provision-rke2-cluster title="Permanent link">¶</a></h3> <p>This completes the set up part. We can now run the standard Terraform commands - <strong>init</strong>, <strong>plan</strong> and <strong>apply</strong> - to create our RKE2 cluster. The commands should be executed in the order provided below. Type <strong>yes</strong> when required to reconfirm the steps planned by Terraform.</p> <div class=highlight><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>terraform init
|
||
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>terraform plan
|
||
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a>terraform apply
|
||
</span></code></pre></div> <p>The provisioning will take a few minutes (apx. 5-10 minutes for a small cluster). Logs will be printed to console confirming creation of each resource. Here is a sample final output from the <strong>terraform apply</strong> command:</p> <p><a class=glightbox href=../_images/image-2024-7-24_13-56-3.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_13-56-3.png src=../_images/image-2024-7-24_13-56-3.png></a></p> <p>As a part of the provisioning process, the <em>kubeconfig</em> file <strong>kubeconfig.yaml</strong> will be copied to your local working directory. Export the environment variable pointing your local kubectl installation to this <em>kubeconfig</em> location (replace the path in the sample command below):</p> <div class=highlight><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a>export KUBECONFIG=/path_to_your_kubeconfig_file/kubeconfig.yaml
|
||
</span></code></pre></div> <p>Then check whether the cluster is available with:</p> <div class=highlight><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a>kubectl get nodes
|
||
</span></code></pre></div> <p>We can see that the cluster is provisioned correctly in our case, with both master and worker nodes being <strong>Ready</strong>:</p> <p><a class=glightbox href=../_images/image-2024-7-24_14-9-18.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_14-9-18.png src=../_images/image-2024-7-24_14-9-18.png></a></p> <h2 id=step-4-demonstrate-cloud-native-integration-covered-by-the-repo>Step 4 Demonstrate cloud-native integration covered by the repo<a href=#step-4-demonstrate-cloud-native-integration-covered-by-the-repo title="Permalink to this headline">🔗</a><a class=headerlink href=#step-4-demonstrate-cloud-native-integration-covered-by-the-repo title="Permanent link">¶</a></h2> <p>We can verify the automated provisioning of load balancers and public Floating IP by exposing a service of type LoadBalancer. The following <strong>kubectl</strong> commands will deploy and expose an <strong>nginx</strong> server in our RKE2 cluster’s default namespace:</p> <div class=highlight><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a>kubectl create deployment nginx-deployment --image=nginx:latest
|
||
</span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a>kubectl expose deployment nginx-deployment --type=LoadBalancer --port=80 --target-port=80
|
||
</span></code></pre></div> <p>It takes around 2-3 minutes for the FIP and LoadBalancer to be provisioned. When you run this command:</p> <div class=highlight><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a>kubectl get services
|
||
</span></code></pre></div> <p>After this time, you should see the result similar to the one below, where EXTERNAL-IP got properly populated:</p> <p><a class=glightbox href=../_images/image-2024-7-24_15-20-4.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_15-20-4.png src=../_images/image-2024-7-24_15-20-4.png></a></p> <p>Similarly, you could verify the presence of the created load balancer in the Horizon interface via the left menu: <strong>Project</strong> → <strong>Network</strong> → <strong>LoadBalancers</strong></p> <p><a class=glightbox href=../_images/image-2024-7-24_15-27-55.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_15-27-55.png src=../_images/image-2024-7-24_15-27-55.png></a></p> <p>and <strong>Project</strong> → <strong>Network</strong> → <strong>Floating IPs</strong>:</p> <p><a class=glightbox href=../_images/image-2024-7-24_15-29-17.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_15-29-17.png src=../_images/image-2024-7-24_15-29-17.png></a></p> <p>Ultimately, we can check the service is running as a public service in our browser with the assigned floating IP:</p> <p><a class=glightbox href=../_images/image-2024-7-24_15-30-26.png data-type=image data-width=100% data-height=auto data-desc-position=bottom><img alt=image-2024-7-24_15-30-26.png src=../_images/image-2024-7-24_15-30-26.png></a></p> <h2 id=implementation-details>Implementation details<a href=#implementation-details title="Permalink to this headline">🔗</a><a class=headerlink href=#implementation-details title="Permanent link">¶</a></h2> <p>Explaining all of the techniques that went into production of RKE2 repository from Prerequisite No. 11 is out of scope of this article. However, here is an illustration of how at least one feature was implemented.</p> <p>Let us examine the <strong>cloud-init-masters.yml.tpl</strong> file, concretely, the part between line numbers 53 and 79:</p> <div class=highlight><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1 href=#__codelineno-7-1></a>- path: /var/lib/rancher/rke2/server/manifests/rke2-openstack-cloud-controller-manager.yaml
|
||
</span><span id=__span-7-2><a id=__codelineno-7-2 name=__codelineno-7-2 href=#__codelineno-7-2></a> permissions: "0600"
|
||
</span><span id=__span-7-3><a id=__codelineno-7-3 name=__codelineno-7-3 href=#__codelineno-7-3></a> owner: root:root
|
||
</span><span id=__span-7-4><a id=__codelineno-7-4 name=__codelineno-7-4 href=#__codelineno-7-4></a> content: |
|
||
</span><span id=__span-7-5><a id=__codelineno-7-5 name=__codelineno-7-5 href=#__codelineno-7-5></a> apiVersion: helm.cattle.io/v1
|
||
</span><span id=__span-7-6><a id=__codelineno-7-6 name=__codelineno-7-6 href=#__codelineno-7-6></a> kind: HelmChart
|
||
</span><span id=__span-7-7><a id=__codelineno-7-7 name=__codelineno-7-7 href=#__codelineno-7-7></a> metadata:
|
||
</span><span id=__span-7-8><a id=__codelineno-7-8 name=__codelineno-7-8 href=#__codelineno-7-8></a> name: openstack-cloud-controller-manager
|
||
</span><span id=__span-7-9><a id=__codelineno-7-9 name=__codelineno-7-9 href=#__codelineno-7-9></a> namespace: kube-system
|
||
</span><span id=__span-7-10><a id=__codelineno-7-10 name=__codelineno-7-10 href=#__codelineno-7-10></a> spec:
|
||
</span><span id=__span-7-11><a id=__codelineno-7-11 name=__codelineno-7-11 href=#__codelineno-7-11></a> chart: openstack-cloud-controller-manager
|
||
</span><span id=__span-7-12><a id=__codelineno-7-12 name=__codelineno-7-12 href=#__codelineno-7-12></a> repo: https://kubernetes.github.io/cloud-provider-openstack
|
||
</span><span id=__span-7-13><a id=__codelineno-7-13 name=__codelineno-7-13 href=#__codelineno-7-13></a> targetNamespace: kube-system
|
||
</span><span id=__span-7-14><a id=__codelineno-7-14 name=__codelineno-7-14 href=#__codelineno-7-14></a> bootstrap: True
|
||
</span><span id=__span-7-15><a id=__codelineno-7-15 name=__codelineno-7-15 href=#__codelineno-7-15></a> valuesContent: |-
|
||
</span><span id=__span-7-16><a id=__codelineno-7-16 name=__codelineno-7-16 href=#__codelineno-7-16></a> nodeSelector:
|
||
</span><span id=__span-7-17><a id=__codelineno-7-17 name=__codelineno-7-17 href=#__codelineno-7-17></a> node-role.kubernetes.io/control-plane: "true"
|
||
</span><span id=__span-7-18><a id=__codelineno-7-18 name=__codelineno-7-18 href=#__codelineno-7-18></a> cloudConfig:
|
||
</span><span id=__span-7-19><a id=__codelineno-7-19 name=__codelineno-7-19 href=#__codelineno-7-19></a> global:
|
||
</span><span id=__span-7-20><a id=__codelineno-7-20 name=__codelineno-7-20 href=#__codelineno-7-20></a> auth-url: https://keystone.3Engines.com:5000
|
||
</span><span id=__span-7-21><a id=__codelineno-7-21 name=__codelineno-7-21 href=#__codelineno-7-21></a> application-credential-id: "${application_credential_id}"
|
||
</span><span id=__span-7-22><a id=__codelineno-7-22 name=__codelineno-7-22 href=#__codelineno-7-22></a> application-credential-secret: "${application_credential_secret}"
|
||
</span><span id=__span-7-23><a id=__codelineno-7-23 name=__codelineno-7-23 href=#__codelineno-7-23></a> region: ${region}
|
||
</span><span id=__span-7-24><a id=__codelineno-7-24 name=__codelineno-7-24 href=#__codelineno-7-24></a> tenant-id: ${project_id}
|
||
</span><span id=__span-7-25><a id=__codelineno-7-25 name=__codelineno-7-25 href=#__codelineno-7-25></a> loadBalancer:
|
||
</span><span id=__span-7-26><a id=__codelineno-7-26 name=__codelineno-7-26 href=#__codelineno-7-26></a> floating-network-id: "${floating_network_id}"
|
||
</span><span id=__span-7-27><a id=__codelineno-7-27 name=__codelineno-7-27 href=#__codelineno-7-27></a> subnet-id: ${subnet_id}
|
||
</span></code></pre></div> <p>It covers creating a yaml definition of a HelmChart CRD</p> <p><em>rke2-openstack-cloud-controller-manager.yaml</em></p> <p>in location</p> <p><strong>/var/lib/rancher/rke2/server/manifests/</strong></p> <p>on the master node. Upon cluster creation, RKE2 provisioner automatically captures this file and deploys a pod responsible for provisioning such load balancers. This can be verified by checking the pods in the <em>kube-system</em> namespace:</p> <div class=highlight><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1 href=#__codelineno-8-1></a>kubectl get pods -n kube-system
|
||
</span></code></pre></div> <p>One of the entries is the aforementioned pod:</p> <div class=highlight><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1 href=#__codelineno-9-1></a>NAME READY STATUS RESTARTS AGE
|
||
</span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2 href=#__codelineno-9-2></a>...
|
||
</span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3 href=#__codelineno-9-3></a>openstack-cloud-controller-manager-bz7zt 1/1 Running 1 (4h ago) 26h
|
||
</span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4 href=#__codelineno-9-4></a>...
|
||
</span></code></pre></div> <h2 id=further-customization>Further customization<a href=#further-customization title="Permalink to this headline">🔗</a><a class=headerlink href=#further-customization title="Permanent link">¶</a></h2> <p>Depending on your use case, further customization to the provided sample repository will be required to tune the Terraform configurations to provision an RKE2 cluster. We suggest evaluating the following enhancements:</p> <blockquote> <ul> <li>Incorporate High Availability of the Control Plane</li> <li>Integrate with CSI Cinder to enable automated provisioning of block storage with the Persistent Volume Claims (PVCs)</li> <li>Integrate NVIDIA device plugin for enabling native integration of VMs with vGPUs.</li> <li>Implement node autoscaler to complement the Kubernetes-native Horizontal Pod Autoscaler (HPA)</li> <li>Implement affinity and anti-affinity rules for placement of worker and master nodes</li> </ul> </blockquote> <p>To implement these features, you would need to simultaneously adjust definitions for both Terraform and Kubernetes resources. Covering those steps is, therefore, outside of scope of this article.</p> <h2 id=what-to-do-next>What To Do Next<a href=#what-to-do-next title="Permalink to this headline">🔗</a><a class=headerlink href=#what-to-do-next title="Permanent link">¶</a></h2> <p>In this article, you have created a proper Kubernetes solution using RKE2 cluster as a foundation.</p> <p>You can also consider creating Kubernetes clusters using Magnum within OpenStack:</p> <p><a href=How-to-Create-a-Kubernetes-Cluster-Using-3Engines-Cloud-OpenStack-Magnum.html.html>How to Create a Kubernetes Cluster Using 3Engines Cloud OpenStack Magnum</a></p> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "..", "features": ["content.code.annotate", "content.code.copy", "content.tooltips", "navigation.tabs", "navigation.sections", "navigation.footer", "navigation.indexes", "navigation.sections", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../assets/javascripts/bundle.13a4f30d.min.js></script> <script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": false, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
||
document$.subscribe(() => { lightbox.reload() });
|
||
</script></body> </html> |