[{"data":1,"prerenderedAt":1920},["ShallowReactive",2],{"/blog/kubernetes":3,"/blog/kubernetes-surround":1896},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"image":10,"authors":12,"date":18,"badge":19,"body":22,"_type":1890,"_id":1891,"_source":1892,"_file":1893,"_stem":1894,"_extension":1895},"/blog/kubernetes","blog",false,"","Kubernetes på Suble","Kubernetes er en open-source platform til at automatisere deployment, skalering og drift af containeriserede applikationer.",{"src":11},"https://concisesoftware.com/wp-content/uploads/2020/01/Kubernetes-logo.png",[13],{"name":14,"to":15,"avatar":16},"Alexander Møller","https://www.linkedin.com/in/alexanderm%C3%B8ller/",{"src":17},"/hundeklemmen.png","2025-01-06",{"label":20},[21],"Hosting",{"type":23,"children":24,"toc":1874},"root",[25,34,41,47,52,65,70,74,80,152,155,161,202,205,211,218,392,398,470,476,554,560,707,713,867,873,1068,1071,1077,1280,1283,1289,1396,1399,1405,1863,1868],{"type":26,"tag":27,"props":28,"children":30},"element","h1",{"id":29},"kubernetes-setup-guide-on-subleio",[31],{"type":32,"value":33},"text","Kubernetes Setup Guide on Suble.io",{"type":26,"tag":35,"props":36,"children":38},"h2",{"id":37},"introduction",[39],{"type":32,"value":40},"Introduction",{"type":26,"tag":42,"props":43,"children":44},"p",{},[45],{"type":32,"value":46},"Welcome to our detailed guide on setting up Kubernetes on Suble.io. As you've decided to embark on this journey, you probably already know the immense potential Kubernetes holds for managing containerized applications at scale. If you're still wrapping your head around the basics, we're here to shed some light before diving into the setup process.",{"type":26,"tag":42,"props":48,"children":49},{},[50],{"type":32,"value":51},"Kubernetes, also known as K8s, is an open-source platform designed to automate deploying, scaling, and managing containerized applications. Containers allow you to bundle your software with all its dependencies, leading to efficient, reliable, and fast deployments. Kubernetes takes it a step further by managing a cluster of machines and orchestrating containers across them. From handling failover for your applications to providing a consistent environment for deployment, Kubernetes offers a range of advantages that help organizations streamline their operations.",{"type":26,"tag":42,"props":53,"children":54},{},[55,57,63],{"type":32,"value":56},"Now, let's talk about our platform — Suble.io. We provide a virtualized environment to host your applications, whether they are small-scale projects or large enterprise solutions. For this guide, we recommend setting up Kubernetes on at least three VMs under the ",{"type":26,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":32,"value":62},"Mega Package",{"type":32,"value":64}," (4GB each) to ensure sufficient resources for the cluster to function effectively. We also suggest assigning one floating IP address for seamless network access and flexibility.",{"type":26,"tag":42,"props":66,"children":67},{},[68],{"type":32,"value":69},"This guide provides step-by-step instructions and useful tips to help you configure Kubernetes on Suble.io. Whether you're an experienced developer or a newcomer to container orchestration, this guide aims to get your Kubernetes cluster up and running efficiently.",{"type":26,"tag":71,"props":72,"children":73},"hr",{},[],{"type":26,"tag":35,"props":75,"children":77},{"id":76},"terminology-and-notation",[78],{"type":32,"value":79},"Terminology and Notation",{"type":26,"tag":81,"props":82,"children":83},"ul",{},[84,104,120,136],{"type":26,"tag":85,"props":86,"children":87},"li",{},[88,93,95,102],{"type":26,"tag":58,"props":89,"children":90},{},[91],{"type":32,"value":92},"local$",{"type":32,"value":94}," ",{"type":26,"tag":96,"props":97,"children":99},"code",{"className":98},[],[100],{"type":32,"value":101},"\u003Ccommand>",{"type":32,"value":103},": Run this command on your local computer.",{"type":26,"tag":85,"props":105,"children":106},{},[107,112,113,118],{"type":26,"tag":58,"props":108,"children":109},{},[110],{"type":32,"value":111},"all$",{"type":32,"value":94},{"type":26,"tag":96,"props":114,"children":116},{"className":115},[],[117],{"type":32,"value":101},{"type":32,"value":119},": Run this command on all servers as root.",{"type":26,"tag":85,"props":121,"children":122},{},[123,128,129,134],{"type":26,"tag":58,"props":124,"children":125},{},[126],{"type":32,"value":127},"master$",{"type":32,"value":94},{"type":26,"tag":96,"props":130,"children":132},{"className":131},[],[133],{"type":32,"value":101},{"type":32,"value":135},": Run this command on the master server as root.",{"type":26,"tag":85,"props":137,"children":138},{},[139,144,145,150],{"type":26,"tag":58,"props":140,"children":141},{},[142],{"type":32,"value":143},"worker$",{"type":32,"value":94},{"type":26,"tag":96,"props":146,"children":148},{"className":147},[],[149],{"type":32,"value":101},{"type":32,"value":151},": Run this command on all worker servers as root.",{"type":26,"tag":71,"props":153,"children":154},{},[],{"type":26,"tag":35,"props":156,"children":158},{"id":157},"step-1-preparing-resources",[159],{"type":32,"value":160},"Step 1 - Preparing Resources",{"type":26,"tag":162,"props":163,"children":164},"ol",{},[165,190],{"type":26,"tag":85,"props":166,"children":167},{},[168,170,175,177,181,183,188],{"type":32,"value":169},"Create ",{"type":26,"tag":58,"props":171,"children":172},{},[173],{"type":32,"value":174},"3 VM instances",{"type":32,"value":176},", each with at least 4GB of memory (",{"type":26,"tag":58,"props":178,"children":179},{},[180],{"type":32,"value":62},{"type":32,"value":182},"). Use ",{"type":26,"tag":58,"props":184,"children":185},{},[186],{"type":32,"value":187},"Ubuntu 20.04",{"type":32,"value":189}," as the operating system.",{"type":26,"tag":85,"props":191,"children":192},{},[193,195,200],{"type":32,"value":194},"Order ",{"type":26,"tag":58,"props":196,"children":197},{},[198],{"type":32,"value":199},"1 Floating IP",{"type":32,"value":201}," (optional but highly recommended). This will be used for the Load Balancer later.",{"type":26,"tag":71,"props":203,"children":204},{},[],{"type":26,"tag":35,"props":206,"children":208},{"id":207},"step-2-install-containerd-and-kubernetes-packages",[209],{"type":32,"value":210},"Step 2 - Install containerd and Kubernetes Packages",{"type":26,"tag":212,"props":213,"children":215},"h3",{"id":214},"installing-containerd",[216],{"type":32,"value":217},"Installing containerd",{"type":26,"tag":162,"props":219,"children":220},{},[221,281,310],{"type":26,"tag":85,"props":222,"children":223},{},[224,226],{"type":32,"value":225},"Download the containerd service file:\n",{"type":26,"tag":227,"props":228,"children":232},"pre",{"className":229,"code":230,"language":231,"meta":7,"style":7},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","all$ wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service\nall$ mv containerd.service /usr/lib/systemd/system/\n","bash",[233],{"type":26,"tag":96,"props":234,"children":235},{"__ignoreMap":7},[236,258],{"type":26,"tag":237,"props":238,"children":241},"span",{"class":239,"line":240},"line",1,[242,247,253],{"type":26,"tag":237,"props":243,"children":245},{"style":244},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[246],{"type":32,"value":111},{"type":26,"tag":237,"props":248,"children":250},{"style":249},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[251],{"type":32,"value":252}," wget",{"type":26,"tag":237,"props":254,"children":255},{"style":249},[256],{"type":32,"value":257}," https://raw.githubusercontent.com/containerd/containerd/main/containerd.service\n",{"type":26,"tag":237,"props":259,"children":261},{"class":239,"line":260},2,[262,266,271,276],{"type":26,"tag":237,"props":263,"children":264},{"style":244},[265],{"type":32,"value":111},{"type":26,"tag":237,"props":267,"children":268},{"style":249},[269],{"type":32,"value":270}," mv",{"type":26,"tag":237,"props":272,"children":273},{"style":249},[274],{"type":32,"value":275}," containerd.service",{"type":26,"tag":237,"props":277,"children":278},{"style":249},[279],{"type":32,"value":280}," /usr/lib/systemd/system/\n",{"type":26,"tag":85,"props":282,"children":283},{},[284,286],{"type":32,"value":285},"Reload systemd unit files:\n",{"type":26,"tag":227,"props":287,"children":289},{"className":229,"code":288,"language":231,"meta":7,"style":7},"all$ systemctl daemon-reload\n",[290],{"type":26,"tag":96,"props":291,"children":292},{"__ignoreMap":7},[293],{"type":26,"tag":237,"props":294,"children":295},{"class":239,"line":240},[296,300,305],{"type":26,"tag":237,"props":297,"children":298},{"style":244},[299],{"type":32,"value":111},{"type":26,"tag":237,"props":301,"children":302},{"style":249},[303],{"type":32,"value":304}," systemctl",{"type":26,"tag":237,"props":306,"children":307},{"style":249},[308],{"type":32,"value":309}," daemon-reload\n",{"type":26,"tag":85,"props":311,"children":312},{},[313,315],{"type":32,"value":314},"Install containerd:\n",{"type":26,"tag":227,"props":316,"children":318},{"className":229,"code":317,"language":231,"meta":7,"style":7},"all$ wget https://github.com/containerd/containerd/releases/download/v1.6.2/containerd-1.6.2-linux-amd64.tar.gz\nall$ tar Czxvf /usr/local containerd-1.6.2-linux-amd64.tar.gz\nall$ systemctl enable --now containerd\n",[319],{"type":26,"tag":96,"props":320,"children":321},{"__ignoreMap":7},[322,338,365],{"type":26,"tag":237,"props":323,"children":324},{"class":239,"line":240},[325,329,333],{"type":26,"tag":237,"props":326,"children":327},{"style":244},[328],{"type":32,"value":111},{"type":26,"tag":237,"props":330,"children":331},{"style":249},[332],{"type":32,"value":252},{"type":26,"tag":237,"props":334,"children":335},{"style":249},[336],{"type":32,"value":337}," https://github.com/containerd/containerd/releases/download/v1.6.2/containerd-1.6.2-linux-amd64.tar.gz\n",{"type":26,"tag":237,"props":339,"children":340},{"class":239,"line":260},[341,345,350,355,360],{"type":26,"tag":237,"props":342,"children":343},{"style":244},[344],{"type":32,"value":111},{"type":26,"tag":237,"props":346,"children":347},{"style":249},[348],{"type":32,"value":349}," tar",{"type":26,"tag":237,"props":351,"children":352},{"style":249},[353],{"type":32,"value":354}," Czxvf",{"type":26,"tag":237,"props":356,"children":357},{"style":249},[358],{"type":32,"value":359}," /usr/local",{"type":26,"tag":237,"props":361,"children":362},{"style":249},[363],{"type":32,"value":364}," containerd-1.6.2-linux-amd64.tar.gz\n",{"type":26,"tag":237,"props":366,"children":368},{"class":239,"line":367},3,[369,373,377,382,387],{"type":26,"tag":237,"props":370,"children":371},{"style":244},[372],{"type":32,"value":111},{"type":26,"tag":237,"props":374,"children":375},{"style":249},[376],{"type":32,"value":304},{"type":26,"tag":237,"props":378,"children":379},{"style":249},[380],{"type":32,"value":381}," enable",{"type":26,"tag":237,"props":383,"children":384},{"style":249},[385],{"type":32,"value":386}," --now",{"type":26,"tag":237,"props":388,"children":389},{"style":249},[390],{"type":32,"value":391}," containerd\n",{"type":26,"tag":212,"props":393,"children":395},{"id":394},"installing-runc",[396],{"type":32,"value":397},"Installing runc",{"type":26,"tag":162,"props":399,"children":400},{},[401],{"type":26,"tag":85,"props":402,"children":403},{},[404,406,412,414],{"type":32,"value":405},"Download and install ",{"type":26,"tag":96,"props":407,"children":409},{"className":408},[],[410],{"type":32,"value":411},"runc",{"type":32,"value":413},":\n",{"type":26,"tag":227,"props":415,"children":417},{"className":229,"code":416,"language":231,"meta":7,"style":7},"all$ wget https://github.com/opencontainers/runc/releases/download/v1.1.6/runc.amd64\nall$ install -m 755 runc.amd64 /usr/local/sbin/runc\n",[418],{"type":26,"tag":96,"props":419,"children":420},{"__ignoreMap":7},[421,437],{"type":26,"tag":237,"props":422,"children":423},{"class":239,"line":240},[424,428,432],{"type":26,"tag":237,"props":425,"children":426},{"style":244},[427],{"type":32,"value":111},{"type":26,"tag":237,"props":429,"children":430},{"style":249},[431],{"type":32,"value":252},{"type":26,"tag":237,"props":433,"children":434},{"style":249},[435],{"type":32,"value":436}," https://github.com/opencontainers/runc/releases/download/v1.1.6/runc.amd64\n",{"type":26,"tag":237,"props":438,"children":439},{"class":239,"line":260},[440,444,449,454,460,465],{"type":26,"tag":237,"props":441,"children":442},{"style":244},[443],{"type":32,"value":111},{"type":26,"tag":237,"props":445,"children":446},{"style":249},[447],{"type":32,"value":448}," install",{"type":26,"tag":237,"props":450,"children":451},{"style":249},[452],{"type":32,"value":453}," -m",{"type":26,"tag":237,"props":455,"children":457},{"style":456},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[458],{"type":32,"value":459}," 755",{"type":26,"tag":237,"props":461,"children":462},{"style":249},[463],{"type":32,"value":464}," runc.amd64",{"type":26,"tag":237,"props":466,"children":467},{"style":249},[468],{"type":32,"value":469}," /usr/local/sbin/runc\n",{"type":26,"tag":212,"props":471,"children":473},{"id":472},"setting-up-cni-plugins",[474],{"type":32,"value":475},"Setting Up CNI Plugins",{"type":26,"tag":162,"props":477,"children":478},{},[479],{"type":26,"tag":85,"props":480,"children":481},{},[482,484],{"type":32,"value":483},"Install CNI plugins:\n",{"type":26,"tag":227,"props":485,"children":487},{"className":229,"code":486,"language":231,"meta":7,"style":7},"all$ wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz\nall$ mkdir -p /opt/cni/bin\nall$ tar Czxvf /opt/cni/bin cni-plugins-linux-amd64-v1.2.0.tgz\n",[488],{"type":26,"tag":96,"props":489,"children":490},{"__ignoreMap":7},[491,507,529],{"type":26,"tag":237,"props":492,"children":493},{"class":239,"line":240},[494,498,502],{"type":26,"tag":237,"props":495,"children":496},{"style":244},[497],{"type":32,"value":111},{"type":26,"tag":237,"props":499,"children":500},{"style":249},[501],{"type":32,"value":252},{"type":26,"tag":237,"props":503,"children":504},{"style":249},[505],{"type":32,"value":506}," https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz\n",{"type":26,"tag":237,"props":508,"children":509},{"class":239,"line":260},[510,514,519,524],{"type":26,"tag":237,"props":511,"children":512},{"style":244},[513],{"type":32,"value":111},{"type":26,"tag":237,"props":515,"children":516},{"style":249},[517],{"type":32,"value":518}," mkdir",{"type":26,"tag":237,"props":520,"children":521},{"style":249},[522],{"type":32,"value":523}," -p",{"type":26,"tag":237,"props":525,"children":526},{"style":249},[527],{"type":32,"value":528}," /opt/cni/bin\n",{"type":26,"tag":237,"props":530,"children":531},{"class":239,"line":367},[532,536,540,544,549],{"type":26,"tag":237,"props":533,"children":534},{"style":244},[535],{"type":32,"value":111},{"type":26,"tag":237,"props":537,"children":538},{"style":249},[539],{"type":32,"value":349},{"type":26,"tag":237,"props":541,"children":542},{"style":249},[543],{"type":32,"value":354},{"type":26,"tag":237,"props":545,"children":546},{"style":249},[547],{"type":32,"value":548}," /opt/cni/bin",{"type":26,"tag":237,"props":550,"children":551},{"style":249},[552],{"type":32,"value":553}," cni-plugins-linux-amd64-v1.2.0.tgz\n",{"type":26,"tag":212,"props":555,"children":557},{"id":556},"configuring-containerd",[558],{"type":32,"value":559},"Configuring containerd",{"type":26,"tag":162,"props":561,"children":562},{},[563,638,675],{"type":26,"tag":85,"props":564,"children":565},{},[566,568],{"type":32,"value":567},"Generate the default configuration:\n",{"type":26,"tag":227,"props":569,"children":571},{"className":229,"code":570,"language":231,"meta":7,"style":7},"all$ mkdir -p /etc/containerd/\nall$ containerd config default | sudo tee /etc/containerd/config.toml\n",[572],{"type":26,"tag":96,"props":573,"children":574},{"__ignoreMap":7},[575,595],{"type":26,"tag":237,"props":576,"children":577},{"class":239,"line":240},[578,582,586,590],{"type":26,"tag":237,"props":579,"children":580},{"style":244},[581],{"type":32,"value":111},{"type":26,"tag":237,"props":583,"children":584},{"style":249},[585],{"type":32,"value":518},{"type":26,"tag":237,"props":587,"children":588},{"style":249},[589],{"type":32,"value":523},{"type":26,"tag":237,"props":591,"children":592},{"style":249},[593],{"type":32,"value":594}," /etc/containerd/\n",{"type":26,"tag":237,"props":596,"children":597},{"class":239,"line":260},[598,602,607,612,617,623,628,633],{"type":26,"tag":237,"props":599,"children":600},{"style":244},[601],{"type":32,"value":111},{"type":26,"tag":237,"props":603,"children":604},{"style":249},[605],{"type":32,"value":606}," containerd",{"type":26,"tag":237,"props":608,"children":609},{"style":249},[610],{"type":32,"value":611}," config",{"type":26,"tag":237,"props":613,"children":614},{"style":249},[615],{"type":32,"value":616}," default",{"type":26,"tag":237,"props":618,"children":620},{"style":619},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[621],{"type":32,"value":622}," |",{"type":26,"tag":237,"props":624,"children":625},{"style":244},[626],{"type":32,"value":627}," sudo",{"type":26,"tag":237,"props":629,"children":630},{"style":249},[631],{"type":32,"value":632}," tee",{"type":26,"tag":237,"props":634,"children":635},{"style":249},[636],{"type":32,"value":637}," /etc/containerd/config.toml\n",{"type":26,"tag":85,"props":639,"children":640},{},[641,643,649,650],{"type":32,"value":642},"Edit ",{"type":26,"tag":96,"props":644,"children":646},{"className":645},[],[647],{"type":32,"value":648},"/etc/containerd/config.toml",{"type":32,"value":413},{"type":26,"tag":227,"props":651,"children":655},{"className":652,"code":653,"language":654,"meta":7,"style":7},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n    SystemdCgroup = true\n","toml",[656],{"type":26,"tag":96,"props":657,"children":658},{"__ignoreMap":7},[659,667],{"type":26,"tag":237,"props":660,"children":661},{"class":239,"line":240},[662],{"type":26,"tag":237,"props":663,"children":664},{},[665],{"type":32,"value":666},"[plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n",{"type":26,"tag":237,"props":668,"children":669},{"class":239,"line":260},[670],{"type":26,"tag":237,"props":671,"children":672},{},[673],{"type":32,"value":674},"    SystemdCgroup = true\n",{"type":26,"tag":85,"props":676,"children":677},{},[678,680],{"type":32,"value":679},"Restart containerd:\n",{"type":26,"tag":227,"props":681,"children":683},{"className":229,"code":682,"language":231,"meta":7,"style":7},"all$ systemctl restart containerd\n",[684],{"type":26,"tag":96,"props":685,"children":686},{"__ignoreMap":7},[687],{"type":26,"tag":237,"props":688,"children":689},{"class":239,"line":240},[690,694,698,703],{"type":26,"tag":237,"props":691,"children":692},{"style":244},[693],{"type":32,"value":111},{"type":26,"tag":237,"props":695,"children":696},{"style":249},[697],{"type":32,"value":304},{"type":26,"tag":237,"props":699,"children":700},{"style":249},[701],{"type":32,"value":702}," restart",{"type":26,"tag":237,"props":704,"children":705},{"style":249},[706],{"type":32,"value":391},{"type":26,"tag":212,"props":708,"children":710},{"id":709},"installing-kubernetes-packages",[711],{"type":32,"value":712},"Installing Kubernetes Packages",{"type":26,"tag":162,"props":714,"children":715},{},[716],{"type":26,"tag":85,"props":717,"children":718},{},[719,721],{"type":32,"value":720},"Add the Kubernetes apt repository:\n",{"type":26,"tag":227,"props":722,"children":724},{"className":229,"code":723,"language":231,"meta":7,"style":7},"all$ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -\nall$ cat \u003C\u003CEOF >/etc/apt/sources.list.d/kubernetes.list\ndeb http://packages.cloud.google.com/apt/ kubernetes-xenial main\nEOF\nall$ apt-get update\nall$ apt-get install kubeadm kubectl kubelet\n",[725],{"type":26,"tag":96,"props":726,"children":727},{"__ignoreMap":7},[728,769,801,809,818,836],{"type":26,"tag":237,"props":729,"children":730},{"class":239,"line":240},[731,735,740,745,750,754,759,764],{"type":26,"tag":237,"props":732,"children":733},{"style":244},[734],{"type":32,"value":111},{"type":26,"tag":237,"props":736,"children":737},{"style":249},[738],{"type":32,"value":739}," curl",{"type":26,"tag":237,"props":741,"children":742},{"style":249},[743],{"type":32,"value":744}," -fsSL",{"type":26,"tag":237,"props":746,"children":747},{"style":249},[748],{"type":32,"value":749}," https://packages.cloud.google.com/apt/doc/apt-key.gpg",{"type":26,"tag":237,"props":751,"children":752},{"style":619},[753],{"type":32,"value":622},{"type":26,"tag":237,"props":755,"children":756},{"style":244},[757],{"type":32,"value":758}," apt-key",{"type":26,"tag":237,"props":760,"children":761},{"style":249},[762],{"type":32,"value":763}," add",{"type":26,"tag":237,"props":765,"children":766},{"style":249},[767],{"type":32,"value":768}," -\n",{"type":26,"tag":237,"props":770,"children":771},{"class":239,"line":260},[772,776,781,786,791,796],{"type":26,"tag":237,"props":773,"children":774},{"style":244},[775],{"type":32,"value":111},{"type":26,"tag":237,"props":777,"children":778},{"style":249},[779],{"type":32,"value":780}," cat",{"type":26,"tag":237,"props":782,"children":783},{"style":619},[784],{"type":32,"value":785}," \u003C\u003C",{"type":26,"tag":237,"props":787,"children":788},{"style":619},[789],{"type":32,"value":790},"EOF",{"type":26,"tag":237,"props":792,"children":793},{"style":619},[794],{"type":32,"value":795}," >",{"type":26,"tag":237,"props":797,"children":798},{"style":249},[799],{"type":32,"value":800},"/etc/apt/sources.list.d/kubernetes.list\n",{"type":26,"tag":237,"props":802,"children":803},{"class":239,"line":367},[804],{"type":26,"tag":237,"props":805,"children":806},{"style":249},[807],{"type":32,"value":808},"deb http://packages.cloud.google.com/apt/ kubernetes-xenial main\n",{"type":26,"tag":237,"props":810,"children":812},{"class":239,"line":811},4,[813],{"type":26,"tag":237,"props":814,"children":815},{"style":619},[816],{"type":32,"value":817},"EOF\n",{"type":26,"tag":237,"props":819,"children":821},{"class":239,"line":820},5,[822,826,831],{"type":26,"tag":237,"props":823,"children":824},{"style":244},[825],{"type":32,"value":111},{"type":26,"tag":237,"props":827,"children":828},{"style":249},[829],{"type":32,"value":830}," apt-get",{"type":26,"tag":237,"props":832,"children":833},{"style":249},[834],{"type":32,"value":835}," update\n",{"type":26,"tag":237,"props":837,"children":839},{"class":239,"line":838},6,[840,844,848,852,857,862],{"type":26,"tag":237,"props":841,"children":842},{"style":244},[843],{"type":32,"value":111},{"type":26,"tag":237,"props":845,"children":846},{"style":249},[847],{"type":32,"value":830},{"type":26,"tag":237,"props":849,"children":850},{"style":249},[851],{"type":32,"value":448},{"type":26,"tag":237,"props":853,"children":854},{"style":249},[855],{"type":32,"value":856}," kubeadm",{"type":26,"tag":237,"props":858,"children":859},{"style":249},[860],{"type":32,"value":861}," kubectl",{"type":26,"tag":237,"props":863,"children":864},{"style":249},[865],{"type":32,"value":866}," kubelet\n",{"type":26,"tag":212,"props":868,"children":870},{"id":869},"configuring-sysctl-settings",[871],{"type":32,"value":872},"Configuring Sysctl Settings",{"type":26,"tag":162,"props":874,"children":875},{},[876,976],{"type":26,"tag":85,"props":877,"children":878},{},[879,881],{"type":32,"value":880},"Load required kernel modules:\n",{"type":26,"tag":227,"props":882,"children":884},{"className":229,"code":883,"language":231,"meta":7,"style":7},"all$ cat \u003C\u003CEOF | tee /etc/modules-load.d/k8s.conf\noverlay\nbr_netfilter\nEOF\nall$ modprobe overlay\nall$ modprobe br_netfilter\n",[885],{"type":26,"tag":96,"props":886,"children":887},{"__ignoreMap":7},[888,920,928,936,943,960],{"type":26,"tag":237,"props":889,"children":890},{"class":239,"line":240},[891,895,899,903,907,911,915],{"type":26,"tag":237,"props":892,"children":893},{"style":244},[894],{"type":32,"value":111},{"type":26,"tag":237,"props":896,"children":897},{"style":249},[898],{"type":32,"value":780},{"type":26,"tag":237,"props":900,"children":901},{"style":619},[902],{"type":32,"value":785},{"type":26,"tag":237,"props":904,"children":905},{"style":619},[906],{"type":32,"value":790},{"type":26,"tag":237,"props":908,"children":909},{"style":619},[910],{"type":32,"value":622},{"type":26,"tag":237,"props":912,"children":913},{"style":244},[914],{"type":32,"value":632},{"type":26,"tag":237,"props":916,"children":917},{"style":249},[918],{"type":32,"value":919}," /etc/modules-load.d/k8s.conf\n",{"type":26,"tag":237,"props":921,"children":922},{"class":239,"line":260},[923],{"type":26,"tag":237,"props":924,"children":925},{"style":249},[926],{"type":32,"value":927},"overlay\n",{"type":26,"tag":237,"props":929,"children":930},{"class":239,"line":367},[931],{"type":26,"tag":237,"props":932,"children":933},{"style":249},[934],{"type":32,"value":935},"br_netfilter\n",{"type":26,"tag":237,"props":937,"children":938},{"class":239,"line":811},[939],{"type":26,"tag":237,"props":940,"children":941},{"style":619},[942],{"type":32,"value":817},{"type":26,"tag":237,"props":944,"children":945},{"class":239,"line":820},[946,950,955],{"type":26,"tag":237,"props":947,"children":948},{"style":244},[949],{"type":32,"value":111},{"type":26,"tag":237,"props":951,"children":952},{"style":249},[953],{"type":32,"value":954}," modprobe",{"type":26,"tag":237,"props":956,"children":957},{"style":249},[958],{"type":32,"value":959}," overlay\n",{"type":26,"tag":237,"props":961,"children":962},{"class":239,"line":838},[963,967,971],{"type":26,"tag":237,"props":964,"children":965},{"style":244},[966],{"type":32,"value":111},{"type":26,"tag":237,"props":968,"children":969},{"style":249},[970],{"type":32,"value":954},{"type":26,"tag":237,"props":972,"children":973},{"style":249},[974],{"type":32,"value":975}," br_netfilter\n",{"type":26,"tag":85,"props":977,"children":978},{},[979,981],{"type":32,"value":980},"Apply sysctl settings:\n",{"type":26,"tag":227,"props":982,"children":984},{"className":229,"code":983,"language":231,"meta":7,"style":7},"all$ cat \u003C\u003CEOF | tee /etc/sysctl.d/k8s.conf\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward                = 1\nnet.ipv6.conf.default.forwarding   = 1\nEOF\nall$ sysctl --system\n",[985],{"type":26,"tag":96,"props":986,"children":987},{"__ignoreMap":7},[988,1020,1028,1036,1044,1051],{"type":26,"tag":237,"props":989,"children":990},{"class":239,"line":240},[991,995,999,1003,1007,1011,1015],{"type":26,"tag":237,"props":992,"children":993},{"style":244},[994],{"type":32,"value":111},{"type":26,"tag":237,"props":996,"children":997},{"style":249},[998],{"type":32,"value":780},{"type":26,"tag":237,"props":1000,"children":1001},{"style":619},[1002],{"type":32,"value":785},{"type":26,"tag":237,"props":1004,"children":1005},{"style":619},[1006],{"type":32,"value":790},{"type":26,"tag":237,"props":1008,"children":1009},{"style":619},[1010],{"type":32,"value":622},{"type":26,"tag":237,"props":1012,"children":1013},{"style":244},[1014],{"type":32,"value":632},{"type":26,"tag":237,"props":1016,"children":1017},{"style":249},[1018],{"type":32,"value":1019}," /etc/sysctl.d/k8s.conf\n",{"type":26,"tag":237,"props":1021,"children":1022},{"class":239,"line":260},[1023],{"type":26,"tag":237,"props":1024,"children":1025},{"style":249},[1026],{"type":32,"value":1027},"net.bridge.bridge-nf-call-iptables = 1\n",{"type":26,"tag":237,"props":1029,"children":1030},{"class":239,"line":367},[1031],{"type":26,"tag":237,"props":1032,"children":1033},{"style":249},[1034],{"type":32,"value":1035},"net.ipv4.ip_forward                = 1\n",{"type":26,"tag":237,"props":1037,"children":1038},{"class":239,"line":811},[1039],{"type":26,"tag":237,"props":1040,"children":1041},{"style":249},[1042],{"type":32,"value":1043},"net.ipv6.conf.default.forwarding   = 1\n",{"type":26,"tag":237,"props":1045,"children":1046},{"class":239,"line":820},[1047],{"type":26,"tag":237,"props":1048,"children":1049},{"style":619},[1050],{"type":32,"value":817},{"type":26,"tag":237,"props":1052,"children":1053},{"class":239,"line":838},[1054,1058,1063],{"type":26,"tag":237,"props":1055,"children":1056},{"style":244},[1057],{"type":32,"value":111},{"type":26,"tag":237,"props":1059,"children":1060},{"style":249},[1061],{"type":32,"value":1062}," sysctl",{"type":26,"tag":237,"props":1064,"children":1065},{"style":249},[1066],{"type":32,"value":1067}," --system\n",{"type":26,"tag":71,"props":1069,"children":1070},{},[],{"type":26,"tag":35,"props":1072,"children":1074},{"id":1073},"step-4-deploying-and-configuring-the-control-plane",[1075],{"type":32,"value":1076},"Step 4 - Deploying and Configuring the Control Plane",{"type":26,"tag":162,"props":1078,"children":1079},{},[1080,1117,1175,1242],{"type":26,"tag":85,"props":1081,"children":1082},{},[1083,1085],{"type":32,"value":1084},"On the master node, pull Kubernetes images:\n",{"type":26,"tag":227,"props":1086,"children":1088},{"className":229,"code":1087,"language":231,"meta":7,"style":7},"master$ kubeadm config images pull\n",[1089],{"type":26,"tag":96,"props":1090,"children":1091},{"__ignoreMap":7},[1092],{"type":26,"tag":237,"props":1093,"children":1094},{"class":239,"line":240},[1095,1099,1103,1107,1112],{"type":26,"tag":237,"props":1096,"children":1097},{"style":244},[1098],{"type":32,"value":127},{"type":26,"tag":237,"props":1100,"children":1101},{"style":249},[1102],{"type":32,"value":856},{"type":26,"tag":237,"props":1104,"children":1105},{"style":249},[1106],{"type":32,"value":611},{"type":26,"tag":237,"props":1108,"children":1109},{"style":249},[1110],{"type":32,"value":1111}," images",{"type":26,"tag":237,"props":1113,"children":1114},{"style":249},[1115],{"type":32,"value":1116}," pull\n",{"type":26,"tag":85,"props":1118,"children":1119},{},[1120,1122],{"type":32,"value":1121},"Initialize the control plane:\n",{"type":26,"tag":227,"props":1123,"children":1125},{"className":229,"code":1124,"language":231,"meta":7,"style":7},"master$ kubeadm init        --pod-network-cidr=10.244.0.0/16        --kubernetes-version=v1.27.1        --ignore-preflight-errors=NumCPU        --upload-certs        --apiserver-cert-extra-sans 10.0.0.1\n",[1126],{"type":26,"tag":96,"props":1127,"children":1128},{"__ignoreMap":7},[1129],{"type":26,"tag":237,"props":1130,"children":1131},{"class":239,"line":240},[1132,1136,1140,1145,1150,1155,1160,1165,1170],{"type":26,"tag":237,"props":1133,"children":1134},{"style":244},[1135],{"type":32,"value":127},{"type":26,"tag":237,"props":1137,"children":1138},{"style":249},[1139],{"type":32,"value":856},{"type":26,"tag":237,"props":1141,"children":1142},{"style":249},[1143],{"type":32,"value":1144}," init",{"type":26,"tag":237,"props":1146,"children":1147},{"style":249},[1148],{"type":32,"value":1149},"        --pod-network-cidr=10.244.0.0/16",{"type":26,"tag":237,"props":1151,"children":1152},{"style":249},[1153],{"type":32,"value":1154},"        --kubernetes-version=v1.27.1",{"type":26,"tag":237,"props":1156,"children":1157},{"style":249},[1158],{"type":32,"value":1159},"        --ignore-preflight-errors=NumCPU",{"type":26,"tag":237,"props":1161,"children":1162},{"style":249},[1163],{"type":32,"value":1164},"        --upload-certs",{"type":26,"tag":237,"props":1166,"children":1167},{"style":249},[1168],{"type":32,"value":1169},"        --apiserver-cert-extra-sans",{"type":26,"tag":237,"props":1171,"children":1172},{"style":456},[1173],{"type":32,"value":1174}," 10.0.0.1\n",{"type":26,"tag":85,"props":1176,"children":1177},{},[1178,1180,1186,1188],{"type":32,"value":1179},"Configure ",{"type":26,"tag":96,"props":1181,"children":1183},{"className":1182},[],[1184],{"type":32,"value":1185},"kubectl",{"type":32,"value":1187}," for the root user:\n",{"type":26,"tag":227,"props":1189,"children":1191},{"className":229,"code":1190,"language":231,"meta":7,"style":7},"master$ mkdir -p /root/.kube\nmaster$ cp -i /etc/kubernetes/admin.conf /root/.kube/config\n",[1192],{"type":26,"tag":96,"props":1193,"children":1194},{"__ignoreMap":7},[1195,1215],{"type":26,"tag":237,"props":1196,"children":1197},{"class":239,"line":240},[1198,1202,1206,1210],{"type":26,"tag":237,"props":1199,"children":1200},{"style":244},[1201],{"type":32,"value":127},{"type":26,"tag":237,"props":1203,"children":1204},{"style":249},[1205],{"type":32,"value":518},{"type":26,"tag":237,"props":1207,"children":1208},{"style":249},[1209],{"type":32,"value":523},{"type":26,"tag":237,"props":1211,"children":1212},{"style":249},[1213],{"type":32,"value":1214}," /root/.kube\n",{"type":26,"tag":237,"props":1216,"children":1217},{"class":239,"line":260},[1218,1222,1227,1232,1237],{"type":26,"tag":237,"props":1219,"children":1220},{"style":244},[1221],{"type":32,"value":127},{"type":26,"tag":237,"props":1223,"children":1224},{"style":249},[1225],{"type":32,"value":1226}," cp",{"type":26,"tag":237,"props":1228,"children":1229},{"style":249},[1230],{"type":32,"value":1231}," -i",{"type":26,"tag":237,"props":1233,"children":1234},{"style":249},[1235],{"type":32,"value":1236}," /etc/kubernetes/admin.conf",{"type":26,"tag":237,"props":1238,"children":1239},{"style":249},[1240],{"type":32,"value":1241}," /root/.kube/config\n",{"type":26,"tag":85,"props":1243,"children":1244},{},[1245,1247],{"type":32,"value":1246},"Deploy the Flannel CNI:\n",{"type":26,"tag":227,"props":1248,"children":1250},{"className":229,"code":1249,"language":231,"meta":7,"style":7},"master$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml\n",[1251],{"type":26,"tag":96,"props":1252,"children":1253},{"__ignoreMap":7},[1254],{"type":26,"tag":237,"props":1255,"children":1256},{"class":239,"line":240},[1257,1261,1265,1270,1275],{"type":26,"tag":237,"props":1258,"children":1259},{"style":244},[1260],{"type":32,"value":127},{"type":26,"tag":237,"props":1262,"children":1263},{"style":249},[1264],{"type":32,"value":861},{"type":26,"tag":237,"props":1266,"children":1267},{"style":249},[1268],{"type":32,"value":1269}," apply",{"type":26,"tag":237,"props":1271,"children":1272},{"style":249},[1273],{"type":32,"value":1274}," -f",{"type":26,"tag":237,"props":1276,"children":1277},{"style":249},[1278],{"type":32,"value":1279}," https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml\n",{"type":26,"tag":71,"props":1281,"children":1282},{},[],{"type":26,"tag":35,"props":1284,"children":1286},{"id":1285},"step-5-adding-worker-nodes",[1287],{"type":32,"value":1288},"Step 5 - Adding Worker Nodes",{"type":26,"tag":162,"props":1290,"children":1291},{},[1292,1330,1363],{"type":26,"tag":85,"props":1293,"children":1294},{},[1295,1297],{"type":32,"value":1296},"Generate the join command on the master node:\n",{"type":26,"tag":227,"props":1298,"children":1300},{"className":229,"code":1299,"language":231,"meta":7,"style":7},"master$ kubeadm token create --print-join-command\n",[1301],{"type":26,"tag":96,"props":1302,"children":1303},{"__ignoreMap":7},[1304],{"type":26,"tag":237,"props":1305,"children":1306},{"class":239,"line":240},[1307,1311,1315,1320,1325],{"type":26,"tag":237,"props":1308,"children":1309},{"style":244},[1310],{"type":32,"value":127},{"type":26,"tag":237,"props":1312,"children":1313},{"style":249},[1314],{"type":32,"value":856},{"type":26,"tag":237,"props":1316,"children":1317},{"style":249},[1318],{"type":32,"value":1319}," token",{"type":26,"tag":237,"props":1321,"children":1322},{"style":249},[1323],{"type":32,"value":1324}," create",{"type":26,"tag":237,"props":1326,"children":1327},{"style":249},[1328],{"type":32,"value":1329}," --print-join-command\n",{"type":26,"tag":85,"props":1331,"children":1332},{},[1333,1335],{"type":32,"value":1334},"Execute the join command on each worker node:\n",{"type":26,"tag":227,"props":1336,"children":1338},{"className":229,"code":1337,"language":231,"meta":7,"style":7},"worker$ kubeadm join ...\n",[1339],{"type":26,"tag":96,"props":1340,"children":1341},{"__ignoreMap":7},[1342],{"type":26,"tag":237,"props":1343,"children":1344},{"class":239,"line":240},[1345,1349,1353,1358],{"type":26,"tag":237,"props":1346,"children":1347},{"style":244},[1348],{"type":32,"value":143},{"type":26,"tag":237,"props":1350,"children":1351},{"style":249},[1352],{"type":32,"value":856},{"type":26,"tag":237,"props":1354,"children":1355},{"style":249},[1356],{"type":32,"value":1357}," join",{"type":26,"tag":237,"props":1359,"children":1360},{"style":249},[1361],{"type":32,"value":1362}," ...\n",{"type":26,"tag":85,"props":1364,"children":1365},{},[1366,1368],{"type":32,"value":1367},"Verify nodes:\n",{"type":26,"tag":227,"props":1369,"children":1371},{"className":229,"code":1370,"language":231,"meta":7,"style":7},"local$ kubectl get nodes\n",[1372],{"type":26,"tag":96,"props":1373,"children":1374},{"__ignoreMap":7},[1375],{"type":26,"tag":237,"props":1376,"children":1377},{"class":239,"line":240},[1378,1382,1386,1391],{"type":26,"tag":237,"props":1379,"children":1380},{"style":244},[1381],{"type":32,"value":92},{"type":26,"tag":237,"props":1383,"children":1384},{"style":249},[1385],{"type":32,"value":861},{"type":26,"tag":237,"props":1387,"children":1388},{"style":249},[1389],{"type":32,"value":1390}," get",{"type":26,"tag":237,"props":1392,"children":1393},{"style":249},[1394],{"type":32,"value":1395}," nodes\n",{"type":26,"tag":71,"props":1397,"children":1398},{},[],{"type":26,"tag":35,"props":1400,"children":1402},{"id":1401},"step-6-setting-up-external-connectivity",[1403],{"type":32,"value":1404},"Step 6 - Setting Up External Connectivity",{"type":26,"tag":162,"props":1406,"children":1407},{},[1408,1444,1626,1717],{"type":26,"tag":85,"props":1409,"children":1410},{},[1411,1413],{"type":32,"value":1412},"Install MetalLB:",{"type":26,"tag":227,"props":1414,"children":1416},{"className":229,"code":1415,"language":231,"meta":7,"style":7},"local$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml\n",[1417],{"type":26,"tag":96,"props":1418,"children":1419},{"__ignoreMap":7},[1420],{"type":26,"tag":237,"props":1421,"children":1422},{"class":239,"line":240},[1423,1427,1431,1435,1439],{"type":26,"tag":237,"props":1424,"children":1425},{"style":244},[1426],{"type":32,"value":92},{"type":26,"tag":237,"props":1428,"children":1429},{"style":249},[1430],{"type":32,"value":861},{"type":26,"tag":237,"props":1432,"children":1433},{"style":249},[1434],{"type":32,"value":1269},{"type":26,"tag":237,"props":1436,"children":1437},{"style":249},[1438],{"type":32,"value":1274},{"type":26,"tag":237,"props":1440,"children":1441},{"style":249},[1442],{"type":32,"value":1443}," https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml\n",{"type":26,"tag":85,"props":1445,"children":1446},{},[1447,1449,1579,1583,1585],{"type":32,"value":1448},"Configure MetalLB IP Pool:",{"type":26,"tag":227,"props":1450,"children":1454},{"className":1451,"code":1452,"language":1453,"meta":7,"style":7},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: metallb.io/v1beta1\nkind: IPAddressPool\nmetadata:\n  name: first-pool\n  namespace: metallb-system\nspec:\n  addresses:\n  - 89.23.86.53-89.23.86.53\n","yaml",[1455],{"type":26,"tag":96,"props":1456,"children":1457},{"__ignoreMap":7},[1458,1477,1494,1506,1523,1540,1552,1565],{"type":26,"tag":237,"props":1459,"children":1460},{"class":239,"line":240},[1461,1467,1472],{"type":26,"tag":237,"props":1462,"children":1464},{"style":1463},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1465],{"type":32,"value":1466},"apiVersion",{"type":26,"tag":237,"props":1468,"children":1469},{"style":619},[1470],{"type":32,"value":1471},":",{"type":26,"tag":237,"props":1473,"children":1474},{"style":249},[1475],{"type":32,"value":1476}," metallb.io/v1beta1\n",{"type":26,"tag":237,"props":1478,"children":1479},{"class":239,"line":260},[1480,1485,1489],{"type":26,"tag":237,"props":1481,"children":1482},{"style":1463},[1483],{"type":32,"value":1484},"kind",{"type":26,"tag":237,"props":1486,"children":1487},{"style":619},[1488],{"type":32,"value":1471},{"type":26,"tag":237,"props":1490,"children":1491},{"style":249},[1492],{"type":32,"value":1493}," IPAddressPool\n",{"type":26,"tag":237,"props":1495,"children":1496},{"class":239,"line":367},[1497,1502],{"type":26,"tag":237,"props":1498,"children":1499},{"style":1463},[1500],{"type":32,"value":1501},"metadata",{"type":26,"tag":237,"props":1503,"children":1504},{"style":619},[1505],{"type":32,"value":413},{"type":26,"tag":237,"props":1507,"children":1508},{"class":239,"line":811},[1509,1514,1518],{"type":26,"tag":237,"props":1510,"children":1511},{"style":1463},[1512],{"type":32,"value":1513},"  name",{"type":26,"tag":237,"props":1515,"children":1516},{"style":619},[1517],{"type":32,"value":1471},{"type":26,"tag":237,"props":1519,"children":1520},{"style":249},[1521],{"type":32,"value":1522}," first-pool\n",{"type":26,"tag":237,"props":1524,"children":1525},{"class":239,"line":820},[1526,1531,1535],{"type":26,"tag":237,"props":1527,"children":1528},{"style":1463},[1529],{"type":32,"value":1530},"  namespace",{"type":26,"tag":237,"props":1532,"children":1533},{"style":619},[1534],{"type":32,"value":1471},{"type":26,"tag":237,"props":1536,"children":1537},{"style":249},[1538],{"type":32,"value":1539}," metallb-system\n",{"type":26,"tag":237,"props":1541,"children":1542},{"class":239,"line":838},[1543,1548],{"type":26,"tag":237,"props":1544,"children":1545},{"style":1463},[1546],{"type":32,"value":1547},"spec",{"type":26,"tag":237,"props":1549,"children":1550},{"style":619},[1551],{"type":32,"value":413},{"type":26,"tag":237,"props":1553,"children":1555},{"class":239,"line":1554},7,[1556,1561],{"type":26,"tag":237,"props":1557,"children":1558},{"style":1463},[1559],{"type":32,"value":1560},"  addresses",{"type":26,"tag":237,"props":1562,"children":1563},{"style":619},[1564],{"type":32,"value":413},{"type":26,"tag":237,"props":1566,"children":1568},{"class":239,"line":1567},8,[1569,1574],{"type":26,"tag":237,"props":1570,"children":1571},{"style":619},[1572],{"type":32,"value":1573},"  -",{"type":26,"tag":237,"props":1575,"children":1576},{"style":249},[1577],{"type":32,"value":1578}," 89.23.86.53-89.23.86.53\n",{"type":26,"tag":1580,"props":1581,"children":1582},"br",{},[],{"type":32,"value":1584},"Apply the configuration:",{"type":26,"tag":227,"props":1586,"children":1588},{"className":229,"code":1587,"language":231,"meta":7,"style":7},"local$ kubectl -n metallb-system apply -f ip-pool.yml\n",[1589],{"type":26,"tag":96,"props":1590,"children":1591},{"__ignoreMap":7},[1592],{"type":26,"tag":237,"props":1593,"children":1594},{"class":239,"line":240},[1595,1599,1603,1608,1613,1617,1621],{"type":26,"tag":237,"props":1596,"children":1597},{"style":244},[1598],{"type":32,"value":92},{"type":26,"tag":237,"props":1600,"children":1601},{"style":249},[1602],{"type":32,"value":861},{"type":26,"tag":237,"props":1604,"children":1605},{"style":249},[1606],{"type":32,"value":1607}," -n",{"type":26,"tag":237,"props":1609,"children":1610},{"style":249},[1611],{"type":32,"value":1612}," metallb-system",{"type":26,"tag":237,"props":1614,"children":1615},{"style":249},[1616],{"type":32,"value":1269},{"type":26,"tag":237,"props":1618,"children":1619},{"style":249},[1620],{"type":32,"value":1274},{"type":26,"tag":237,"props":1622,"children":1623},{"style":249},[1624],{"type":32,"value":1625}," ip-pool.yml\n",{"type":26,"tag":85,"props":1627,"children":1628},{},[1629,1631],{"type":32,"value":1630},"Deploy the NGINX Ingress Controller:",{"type":26,"tag":227,"props":1632,"children":1634},{"className":229,"code":1633,"language":231,"meta":7,"style":7},"local$ helm pull oci://ghcr.io/nginxinc/charts/nginx-ingress --untar --version 0.17.1\nlocal$ cd nginx-ingress\nlocal$ helm install nginx-ingress .\n",[1635],{"type":26,"tag":96,"props":1636,"children":1637},{"__ignoreMap":7},[1638,1675,1692],{"type":26,"tag":237,"props":1639,"children":1640},{"class":239,"line":240},[1641,1645,1650,1655,1660,1665,1670],{"type":26,"tag":237,"props":1642,"children":1643},{"style":244},[1644],{"type":32,"value":92},{"type":26,"tag":237,"props":1646,"children":1647},{"style":249},[1648],{"type":32,"value":1649}," helm",{"type":26,"tag":237,"props":1651,"children":1652},{"style":249},[1653],{"type":32,"value":1654}," pull",{"type":26,"tag":237,"props":1656,"children":1657},{"style":249},[1658],{"type":32,"value":1659}," oci://ghcr.io/nginxinc/charts/nginx-ingress",{"type":26,"tag":237,"props":1661,"children":1662},{"style":249},[1663],{"type":32,"value":1664}," --untar",{"type":26,"tag":237,"props":1666,"children":1667},{"style":249},[1668],{"type":32,"value":1669}," --version",{"type":26,"tag":237,"props":1671,"children":1672},{"style":456},[1673],{"type":32,"value":1674}," 0.17.1\n",{"type":26,"tag":237,"props":1676,"children":1677},{"class":239,"line":260},[1678,1682,1687],{"type":26,"tag":237,"props":1679,"children":1680},{"style":244},[1681],{"type":32,"value":92},{"type":26,"tag":237,"props":1683,"children":1684},{"style":249},[1685],{"type":32,"value":1686}," cd",{"type":26,"tag":237,"props":1688,"children":1689},{"style":249},[1690],{"type":32,"value":1691}," nginx-ingress\n",{"type":26,"tag":237,"props":1693,"children":1694},{"class":239,"line":367},[1695,1699,1703,1707,1712],{"type":26,"tag":237,"props":1696,"children":1697},{"style":244},[1698],{"type":32,"value":92},{"type":26,"tag":237,"props":1700,"children":1701},{"style":249},[1702],{"type":32,"value":1649},{"type":26,"tag":237,"props":1704,"children":1705},{"style":249},[1706],{"type":32,"value":448},{"type":26,"tag":237,"props":1708,"children":1709},{"style":249},[1710],{"type":32,"value":1711}," nginx-ingress",{"type":26,"tag":237,"props":1713,"children":1714},{"style":249},[1715],{"type":32,"value":1716}," .\n",{"type":26,"tag":85,"props":1718,"children":1719},{},[1720,1722,1824],{"type":32,"value":1721},"Deploy a test web application:",{"type":26,"tag":227,"props":1723,"children":1725},{"className":1451,"code":1724,"language":1453,"meta":7,"style":7},"apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: web-app\nspec:\n  replicas: 1\n  ...\n",[1726],{"type":26,"tag":96,"props":1727,"children":1728},{"__ignoreMap":7},[1729,1745,1761,1772,1788,1799,1816],{"type":26,"tag":237,"props":1730,"children":1731},{"class":239,"line":240},[1732,1736,1740],{"type":26,"tag":237,"props":1733,"children":1734},{"style":1463},[1735],{"type":32,"value":1466},{"type":26,"tag":237,"props":1737,"children":1738},{"style":619},[1739],{"type":32,"value":1471},{"type":26,"tag":237,"props":1741,"children":1742},{"style":249},[1743],{"type":32,"value":1744}," apps/v1\n",{"type":26,"tag":237,"props":1746,"children":1747},{"class":239,"line":260},[1748,1752,1756],{"type":26,"tag":237,"props":1749,"children":1750},{"style":1463},[1751],{"type":32,"value":1484},{"type":26,"tag":237,"props":1753,"children":1754},{"style":619},[1755],{"type":32,"value":1471},{"type":26,"tag":237,"props":1757,"children":1758},{"style":249},[1759],{"type":32,"value":1760}," Deployment\n",{"type":26,"tag":237,"props":1762,"children":1763},{"class":239,"line":367},[1764,1768],{"type":26,"tag":237,"props":1765,"children":1766},{"style":1463},[1767],{"type":32,"value":1501},{"type":26,"tag":237,"props":1769,"children":1770},{"style":619},[1771],{"type":32,"value":413},{"type":26,"tag":237,"props":1773,"children":1774},{"class":239,"line":811},[1775,1779,1783],{"type":26,"tag":237,"props":1776,"children":1777},{"style":1463},[1778],{"type":32,"value":1513},{"type":26,"tag":237,"props":1780,"children":1781},{"style":619},[1782],{"type":32,"value":1471},{"type":26,"tag":237,"props":1784,"children":1785},{"style":249},[1786],{"type":32,"value":1787}," web-app\n",{"type":26,"tag":237,"props":1789,"children":1790},{"class":239,"line":820},[1791,1795],{"type":26,"tag":237,"props":1792,"children":1793},{"style":1463},[1794],{"type":32,"value":1547},{"type":26,"tag":237,"props":1796,"children":1797},{"style":619},[1798],{"type":32,"value":413},{"type":26,"tag":237,"props":1800,"children":1801},{"class":239,"line":838},[1802,1807,1811],{"type":26,"tag":237,"props":1803,"children":1804},{"style":1463},[1805],{"type":32,"value":1806},"  replicas",{"type":26,"tag":237,"props":1808,"children":1809},{"style":619},[1810],{"type":32,"value":1471},{"type":26,"tag":237,"props":1812,"children":1813},{"style":456},[1814],{"type":32,"value":1815}," 1\n",{"type":26,"tag":237,"props":1817,"children":1818},{"class":239,"line":1554},[1819],{"type":26,"tag":237,"props":1820,"children":1821},{"style":456},[1822],{"type":32,"value":1823},"  ...\n",{"type":26,"tag":227,"props":1825,"children":1827},{"className":229,"code":1826,"language":231,"meta":7,"style":7},"local$ kubectl -n default apply -f web-app-deployment.yml\n",[1828],{"type":26,"tag":96,"props":1829,"children":1830},{"__ignoreMap":7},[1831],{"type":26,"tag":237,"props":1832,"children":1833},{"class":239,"line":240},[1834,1838,1842,1846,1850,1854,1858],{"type":26,"tag":237,"props":1835,"children":1836},{"style":244},[1837],{"type":32,"value":92},{"type":26,"tag":237,"props":1839,"children":1840},{"style":249},[1841],{"type":32,"value":861},{"type":26,"tag":237,"props":1843,"children":1844},{"style":249},[1845],{"type":32,"value":1607},{"type":26,"tag":237,"props":1847,"children":1848},{"style":249},[1849],{"type":32,"value":616},{"type":26,"tag":237,"props":1851,"children":1852},{"style":249},[1853],{"type":32,"value":1269},{"type":26,"tag":237,"props":1855,"children":1856},{"style":249},[1857],{"type":32,"value":1274},{"type":26,"tag":237,"props":1859,"children":1860},{"style":249},[1861],{"type":32,"value":1862}," web-app-deployment.yml\n",{"type":26,"tag":42,"props":1864,"children":1865},{},[1866],{"type":32,"value":1867},"Congratulations! You now have a fully functional Kubernetes cluster on Suble.io with external connectivity.",{"type":26,"tag":1869,"props":1870,"children":1871},"style",{},[1872],{"type":32,"value":1873},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":260,"depth":260,"links":1875},[1876,1877,1878,1879,1887,1888,1889],{"id":37,"depth":260,"text":40},{"id":76,"depth":260,"text":79},{"id":157,"depth":260,"text":160},{"id":207,"depth":260,"text":210,"children":1880},[1881,1882,1883,1884,1885,1886],{"id":214,"depth":367,"text":217},{"id":394,"depth":367,"text":397},{"id":472,"depth":367,"text":475},{"id":556,"depth":367,"text":559},{"id":709,"depth":367,"text":712},{"id":869,"depth":367,"text":872},{"id":1073,"depth":260,"text":1076},{"id":1285,"depth":260,"text":1288},{"id":1401,"depth":260,"text":1404},"markdown","content:3.blog:1.kubernetes.md","content","3.blog/1.kubernetes.md","3.blog/1.kubernetes","md",[1897,1919],{"_path":1898,"_dir":1899,"_draft":6,"_partial":6,"_locale":7,"title":1900,"description":1901,"image":1902,"authors":1904,"date":1907,"badge":1908,"keywords":1912,"_type":1890,"_id":1916,"_source":1892,"_file":1917,"_stem":1918,"_extension":1895},"/blog/coolify/mysql","coolify","Opsætning af MySQL og PHPMyAdmin på Coolify","Nemt og hurtig opsæt en simpel MySQL database med PHPMyAdmin på Coolify",{"src":1903},"/blog_images/coolify/mysql/cover.png",[1905],{"name":14,"to":15,"avatar":1906},{"src":17},"2025-03-18",{"label":1909},[21,1910,1911],"Coolify","MySQL",[1910,1911,1913,1914,21,1915],"PHPMyAdmin","Database","Backup","content:3.blog:2.coolify:mysql.md","3.blog/2.coolify/mysql.md","3.blog/2.coolify/mysql",null,1775471123835]