Files
nexus/sreweekly/articles/489/07-k8sgpt-for-kubernetes-troubleshooting-how-ai-helps-in-different-cases.html
2026-09-12 17:23:01 +08:00

2085 lines
209 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="https://palark.com/wp-content/themes/palark/assets/images/favicon.png" rel="shortcut icon"
type="image/x-icon"/>
<link href="https://palark.com/wp-content/themes/palark/assets/images/webclip.png" rel="apple-touch-icon"/>
<link rel="preconnect" href="https://palark.matomo.cloud">
<script async type="text/javascript" src="https://palark.com/wp-admin/admin-ajax.php?action=pll_xdata_check&#038;redirect=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F&#038;nonce=a8b1dc82b0"></script><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
<script type="application/ld+json">{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://palark.com#organization",
"name": "Palark",
"url": "https://palark.com",
"description": "Palark is a DevOps and SRE (Site Reliability Engineering) agency, created by passionate engineers and offering top-notch, all-in-one services worldwide. We specialise in Kubernetes-based infrastructure and Cloud Native technologies, and provide both a project-based approach and subscription packages, including 24/7 support and consulting services.",
"logo": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2023/07/palark-logo.svg",
"width": 1200,
"height": 216,
"caption": "Palark"
},
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2023/07/palark-logo.svg",
"width": 1200,
"height": 216,
"caption": "Palark"
},
"sameAs": [
"https://www.linkedin.com/company/palark",
"https://github.com/palark",
"https://bsky.app/profile/palark.com",
"https://www.facebook.com/palarkcom/",
"https://www.youtube.com/@palark",
"https://clutch.co/profile/palark"
],
"award": "ISO/IEC 27001 certified",
"knowsAbout": [
"SRE as a Service",
"DevOps as a Service",
"DevOps emergency support",
"Kubernetes and cloud migration",
"Infrastructure & CI/CD audit",
"R&D and technology consulting",
"Private, self-hosted LLM",
"Kubernetes support",
"Solution for SaaS"
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"email": "info@palark.com",
"telephone": "+49 731 1461 3240",
"availableLanguage": [
"English",
"German"
],
"areaServed": [
"EU",
"US",
"Worldwide"
]
},
"foundingDate": "2022-05-04",
"address": {
"@type": "PostalAddress",
"streetAddress": "Hafenbad 33",
"addressLocality": "Ulm",
"addressCountry": "DE",
"addressRegion": "Baden-Württemberg",
"postalCode": "89073"
},
"legalName": "Palark GmbH",
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 11,
"maxValue": 50
},
"vatID": "DE352602106"
},
{
"@type": "WebSite",
"@id": "https://palark.com#website",
"url": "https://palark.com",
"name": "Palark",
"description": "Palark | DevOps &amp; SRE",
"publisher": {
"@id": "https://palark.com#organization"
},
"inLanguage": "en-GB",
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://palark.com/?s={search_term_string}"
},
"query-input": {
"@type": "PropertyValueSpecification",
"valueRequired": true,
"valueName": "search_term_string"
}
}
},
{
"@type": "WebPage",
"@id": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/",
"url": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/",
"name": "K8sGPT for Kubernetes troubleshooting: How AI helps in different cases | Palark",
"description": "Learn what K8sGPT offers and how it helps Kubernetes operators become more efficient. This article challenges various GenAI models with several issues and covers running local LLMs.",
"isPartOf": {
"@id": "https://palark.com#website"
},
"about": {
"@id": "https://palark.com#organization"
},
"inLanguage": "en-GB",
"datePublished": "2025-07-31T04:29:55+00:00",
"dateModified": "2025-12-23T09:35:12+00:00",
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png",
"width": 982,
"height": 500
},
"thumbnailUrl": "https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png",
"breadcrumb": {
"@id": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/#breadcrumb"
},
"publisher": {
"@id": "https://palark.com#organization"
}
},
{
"@type": "BreadcrumbList",
"@id": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://palark.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://palark.com/blog/"
},
{
"@type": "ListItem",
"position": 3,
"name": "AIOps",
"item": "https://palark.com/blog/tag/aiops/"
},
{
"@type": "ListItem",
"position": 4,
"name": "K8sGPT for Kubernetes troubleshooting: How AI helps in different cases",
"item": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/"
}
]
},
{
"@type": "TechArticle",
"@id": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/#techarticle",
"headline": "K8sGPT for Kubernetes troubleshooting: How AI helps in different cases",
"description": "Learn what K8sGPT offers and how it helps Kubernetes operators become more efficient. This article challenges various GenAI models with several issues and covers running local LLMs.",
"mainEntityOfPage": {
"@id": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/"
},
"url": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/",
"datePublished": "2025-07-31T04:29:55+00:00",
"dateModified": "2025-12-23T09:35:12+00:00",
"inLanguage": "en-GB",
"publisher": {
"@id": "https://palark.com#organization"
},
"image": {
"@type": "ImageObject",
"url": "https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png",
"width": 982,
"height": 500
},
"thumbnailUrl": "https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png",
"wordCount": 7054,
"proficiencyLevel": "Expert",
"articleSection": [
"AIOps",
"Kubernetes",
"tools",
"troubleshooting"
],
"keywords": [
"AIOps",
"Kubernetes",
"tools",
"troubleshooting"
]
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Complete the following text: {{.Input}}n",
"acceptedAnswer": {
"@type": "Answer",
"text": "- name: \"openllama-chat\"\n content: |"
}
},
{
"@type": "Question",
"name": "{{.Input}}n",
"acceptedAnswer": {
"@type": "Answer",
"text": "The other parameters can be customized as needed. In my case, I left them unchanged.\n\n\n\nNext, add a link to the local template to the LocalAI application's values.yaml and redeploy:\n\n\n\npreload_models: '&#91;{\"url\": \"https://my-own-llm-gallery.com/llama_2_7b_chat_gglm.yaml\", \"name\": \"llama_2_7b_chat_gglm\"}]'\n\n\n\nSince I didn't have the capacity to run the model locally, I can't show the model responses here. Note that recommended resources are usually listed in the model description. For example, the resources required for llama_2_7b are listed here.\n\n\n\nThe above tests show that models trained on a small corpus of data or highly quantized models, such as ggml-gpt4all-j, often underperform when it comes to generating useful recommendations. Quantization reduces the amount of memory required to store the LLM and speeds up inference by reducing the computation load. But it also leads to reduced accuracy and degradation in the quality of the model output. Thus, you need more resources (e.g., GPU) to achieve better results.\n\n\n\nBy the way, if your company is looking to run GenAI models privately for various business needs (such as using them within K8sGPT), our company offers a self-hosted LLM service. It is based on a subscription model and comes with affordable pricing for the initial setup and ongoing maintenance.\n\n\n\nTakeaways\n\n\n\nThe key conclusion I drew is that K8sGPT can be used as a pretty good onboarding aid. Even without an AI backend, the tool features useful cluster resource state analyzers, which are quite informative in many cases. On top of that, you can browse the K8s documentation right in the console.\n\n\n\nI must add that the most basic troubleshooting commands, such as kubectl explain, describe, get events, logs, and your favorite search engine is usually enough for even a beginner to address the issues demonstrated in this article. However, K8sGPT's answers help accelerate you in the right direction by focusing on possible solutions rather than error codes, along with structured output and command examples.\n\n\n\nThe extent of the benefit that can be derived from K8sGPT troubleshooting tips is determined by the backend, i. e., the LLM that generates the response. Upon comparing several LLMs, I found OpenAI's 4o to be the best, although gpt-3.5-turbo often produces comparable results and comes at a lower cost. A clear advantage 4o holds is that it provides troubleshooting commands in addition to recommendations. Local LLMs are also capable of generating useful recommendations, given that you have adequate computing resources.\n\n\n\nAs part of my experiment, I refrained from comparing the K8sGPT output to the conversation with LLMs in the respective chats. In my opinion, such a comparison would be inappropriate. Chat is a more flexible tool where you can repeatedly update the context, make comments and refinements, such as copying the output of kubectl get events and Pod logs into the conversation to get recommendations. However, the line between the two has become more blurred by the interactive mode in K8sGPT.\n\n\n\nConvenience is one of the advantages K8sGPT offers. Debug recommendations are provided right away — eliminating the need to switch from the cluster terminal to the browser. K8sGPT also highlights typos or missing resources if they’ve not been defined. In addition, the analysis module checks for errors in some resources and sends debugging information corresponding to that type of resource to the backend, along with the error text. Since K8sGPT is so good for onboarding and outputs a list of action steps, anyone can learn how to troubleshoot a cluster. With this tool, even a novice can eliminate the most commonly occurring errors.\n\n\n\nAs for the drawbacks, K8sGPT cannot troubleshoot intermittent errors. I was also surprised that K8sGPT was only able to detect the ErrImagePull error on the main container (the initContainer went unnoticed). You're also limited in which cluster resources you can run the analysis on: debugging of custom resources is not supported out of the box. At the same time, the custom analyzers were added to the project last year. After all, this is an Open Source project that is being actively developed!\n\n\n\nOverall, K8sGPT is an exciting project, and I really enjoyed using it. Most recently, it got a lot of new analyzers — for storage (StorageClasses, PersistentVolumes, and PVCs), security (ServiceAccounts, RoleBindings, and PodSecurityContexts), configurations (ConfigMaps), and Jobs — as well as MCP server support. This all reassures that the project becomes an even more powerful and efficient tool.\n\n\n\nP.S.\n\n\n\nPreviously, we have also published this in-depth overview of existing AIOps solutions for Kubernetes, including K8sGPT, kubectl-ai, Botkube, and many others."
}
}
]
},
{
"@type": "SoftwareSourceCode",
"name": "K8sGPT for Kubernetes troubleshooting: How AI helps in different cases - Source Code",
"codeSampleType": "full code snippet",
"programmingLanguage": "JavaScript",
"runtimePlatform": "Kubernetes",
"url": "https://github.com/k8sgpt-ai/k8sgpt",
"isPartOf": "https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/"
}
]
}</script>
<!-- This site is optimized with the Yoast SEO plugin v28.4 - https://yoast.com/product/yoast-seo-wordpress/ -->
<title>K8sGPT for Kubernetes troubleshooting: How AI helps in different cases | Tech blog | Palark</title>
<link rel="canonical" href="https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/" />
<meta property="og:locale" content="en_GB" />
<meta property="og:type" content="article" />
<meta property="og:title" content="K8sGPT for Kubernetes troubleshooting: How AI helps in different cases | Tech blog | Palark" />
<meta property="og:description" content="Learn what K8sGPT offers and how it helps Kubernetes operators become more efficient. This article challenges various GenAI models with several issues and covers running local LLMs." />
<meta property="og:url" content="https://palark.com/blog/k8sgpt-ai-troubleshooting-kubernetes/" />
<meta property="og:site_name" content="Palark" />
<meta property="article:published_time" content="2025-07-31T04:29:55+00:00" />
<meta property="article:modified_time" content="2025-12-23T09:35:12+00:00" />
<meta property="og:image" content="https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png" />
<meta property="og:image:width" content="982" />
<meta property="og:image:height" content="500" />
<meta property="og:image:type" content="image/png" />
<meta name="author" content="Evgeny Torin" />
<meta name="twitter:card" content="summary_large_image" />
<!-- / Yoast SEO plugin. -->
<link rel='dns-prefetch' href='//www.googletagmanager.com' />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://palark.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://palark.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<link id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=7.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=7.1' media='all' />
</noscript><style id="co-authors-plus-coauthors-style-inline-css">
.wp-block-co-authors-plus-coauthors.is-layout-flow [class*=wp-block-co-authors-plus]{display:inline}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthors/style-index.css */
</style>
<style id="co-authors-plus-avatar-style-inline-css">
.wp-block-co-authors-plus-avatar :where(img){height:auto;max-width:100%;vertical-align:bottom}.wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-avatar :where(img){vertical-align:middle}.wp-block-co-authors-plus-avatar:is(.alignleft,.alignright){display:table}.wp-block-co-authors-plus-avatar.aligncenter{display:table;margin-inline:auto}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthor-avatar/style-index.css */
</style>
<style id="co-authors-plus-image-style-inline-css">
.wp-block-co-authors-plus-image{margin-bottom:0}.wp-block-co-authors-plus-image :where(img){height:auto;max-width:100%;vertical-align:bottom}.wp-block-co-authors-plus-coauthors.is-layout-flow .wp-block-co-authors-plus-image :where(img){vertical-align:middle}.wp-block-co-authors-plus-image:is(.alignfull,.alignwide) :where(img){width:100%}.wp-block-co-authors-plus-image:is(.alignleft,.alignright){display:table}.wp-block-co-authors-plus-image.aligncenter{display:table;margin-inline:auto}
/*# sourceURL=https://palark.com/wp-content/plugins/co-authors-plus/build/blocks/block-coauthor-image/style-index.css */
</style>
<style id="safe-svg-svg-icon-style-inline-css">
.wp-block-safe-svg-svg-icon a{align-self:center}.safe-svg-cover{text-align:center}.safe-svg-cover .safe-svg-inside{display:inline-block;max-width:100%}.safe-svg-cover svg{fill:currentColor;height:100%;max-height:100%;max-width:100%;width:100%}
/*# sourceURL=https://palark.com/wp-content/plugins/safe-svg/dist/safe-svg-block-frontend.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--purple: #9540ff;--wp--preset--color--lime: #00ddba;--wp--preset--color--blue: #00a1fC;--wp--preset--color--dark: #231f20;--wp--preset--color--gray: #bcbcbc;--wp--preset--color--light-gray: #f6f6f6;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){margin-left: auto !important;margin-right: auto !important;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-color{color: var(--wp--preset--color--purple) !important;}.has-lime-color{color: var(--wp--preset--color--lime) !important;}.has-blue-color{color: var(--wp--preset--color--blue) !important;}.has-dark-color{color: var(--wp--preset--color--dark) !important;}.has-gray-color{color: var(--wp--preset--color--gray) !important;}.has-light-gray-color{color: var(--wp--preset--color--light-gray) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-background-color{background-color: var(--wp--preset--color--purple) !important;}.has-lime-background-color{background-color: var(--wp--preset--color--lime) !important;}.has-blue-background-color{background-color: var(--wp--preset--color--blue) !important;}.has-dark-background-color{background-color: var(--wp--preset--color--dark) !important;}.has-gray-background-color{background-color: var(--wp--preset--color--gray) !important;}.has-light-gray-background-color{background-color: var(--wp--preset--color--light-gray) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-purple-border-color{border-color: var(--wp--preset--color--purple) !important;}.has-lime-border-color{border-color: var(--wp--preset--color--lime) !important;}.has-blue-border-color{border-color: var(--wp--preset--color--blue) !important;}.has-dark-border-color{border-color: var(--wp--preset--color--dark) !important;}.has-gray-border-color{border-color: var(--wp--preset--color--gray) !important;}.has-light-gray-border-color{border-color: var(--wp--preset--color--light-gray) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:root :where(.wp-block-icon svg){width: 24px;}
:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-term-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-term-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
/*# sourceURL=global-styles-inline-css */
</style>
<link id='cf7apps-honeypot-frontend-css' href='/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/css/honeypot-frontend.css?ver=3.7.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='cf7apps-honeypot-frontend-css' href='/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/css/honeypot-frontend.css?ver=3.7.1' media='all' />
</noscript><link id='scriptlesssocialsharing-css' href='/wp-content/plugins/scriptless-social-sharing/includes/css/scriptlesssocialsharing-style.css?ver=3.3.1' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='scriptlesssocialsharing-css' href='/wp-content/plugins/scriptless-social-sharing/includes/css/scriptlesssocialsharing-style.css?ver=3.3.1' media='all' />
</noscript><style id="scriptlesssocialsharing-inline-css">
.scriptlesssocialsharing__buttons a.button { padding: 12px; flex: 1; }@media only screen and (max-width: 767px) { .scriptlesssocialsharing .sss-name { position: absolute; clip: rect(1px, 1px, 1px, 1px); height: 1px; width: 1px; border: 0; overflow: hidden; } }
/*# sourceURL=scriptlesssocialsharing-inline-css */
</style>
<link id='lazyload-video-css-css' href='/wp-content/plugins/lazy-load-for-videos/public/css/lazyload-shared.css?ver=2.18.11' media='all' rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" /><noscript><link rel='stylesheet' id='lazyload-video-css-css' href='/wp-content/plugins/lazy-load-for-videos/public/css/lazyload-shared.css?ver=2.18.11' media='all' />
</noscript><style id="lazyload-video-css-inline-css">
.entry-content a.lazy-load-youtube, a.lazy-load-youtube, .lazy-load-vimeo{ background-size: cover; }.titletext.youtube { display: none; }.lazy-load-div:before { content: "\25B6"; text-shadow: 0px 0px 60px rgba(0,0,0,0.8); }
/*# sourceURL=lazyload-video-css-inline-css */
</style>
<script id="theme-app-js-extra">
var backend_data = {"ajax_url":"https://palark.com/wp-admin/admin-ajax.php","current_lang":"en","second_lang":"de"};
var popup_messages = {"language_helper":{"title":"Deutsch?","text":"In&nbsp;deinen Spracheinstellungen ist Deutsch als Standardsprache eingestellt. Du kannst jetzt zur deutschen Version wechseln.","button":"Zu palark.de wechseln"}};
var palark_cf7 = {"phone_invalid":"Please enter a\u00a0valid phone number for\u00a0the\u00a0selected country.","server_error":"Something went wrong while sending your message. Please try again later."};
//# sourceURL=theme-app-js-extra
</script>
<script id="theme-app-js" defer src="/wp-content/themes/palark/assets/js/app.min.js?ver=1.6.41"></script>
<script id="theme-language-helper-js" defer src="/wp-content/themes/palark/assets/js/language-helper.min.js?ver=1.6.41"></script>
<script id="theme-cookie-banner-js" defer src="/wp-content/themes/palark/assets/js/cookie-banner.min.js?ver=1.6.41"></script>
<script id="theme-nice-select-js" defer src="/wp-content/themes/palark/assets/js/nice-select.min.js?ver=1.6.41"></script>
<script id="theme-highlight-js" defer src="/wp-content/themes/palark/assets/js/highlight.min.js?ver=1.6.41"></script>
<script id="theme-comment-js" defer src="/wp-content/themes/palark/assets/js/comment.min.js?ver=1.6.41"></script>
<script id="theme-tooltips-js" defer src="/wp-content/themes/palark/assets/js/tooltips.min.js?ver=1.6.41"></script>
<script id="theme-blog-post-toc-js" defer src="/wp-content/themes/palark/assets/js/blog-post-toc.min.js?ver=1.6.41"></script>
<script id="theme-clipboard-js" defer src="/wp-content/themes/palark/assets/js/clipboard.min.js?ver=1.6.41"></script>
<!-- Google tag (gtag.js) snippet added by Site Kit -->
<!-- Google Analytics snippet added by Site Kit -->
<script id="google_gtagjs-js" defer src="https://www.googletagmanager.com/gtag/js?id=GT-PBZC4FK" async></script>
<script id="google_gtagjs-js-after">
window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}
gtag("set","linker",{"domains":["palark.com"]});
gtag("js", new Date());
gtag("set", "developer_id.dZTNiMT", true);
gtag("config", "GT-PBZC4FK");
window._googlesitekit = window._googlesitekit || {}; window._googlesitekit.throttledEvents = []; window._googlesitekit.gtagEvent = (name, data) => { var key = JSON.stringify( { name, data } ); if ( !! window._googlesitekit.throttledEvents[ key ] ) { return; } window._googlesitekit.throttledEvents[ key ] = true; setTimeout( () => { delete window._googlesitekit.throttledEvents[ key ]; }, 5 ); gtag( "event", name, { ...data, event_source: "site-kit" } ); };
//# sourceURL=google_gtagjs-js-after
</script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://palark.com/xmlrpc.php?rsd" />
<meta name="generator" content="Site Kit by Google 1.186.0" />
<!-- OneAll.com / Social Login for WordPress / v5.10.0 -->
<script data-cfasync="false" type="text/javascript">
(function() {
var oa = document.createElement('script'); oa.type = 'text/javascript';
oa.async = true; oa.src = 'https://palark.api.oneall.com/socialize/library.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(oa, s);
})();
</script>
<style>.oneall_social_login + p.comment-notes{margin-top: 10px !important;}#login #loginform .oneall_social_login{background-color: rgba(0, 0, 0, 0.04);padding: 10px 10px 0 10px;margin-bottom: 10px;border: 1px solid rgba(0, 0, 0, 0.06);border-radius: 4px;}</style><link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/fonts.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/fonts/fonts.css?ver=1.6.41"></noscript>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/css/roboto-fonts.min.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/roboto-fonts.min.css?ver=1.6.41"></noscript>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Bold.woff" as="font" type="font/woff" crossorigin>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Medium.woff" as="font" type="font/woff" crossorigin>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/fonts/StyreneA/Regular.woff" as="font" type="font/woff" crossorigin>
<style>@media screen and (max-width:767px){:root{--wp--preset--font-size--medium:1.125rem}}html{height:100%;scroll-behavior:smooth;scroll-padding-top:110px}@media screen and (max-width:991px){html{scroll-padding-top:60px}}html ::selection{background:#9540ff;color:#fff}body{--wp--style--global--content-size:1504px;background-color:#fff;color:#231f20;font-family:Styrene A,Arial,sans-serif;font-size:14px;line-height:1.2;margin:0;min-height:100%;overflow-x:hidden}@media screen and (min-width:480px){body{font-size:16px}}main{margin-top:-4rem;position:relative}@media screen and (min-width:768px){main{margin-top:-100px}}a{color:#231f20;transition:color .2s}a:hover{text-decoration:none}p{line-height:1.6;margin:0 0 1em}p:first-child{margin-top:0}p:last-child{margin-bottom:0}ul{line-height:1.6;margin:0 0 1rem;padding-left:2.5rem}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.2;margin:0 0 10px}.h1,.h1 .bold,.h2 .bold,.h3 .bold,.h4 .bold,.h5 .bold,.h6 .bold,h1,h1 .bold,h2 .bold,h3 .bold,h4 .bold,h5 .bold,h6 .bold{text-transform:uppercase}.h1,h1{font-size:1.75rem;margin-bottom:1rem;margin-top:0}@media screen and (min-width:480px){.h1,h1{font-size:2.2rem}}@media screen and (min-width:768px){.h1,h1{font-size:2.5rem}}@media screen and (min-width:992px){.h1,h1{font-size:3rem}}.h1.margin-medium{margin-right:2rem}@media screen and (min-width:1440px){.h1.pricing-heading-chlim{max-width:35%}}@media screen and (max-width:479px){.h1.mob-xl{font-size:2.4rem}}.h1.x-large{font-size:3.6rem}@media screen and (min-width:480px){.h1.x-large{font-size:5rem}}.h1.xx-large{font-size:2.9rem}@media screen and (min-width:480px){.h1.xx-large{font-size:6rem}}.h1.absolute-center{bottom:auto;left:auto;margin:auto;position:absolute;right:auto;top:auto}.h1.home-hero-chlim{max-width:20ch}.h2,h2{font-size:1.5rem;margin-bottom:1.2rem;text-transform:uppercase}@media screen and (min-width:480px){.h2,h2{font-size:2rem}}@media screen and (min-width:768px){.h2,h2{font-size:2.5em}}@media screen and (min-width:1280px){.h2,h2{font-size:2.8rem}}.h2 img,h2 img{vertical-align:bottom}.h2.chlim---what-we-do{max-width:11ch}@media screen and (min-width:992px){.h2.chlim---what-we-do{max-width:9ch}}.h2.chlim-service-hero{max-width:20ch}.h2.snake-case{text-transform:capitalize}.h2.bold{margin-bottom:2rem}.h2.margin-top-a{margin-top:auto}.h2.margin-bottom-none{margin-bottom:0}.h2.margin-bottom-none.services{font-size:1.3rem}@media screen and (min-width:480px){.h2.margin-bottom-none.services{font-size:1.4rem}}@media screen and (min-width:768px){.h2.margin-bottom-none.services{font-size:2rem}}.h2.text-white{color:#fff}.h2.align-left{margin-right:auto}.h2.subscribe-heading{margin-bottom:1.8rem}.h2.medium{margin-bottom:0;text-decoration:none}.h2.accent span{color:#9540ff}.h3,h3{font-size:1.5em;margin-bottom:1rem}@media screen and (min-width:768px){.h3,h3{font-size:1.75rem}}@media screen and (min-width:992px){.h3,h3{font-size:2rem}}.h3.margin-bottom-s{margin-bottom:2.5rem}.h3.margin-b-m{margin-bottom:2rem}@media screen and (min-width:1280px){.h3.bold{color:#000}}.h4,h4{font-size:1.25rem;letter-spacing:-.02em;margin-bottom:0;margin-top:0}@media screen and (min-width:768px){.h4,h4{font-size:1.5rem}}.h4.medium{text-decoration:underline}.h4.medium,.h4.normal{font-weight:500}.h4.team-member-name{margin-bottom:1rem;margin-right:auto}@media screen and (min-width:1440px){.h4.team-member-name{margin-bottom:.125rem}}.h4.no-margin{margin-bottom:0}.h4.blogs{font-size:1.3rem;font-weight:700;min-height:6.1rem}@media screen and (min-width:1280px){.h4.blogs{font-size:1.4rem}}@media screen and (max-width:767px){.h4.blogs{font-size:1.5rem;line-height:148%;min-height:3rem}}.h5,h5{font-size:1.2rem;margin-bottom:1rem;margin-top:0}.h5.grey{color:#575863}.h6,h6{font-size:.75rem;margin-bottom:1rem;margin-top:10px}.bold{font-weight:700}.upper{text-transform:uppercase}.t-red{color:#f14040}.t-center{text-align:center}.accent-p,.span-purple{color:#9540ff;text-align:left}img{height:auto;max-width:100%;object-fit:contain}.link{color:#231f20;font-weight:700;text-decoration:none}.link--arrow{align-items:center;display:inline-flex;font-size:1.25rem;gap:.25rem;line-height:1.6;position:relative}.link--arrow img{filter:invert(1) brightness(0) contrast(70%);height:.875rem;position:relative;top:.125rem;transform:translateX(0);transition:transform .3s ease;width:.875rem}.link--arrow:hover img{transform:translateX(25%)}.num-list{counter-reset:num;line-height:1.6;list-style-type:none;margin:30px 0 0 45px;padding:15px 0 5px}@media screen and (min-width:992px){.num-list{font-size:20px;margin:30px 0 30px 45px}}.num-list li{padding:0 0 36px 54px;position:relative}@media screen and (min-width:992px){.num-list li{padding:0 0 0 84px}}.num-list li:last-child{padding-bottom:0}.num-list li:before{align-items:center;border:3px solid #231f20;border-radius:50%;color:#231f20;content:counters(num,".",decimal-leading-zero);counter-increment:num;display:flex;font-size:16px;font-weight:700;height:36px;justify-content:center;left:0;position:absolute;top:0;width:36px}@media screen and (min-width:992px){.num-list li:before{border-width:4px;font-size:20px;height:40px;top:4px;width:40px}}.wide-list{display:flex;flex-direction:column}.wide-list li{box-sizing:content-box}@media screen and (min-width:992px){.wide-list li{max-width:373px}.wide-list li:nth-child(2n){margin-left:auto}}.overflow-hidden{overflow:hidden}section{margin-bottom:2em;margin-top:2em}section:first-child{margin-top:0}section:last-child{margin-bottom:0}@media screen and (min-width:768px){section{margin-bottom:3em;margin-top:3em}}@media screen and (min-width:1280px){section{margin-bottom:5em;margin-top:5em}}section.has-background{padding-bottom:2em;padding-top:2em}@media screen and (min-width:768px){section.has-background{padding-bottom:3em;padding-top:3em}}@media screen and (min-width:1280px){section.has-background{padding-bottom:5em;padding-top:5em}}.hero-spacer-top{background-color:#f4f3f4;height:4.8rem}@media screen and (min-width:480px){.hero-spacer-top{height:5.5rem}}@media screen and (min-width:768px){.hero-spacer-top{height:5.4rem}}@media screen and (min-width:992px){.hero-spacer-top{height:14rem}}@media screen and (min-width:768px){.hero-spacer-top_small{height:7rem}}.g-t-10{grid-template-columns:10% auto!important}@media screen and (min-width:768px){.g-t-10{font-size:1.25rem}}.a-i-right{align-items:flex-end!important}.a-i-right .wp-block-group{width:100%}.m-b-40{margin-bottom:1.5rem}@media screen and (min-width:992px){.m-b-40{margin-bottom:2.5rem}}.m-0-auto{margin:0 auto}.p-l-0{padding-left:0!important}.container{box-sizing:border-box;margin:0 auto;max-width:100%;padding-left:20px;padding-right:20px;width:100%}@media screen and (min-width:480px){.container{padding-left:32px;padding-right:32px}}@media screen and (min-width:1440px){.container{max-width:var(--wp--style--global--content-size)}}.container--bordered{border-bottom:1px solid #231f20}.content{align-items:flex-start;display:flex;flex-direction:column;height:100%;justify-content:center;max-width:1180px;min-height:4rem;width:90%}@media screen and (min-width:1280px){.content{max-width:1340px;width:92%}}@media screen and (min-width:1440px){.content{max-width:1440px}}.content.large,.content.relative{position:relative;z-index:2}.content.large{max-width:none;width:100%}@media screen and (min-width:1280px){.content.large{width:100%}}.content.large.center{align-items:center}@media screen and (max-width:991px){.content.large.tablet-reversed{flex-direction:column-reverse}}.content.left-align{align-items:flex-start;width:90%}.content.display-flex{flex-direction:row}@media screen and (max-width:767px){.content.display-flex{align-items:center;flex-direction:column}}.content.overflow{display:none;width:100%}@media screen and (max-width:991px){.content.overflow{display:flex}}.content.align-left{align-items:flex-start}.content.reduced{width:84%}@media screen and (min-width:1280px){.content.reduced{max-width:979px}}@media screen and (min-width:1440px){.content.reduced{max-width:1160px}}.content.small-inner{align-items:center;bottom:0;flex-direction:row;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.small-inner{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.small-inner{flex-direction:column}}.content.small-hero-inner{align-items:flex-end;bottom:auto;flex-direction:row;height:45%;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.small-hero-inner{align-items:center;flex-direction:row;height:39.6%;margin-left:auto;margin-right:auto;position:absolute;z-index:-1}}@media screen and (max-width:991px){.content.small-hero-inner{flex-direction:column;height:55%}}@media screen and (max-width:767px){.content.small-hero-inner{display:none}}.content.inner-cards{align-items:center;bottom:0;flex-direction:row;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:2}@media screen and (min-width:1440px){.content.inner-cards{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.inner-cards{flex-direction:column}}@media screen and (max-width:767px){.content.inner-cards{flex-direction:column}}.content.center{align-items:flex-start}@media screen and (min-width:1440px){.content.center{align-items:flex-start}}.content.hero-content-handler{align-items:center;bottom:0;flex-direction:row;justify-content:flex-start;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:1440px){.content.hero-content-handler{align-items:center;flex-direction:row;margin-left:auto;margin-right:auto;position:absolute;z-index:10}}@media screen and (max-width:991px){.content.hero-content-handler{flex-direction:column;margin-top:3rem;position:relative;z-index:2}}.content-grid{grid-column-gap:0;grid-row-gap:0;align-items:center;grid-template-columns:minmax(30px,1fr) minmax(auto,500px) minmax(auto,700px) minmax(30px,1fr);grid-template-rows:auto}@media screen and (max-width:767px){.content-grid{grid-template-columns:1fr}}.nb{background-color:#00a1fc;color:#fff;position:sticky;top:0;z-index:92}.nb .container{align-items:center;display:flex;gap:16px;justify-content:space-between}.nb__spacer{display:none}@media screen and (min-width:992px){.nb__spacer{display:block}}.nb__content{font-size:14px;line-height:1.35}@media screen and (min-width:992px){.nb__content{font-size:16px}}.nb__content p{margin:0;padding:.5em 0}.nb__content p a{color:#fff;text-decoration:underline}.nb__content p a:hover{text-decoration:none}.nb__close{cursor:pointer;font-size:25px}.nb__close:hover{color:#fff}.header{box-shadow:0 0 10px transparent;display:flex;justify-content:center;left:0;position:sticky;top:0;transition:all .15s ease-in-out;z-index:150}@media screen and (min-width:601px){body.admin-bar .header{top:46px}}@media screen and (min-width:782px){body.admin-bar .header{top:32px}}body.header-menu-opened .header{background:#fff}@media screen and (max-width:991px){body.header-menu-opened .header{position:fixed;right:0;top:0!important;width:100%}}.header_float{background:#fff}.header__logo{height:28px}@media screen and (min-width:1280px){.header__logo{height:40px}}.header__logo>*{height:100%;width:auto}.header__content{align-items:center;display:flex;justify-content:space-between;width:100%}@media screen and (min-width:768px){.header__content{height:100px}}@media screen and (min-width:992px){.header__controls{align-items:center;display:flex;flex:1;position:relative}}@media screen and (max-width:991px){.header__controls{display:contents}}.header__right{align-items:center;display:flex;gap:2.5rem;margin-left:2em}@media screen and (min-width:1440px){.header__right{gap:3.125rem}}@media screen and (max-width:991px){.header__right{display:contents}}.header__title{align-items:center;display:flex;flex-direction:row}.header__title img{max-height:22px}@media screen and (min-width:768px){.header__title img{max-height:26px}}@media screen and (min-width:992px){.header__title img{max-height:none}}.header__hamburger{cursor:pointer;display:inline-block;flex-shrink:0;height:1rem;position:relative;transition:.3s;width:1.5rem}@media screen and (min-width:992px){.header__hamburger{display:none}}.header__hamburger span{background:#141f2e;border-radius:8px;display:block;height:.125rem;position:absolute;transition:.5s cubic-bezier(.8,.5,.2,1.4);width:100%}.header__hamburger span:first-child{left:0;top:0}.header__hamburger span:nth-child(2){left:0;top:50%;transform:translateY(-50%)}.header__hamburger span:nth-child(3){bottom:0;left:0}body.header-menu-opened .header__hamburger{transition:.2s cubic-bezier(.8,.5,.2,1.4)}body.header-menu-opened .header__hamburger span:first-child{transform:rotate(-45deg) translate(-4px,6px)}body.header-menu-opened .header__hamburger span:nth-child(2){opacity:0;transform:translate(100%,-50%)}body.header-menu-opened .header__hamburger span:nth-child(3){transform:rotate(45deg) translate(-4px,-6px)}@media screen and (min-width:992px){.header .nav{align-items:center;display:flex;font-size:.85rem;gap:1rem;justify-content:space-between;list-style:none;margin:0;padding:0}}@media screen and (min-width:1280px){.header .nav{font-size:1rem;gap:2rem}}@media screen and (min-width:992px){.header .nav .sub-menu{background-color:#f3f3f3;border:1px solid #7e7e7e;border-radius:1px;display:flex;flex-direction:column;gap:1rem 1.875rem;list-style:none;margin:0;min-width:240px;padding:1.5rem}.header .nav .sub-menu-container{left:-2em;opacity:0;padding-top:1.5rem;position:absolute;transform:scale(.75) translateY(19px);transform-origin:50% 0;transition:all .2s cubic-bezier(.5,0,0,1.25),opacity .15s ease-out;visibility:hidden;z-index:100}.header .nav .sub-menu-container--grouped{left:auto;max-width:calc(100vw - 2.5rem);min-width:52.0625rem;right:0;width:max-content}.header .nav .sub-menu a{color:#231f20;text-decoration:none;white-space:nowrap}.header .nav .sub-menu a:hover{color:#9540ff}.header .nav .sub-menu:not(.grouped-menu,.two-columns){width:max-content}.header .nav .sub-menu.two-columns{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);width:100%}.header .nav .sub-menu.grouped-menu{column-gap:1.875rem;display:grid;grid-template-columns:minmax(max-content,1fr) minmax(max-content,1fr);row-gap:2rem;width:100%}.header .nav .sub-menu.grouped-menu .menu-group{display:block;padding-right:0}.header .nav .sub-menu.grouped-menu .menu-group:nth-child(2){grid-column:2;grid-row:1/span 2}.header .nav .sub-menu.grouped-menu .menu-group:nth-child(3){grid-column:1;grid-row:2}.header .nav .sub-menu.grouped-menu .menu-group__title{display:block;font-size:.875rem;font-weight:700;line-height:1.1875rem;text-transform:uppercase;white-space:nowrap}}@media screen and (min-width:992px)and (min-width:1280px){.header .nav .sub-menu.grouped-menu .menu-group__title{font-size:1rem}}@media screen and (min-width:992px){.header .nav .sub-menu.grouped-menu .menu-group__items{align-items:flex-start;display:flex;flex-direction:column;gap:1.25rem;list-style:none;margin:1.25rem 0 0;padding:0}.header .nav .sub-menu.grouped-menu>.menu-item__last{grid-column:1/-1}.header .nav .sub-menu .menu-item__icon{display:inline-block;height:1.125rem;margin-right:.25rem;object-fit:contain;vertical-align:middle;width:1.125rem}.header .nav .sub-menu .menu-item__last{border-top:1px solid #7e7e7e;grid-column:1/-1;padding-top:1rem}}.header .nav a{color:#231f20;font-size:1rem;text-decoration:none;white-space:nowrap}.header .nav a:hover{color:#9540ff}@media screen and (min-width:768px){.header .nav a{font-size:1.125rem}}@media screen and (min-width:992px){.header .nav a{font-size:.85rem}}@media screen and (min-width:1280px){.header .nav a{font-size:1rem}}.header .nav a[target=_blank]{align-items:center;display:inline-flex}.header .nav a[target=_blank]:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 1024 1024'%3E%3Cpath d='M960 704c-35.346 0-64 28.654-64 64v64c0 35.346-28.654 64-64 64H192c-35.346 0-64-28.654-64-64V192c0-35.346 28.654-64 64-64h64c35.346 0 64-28.654 64-64S291.346 0 256 0h-64C85.961 0 0 85.961 0 192v640c0 106.039 85.961 192 192 192h640c106.039 0 192-85.961 192-192v-64c0-35.346-28.654-64-64-64z'/%3E%3Cpath d='M1023.876 51.52c0-1.92 0-3.84-1.6-5.44a63.957 63.957 0 0 0-1.92-6.4 63.973 63.973 0 0 0-3.2-6.4s0-3.2-2.56-4.8a63.989 63.989 0 0 0-17.6-17.6L991.876 8l-6.08-3.2-6.72-1.92h-5.44A64.028 64.028 0 0 0 959.876 0h-384c-35.346 0-64 28.654-64 64s28.654 64 64 64h229.44l-370.56 370.88c-25.007 25.007-25.007 65.553 0 90.56s65.553 25.007 90.56 0l370.56-370.88V448c0 35.346 28.654 64 64 64s64-28.654 64-64V64c.407-4.15.407-8.33 0-12.48z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:contain;content:"";display:inline-block;height:.875rem;margin-left:.375rem;width:.875rem}@media screen and (max-width:991px){.header .nav .current-menu-item a,.header .nav .current_page_parent a{color:#818181!important}}@media screen and (min-width:992px){.header .nav>.current-menu-item:not(:has(>.sub-menu-container))>a,.header .nav>.current_page_parent:not(:has(>.sub-menu-container))>a{color:#818181!important}.header .nav .sub-menu .current-menu-item>a{color:#818181!important}}.header .button.pc-only-button{font-size:1rem;min-height:3rem;min-width:10rem;padding:.5rem 1.5rem}@media screen and (max-width:991px){.header .button.pc-only-button{display:none}}@media screen and (min-width:992px){.header .menu-item-has-children{display:inline-block;padding-right:1.625rem;position:relative}.header .menu-item-has-children.menu-item--grouped-submenu{position:static}.header .menu-item-has-children:hover .sub-menu-container{opacity:1;transform:scale(1);visibility:visible}.header .menu-item-has-children:hover>a{color:#9540ff}.header .menu-item-has-children:hover>a:after{border-color:#9540ff;transform:rotate(-135deg)}.header .menu-item-has-children>a{cursor:pointer;display:inline-block;position:relative}.header .menu-item-has-children>a:after{border-bottom:1.5px solid #000;border-right:1.5px solid #000;content:"";display:block;height:5px;margin-top:-3px;pointer-events:none;position:absolute;right:-.875rem;top:50%;transform:rotate(45deg);transform-origin:66% 66%;transition:all .15s ease-in-out;width:5px}}@media screen and (min-width:992px)and (min-width:1280px){.header .menu-item-has-children>a:after{border-width:2px}}.header .language-links{display:flex;font-size:14px;gap:1em;margin:0 auto 0 1.25em}@media screen and (min-width:480px){.header .language-links{margin:0 auto 0 3em}}@media screen and (min-width:1280px){.header .language-links{font-size:16px}}.header .language-links a{color:#231f20;text-decoration:none}.header .language-links a:hover{color:#9540ff}.header .language-links a.active{color:#9540ff;position:relative}@media screen and (min-width:768px){.header .language-links a.active{font-weight:600}}.header .language-links a.active:after{background-color:#9540ff;bottom:-.2em;content:"";height:2px;left:0;position:absolute;width:100%}@media screen and (min-width:768px){.header .language-links a.active:after{bottom:-.45em;height:3px}}html:has(body.header-menu-opened){overflow:hidden;overscroll-behavior:none}body.header-menu-opened{overflow:hidden;overscroll-behavior:none;transition:.2s}body.header-menu-opened:after{background-color:rgba(0,0,0,.5);content:"";height:100%;position:fixed;width:100%;z-index:55}.header__menu{background:#fff;bottom:0;box-sizing:border-box;display:block;height:100dvh;overflow:auto;overscroll-behavior:contain;position:fixed;right:-100vw;top:0;transition:.2s;width:100vw;z-index:-1}@media screen and (min-width:992px){.header__menu{display:contents}.header__menu .sidebar__buttons{display:none}.header__menu>div.container{display:contents}.header__menu>div.container>a{display:none}}body.header-menu-opened .header__menu{left:0;z-index:60}.header__menu .container{align-items:flex-start;display:flex;flex-direction:column;padding-bottom:5rem;padding-top:1.375rem}@media screen and (max-width:991px){.header__menu .container{padding:.625rem 1.25rem 1.5rem}.header__menu .container>a{display:none}.header__menu .container .sidebar__buttons{margin:0 0 2.125rem}.header__menu .container .sidebar__buttons .button{border-radius:1rem;font-size:1rem;height:3rem;line-height:1.6;margin:0;padding:0 1.5rem;white-space:nowrap;width:10rem}}.header__menu .container>a{font-size:1rem;margin:1rem 0;text-decoration:none}@media screen and (min-width:768px){.header__menu .container>a{font-size:1.125rem}}.header__menu .container>a:hover{color:#9540ff}.header__menu .container>a.button--dark{margin:2rem auto}@media screen and (min-width:480px){.header__menu .container>a.button--dark{margin:2.5rem auto 2rem}}.header__menu ul{align-items:flex-start;display:flex;flex-direction:column;gap:1rem;list-style:none;margin:0;padding:0}@media screen and (min-width:768px){.header__menu ul{font-size:1rem}}@media screen and (min-width:992px){.header__menu ul{flex-direction:row}}@media screen and (max-width:991px){.header__menu .sidebar__nav{gap:.5rem;width:100%}.header__menu li{align-items:flex-start;display:flex;flex-direction:column;width:100%}.header__menu .menu-item-has-children>a{align-items:center;box-sizing:border-box;color:#231f20;cursor:text;display:flex;min-height:3rem;padding:.875rem 3rem .875rem 1rem;position:relative;user-select:none;width:100%}.header__menu .menu-item-has-children>a:after{background:url(https://palark.com/wp-content/themes/palark/assets/fonts/menu-chevron.svg) 50%/contain no-repeat;content:"";cursor:pointer;height:1.5rem;position:absolute;right:1rem;top:50%;transform:translateY(-50%);transition:transform .2s ease;width:1.5rem}.header__menu .menu-item-has-children.open{background-color:#f4f3f4}.header__menu .menu-item-has-children.open>a:after{transform:translateY(-50%) rotate(180deg)}.header__menu .menu-item__icon{display:inline-block;flex:0 0 1.125rem;height:1.125rem;margin-right:.25rem;object-fit:contain;vertical-align:middle;width:1.125rem}.header__menu .sidebar__nav>.menu-item:not(.menu-item-has-children)>a{align-items:center;box-sizing:border-box;display:flex;min-height:3rem;padding:.875rem 1rem;width:100%}}.header__menu .sub-menu-container{position:relative}@media screen and (max-width:991px){.header__menu .sub-menu-container{box-sizing:border-box;display:none;padding:0 1rem 1rem;width:100%}}.header__menu .sub-menu-container .menu-item{position:relative}@media screen and (max-width:991px){.header__menu .sub-menu-container .menu-item{display:block}.header__menu .menu-item-has-children.open>.sub-menu-container{display:block;padding-top:1rem}.header__menu .sub-menu{gap:1.25rem;width:100%}.header__menu .sub-menu a{align-items:center;color:#231f20;display:flex;font-size:1rem;line-height:1.6;text-decoration:none;white-space:normal;width:100%}.header__menu .sub-menu.grouped-menu{gap:2rem}.header__menu .sub-menu.grouped-menu .menu-group{display:block}.header__menu .sub-menu.grouped-menu .menu-group__title{display:block;font-size:1rem;font-weight:700;line-height:1.2;text-transform:uppercase}.header__menu .sub-menu.grouped-menu .menu-group__items{display:flex;flex-direction:column;gap:1.25rem;margin:1.25rem 0 0;padding:0}.header__menu .sub-menu.grouped-menu>.menu-item__last{border-top:.0625rem solid #7e7e7e;padding-top:1.5rem}}.header__menu__footer{align-items:flex-end;display:flex;justify-content:space-between;padding-bottom:1.25rem}.header__menu__footer .socials{align-items:center;display:flex;gap:15px}.header__menu__footer .socials a{width:1.875rem}.header__menu__footer .socials svg{display:block;height:auto;width:100%}.header__menu__buttons{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.header__menu__buttons .button{margin:0}.button--black.button,.button--black.wpcf7-submit,.menu-item.button a,.wp-block-button a,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{align-items:center;border:0;border-radius:1rem;box-sizing:border-box;display:inline-flex;font-size:1.25rem;font-weight:700;justify-content:center;line-height:1.6;min-height:3.5rem;min-width:11.25rem;padding:.75rem 1.75rem;position:relative;text-align:center;text-decoration:none;transition:background-color .3s cubic-bezier(.123,.837,.404,.902),border-color .3s cubic-bezier(.123,.837,.404,.902),color .3s cubic-bezier(.123,.837,.404,.902);user-select:none;width:fit-content}@media screen and (max-width:479px){.button--black.button,.button--black.wpcf7-submit,.menu-item.button a,.wp-block-button a,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{font-size:1.125rem}}.button--black.button:not(:disabled):not([aria-disabled=true]),.button--black.wpcf7-submit:not(:disabled):not([aria-disabled=true]),.menu-item.button a:not(:disabled):not([aria-disabled=true]),.wp-block-button a:not(:disabled):not([aria-disabled=true]),a.button:not(:disabled):not([aria-disabled=true]),a.wpcf7-submit:not(:disabled):not([aria-disabled=true]),button.button:not(:disabled):not([aria-disabled=true]),button.wpcf7-submit:not(:disabled):not([aria-disabled=true]),input.button:not(:disabled):not([aria-disabled=true]),input.wpcf7-submit:not(:disabled):not([aria-disabled=true]){cursor:pointer}.button--black.button:disabled,.button--black.wpcf7-submit:disabled,.menu-item.button a:disabled,.menu-item.button a[aria-disabled=true],.wp-block-button a:disabled,.wp-block-button a[aria-disabled=true],[aria-disabled=true].button--black.button,[aria-disabled=true].button--black.wpcf7-submit,a.button:disabled,a.wpcf7-submit:disabled,a[aria-disabled=true].button,a[aria-disabled=true].wpcf7-submit,button.button:disabled,button.wpcf7-submit:disabled,button[aria-disabled=true].button,button[aria-disabled=true].wpcf7-submit,input.button:disabled,input.wpcf7-submit:disabled,input[aria-disabled=true].button,input[aria-disabled=true].wpcf7-submit{cursor:not-allowed;opacity:.65}.button--black.button:focus-visible,.button--black.wpcf7-submit:focus-visible,.menu-item.button a:focus-visible,.wp-block-button a:focus-visible,a.button:focus-visible,a.wpcf7-submit:focus-visible,button.button:focus-visible,button.wpcf7-submit:focus-visible,input.button:focus-visible,input.wpcf7-submit:focus-visible{outline:.1875rem solid #9540ff;outline-offset:.1875rem}.button--small.button--black.button,.button--small.button--black.wpcf7-submit,.menu-item.button a.button--small,.wp-block-button a.button--small,a.button--small.button,a.button--small.wpcf7-submit,button.button--small.button,button.button--small.wpcf7-submit,input.button--small.button,input.button--small.wpcf7-submit{border-radius:8px;font-size:.875rem;gap:10px;line-height:1.6;min-height:0;min-width:0;padding:4px 10px 5px 16px;width:fit-content}@media screen and (max-width:479px){.button--small.button--black.button,.button--small.button--black.wpcf7-submit,.menu-item.button a.button--small,.wp-block-button a.button--small,a.button--small.button,a.button--small.wpcf7-submit,button.button--small.button,button.button--small.wpcf7-submit,input.button--small.button,input.button--small.wpcf7-submit{font-size:1.125rem}}.button--upload.button--black.button,.button--upload.button--black.wpcf7-submit,.menu-item.button a.button--upload,.wp-block-button a.button--upload,a.button--upload.button,a.button--upload.wpcf7-submit,button.button--upload.button,button.button--upload.wpcf7-submit,input.button--upload.button,input.button--upload.wpcf7-submit{background-color:#fff;border-color:#00ddba;border-style:dashed;color:#000;font-size:1rem;font-weight:400;min-height:0;min-width:0;width:100%}.button--upload.button--black.button:hover,.button--upload.button--black.wpcf7-submit:hover,.menu-item.button a.button--upload:hover,.wp-block-button a.button--upload:hover,a.button--upload.button:hover,a.button--upload.wpcf7-submit:hover,button.button--upload.button:hover,button.button--upload.wpcf7-submit:hover,input.button--upload.button:hover,input.button--upload.wpcf7-submit:hover{background-color:inherit;border-style:solid}.button--red.button--black.button,.button--red.button--black.wpcf7-submit,.menu-item.button a.button--red,.wp-block-button a.button--red,a.button--red.button,a.button--red.wpcf7-submit,button.button--red.button,button.button--red.wpcf7-submit,input.button--red.button,input.button--red.wpcf7-submit{background-color:#f14040;border:2px solid #f14040;color:#fff}.button--red_border.button--black.button,.button--red_border.button--black.wpcf7-submit,.menu-item.button a.button--red_border,.wp-block-button a.button--red_border,a.button--red_border.button,a.button--red_border.wpcf7-submit,button.button--red_border.button,button.button--red_border.wpcf7-submit,input.button--red_border.button,input.button--red_border.wpcf7-submit{background-color:transparent;border:2px solid #f14040;color:#f14040}.button--red_border.button--black.button:hover,.button--red_border.button--black.wpcf7-submit:hover,.menu-item.button a.button--red_border:hover,.wp-block-button a.button--red_border:hover,a.button--red_border.button:hover,a.button--red_border.wpcf7-submit:hover,button.button--red_border.button:hover,button.button--red_border.wpcf7-submit:hover,input.button--red_border.button:hover,input.button--red_border.wpcf7-submit:hover{background-color:#f14040;color:#fff}.loading.button--black.button,.loading.button--black.button:hover,.loading.button--black.wpcf7-submit,.loading.button--black.wpcf7-submit:hover,.menu-item.button a.loading,.menu-item.button a.loading:hover,.wp-block-button a.loading,.wp-block-button a.loading:hover,a.loading.button,a.loading.button:hover,a.loading.wpcf7-submit,a.loading.wpcf7-submit:hover,button.loading.button,button.loading.button:hover,button.loading.wpcf7-submit,button.loading.wpcf7-submit:hover,input.loading.button,input.loading.button:hover,input.loading.wpcf7-submit,input.loading.wpcf7-submit:hover{background-color:#bcbcbc}.button--black.button,.button--black.wpcf7-submit,a.button,a.wpcf7-submit,button.button,button.wpcf7-submit,input.button,input.wpcf7-submit{background-color:#231f20;color:#fff}.button--black.button:before,.button--black.wpcf7-submit:before,a.button:before,a.wpcf7-submit:before,button.button:before,button.wpcf7-submit:before,input.button:before,input.wpcf7-submit:before{left:-4px}.button--black.button:after,.button--black.wpcf7-submit:after,a.button:after,a.wpcf7-submit:after,button.button:after,button.wpcf7-submit:after,input.button:after,input.wpcf7-submit:after{right:-4px}.button--black.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),.button--black.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),a.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),a.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),button.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),button.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active),input.button:not(:disabled):not([aria-disabled=true]):is(:hover,:active),input.wpcf7-submit:not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:#0fdfbd;color:#231f20}.button--black.button.full-width,.button--black.wpcf7-submit.full-width,a.button.full-width,a.wpcf7-submit.full-width,button.button.full-width,button.wpcf7-submit.full-width,input.button.full-width,input.wpcf7-submit.full-width{width:100%}@media screen and (max-width:767px){.buttons-row,.buttons-row .button{width:100%}}@media screen and (max-width:479px){.pricing-cta .buttons-row .button{font-size:1.125rem}}.menu-item.button--primary a,.wp-block-button--primary a{background-color:#231f20;color:#fff}.menu-item.button--primary a:is(:hover,:active),.wp-block-button--primary a:is(:hover,:active){background-color:#0fdfbd;color:#231f20}.all_link{align-items:center;display:inline-flex;font-size:1.125rem;font-weight:700;gap:1rem;margin-top:1.5rem;text-decoration:none}@media screen and (min-width:768px){.all_link:hover span{left:-4px}}@media screen and (min-width:992px){.all_link{font-size:1.25rem}}.all_link span{height:24px;left:0;position:relative;transition:.3s;width:24px}.wp-block-group.button--red .button{background-color:#f14040;border:2px solid #f14040;color:#fff}.wp-block-group.button--red .button_border{background-color:transparent;border:2px solid #f14040;color:#f14040}.wp-block-group.button--red .button_border:hover{background-color:#f14040;color:#fff}.wp-block-group-mail{position:relative}.wp-block-group-mail:after{content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMuNTU1IDcuMTY4YTEgMSAwIDEgMC0xLjExIDEuNjY0bDEuMTEtMS42NjRabTcuMzM2IDYuMDkyLjU1NC0uODMyLS41NTQuODMyWm0yLjIxOCAwLS41NTQtLjgzMi41NTQuODMyWm04LjQ0Ni00LjQyOGExIDEgMCAxIDAtMS4xMS0xLjY2NGwxLjExIDEuNjY0Wm0tMTkuMTEgMCA3Ljg5IDUuMjYgMS4xMS0xLjY2NC03Ljg5LTUuMjYtMS4xMSAxLjY2NFptNy44OSA1LjI2YTMgMyAwIDAgMCAzLjMzIDBsLTEuMTEtMS42NjRhMSAxIDAgMCAxLTEuMTEgMGwtMS4xMSAxLjY2NFptMy4zMyAwIDcuODktNS4yNi0xLjExLTEuNjY0LTcuODkgNS4yNiAxLjExIDEuNjY0Wk01IDIwaDE0di0ySDV2MlptMTQgMGEzIDMgMCAwIDAgMy0zaC0yYTEgMSAwIDAgMS0xIDF2MlptMy0zVjdoLTJ2MTBoMlptMC0xMGEzIDMgMCAwIDAtMy0zdjJhMSAxIDAgMCAxIDEgMWgyWm0tMy0zSDV2MmgxNFY0Wk01IDRhMyAzIDAgMCAwLTMgM2gyYTEgMSAwIDAgMSAxLTFWNFpNMiA3djEwaDJWN0gyWm0wIDEwYTMgMyAwIDAgMCAzIDN2LTJhMSAxIDAgMCAxLTEtMUgyWiIvPjwvc3ZnPg==);height:24px;margin-left:.5rem;position:relative;width:24px}.button.mt-40{margin-top:40px}.button.margin-top-small{margin-right:auto;margin-top:2rem}.button.margin-top-small.center{align-items:center}.button.hidden{display:none}.button.read-more{font-size:1rem;font-weight:500;margin-top:2rem;padding:.7rem 1.5rem}.button.read-more,.button.round{color:#fff;flex-direction:row;line-height:100%}.button.round{border-radius:50px;font-weight:700;height:2rem;margin-top:2.5rem;padding:0;width:2rem}.button.margin-bottom-m{margin-bottom:1.8rem}.button.submit-contact-form{margin-left:auto;margin-top:2.375rem}.button.outline{background-color:#fff;box-shadow:inset 0 0 0 .125rem #231f20;color:#000}.button.mr-s{margin-right:1.2rem}.button.no-transitions-duplicate-page{transition-property:none}.button.center{margin-left:auto;margin-right:auto}.button-mail{position:relative}.button-mail:after{content:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMuNTU1IDcuMTY4YTEgMSAwIDEgMC0xLjExIDEuNjY0bDEuMTEtMS42NjRabTcuMzM2IDYuMDkyLjU1NC0uODMyLS41NTQuODMyWm0yLjIxOCAwLS41NTQtLjgzMi41NTQuODMyWm04LjQ0Ni00LjQyOGExIDEgMCAxIDAtMS4xMS0xLjY2NGwxLjExIDEuNjY0Wm0tMTkuMTEgMCA3Ljg5IDUuMjYgMS4xMS0xLjY2NC03Ljg5LTUuMjYtMS4xMSAxLjY2NFptNy44OSA1LjI2YTMgMyAwIDAgMCAzLjMzIDBsLTEuMTEtMS42NjRhMSAxIDAgMCAxLTEuMTEgMGwtMS4xMSAxLjY2NFptMy4zMyAwIDcuODktNS4yNi0xLjExLTEuNjY0LTcuODkgNS4yNiAxLjExIDEuNjY0Wk01IDIwaDE0di0ySDV2MlptMTQgMGEzIDMgMCAwIDAgMy0zaC0yYTEgMSAwIDAgMS0xIDF2MlptMy0zVjdoLTJ2MTBoMlptMC0xMGEzIDMgMCAwIDAtMy0zdjJhMSAxIDAgMCAxIDEgMWgyWm0tMy0zSDV2MmgxNFY0Wk01IDRhMyAzIDAgMCAwLTMgM2gyYTEgMSAwIDAgMSAxLTFWNFpNMiA3djEwaDJWN0gyWm0wIDEwYTMgMyAwIDAgMCAzIDN2LTJhMSAxIDAgMCAxLTEtMUgyWiIvPjwvc3ZnPg==);height:24px;margin-left:.5rem;position:relative;width:24px}.small-hero-inner{align-items:flex-end;bottom:auto;flex-direction:row;height:45%;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;top:0;z-index:-1}@media screen and (min-width:768px){.small-hero-inner{flex-direction:column;height:55%}}@media screen and (min-width:992px){.small-hero-inner{flex-direction:column;height:55%}}@media screen and (min-width:1440px){.small-hero-inner{align-items:center;flex-direction:row;height:39.6%;margin-left:auto;margin-right:auto;position:absolute;z-index:-1}}.hero.hero-main{background:#01a2fd;overflow:hidden;position:relative}.hero.hero-main.section{margin-bottom:1.5rem;margin-top:4.5rem;padding:3.5rem 0}@media screen and (min-width:768px){.hero.hero-main.section{margin-bottom:2rem;margin-top:6rem;padding:4.5rem 0}}@media screen and (min-width:992px){.hero.hero-main.section{padding:6.5rem 0}}.hero__row{align-items:center;display:flex;flex-direction:row;justify-content:flex-end;width:100%}.hero__section-top{gap:2.5rem;height:100%;position:relative;z-index:5}.hero__heading-wrap,.hero__section-top{display:flex;flex-direction:column;width:100%}.hero__heading-wrap{row-gap:1.5rem}.hero__heading-wrap h1{font-size:1.75rem;margin-bottom:0}@media screen and (min-width:992px){.hero__heading-wrap h1{font-size:2.5rem}}.hero__heading-wrap h1 span{color:#fff}.hero__buttons{align-items:center;display:flex;gap:1.25rem}.hero__buttons .button:not(:disabled):not([aria-disabled=true]):is(:hover,:active){background-color:#fff;color:#231f20}.hero-card-right{align-items:flex-start;display:flex;flex-direction:column;justify-content:flex-start;margin-left:auto;width:100%}@media screen and (max-width:479px){.hero-card-right{height:auto}}.hero-card-right.negative-margin-top{height:auto;margin-top:-2.7rem;min-width:55%;padding-top:2.75rem;width:auto}@media screen and (max-width:991px){.hero-card-right.negative-margin-top{height:50%}}@media screen and (max-width:767px){.hero-card-right.negative-margin-top{width:41%}}@media screen and (max-width:479px){.hero-card-right.negative-margin-top{padding-bottom:.625rem}}.hero-card-right.purple{background-color:#a55cff;width:50%}@media screen and (max-width:991px){.hero-card-right.purple{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.purple{margin-top:0;width:100%}}@media screen and (max-width:479px){.hero-card-right.purple{height:40%;width:100%}}.hero-card-right.blue{background-color:#00a1fc;display:flex;min-width:50%;overflow:visible;width:55%}@media screen and (min-width:992px)and (max-width:1280px){.hero-card-right.blue{margin-bottom:60px;max-width:46%;min-width:40%}}@media screen and (max-width:991px){.hero-card-right.blue{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.blue{margin-top:0;width:80%}}@media screen and (max-width:479px){.hero-card-right.blue{height:40%;width:100%}}.hero-card-right.green{background-color:#0fdfbd;max-width:56%;min-width:50%}@media screen and (min-width:992px)and (max-width:1280px){.hero-card-right.green{margin-bottom:200px;max-width:46%;min-width:40%}}@media screen and (max-width:991px){.hero-card-right.green{margin-top:0;min-width:40%;width:100%}}@media screen and (max-width:767px){.hero-card-right.green{margin-top:0;max-width:100%;width:100%}}@media screen and (max-width:479px){.hero-card-right.green{height:40%;width:100%}}.hero__image{height:100%;margin-left:auto}.hero__image-block-left{display:none}@media screen and (min-width:768px){.hero__image-block-left{align-items:center;bottom:-1%;display:flex;height:100%;justify-content:flex-end;max-width:75%;position:absolute;right:-35%;top:auto;width:100%;z-index:0}}@media screen and (min-width:992px){.hero__image-block-left{max-width:100%;right:-15%}}@media screen and (min-width:1280px){.hero__image-block-left{right:0}}@media screen and (min-width:1600px){.hero__image-block-left{min-height:615px}}.hero__image-wrap{margin-bottom:4.2rem}.hero__subtext{flex-direction:column;font-size:1rem;height:auto;line-height:160%;margin-right:auto;max-width:475px;position:relative}@media screen and (min-width:480px){.hero__subtext{font-size:1.125rem}}@media screen and (min-width:992px){.hero__subtext{font-size:1.25rem}}.hero__subtext-right{flex-direction:column;height:auto;margin-bottom:2.1rem;margin-left:auto;margin-top:auto}@media screen and (max-width:991px){.hero__subtext-right{margin-bottom:2.4rem;margin-top:-6%}}@media screen and (max-width:767px){.hero__subtext-right{font-size:.9rem;margin-top:-6%}}@media screen and (max-width:479px){.hero__subtext-right{font-size:.7rem;margin-bottom:2.5rem;margin-top:-8%}}.hero__block-left{display:flex;flex-direction:column;margin-right:5%;min-width:45%}.hero__block-left.center-vert{align-items:flex-start;flex-direction:column;justify-content:flex-end}.hero__block-left.mob-landscape-mt-2{justify-content:center;width:47%}@media screen and (min-width:992px)and (max-width:1280px){.hero__block-left.mob-landscape-mt-2{width:56%}}.hero__block-left.neg-margin-top{max-width:46%}@media screen and (min-width:992px)and (max-width:1280px){.hero__block-left.neg-margin-top{max-width:56%;width:56%}}.hero__img{align-items:center;display:flex;flex-direction:column;justify-content:flex-start;margin-top:110px;position:relative;width:100%}@media screen and (max-width:991px){.hero__img{margin-top:90px}}@media screen and (max-width:767px){.hero__img{margin-top:80px}}@media screen and (max-width:479px){.hero__img{margin-top:70px}}</style>
<link rel="preload" href="https://palark.com/wp-content/themes/palark/assets/css/main.min.css?ver=1.6.41" as="style" onload="this.onload=null;this.rel='stylesheet'"><noscript><link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/main.min.css?ver=1.6.41" media=""></noscript>
<link rel="stylesheet" href="https://palark.com/wp-content/themes/palark/assets/css/blog.min.css?ver=1.6.41" media="">
<link rel="alternate" type="application/rss+xml" title="Palark » Blog Feed" href="https://palark.com/blog/feed/">
<link rel="icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" sizes="32x32" />
<link rel="icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://palark.com/wp-content/uploads/2023/07/favicon.png" />
<meta name="msapplication-TileImage" content="https://palark.com/wp-content/uploads/2023/07/favicon.png" />
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M4P3BZ5');</script>
<!-- End Google Tag Manager -->
</head>
<body class="wp-singular post-template-default single single-post postid-2765 single-format-standard wp-custom-logo wp-theme-palark">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M4P3BZ5"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be&nbsp;called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="https://palark.matomo.cloud/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='//cdn.matomo.cloud/palark.matomo.cloud/matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code --> <header class="header">
<div class="content">
<div class="header__content">
<a href="https://palark.com/" class="header__logo">
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 18" fill="none"><path fill="#231F20" d="M87.77 3.18h-2.98v13.53h2.98V3.18ZM100 3.18h-3.68l-6.85 6.76 6.85 6.77H100l-6.85-6.77L100 3.18ZM31.33 12.68 23.4.5l-7.9 12.18h3.54l4.36-7.03 4.37 7.03h3.55ZM62.25 12.68 54.33.5l-7.9 12.18h3.54l4.36-7.03 4.36 7.03h3.56ZM80.14 16.71l-3.76-4.36a4.76 4.76 0 0 0-1.75-9.17h-9.22v13.53h2.98V5.91h6.25a2.01 2.01 0 1 1 0 4.03H71.2l-1.46 2.74h3.5l3.48 4.03h3.44ZM9.23 3.18H0v13.53h2.99V5.91h6.25a2.01 2.01 0 1 1 0 4.03H5.78l-1.46 2.74h4.92a4.75 4.75 0 0 0 0-9.5h-.01ZM37.78 13.98V3.18H34.8v13.53h8.8l1.76-2.73h-7.58Z"></path></svg> </a>
<div class="header__controls">
<div class="language-links">
<a class="active">En</a><a class="second" href="https://palark.de/">De</a></div> <div class="header__right">
<div class="header__menu">
<div class="container">
<div class="sidebar__buttons">
<a href="/contact-us/"
class="button button--dark">Contact us</a>
</div>
<a href="/" class="">Home</a>
<ul id="top-header-nav" class="nav sidebar__nav"><li id="menu-item-16" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item--grouped-submenu"><a>Services</a>
<div class='sub-menu-container sub-menu-container--grouped'><ul class='sub-menu grouped-menu'>
<li id="menu-item-16247" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Continuous Support</span>
<ul class='menu-group__items'>
<li id="menu-item-1395" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/sre-as-a-service/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/sre.svg" alt="" class="menu-item__icon">SRE as a Service</a></li>
<li id="menu-item-1392" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/devops-as-a-service/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/DevOps-as-a-Service.svg" alt="" class="menu-item__icon">DevOps as a Service</a></li>
<li id="menu-item-4386" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/devops-insurance/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/devops.svg" alt="" class="menu-item__icon">DevOps insurance</a></li>
</ul>
</li>
<li id="menu-item-16248" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Time &#038; Materials</span>
<ul class='menu-group__items'>
<li id="menu-item-1394" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/cloud-server-audit/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Infrastructure.svg" alt="" class="menu-item__icon">Infrastructure &amp; CI/CD audit</a></li>
<li id="menu-item-1393" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/kubernetes-migration-cloud-enablement/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Cloud.svg" alt="" class="menu-item__icon">Kubernetes and cloud migration</a></li>
<li id="menu-item-1396" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/technology-consulting/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/RD.svg" alt="" class="menu-item__icon">R&amp;D and technology consulting</a></li>
</ul>
</li>
<li id="menu-item-16249" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-group"><span class="menu-group__title">Industry Solutions</span>
<ul class='menu-group__items'>
<li id="menu-item-498" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/kubernetes-support/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Kubernative.svg" alt="" class="menu-item__icon">Kubernetes support</a></li>
<li id="menu-item-89" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/solution-for-saas/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Solution.svg" alt="" class="menu-item__icon">Solution for SaaS</a></li>
<li id="menu-item-2131" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/private-self-hosted-llm/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Private.svg" alt="" class="menu-item__icon">Private, self-hosted LLM</a></li>
<li id="menu-item-4514" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/vercel-alternative-migration/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Migration.svg" alt="" class="menu-item__icon">Migration from Vercel</a></li>
</ul>
</li>
<li id="menu-item-1666" class="menu-item__last menu-item menu-item-type-post_type menu-item-object-page"><a href="/services/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Group-8980.svg" alt="" class="menu-item__icon">All services</a></li>
</ul></div>
</li>
<li id="menu-item-4838" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a>Pricing</a>
<div class='sub-menu-container'><ul class='sub-menu'>
<li id="menu-item-1884" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/pricing/"><img height="18" width="18" src="https://palark.com/wp-content/uploads/2026/08/Frame.svg" alt="" class="menu-item__icon">DevOps and SRE as a Service comparison</a></li>
</ul></div>
</li>
<li id="menu-item-112" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/rnd/">R&#038;D</a></li>
<li id="menu-item-699" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children"><a>Company</a>
<div class='sub-menu-container'><ul class='sub-menu'>
<li id="menu-item-129" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/">About us</a></li>
<li id="menu-item-1486" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/news/">News</a></li>
<li id="menu-item-700" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/meet-us/">Meet us</a></li>
<li id="menu-item-1162" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="/about/kubernative/">Kubernative channel</a></li>
</ul></div>
</li>
<li id="menu-item-3704" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent"><a href="/blog/">Blog</a></li>
</ul> </div>
</div>
<a href="/contact-us/" class="button pc-only-button button--dark">Contact us</a>
</div>
</div>
<div class="hamburger hamburger--collapse header__hamburger" type="button">
<span></span>
<span></span>
<span></span>
</div>
</div>
</div>
</header>
<div class="header-blog">
<div class="header-blog__content">
<div class="container">
<div class="header-blog__left">
<a href="/blog/">
<img height="28" width="111" src="https://palark.com/wp-content/themes/palark/assets/images/blog-logo.svg"
alt="blog-logo">
</a>
</div>
<form action="https://palark.com/" class="form_search" role="search">
<input type="text" name="s" class="search" value="" placeholder="Search" autocomplete="off"/>
</form> <div class="header-blog__categories">
<select class="a-select right" multiple="multiple" data-placeholder="Posts by tags">
<optgroup label="Popular">
<option value="/blog/tag/kubernetes/">Kubernetes (83)</option><option value="/blog/tag/tools/">tools (31)</option><option value="/blog/tag/databases/">databases (28)</option><option value="/blog/tag/migrations/">migrations (14)</option><option value="/blog/tag/postgresql/">PostgreSQL (14)</option> </optgroup>
<optgroup label="A-Z">
<option value="/blog/tag/aiops/">AIOps (2)</option><option value="/blog/tag/ansible/">Ansible (1)</option><option value="/blog/tag/arm/">ARM (1)</option><option value="/blog/tag/aws/">AWS (4)</option><option value="/blog/tag/backups/">backups (3)</option><option value="/blog/tag/benchmarking/">benchmarking (2)</option><option value="/blog/tag/best-practices/">best practices (9)</option><option value="/blog/tag/business/">business (4)</option><option value="/blog/tag/caching/">caching (3)</option><option value="/blog/tag/calico/">Calico (1)</option><option value="/blog/tag/cassandra/">Cassandra (2)</option><option value="/blog/tag/ceph/">Ceph (5)</option><option value="/blog/tag/cert-manager/">cert-manager (1)</option><option value="/blog/tag/ci-cd/">CI/CD (10)</option><option value="/blog/tag/cli/">CLI (4)</option><option value="/blog/tag/clickhouse/">ClickHouse (3)</option><option value="/blog/tag/cni/">CNI (2)</option><option value="/blog/tag/cockroachdb/">CockroachDB (1)</option><option value="/blog/tag/comparison/">comparison (9)</option><option value="/blog/tag/databases/">databases (28)</option><option value="/blog/tag/ebpf/">eBPF (2)</option><option value="/blog/tag/elasticsearch/">Elasticsearch (5)</option><option value="/blog/tag/etcd/">etcd (3)</option><option value="/blog/tag/failures/">failures (11)</option><option value="/blog/tag/finops/">FinOps (2)</option><option value="/blog/tag/fluentd/">Fluentd (1)</option><option value="/blog/tag/gitlab/">GitLab (5)</option><option value="/blog/tag/helm/">Helm (6)</option><option value="/blog/tag/hyperconvergence/">hyperconvergence (1)</option><option value="/blog/tag/iac/">IaC (5)</option><option value="/blog/tag/ingress/">Ingress (3)</option><option value="/blog/tag/kafka/">Kafka (2)</option><option value="/blog/tag/keycloak/">Keycloak (1)</option><option value="/blog/tag/keydb/">KeyDB (3)</option><option value="/blog/tag/kubernetes/">Kubernetes (83)</option><option value="/blog/tag/kubernetes-operators/">Kubernetes operators (11)</option><option value="/blog/tag/linux/">Linux (4)</option><option value="/blog/tag/logging/">logging (5)</option><option value="/blog/tag/logstash/">Logstash (1)</option><option value="/blog/tag/memcached/">memcached (1)</option><option value="/blog/tag/migrations/">migrations (14)</option><option value="/blog/tag/mongodb/">MongoDB (2)</option><option value="/blog/tag/mysql/">MySQL (2)</option><option value="/blog/tag/networking/">networking (6)</option><option value="/blog/tag/nginx/">nginx (1)</option><option value="/blog/tag/observability/">observability (13)</option><option value="/blog/tag/palark/">Palark (7)</option><option value="/blog/tag/patroni/">Patroni (3)</option><option value="/blog/tag/php/">PHP (1)</option><option value="/blog/tag/postgresql/">PostgreSQL (14)</option><option value="/blog/tag/prometheus/">Prometheus (5)</option><option value="/blog/tag/python/">Python (4)</option><option value="/blog/tag/rabbitmq/">RabbitMQ (1)</option><option value="/blog/tag/redis/">Redis (4)</option><option value="/blog/tag/rook/">Rook (3)</option><option value="/blog/tag/security/">security (7)</option><option value="/blog/tag/sentry/">Sentry (1)</option><option value="/blog/tag/serverless/">serverless (2)</option><option value="/blog/tag/software-development/">software development (2)</option><option value="/blog/tag/ssl/">SSL (1)</option><option value="/blog/tag/storage/">storage (10)</option><option value="/blog/tag/success-stories/">success stories (3)</option><option value="/blog/tag/terraform/">Terraform (3)</option><option value="/blog/tag/tools/">tools (31)</option><option value="/blog/tag/trends/">trends (9)</option><option value="/blog/tag/troubleshooting/">troubleshooting (10)</option><option value="/blog/tag/vault/">Vault (1)</option><option value="/blog/tag/vector/">Vector (2)</option><option value="/blog/tag/virtualization/">virtualization (1)</option><option value="/blog/tag/vpn/">VPN (1)</option><option value="/blog/tag/werf/">werf (3)</option><option value="/blog/tag/yaml/">YAML (2)</option><option value="/blog/tag/zookeeper/">ZooKeeper (1)</option> </optgroup>
</select> </div>
</div>
</div>
</div> <main class="wrapper">
<div class="container container--bordered">
<div class="content full">
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--big content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/tools/"
class="content__tags-item content__tags-item--big">
tools </a>
</li>
<li>
<a href="https://palark.com/blog/tag/troubleshooting/"
class="content__tags-item content__tags-item--big">
troubleshooting </a>
</li>
<li>
<a href="https://palark.com/blog/tag/aiops/"
class="content__tags-item content__tags-item--big">
AIOps </a>
</li>
</ul>
<h1 class="content__title">
K8sGPT for Kubernetes troubleshooting: How AI helps in different cases </h1>
<div class="content__top">
<div class="content__column">
<div class="content__date">
31 July 2025 </div>
<div class="content__author">
By Evgeny Torin, software engineer </div>
<img width="982" height="500" src="https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png" class="content__image wp-post-image" alt="K8sgpt overview howto" decoding="async" fetchpriority="high" srcset="https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto.png 982w, https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto-550x280.png 550w, https://palark.com/wp-content/uploads/2025/07/k8sgpt-overview-howto-768x391.png 768w" sizes="(max-width: 982px) 100vw, 982px" /> </div>
</div>
<div class="content__wrapper">
<aside class="content__toc">
<div class="toc__title">Content</div>
<div class="toc__show-more" style="display: none">
Show more <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path d="M15 6L9 12L15 18" stroke="black" stroke-width="4" stroke-linecap="round"
stroke-linejoin="round"/>
</svg>
</div>
</aside>
<div class="content__column">
<article class="content__content post__content">
<p class="wp-block-paragraph"><a href="https://github.com/k8sgpt-ai/k8sgpt">K8sGPT</a> is&nbsp;probably today&#8217;s most well-established AI tool for&nbsp;Kubernetes operators. Introduced in&nbsp;the&nbsp;Spring of 2023 and&nbsp;accepted to&nbsp;the&nbsp;CNCF as a&nbsp;Sandbox project at the&nbsp;end of the&nbsp;same year, this&nbsp;tool aims to&nbsp;help with a&nbsp;variety of Kubernetes-related issues.</p>
<p class="wp-block-paragraph">In&nbsp;this&nbsp;article, I will explain what K8sGPT is, how to&nbsp;install it&nbsp;and&nbsp;connect to&nbsp;AI, and&nbsp;which features it&nbsp;offers. I will also share some examples of the&nbsp;output you can expect from&nbsp;this&nbsp;tool and&nbsp;what diagnostics it&nbsp;can perform. Throughout the&nbsp;preparation of this&nbsp;overview, I tested different AI integrations available as well as a&nbsp;number of models (including a&nbsp;local one). All of my examples will be&nbsp;backed up by commands and&nbsp;detailed logs. So, without further ado, let&#8217;s dive right in!</p>
<h2 class="wp-block-heading">What K8sGPT does</h2>
<p class="wp-block-paragraph">To&nbsp;put it&nbsp;short, K8sGPT scans Kubernetes clusters, helps diagnose problems, and&nbsp;offers remediation suggestions. To&nbsp;do so, it&nbsp;leverages the&nbsp;SRE (Site Reliability Engineering) knowledge — e.g., how to&nbsp;extract all the&nbsp;essential information about the&nbsp;current Kubernetes cluster state and&nbsp;existing issues — and&nbsp;GenAI models to&nbsp;process this&nbsp;data and&nbsp;provide helpful guidance on&nbsp;solving the&nbsp;issues.</p>
<p class="wp-block-paragraph">Suppose there is&nbsp;a&nbsp;<em>Pending</em> Pod in&nbsp;the&nbsp;cluster. Running K8sGPT allows you to&nbsp;acquire a&nbsp;detailed breakdown of the&nbsp;problem, a&nbsp;list of possible causes, and&nbsp;commands for&nbsp;subsequent troubleshooting and&nbsp;fixing. It&nbsp;will also add context to&nbsp;the&nbsp;prompt and&nbsp;let you chat with it&nbsp;as if&nbsp;you were communicating with an expert. Sure, you can use off-the-shelf online chatbots like ChatGPT, but K8sGPT significantly streamlines the&nbsp;process.</p>
<h2 class="wp-block-heading">Installing K8sGPT</h2>
<p class="wp-block-paragraph">There is&nbsp;a&nbsp;<a href="https://killercoda.com/matthisholleville/scenario/k8sgpt-cli">sandbox</a> available for&nbsp;those who don&#8217;t want to&nbsp;install the&nbsp;tool. However, I will install K8sGPT on&nbsp;my computer to&nbsp;get a&nbsp;better taste of it. There are two main options for&nbsp;installation:</p>
<ul class="wp-block-list">
<li>You can install it&nbsp;as a&nbsp;plain console tool. You invoke it&nbsp;via a&nbsp;command and&nbsp;get a&nbsp;response.</li>
<li>You can install it&nbsp;as a&nbsp;K8s cluster operator. In&nbsp;this&nbsp;case, K8sGPT will run in&nbsp;the&nbsp;background and&nbsp;feed the&nbsp;results to&nbsp;a&nbsp;dedicated CR (Custom Resource) of the&nbsp;<em>Result</em> type. This&nbsp;option comes in&nbsp;handy when you need to&nbsp;keep a&nbsp;history of scans and&nbsp;when you want to&nbsp;automate scans for&nbsp;problems that can&#8217;t be&nbsp;captured manually (i.e., in&nbsp;console mode).</li>
</ul>
<p class="wp-block-paragraph">This&nbsp;article will focus on&nbsp;the&nbsp;first installation option. <em>(You can also refer to&nbsp;<a href="https://itnext.io/k8sgpt-localai-unlock-kubernetes-superpowers-for-free-584790de9b65">this&nbsp;piece</a> on&nbsp;how to&nbsp;run K8sGPT as a&nbsp;K8s operator.)</em> The&nbsp;installation assumes two steps:</p>
<p class="wp-block-paragraph">1. <a href="https://github.com/k8sgpt-ai/k8sgpt?tab=readme-ov-file#cli-installation">Install</a> K8sGPT on&nbsp;the&nbsp;master node of the&nbsp;Kubernetes cluster:</p>
<pre class="wp-block-code bash"><code>curl -LO https://github.com/k8sgpt-ai/k8sgpt/releases/download/v0.4.22/k8sgpt_amd64.deb
dpkg -i k8sgpt_amd64.deb</code></pre>
<p class="wp-block-paragraph">2. Register the&nbsp;AI integration (hereinafter referred to&nbsp;as the&nbsp;backend). K8sGPT supports several different backend options:</p>
<ul class="wp-block-list">
<li>external: OpenAI, Amazon Bedrock and&nbsp;SageMaker, Azure OpenAI, Google Gemini and&nbsp;Vertex AI, Hugging Face, Cohere, IBM watsonx.ai;</li>
<li>local: LocalAI, Ollama, FakeAI.</li>
</ul>
<p class="wp-block-paragraph">The&nbsp;last one, FakeAI, comes in&nbsp;handy in&nbsp;situations where you need to&nbsp;test a&nbsp;new feature without actually invoking the&nbsp;AI backend. Its responses to&nbsp;queries start with the&nbsp;following string:</p>
<p class="wp-block-paragraph"><em>I am a&nbsp;noop response to&nbsp;the&nbsp;prompt …</em></p>
<p class="wp-block-paragraph">Now, let&#8217;s go real and&nbsp;register the&nbsp;first AI backend on&nbsp;the&nbsp;list (OpenAI). Follow <a href="https://platform.openai.com/api-keys">this&nbsp;link</a> to&nbsp;generate an API key. When invoking the&nbsp;backend registration command, specify the&nbsp;backend name (<code>openai</code>) and&nbsp;the&nbsp;model name, e.g., <code>gpt-3.5-turbo</code>:</p>
<pre class="wp-block-code bash"><code>k8sgpt auth add -b openai -m gpt-3.5-turbo
Enter openai Key:</code></pre>
<p class="wp-block-paragraph">We&nbsp;assume that <code>~/.kube/config</code> exists and&nbsp;the&nbsp;cluster API is&nbsp;available. If&nbsp;this&nbsp;is&nbsp;the&nbsp;case, the&nbsp;tool is&nbsp;ready for&nbsp;use.</p>
<p class="wp-block-paragraph">Refer to&nbsp;the&nbsp;<a href="https://github.com/k8sgpt-ai/k8sgpt#cli-installation">official documentation</a> to&nbsp;learn more about installation and&nbsp;the&nbsp;startup process.</p>
<h2 class="wp-block-heading">K8sGPT features and&nbsp;options: Quick overview</h2>
<p class="wp-block-paragraph">Before we&nbsp;get into how to&nbsp;use the&nbsp;tool, let&#8217;s take a&nbsp;look at its key features. Below are some of its main commands:</p>
<ul class="wp-block-list">
<li>&nbsp;&nbsp;<code>analyze</code> helps you find issues in&nbsp;the&nbsp;Kubernetes cluster;</li>
<li>&nbsp;&nbsp;<code>cache</code> is&nbsp;used to&nbsp;handle the&nbsp;cache of analysis results;</li>
<li>&nbsp;&nbsp;<code>filters</code> allows you to&nbsp;set up filters to&nbsp;analyze Kubernetes resources;</li>
<li>&nbsp;&nbsp;<code>explain</code> — seek AI&#8217;s help.</li>
</ul>
<p class="wp-block-paragraph">For&nbsp;example, you can use the&nbsp;following command to&nbsp;ask <code>k8sgpt</code> to&nbsp;describe what is&nbsp;happening in&nbsp;the&nbsp;cluster:</p>
<pre class="wp-block-code bash"><code>k8sgpt analyze -b openai --explain --no-cache --namespace=dev --filter Pod</code></pre>
<p class="wp-block-paragraph">Here:</p>
<ul class="wp-block-list">
<li><code>analyze</code> collects data on&nbsp;cluster issues.</li>
<li>The&nbsp;<code>--explain</code> flag is&nbsp;used to&nbsp;connect to&nbsp;the&nbsp;AI backend. Without it, the&nbsp;tool will not use the&nbsp;AI. Instead, it&nbsp;will launch the&nbsp;<a href="https://github.com/k8sgpt-ai/k8sgpt/tree/main/pkg/analyzer">internal analyzer</a>, which is&nbsp;essentially a&nbsp;collection of SRE practices for&nbsp;debugging a&nbsp;certain issue, where the&nbsp;status of the&nbsp;resource determines the&nbsp;list of further diagnostic actions to&nbsp;be&nbsp;performed.</li>
<li>The&nbsp;<code>--no-cache</code> option <a href="https://docs.k8sgpt.ai/explanation/caching/">allows</a> you to&nbsp;disregard the&nbsp;result of the&nbsp;previous analysis stored in&nbsp;the&nbsp;cache.</li>
<li>The&nbsp;<code>--namespace=dev -f Pod</code> filter analyzes issues in&nbsp;a&nbsp;particular namespace for&nbsp;specific resources (Pods).</li>
</ul>
<p class="wp-block-paragraph">To&nbsp;illustrate this&nbsp;point, the&nbsp;query below <em>did not use</em> AI, but the&nbsp;tool still provided structured information on&nbsp;the&nbsp;issues discovered in&nbsp;the&nbsp;cluster. This&nbsp;is&nbsp;sufficient to&nbsp;make an educated guess as to&nbsp;the&nbsp;causes of the&nbsp;error:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --namespace=dev
AI Provider: AI not used; --explain not set
0 dev/web-0(StatefulSet/web)
- Error: 0/2 nodes are available: 1 node(s) didn't match Pod's node affinity/selector,1 node(s) had taint {node-role.kubernetes.io/master: }, that the&nbsp;pod didn't tolerate.
...</code></pre>
<p class="wp-block-paragraph">The&nbsp;<code>-d</code> flag adds a&nbsp;description from&nbsp;the&nbsp;official Kubernetes documentation section (<em>Kubernetes Doc</em>) to&nbsp;each bug:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --namespace=dev --filter Service -d
AI Provider: AI not used; --explain not set
0 dev/web-0(web-0)
- Error: Service has no endpoints, expected label app.kubernetes.io/name=local-ai
Kubernetes Doc: Route service traffic to&nbsp;pods with label keys and&nbsp;values matching this&nbsp;selector. If&nbsp;empty or not present, the&nbsp;service is&nbsp;assumed to&nbsp;have an external process managing its endpoints, which Kubernetes will not modify. Only applies to&nbsp;types ClusterIP, NodePort, and&nbsp;LoadBalancer. Ignored if&nbsp;type is&nbsp;ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/</code></pre>
<p class="wp-block-paragraph">That means you can make <strong>good use of <code>k8sgpt</code> even without connecting it&nbsp;to&nbsp;the&nbsp;AI backend</strong>! On&nbsp;the&nbsp;other hand, the&nbsp;<code>--explain</code> flag will forward the&nbsp;issues discovered in&nbsp;the&nbsp;cluster to&nbsp;the&nbsp;specified AI backend to&nbsp;find a&nbsp;solution. Later in&nbsp;this&nbsp;article, I will compare particular answers of various AI models.</p>
<p class="wp-block-paragraph"><strong>Having the&nbsp;built-in (non-AI) analyzer is&nbsp;crucial</strong> since it&nbsp;reduces the&nbsp;number of false and&nbsp;made-up theories (hallucinations) that the&nbsp;AI analyzer would have suggested otherwise.</p>
<h3 class="wp-block-heading">Reducing the&nbsp;requests number</h3>
<p class="wp-block-paragraph">K8sGPT provides two choices for&nbsp;controlling the&nbsp;number of requests. You can:</p>
<ol class="wp-block-list">
<li>Filter them by resource type (<code>--filter</code>). It&nbsp;will help you reduce the&nbsp;number of requests to&nbsp;the&nbsp;AI backend. For&nbsp;example, suppose there are <a href="https://platform.openai.com/docs/guides/rate-limits/usage-tiers">rate limits</a> for&nbsp;the&nbsp;OpenAI API, and&nbsp;exceeding them will result in&nbsp;<em>Error 429: Too Many Requests</em>.</li>
<li>Limit the&nbsp;number of concurrent requests sent to&nbsp;the&nbsp;Kubernetes API server (via <code>--max-concurrency</code>). In&nbsp;doing so, you’ll be&nbsp;able to&nbsp;avoid excessive load if, for&nbsp;example, you need to&nbsp;analyze the&nbsp;resources of an entire cluster or a&nbsp;namespace.</li>
</ol>
<h3 class="wp-block-heading">Interactive mode</h3>
<p class="wp-block-paragraph">K8sGPT is&nbsp;interactive: you can refine your question, ask the&nbsp;tool about command syntax, and&nbsp;more. Enable this&nbsp;mode using the&nbsp;<code>--interactive</code> flag:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b openai --no-cache -m 1 --namespace=dev --filter Ingress --explain --interactive
...
0 dev/my-test(my-test)
- Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist.
...
Solution:
1. Verify the&nbsp;existence of the&nbsp;specified ingress class (nginxnew).
...
Interactive mode enabled &#91;type exit to&nbsp;close.]
Input text: Write me command to&nbsp;fix ingress class name
To&nbsp;fix the&nbsp;ingress class name, you can use the&nbsp;following command:
```
kubectl edit ingress dev/my-test
```
This&nbsp;command will open the&nbsp;Ingress resource in&nbsp;an editor where you can update the&nbsp;specified ingress class from&nbsp;"nginxnew" to&nbsp;the&nbsp;correct value. Make sure to&nbsp;save the&nbsp;changes after editing the&nbsp;file.
</code></pre>
<p class="wp-block-paragraph">You can now communicate with the&nbsp;AI model as you would with a&nbsp;regular LLM chatbot.</p>
<h2 class="wp-block-heading">Using external AI backends</h2>
<p class="wp-block-paragraph">Let&#8217;s see what K8sGPT is&nbsp;capable of with the&nbsp;enabled external AI backends. To&nbsp;test it, I faked a&nbsp;few cluster resource issues to&nbsp;see what troubleshooting tips the&nbsp;tool could offer.</p>
<h3 class="wp-block-heading">Case 1. Pod&#8217;s status is&nbsp;Pending</h3>
<p class="wp-block-paragraph">I used <code>.spec.affinity.nodeAffinity</code> to&nbsp;limit the&nbsp;selection of nodes to&nbsp;which a&nbsp;Pod could be&nbsp;scheduled. If&nbsp;the&nbsp;conditions are not met, the&nbsp;Pod will get stuck in&nbsp;<em>Pending</em> status. Let&#8217;s see what solutions K8sGPT can come up with:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --explain --namespace=dev
100% |██████████████████████████████████████████████████| (2/2, 16 it/min)
AI Provider: openai
0 dev/web-0(StatefulSet/web)
- Error: 0/3 nodes are available: 1 node(s) didn't match Pod's node affinity/selector, 1 node(s) had taint {dedicated: kafka}, that the&nbsp;pod didn't tolerate, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the&nbsp;pod didn't tolerate.
Solution:
1. Update the&nbsp;pod's node affinity/selector to&nbsp;match a&nbsp;node that is&nbsp;available.
2. Remove the&nbsp;taint {dedicated: kafka} from&nbsp;the&nbsp;node or add toleration in&nbsp;the&nbsp;pod's spec to&nbsp;tolerate the&nbsp;taint.
3. Remove the&nbsp;taint {node-role.kubernetes.io/master: } from&nbsp;the&nbsp;node or add toleration in&nbsp;the&nbsp;pod's spec to&nbsp;tolerate the&nbsp;taint.</code></pre>
<p class="wp-block-paragraph">In&nbsp;its response, K8sGPT suggests checking whether the&nbsp;selectors (<code>nodeSelector</code>) and&nbsp;affinity are correct, which is&nbsp;a&nbsp;valid assumption. Recommendations to&nbsp;remove the&nbsp;taint can also be&nbsp;helpful, as these are also areas where mistakes are often made.</p>
<h3 class="wp-block-heading">Case 2. Pod&#8217;s status is&nbsp;ErrImagePull</h3>
<p class="wp-block-paragraph">This&nbsp;error stems from&nbsp;the&nbsp;inability to&nbsp;pull the&nbsp;image. In&nbsp;this&nbsp;example, I replaced the&nbsp;name of the&nbsp;current image with one that doesn’t exist. Here&#8217;s what K8sGPT and&nbsp;OpenAI&#8217;s <em>gpt-3.5-turbo</em> base model responded with:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --explain -m 1 --namespace=dev
100% |██████████████████████████████████████████████████| (2/2, 13 it/min)
AI Provider: openai
0 dev/web-0(StatefulSet/web)
- Error: Back-off pulling image "registry.k8s.io/alpine:3.88"
Error: The&nbsp;Kubernetes container is&nbsp;experiencing a&nbsp;back-off while trying to&nbsp;pull the&nbsp;image "registry.k8s.io/alpine:3.88".
Solution:
1. Check the&nbsp;image repository registry for&nbsp;any issues or downtime.
2. Verify the&nbsp;image name and&nbsp;tag are correct.
3. Ensure there is&nbsp;enough disk space on&nbsp;the&nbsp;Kubernetes node.
4. Restart the&nbsp;Kubernetes cluster or pod to&nbsp;retry the&nbsp;image pull.
5. If&nbsp;the&nbsp;issue persists, check network connectivity to&nbsp;the&nbsp;image registry.
6. Consider using a&nbsp;different image or version if&nbsp;the&nbsp;problem persists.</code></pre>
<p class="wp-block-paragraph">The&nbsp;tool first suggests checking if&nbsp;the&nbsp;registry is&nbsp;working at all. It&nbsp;then proposes checking the&nbsp;tag and&nbsp;name. If&nbsp;the&nbsp;above steps fail, K8sGPT recommends verifying whether there is&nbsp;enough space on&nbsp;the&nbsp;node to&nbsp;store the&nbsp;image, rebooting the&nbsp;cluster, checking the&nbsp;connectivity between the&nbsp;cluster and&nbsp;the&nbsp;image store, and, finally, it&nbsp;recommends trying a&nbsp;different image.</p>
<p class="wp-block-paragraph">The&nbsp;model&#8217;s reasoning is&nbsp;correct, but the&nbsp;suggestion to&nbsp;reboot the&nbsp;cluster will cause everything running in&nbsp;it&nbsp;to&nbsp;become unavailable. So, you have to&nbsp;keep the&nbsp;possible implications in&nbsp;mind in&nbsp;following the&nbsp;provided recommendations.</p>
<p class="wp-block-paragraph">The&nbsp;<a href="https://docs.k8sgpt.ai/reference/guidelines/privacy/#data-we-collect">documentation</a> states that the&nbsp;tool parses the&nbsp;output of several sources, including <code>kubectl get events</code>:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev get events --sort-by='.metadata.creationTimestamp'
LAST SEEN TYPE REASON OBJECT MESSAGE
15s Normal Pulling pod/web-0 Pulling image "registry.k8s.io/alpine:3.88"
15s Warning Failed pod/web-0 Error: ErrImagePull
15s Warning Failed pod/web-0 Failed to&nbsp;pull image "registry.k8s.io/alpine:3.88": rpc error: code = NotFound desc = failed to&nbsp;pull and&nbsp;unpack image "registry.k8s.io/alpine:3.88": failed to&nbsp;resolve reference "registry.k8s.io/alpine:3.88": registry.k8s.io/alpine:3.88: not found
4s Normal BackOff pod/web-0 Back-off pulling image "registry.k8s.io/alpine:3.88"
4s Warning Failed pod/web-0 Error: ImagePullBackOff</code></pre>
<p class="wp-block-paragraph">This&nbsp;confirms that K8sGPT draws from&nbsp;the&nbsp;cluster data, meaning it&nbsp;sees the&nbsp;problem and&nbsp;offers a&nbsp;solution for&nbsp;that particular issue.</p>
<p class="wp-block-paragraph">Now, let&#8217;s consider the&nbsp;same problem to&nbsp;test the&nbsp;tool with another AI backend — Cohere <em>(<a href="https://docs.cohere.com/docs/command-beta">here</a> you can learn more about this&nbsp;LLM)</em>. There are two ways to&nbsp;add a&nbsp;new model: you can use the&nbsp;<code>k8sgpt auth add -b cohere -m command-nightly</code> command or edit the&nbsp;<code>~/.config/k8sgpt/k8sgpt.yaml</code> configuration file. Cohere’s model is&nbsp;easy to&nbsp;register and&nbsp;no phone number is&nbsp;required for&nbsp;confirmation, while its free mode is&nbsp;sufficient for&nbsp;the&nbsp;majority of tasks.</p>
<p class="wp-block-paragraph">Here is&nbsp;how the&nbsp;Cohere model addressed the&nbsp;incorrect tag name problem:</p>
<pre class="wp-block-code bash"><code>...
0 dev/test-8e8c52aae2-ue3s2(Deployment/test)
- Error: Back-off pulling image "alpine:3.88"
Error: Kubernetes is&nbsp;having trouble pulling the&nbsp;image "alpine:3.88".
This&nbsp;could be&nbsp;due to&nbsp;a&nbsp;few reasons, such as a&nbsp;network issue,
a&nbsp;problem with the&nbsp;image repository, or a&nbsp;slow download.
Solution: Check the&nbsp;Kubernetes logs for&nbsp;more details on&nbsp;the&nbsp;error.
You can also try to&nbsp;pull the&nbsp;image manually to&nbsp;see if&nbsp;there are any issues
with the&nbsp;repository or download.
If&nbsp;the&nbsp;issue persists, try restarting the&nbsp;Kubernetes node or cluster.</code></pre>
<p class="wp-block-paragraph">Looks like the&nbsp;Cohere LLM has a&nbsp;different prompt. For&nbsp;example, there is&nbsp;no numbered recommendation list. The&nbsp;approach is&nbsp;also slightly different, with Cohere offering top-level checks for&nbsp;network, registry, or slow pull speed issues. It&nbsp;also recommends examining the&nbsp;K8s logs and&nbsp;trying to&nbsp;pull the&nbsp;image manually. Finally, it&nbsp;suggests restarting the&nbsp;cluster if&nbsp;none of the&nbsp;above helps. The&nbsp;potential dire consequences of this&nbsp;have been mentioned above.</p>
<p class="wp-block-paragraph">The&nbsp;solution offered by OpenAI&#8217;s <em>gpt-4o</em> model is&nbsp;essentially the&nbsp;same as <em>gpt-3.5-turbo</em>’s answer:</p>
<pre class="wp-block-code bash"><code>...
0 dev/test-8e8c52aae2-ue3s2(Deployment/test)
- Error: Back-off pulling image "alpine:3.88"
Error: Kubernetes is&nbsp;unable to&nbsp;pull the&nbsp;Docker image "alpine:3.88".
Solution:
1. Verify the&nbsp;image name and&nbsp;tag are correct.
2. Check if&nbsp;the&nbsp;image exists in&nbsp;the&nbsp;repository.
3. Ensure your Kubernetes nodes have internet access.
4. Try pulling the&nbsp;image manually using `docker pull alpine:3.88`.
5. Update the&nbsp;image tag if&nbsp;necessary.</code></pre>
<p class="wp-block-paragraph">Comparing the&nbsp;results of two backends and&nbsp;three models, two of which insist on&nbsp;rebooting the&nbsp;cluster, <strong>the&nbsp;most worthwhile choice is&nbsp;the&nbsp;last one, <em>gpt-4o</em></strong>. Besides, I like the&nbsp;structured response from&nbsp;OpenAI better. On&nbsp;the&nbsp;other hand, Cohere is&nbsp;easier to&nbsp;sign up for.</p>
<h3 class="wp-block-heading">Case 3. Pod&#8217;s status is&nbsp;ErrImagePull + wrong password</h3>
<p class="wp-block-paragraph">Now it&#8217;s time to&nbsp;play with <code>ErrImagePull</code>. Let&#8217;s change the&nbsp;login and&nbsp;password required to&nbsp;access <code>gitlab.registry</code>. This&nbsp;is&nbsp;a&nbsp;local registry with the&nbsp;Alpine image pushed into it. As a&nbsp;result, the&nbsp;tag has changed. This&nbsp;is&nbsp;the&nbsp;response I got from&nbsp;K8sGPT with OpenAI&#8217;s <em>gpt-3.5-turbo</em> backend:</p>
<pre class="wp-block-code bash"><code>...
1 dev/web-0(StatefulSet/web)
- Error: Back-off pulling image "registry.k8s.io/alpine:7c36eb2e27a23465498b483c1fc02c94142b31919e51bdede2146e6a-1690898126442"
Error: The&nbsp;Kubernetes is&nbsp;experiencing a&nbsp;back-off while pulling the&nbsp;image "registry.k8s.io/alpine:7c36eb2e27a23465498b483c1fc02c94142b31919e51bdede2146e6a-1690898126442".
Solution:
1. Check the&nbsp;network connectivity to&nbsp;the&nbsp;image registry.
2. Verify the&nbsp;image name and&nbsp;tag are correct.
3. If&nbsp;using custom image repository, ensure proper authentication is&nbsp;configured.</code></pre>
<p class="wp-block-paragraph">It&nbsp;recommends checking the&nbsp;network connection, whether the&nbsp;name and&nbsp;tag are correct, and&nbsp;making sure the&nbsp;credentials to&nbsp;connect to&nbsp;the&nbsp;private storage are valid. That last suggestion is&nbsp;right on&nbsp;point, but there&#8217;s just one little problem — when the&nbsp;same request was made later, the&nbsp;recommendation list has been revised:</p>
<pre class="wp-block-code bash"><code>...
Solution:
1. Check if&nbsp;the&nbsp;image name and&nbsp;tag are correct.
2. Verify if&nbsp;the&nbsp;registry URL is&nbsp;accessible.
3. Ensure that you have the&nbsp;necessary permissions to&nbsp;pull the&nbsp;image.
4. Make sure there is&nbsp;an active internet connection.
5. Restart the&nbsp;Kubernetes pod or deployment.</code></pre>
<p class="wp-block-paragraph">The&nbsp;fact that the&nbsp;<strong>recommendations list has changed</strong> seems peculiar, given that high <em>temperature</em> — the&nbsp;ChatGPT API parameter responsible for&nbsp;the&nbsp;variability of the&nbsp;generated output — was not explicitly specified when the&nbsp;model was invoked. <a href="https://github.com/k8sgpt-ai/k8sgpt/pull/705">This&nbsp;PR</a> addresses that issue: starting from&nbsp;K8sGPT v0.3.18, you can specify a&nbsp;temperature (default is&nbsp;0.7), which makes the&nbsp;model more creative in&nbsp;its responses. You can set the&nbsp;temperature in&nbsp;your configuration file (<code>k8sgpt.yaml</code>):</p>
<pre class="wp-block-code yaml"><code>ai:
providers:
- name: openai
model: gpt-3.5-turbo
password: ...
temperature: 0.7
topp: 0.5
maxtokens: 2048
...</code></pre>
<p class="wp-block-paragraph">Still, the&nbsp;idea that the&nbsp;temperature is&nbsp;to&nbsp;blame is&nbsp;just my guess. You might as well blame the&nbsp;<strong>new events in&nbsp;the&nbsp;cluster and&nbsp;the&nbsp;use of the&nbsp;<code>--no-cache</code> option</strong>, which makes each new request ignore the&nbsp;previous request&#8217;s data.</p>
<p class="wp-block-paragraph">In&nbsp;the&nbsp;updated response, K8sGPT recommended checking the&nbsp;image name and&nbsp;tag, the&nbsp;accuracy of the&nbsp;registry link, and&nbsp;whether you have the&nbsp;necessary permissions to&nbsp;pull the&nbsp;image (this makes sense in&nbsp;some cases). It&nbsp;also recommended checking the&nbsp;internet connection and&nbsp;(surprise!) restarting the&nbsp;cluster.</p>
<p class="wp-block-paragraph">The&nbsp;updated recommendations list is&nbsp;broader; most of the&nbsp;proposed solutions are valid. At the&nbsp;same time, the&nbsp;only proper recommendation — to&nbsp;check that the&nbsp;right login and&nbsp;password were used — has&nbsp; vanished, although there is&nbsp;an obvious access error in&nbsp;the&nbsp;Pod description (<code>kubectl -n dev describe pod web-0</code>):</p>
<pre class="wp-block-code bash"><code>failed to&nbsp;authorize: failed to&nbsp;fetch anonymous token: unexpected status: 403 Forbidden.</code></pre>
<p class="wp-block-paragraph">It&nbsp;turns out that in&nbsp;some cases, the&nbsp;model fails to&nbsp;produce the&nbsp;correct answer. But this&nbsp;is&nbsp;an artificial example in&nbsp;which I know what the&nbsp;problem is. In&nbsp;real life, the&nbsp;LLM should provide <em>suggestions</em>. You can try them out and&nbsp;ask the&nbsp;model again. To&nbsp;be&nbsp;fair, this&nbsp;time, the&nbsp;<em>gpt-4o</em> model fared better than its predecessor:</p>
<pre class="wp-block-code bash"><code>...
Solution:
1. Verify image registry URL and&nbsp;credentials.
2. Ensure your Kubernetes secret for&nbsp;the&nbsp;registry is&nbsp;correctly configured.
3. Check OAuth token endpoint and&nbsp;permissions.
4. Retry pulling the&nbsp;image.</code></pre>
<h3 class="wp-block-heading">Case 4. Pod&#8217;s status is&nbsp;CrashLoopBackOff</h3>
<p class="wp-block-paragraph">This&nbsp;time, let&#8217;s make a&nbsp;mistake in&nbsp;the&nbsp;command to&nbsp;run the&nbsp;Pod. For&nbsp;example, let&#8217;s attempt to&nbsp;run <code>bash</code>, which does not exist in&nbsp;the&nbsp;target image. Here&#8217;s what K8sGPT responds with:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev get pod
NAME READY STATUS RESTARTS AGE
test-3ef82a3ca2-op3e9 0/1 CrashLoopBackOff 4 (25s ago) 2m12s
$ k8sgpt analyze --explain --no-cache --namespace=dev
100% |██████████████████████████████████████████████████| (2/2, 7 it/min)
AI Provider: openai
1 dev/test-3ef82a3ca2-op3e9(Deployment/test)
- Error: back-off 1m20s restarting failed container=alpine pod=test-3ef82a3ca2-op3e9_dev(...)
Error: The&nbsp;container "alpine" in&nbsp;the&nbsp;"test-3ef82a3ca2-op3e9_dev" pod is&nbsp;failing and&nbsp;restarting with a&nbsp;back-off time of 1 minute and&nbsp;20 seconds.
Solution:
1. Check the&nbsp;logs of the&nbsp;"alpine" container to&nbsp;identify the&nbsp;cause of the&nbsp;failure.
2. Make necessary changes to&nbsp;fix the&nbsp;issue.
3. Restart the&nbsp;pod to&nbsp;apply the&nbsp;changes and&nbsp;validate if&nbsp;the&nbsp;"alpine" container starts successfully.</code></pre>
<p class="wp-block-paragraph">It&nbsp;recommends checking the&nbsp;container logs, fixing the&nbsp;problem, and&nbsp;then restarting the&nbsp;Pod. No specific recommendations are provided. Let’s see which events we&nbsp;have:</p>
<pre class="wp-block-code bash"><code>19s Warning Failed pod/test-3ef82a3ca2-op3e9 Error: failed to&nbsp;create containerd task: failed to&nbsp;create shim task: OCI runtime create failed: runc create failed: unable to&nbsp;start container process: exec: "bash": executable file not found in&nbsp;$PATH: unknown</code></pre>
<p class="wp-block-paragraph">The&nbsp;problem is&nbsp;<code>exec: "bash": executable file not found in&nbsp;$PATH: unknown</code>, but there is&nbsp;no mention of it&nbsp;in&nbsp;the&nbsp;recommendations.</p>
<p class="wp-block-paragraph">Another query on&nbsp;the&nbsp;same problem shows that the&nbsp;answer is&nbsp;not static — there is&nbsp;some variability to&nbsp;it. Still, setting the&nbsp;temperature to&nbsp;0.7 fails to&nbsp;produce a&nbsp;radically different response:</p>
<pre class="wp-block-code bash"><code>...
1 dev/test-3ef82a3ca2-op3e9(Deployment/test)
- Error: back-off 2m40s restarting failed container=alpine pod=test-3ef82a3ca2-op3e9_dev(...)
Error: The&nbsp;container "alpine" in&nbsp;the&nbsp;pod "test-3ef82a3ca2-op3e9_dev" failed to&nbsp;restart after a&nbsp;back-off period.
Solution:
1. Check the&nbsp;logs of the&nbsp;pod to&nbsp;identify the&nbsp;specific error causing the&nbsp;container to&nbsp;fail.
2. Update the&nbsp;container configuration or troubleshoot the&nbsp;issue causing the&nbsp;failure.
3. Apply the&nbsp;necessary changes to&nbsp;resolve the&nbsp;error.
4. Restart the&nbsp;pod to&nbsp;check if&nbsp;the&nbsp;issue has been resolved.</code></pre>
<p class="wp-block-paragraph">Meanwhile, here&#8217;s the&nbsp;<em>gpt-4o</em> model&#8217;s suggestion:</p>
<pre class="wp-block-code bash"><code>...
Solution:
1. Check container logs: `kubectl logs test-3ef82a3ca2-op3e9 -c alpine`
2. Describe the&nbsp;pod for&nbsp;more details: `kubectl describe pod test-3ef82a3ca2-op3e9`
3. Fix any issues found in&nbsp;the&nbsp;logs or description.
4. Restart the&nbsp;pod: `kubectl delete pod test-3ef82a3ca2-op3e9` (it will be&nbsp;recreated).</code></pre>
<p class="wp-block-paragraph">As expected, the&nbsp;new recommendations differ in&nbsp;form but are identical in&nbsp;essence: check the&nbsp;logs, update the&nbsp;container configuration, find and&nbsp;fix the&nbsp;problem, and&nbsp;restart the&nbsp;Pod. The&nbsp;only difference is&nbsp;that the&nbsp;new model cited specific commands for&nbsp;debugging.</p>
<h3 class="wp-block-heading">Case 5. Pod&#8217;s status is&nbsp;OOMKilled</h3>
<p class="wp-block-paragraph">This&nbsp;error is&nbsp;also common. To&nbsp;cause it, let&#8217;s run the&nbsp;Pod with the&nbsp;following command:</p>
<pre class="wp-block-code yaml"><code>command:
- bash
- "-c"
- "for i in&nbsp;{1..100};do echo " $i s waiting..." &amp;&amp; sleep 1;donenecho "some strange command"ntail /dev/zeronEOF n"</code></pre>
<p class="wp-block-paragraph">Events show that the&nbsp;Pod is&nbsp;getting rebooted repeatedly:</p>
<pre class="wp-block-code bash"><code>52s Normal Started pod/test-388ea60f3c-f2pe3 Started container alpine
52s Normal Pulled pod/test-388ea60f3c-f2pe3 Container image "alpine:3.6" already present on&nbsp;machine
52s Normal Created pod/test-388ea60f3c-f2pe3 Created container alpine
4s Warning BackOff pod/test-388ea60f3c-f2pe3 Back-off restarting failed container</code></pre>
<p class="wp-block-paragraph">However, you can&#8217;t say for&nbsp;certain what caused the&nbsp;issue here. OOM is&nbsp;not explicitly mentioned here, but you can derive clues by running the&nbsp;<code>describe pod</code> command:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev describe pod test-388ea60f3c-f2pe3
...
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled</code></pre>
<p class="wp-block-paragraph">On&nbsp;top of that, the&nbsp;following information briefly shows up in&nbsp;the&nbsp;Pod status:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev get pod -w
NAME READY STATUS RESTARTS AGE
test-388ea60f3c-f2pe3 1/1 Running 2 (20s ago) 44s
test-388ea60f3c-f2pe3 0/1 OOMKilled 2 (21s ago) 45s
test-388ea60f3c-f2pe3 0/1 CrashLoopBackOff 2 (12s ago) 54s
test-388ea60f3c-f2pe3 1/1 Running 3 (27s ago) 66s
test-388ea60f3c-f2pe3 0/1 OOMKilled 3 (45s ago) 79s
test-388ea60f3c-f2pe3 0/1 CrashLoopBackOff 3 (14s ago) 90s</code></pre>
<p class="wp-block-paragraph">K8sGPT responds to&nbsp;that with the&nbsp;following recommendations:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --explain --no-cache --namespace=dev -f Pod
100% |██████████████████████████████████████████████████| (1/1, 7 it/min)
AI Provider: openai
0 dev/test-388ea60f3c-f2pe3(Deployment/test)
- Error: back-off 5m0s restarting failed container=alpine pod=test-388ea60f3c-f2pe3_dev(...)
Error: The&nbsp;alpine container in&nbsp;pod test-388ea60f3c-f2pe3_dev failed to&nbsp;start and&nbsp;is&nbsp;continuously restarting with a&nbsp;back-off period of 5 minutes.
Solution:
1. Check the&nbsp;logs of the&nbsp;pod using `kubectl logs pod/test-388ea60f3c-f2pe3_dev`
2. Identify the&nbsp;cause of the&nbsp;failure in&nbsp;the&nbsp;logs.
3. Fix the&nbsp;issue with the&nbsp;alpine container.
4. Update the&nbsp;pod using `kubectl apply -f &lt;pod_yaml_file&gt;` to&nbsp;apply the&nbsp;changes.
5. Monitor the&nbsp;pod using `kubectl get pods -w` to&nbsp;ensure it&nbsp;is&nbsp;running without restarts</code></pre>
<p class="wp-block-paragraph">So, you have to&nbsp;figure out the&nbsp;cause, make the&nbsp;corresponding changes, restart the&nbsp;Pod, and&nbsp;keep monitoring. Retrying with different delays and&nbsp;efforts to&nbsp;pinpoint the&nbsp;error failed to&nbsp;produce more meaningful recommendations. It&nbsp;turns out that K8sGPT may miss randomly occurring errors. Perhaps an operator version of the&nbsp;tool would be&nbsp;just what the&nbsp;doctor ordered here.</p>
<h2 class="wp-block-heading">Case 6. Ingress-related errors</h2>
<p class="wp-block-paragraph">In&nbsp;this&nbsp;section, I pretend that there is&nbsp;a&nbsp;fairly simple typo error. But first, let&#8217;s run a&nbsp;Pod with the&nbsp;<code>nginx</code> image and&nbsp;connect it&nbsp;to&nbsp;<code>kind: Ingress</code>.&nbsp; There are no errors in&nbsp;events, and&nbsp;<code>describe</code> isn&#8217;t helpful:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev get events
LAST SEEN TYPE REASON OBJECT MESSAGE
5m Normal Pulled pod/test-548bf544cd-nttq5 Container image "alpine:3.6" already present on&nbsp;machine
5m Normal Created pod/test-548bf544cd-nttq5 Created container alpine
7m12s Normal Sync ingress/my-test Scheduled for&nbsp;sync
$ kubectl -n dev describe ingress
Name: my-test
Labels: &lt;none&gt;
Namespace: dev
Address: foo.bar.baz.qux
Default backend: default-http-backend:80 (&lt;error: endpoints "default-http-backend" not found&gt;)
TLS:
my-test-tls terminates my-test-app.sandbox.com
Rules:
Host Path Backends
---- ---- --------
my-test-app.sandbox.com / my-test:app (&lt;error: endpoints "my-test" not found&gt;)
Annotations: kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/force-ssl-redirect: true
nginx.ingress.kubernetes.io/ssl-redirect: true
Events:
Type Reason Age From&nbsp; Message
---- ------ ---- ---- -------
Normal Sync 10m (x2 over 10m) nginx-ingress-controller Scheduled for&nbsp;sync</code></pre>
<p class="wp-block-paragraph">Run out of ideas for&nbsp;further investigation? K8sGPT can provide hints as to&nbsp;what the&nbsp;potential problem might be:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze --explain -m 1 --namespace=dev
100% |██████████████████████████████████████████████████| (2/2, 20 it/min)
AI Provider: openai
0 dev/my-test(my-test)
- Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist.
- Error: Ingress uses the&nbsp;service dev/my-test which does not exist.
- Error: Ingress uses the&nbsp;secret dev/my-test-tls as a&nbsp;TLS certificate which does not exist.
Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist. Ingress uses the&nbsp;service dev/my-test which does not exist. Ingress uses the&nbsp;secret dev/my-test-tls as a&nbsp;TLS certificate which does not exist.
Solution:
1. Check the&nbsp;spelling and&nbsp;syntax of the&nbsp;ingress class "nginxnew" to&nbsp;ensure it&nbsp;matches a&nbsp;valid ingress class name.
2. Verify if&nbsp;the&nbsp;service "dev/my-test" exists. If&nbsp;not, create the&nbsp;service with the&nbsp;required specifications.
3. Confirm if&nbsp;the&nbsp;secret "dev/my-test-tls" exists. If&nbsp;not, create the&nbsp;secret with the&nbsp;correct TLS certificate information.</code></pre>
<p class="wp-block-paragraph">The&nbsp;correct suggestion pops up right away: a&nbsp;typo in&nbsp;the&nbsp;ingress class name. The&nbsp;<code>nginxnew</code> class does not exist in&nbsp;the&nbsp;cluster:</p>
<pre class="wp-block-code bash"><code>$ kubectl get ingressclasses.networking.k8s.io --no-headers -o custom-columns=":metadata.name"
nginx</code></pre>
<p class="wp-block-paragraph">I should note that the&nbsp;<code>Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist</code> was detected in&nbsp;the&nbsp;analyze section — that is, by the&nbsp;K8sGPT analyzer based on&nbsp;data from&nbsp;the&nbsp;cluster and&nbsp;<em>before</em> AI was used. So it&nbsp;is&nbsp;no surprise that in&nbsp;the&nbsp;<em>Solution</em> section, AI also emphasizes the&nbsp;importance of this&nbsp;error and&nbsp;suggests the&nbsp;proper way to&nbsp;address it.</p>
<p class="wp-block-paragraph">As for&nbsp;the&nbsp;typo in&nbsp;the&nbsp;resource name, Cohere&#8217;s command-nightly LLM provided unexpectedly detailed answers and&nbsp;step-by-step recommendations with commands. You didn&#8217;t even have to&nbsp;set the&nbsp;<code>-d</code> option:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b cohere --explain -m 1 --namespace=dev
100% |██████████████████████████████████████████████████| (2/2, 5 it/min)
AI Provider: cohere
1 dev/my-test(my-test)
- Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist.
- Error: Ingress uses the&nbsp;service dev/my-test which does not exist.
- Error: Ingress uses the&nbsp;secret dev/my-test-tls as a&nbsp;TLS certificate
which does not exist.
Error: Ingress uses the&nbsp;ingress class nginxnew which does not exist.
Ingress uses the&nbsp;service dev/my-test which does not exist.
Ingress uses the&nbsp;secret dev/my-test-tls as a&nbsp;TLS certificate
which does not exist.
Solution: To&nbsp;resolve this&nbsp;error, you can follow these steps:
1. Verify the&nbsp;ingress class: Make sure that the&nbsp;ingress class `nginx`
exists in&nbsp;the&nbsp;Kubernetes cluster. You can use the&nbsp;following command to&nbsp;check:
```
kubectl get ingressclass nginxnew
```
2. Verify the&nbsp;service: Make sure that the&nbsp;service `dev/my-test`
exists in&nbsp;the&nbsp;Kubernetes cluster. You can use the&nbsp;following command to&nbsp;check:
```
kubectl get service dev/my-test
```
3. Verify the&nbsp;secret: Make sure that the&nbsp;secret `dev/my-test-tls`
exists in&nbsp;the&nbsp;Kubernetes cluster. You can use the&nbsp;following command to&nbsp;check:
```
kubectl get secret dev/my-test-tls
```
If&nbsp;any of these resources do not exist, you can create them with the&nbsp;following commands:
```
kubectl apply -f ingress.yaml
kubectl apply -f service.yaml
kubectl apply -f secret.yaml
```
4. Update the&nbsp;ingress: Once you have verified that the&nbsp;required
resources exist, you can update the&nbsp;ingress to&nbsp;use the&nbsp;correct resources.
You can use the&nbsp;following command to&nbsp;patch the&nbsp;ingress:
```
kubectl patch ingress my-ingress --type='json'
--patch='{"spec": {"ingressClassName": "nginx",
"defaultBackend": {"serviceName": "my-test", "servicePort": 80}}'
```
5. Verify the&nbsp;ingress: After updating the&nbsp;ingress, you can verify that it&nbsp;is&nbsp;using the&nbsp;correct resources by running the&nbsp;following command:
```
kubectl get ingress my-ingress
```
Output:
```
NAME CLASS HOSTNAME ADDRESS PORTS AGE
my-ingress nginxnew 127.0.0.1 80 1d3h
```
This&nbsp;output shows that the&nbsp;ingress `my-ingress` is&nbsp;using the&nbsp;correct
ingress class (`nginx`), service (`my-test`), and&nbsp;secret (`my-test-tls`).</code></pre>
<p class="wp-block-paragraph">Here is&nbsp;what the&nbsp;Cohere-based backend suggests:</p>
<ol class="wp-block-list">
<li>Check whether there is&nbsp;an ingress class with that name.</li>
<li>Check if&nbsp;the&nbsp;service and&nbsp;the&nbsp;secret are present.</li>
<li>Adjust the&nbsp;ingress settings to&nbsp;match the&nbsp;resource names found.</li>
<li>Check that the&nbsp;ingress settings are correct.</li>
</ol>
<p class="wp-block-paragraph">On&nbsp;top of that, Cohere provides ready-to-use commands. Well done!</p>
<h2 class="wp-block-heading">Adding privacy to&nbsp;the&nbsp;K8sGPT usage</h2>
<p class="wp-block-paragraph">The&nbsp;use of external LLMs may sound insecure, since requests to&nbsp;them explicitly include the&nbsp;namespaces, Pods, and&nbsp;other cluster resources. What is&nbsp;more, it&nbsp;is&nbsp;not known whether sensitive data, such as secrets, is&nbsp;shared in&nbsp;the&nbsp;process. Fortunately, you can anonymize the&nbsp;shared data using the&nbsp;<code>--anonymize</code> flag. For&nbsp;example, here&#8217;s how the&nbsp;non-anonymized request looks:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b localai --no-cache -m 1 --namespace=dev --filter Ingress --explain
...
--- Ingress uses the&nbsp;ingress class nginxnew which does not exist. Ingress uses the&nbsp;service dev/my-test which does not exist. Ingress uses the&nbsp;secret dev/my-test-tls as a&nbsp;TLS certificate which does not exist. ---.
...</code></pre>
<p class="wp-block-paragraph">And&nbsp;this&nbsp;is&nbsp;what the&nbsp;same request looks like on&nbsp;the&nbsp;backend side with the&nbsp;<code>--anonymize</code> option:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b localai --no-cache -m 1 --namespace=dev --filter Ingress --explain --anonymize
...
--- Ingress uses the&nbsp;ingress class UTNzjE0P which does not exist. Ingress uses the&nbsp;service Jmnw/s3eiDbIRJhfDTa== which does not exist. Ingress uses the&nbsp;secret ELZw/FKrrKJ4vqK9tDWMpUEC= as a&nbsp;TLS certificate which does not exist. ---.
...</code></pre>
<p class="wp-block-paragraph">You can see that <strong>the&nbsp;resource names are obscured</strong>. K8sGPT sends these anonymized names to&nbsp;the&nbsp;AI backend, so the&nbsp;latter deals with them without knowing the&nbsp;original names. However, it&#8217;s important to&nbsp;note that anonymization doesn&#8217;t cover Kubernetes events at the&nbsp;moment.</p>
<h3 class="wp-block-heading">Working with locally running LLMs from&nbsp;LocalAI</h3>
<p class="wp-block-paragraph">If&nbsp;you want an even more secure method to&nbsp;use K8sGPT, consider local LLM backends (<code>-b localai</code>). <a href="https://github.com/mudler/LocalAI">LocalAI</a> allows you to&nbsp;run AI models locally, without an internet connection.</p>
<p class="wp-block-paragraph">To&nbsp;install LocalAI, you will need to&nbsp;follow the&nbsp;<a href="https://github.com/mudler/LocalAI-examples/tree/main/k8sgpt#setup-localai">instructions</a> for&nbsp;a&nbsp;relevant Helm chart. <em>(Personally, I installed it&nbsp;using <a href="https://werf.io/">werf</a> instead of Helm by slightly editing the&nbsp;Helm charts and&nbsp;creating <code>werf.yaml</code> alongside <code>.gitlab-ci.yml</code> to&nbsp;deploy LocalAI to&nbsp;the&nbsp;K8s cluster the&nbsp;way I wanted. Feel free to&nbsp;use Helm itself or other preferred tooling for&nbsp;this.)</em></p>
<p class="wp-block-paragraph">Here is&nbsp;what <code>values.yaml</code> looks like:</p>
<pre class="wp-block-code yaml"><code>deployment:
env:
...
preload_models: '&#91;{ "url": "github:go-skynet/model-gallery/gpt4all-j.yaml", "overrides": { "parameters": { "model": "ggml-gpt4all-j" }}, "files": &#91; { "uri": "https://gpt4all.io/models/ggml-gpt4all-j.bin", "sha256": "acd54f6da1cad7c04c48b785178d686c720dcbe549903032a0945f97b1a43d20", "filename": "ggml-gpt4all-j" }]}]'</code></pre>
<p class="wp-block-paragraph">Note the&nbsp;model name and&nbsp;the&nbsp;resources section here. The&nbsp;default AI model is&nbsp;<em>ggml-gpt4all-j</em> (I&#8217;m going to&nbsp;show you how to&nbsp;run a&nbsp;different model below). I started my testing on&nbsp;a&nbsp;K8s cluster with a&nbsp;4 CPU 8 GB node available at the&nbsp;time. Following this&nbsp;configuration, the&nbsp;Pod has got almost all the&nbsp;available resources:</p>
<pre class="wp-block-code yaml"><code>resources:
requests:
cpu: 3500m
memory: 7Gi</code></pre>
<pre class="wp-block-code"><code>persistence:
pvc:
enabled: true
size: 20Gi</code></pre>
<p class="wp-block-paragraph">You can also customize the&nbsp;prompt template in&nbsp;the&nbsp;<code>values.yaml</code> variables:</p>
<pre class="wp-block-code yaml"><code>promptTemplates:
ggml-gpt4all-j.tmpl: |
The&nbsp;prompt below is&nbsp;a&nbsp;question to&nbsp;answer, a&nbsp;task to&nbsp;complete, or a&nbsp;conversation to&nbsp;respond to; decide which and&nbsp;write an appropriate response.
### Prompt:
{{.Input}}
### Response:</code></pre>
<p class="wp-block-paragraph">It&nbsp;will be&nbsp;shown in&nbsp;the&nbsp;logs during inference:</p>
<pre class="wp-block-code bash"><code>Prompt (after templating): The&nbsp;prompt below is&nbsp;a&nbsp;question to&nbsp;answer, a&nbsp;task to&nbsp;complete, or a&nbsp;conversation to&nbsp;respond to; decide which and&nbsp;write an appropriate response.
### Prompt:
Simplify the&nbsp;following Kubernetes error message delimited by triple dashes written in&nbsp;--- english --- language; --- Ingress uses the&nbsp;ingress class UTNzjE0P which does not exist. Ingress uses the&nbsp;service Jmnw/s3eiDbIRJhfDTa== which does not exist. Ingress uses the&nbsp;secret ELZw/FKrrKJ4vqK9tDWMpUEC= as a&nbsp;TLS certificate which does not exist. ---.
Provide the&nbsp;most possible solution in&nbsp;a&nbsp;step by step style in&nbsp;no more than 280 characters. Write the&nbsp;output in&nbsp;the&nbsp;following format:
Error: {Explain error here}
Solution: {Step by step solution here}
### Response:</code></pre>
<p class="wp-block-paragraph">Here, you can clearly see the&nbsp;part generated by the&nbsp;backend for&nbsp;LocalAI, and&nbsp;the&nbsp;part generated by the&nbsp;K8sGPT tool (it was <code>{{.Input}}</code>, remember?). I left the&nbsp;rest of the&nbsp;<code>values.yaml</code> parameters unchanged.</p>
<p class="wp-block-paragraph">If&nbsp;there are enough resources for&nbsp;the&nbsp;Pod, enough space on&nbsp;the&nbsp;runner to&nbsp;pull the&nbsp;image, and&nbsp;<em>imagePullSecrets</em> are in&nbsp;place, everything will run smoothly right from&nbsp;the&nbsp;get-go:</p>
<pre class="wp-block-code bash"><code>gitlab-runner:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/localai/localai latest cc3e53a4b23a 2 days ago 14GB</code></pre>
<p class="wp-block-paragraph">In&nbsp;this&nbsp;case, you will see the&nbsp;following in&nbsp;the&nbsp;log:</p>
<pre class="wp-block-code bash"><code>$ kubectl -n dev logs local-ai-dev-83dfe4a931-30aex -f
...
12:42PM DBG File "ggml-gpt4all-j" downloaded and&nbsp;verified
12:42PM DBG Prompt template "gpt4all-completion" written
12:42PM DBG Prompt template "gpt4all-chat" written
12:42PM DBG Written config file /models/gpt4all-j.yaml
┌───────────────────────────────────────────────────┐
│ Fiber v2.48.0 │
│ http://127.0.0.1:8080 │
│ (bound on&nbsp;host 0.0.0.0 and&nbsp;port 8080) │
│ │
│ Handlers ............ 55 Processes ........... 1 │
│ Prefork ....... Disabled PID ................ 14 │
└───────────────────────────────────────────────────┘</code></pre>
<p class="wp-block-paragraph">Once you have successfully deployed a&nbsp;LocalAI image and&nbsp;run the&nbsp;model in&nbsp;that Pod, you need to&nbsp;register a&nbsp;new backend with <code>k8sgpt</code>:</p>
<pre class="wp-block-code bash"><code>k8sgpt auth add -b localai -u local-ai-dev.dev.svc.cluster.local:8080/v1 -m ggml-gpt4all-j
k8sgpt auth default -p localai</code></pre>
<p class="wp-block-paragraph">You can even ask K8sGPT for&nbsp;more information on&nbsp;the&nbsp;LocalAI Pod:</p>
<pre class="wp-block-code bash"><code>k8sgpt analyze -b localai --explain --no-cache --namespace=dev -f Pod</code></pre>
<p class="wp-block-paragraph">As mentioned above, when the&nbsp;request is&nbsp;sent to&nbsp;the&nbsp;local Pod in&nbsp;which the&nbsp;LLM is&nbsp;running, you can even observe how K8sGPT does its magic. In&nbsp;particular, you can see the&nbsp;way it&nbsp;processes the&nbsp;original error report generated upon running the&nbsp;tool with the&nbsp;<code>--analyze</code> option:</p>
<pre class="wp-block-code bash"><code>### Prompt:
Simplify the&nbsp;following Kubernetes error message delimited by triple dashes written in&nbsp;--- english --- language; --- Back-off pulling image "alpine:3.88" ---.
Provide the&nbsp;most possible solution in&nbsp;a&nbsp;step by step style in&nbsp;no more than 280 characters. Write the&nbsp;output in&nbsp;the&nbsp;following format:
Error: {Explain error here}
Solution: {Step by step solution here}</code></pre>
<p class="wp-block-paragraph">Below is&nbsp;an example of the&nbsp;LocalAI and&nbsp;<em>ggml-gpt4all-j</em> response to&nbsp;the&nbsp;missing tag issue:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b localai --explain --no-cache --namespace=dev -f Pod
100% |██████████████████████████████████████████████████| (1/1, 2 it/min)
AI Provider: localai
0 dev/test-8e8c52aae2-8e0ks(Deployment/test)
- Error: Back-off pulling image "alpine:3.88"
I'm sorry, as an AI language model, it&nbsp;is&nbsp;not within my programming to&nbsp;provide step-by-step solutions or explain errors. However, I can provide the&nbsp;most common response that could occur. In&nbsp;this&nbsp;case, it&nbsp;seems like an error message about pulling the&nbsp;image "alpine:3.88" is&nbsp;being displayed, but there may be&nbsp;no solution to&nbsp;it.</code></pre>
<p class="wp-block-paragraph">The&nbsp;answer is&nbsp;unhelpful but honest: this&nbsp;model can&#8217;t provide a&nbsp;step-by-step solution, but it&nbsp;suggests considering the&nbsp;image pull error.</p>
<p class="wp-block-paragraph">And&nbsp;here&#8217;s a&nbsp;different response from&nbsp;<em>ggml-gpt4all-j</em> to&nbsp;the&nbsp;same question, but with a&nbsp;temperature of 0.9:</p>
<pre class="wp-block-code bash"><code>$ k8sgpt analyze -b localai --explain --no-cache --namespace=dev -f Pod
100% |██████████████████████████████████████████████████| (1/1, 1 it/min)
AI Provider: localai
0 dev/test-8e8c52aae2-8e0ks(Deployment/test)
- Error: Back-off pulling image "alpine:3.88"
The&nbsp;error message is&nbsp;"back-off pulling image alpine:3.88". The&nbsp;possible cause of the&nbsp;error is&nbsp;a&nbsp;network issue or an incorrect configuration. To&nbsp;resolve the&nbsp;error, you need to&nbsp;check your network connection and&nbsp;make sure that the&nbsp;image has been successfully pushed to&nbsp;your server. Once the&nbsp;image is&nbsp;uploaded, you can specify it&nbsp;as a&nbsp;dependency in&nbsp;your project's package.json file and&nbsp;run "npm install" to&nbsp;include it&nbsp;in&nbsp;your project. Alternatively, you can also use a&nbsp;CI/CD tool such as Jenkins or Travis CI to&nbsp;automate the&nbsp;build process and&nbsp;ensure that all dependencies are up-to-date.</code></pre>
<p class="wp-block-paragraph">Well, this&nbsp;one is&nbsp;a&nbsp;bit more detailed. For&nbsp;example, the&nbsp;LLM suggests checking the&nbsp;network connection and&nbsp;making sure that the&nbsp;target image is&nbsp;available on&nbsp;the&nbsp;server. Yet, it&nbsp;is&nbsp;misleading: the&nbsp;<code>package.json</code> part is&nbsp;clearly irrelevant to&nbsp;the&nbsp;issue. But at least the&nbsp;LLM doesn&#8217;t suggest restarting the&nbsp;cluster.</p>
<p class="wp-block-paragraph">As you can see from&nbsp;the&nbsp;examples above, the&nbsp;local LLM-based approach is&nbsp;quite feasible. Granted, you will need a&nbsp;more powerful GPU-enabled node, as waiting for&nbsp;hours for&nbsp;K8sGPT to&nbsp;provide its recommendations is&nbsp;not a&nbsp;non-starter. This&nbsp;option may be&nbsp;suitable, for&nbsp;instance, when K8sGPT is&nbsp;run as an operator. Also, in&nbsp;LocalAI mode, I failed to&nbsp;find a&nbsp;way to&nbsp;take advantage of one of the&nbsp;Kubernetes&#8217; key features: running multiple Pods with a&nbsp;model for&nbsp;parallel computing. Chances are, this&nbsp;option is&nbsp;not supported.</p>
<h3 class="wp-block-heading">Local LLM repository</h3>
<p class="wp-block-paragraph">The&nbsp;next obvious step is&nbsp;to&nbsp;run a&nbsp;different model and&nbsp;check out its responses. Luckily, the&nbsp;community provides some ready-to-use options in&nbsp;the&nbsp;<a href="https://github.com/mudler/LocalAI/tree/master/gallery">gallery</a>. All you will need to&nbsp;do is&nbsp;change or add the&nbsp;<code>preload_models</code> parameter in&nbsp;<code>values.yaml</code>.</p>
<p class="wp-block-paragraph">But what if&nbsp;I wanted to&nbsp;try an LLM that is&nbsp;not in&nbsp;the&nbsp;gallery, i.e., not among the&nbsp;available LocalAI templates? Or what if&nbsp;I have my own trained model? This&nbsp;is&nbsp;where a&nbsp;local template gallery comes into play. It&#8217;s this&nbsp;simple: download a&nbsp;model from&nbsp;a&nbsp;<a href="https://huggingface.co/">public repository</a> or train your own, compose a&nbsp;template, and&nbsp;make the&nbsp;template file available (e.g., via a&nbsp;dedicated cluster ingress). Next, point the&nbsp;LocalAI application to&nbsp;the&nbsp;YAML file for&nbsp;your LLM.</p>
<p class="wp-block-paragraph">Here is&nbsp;an example of such a&nbsp;template file for&nbsp;the&nbsp;<em>llama_2_7b_7b_chat_gglm</em> model:</p>
<pre class="wp-block-code yaml"><code>name: "llama-2-7b-chat-gglm"
description: |
...
license: ...
urls:
- https://huggingface.co/meta-llama/Llama-2-7b-chat-hf
config_file: |
backend: llama
parameters:
model: llama-2-7b-chat.ggmlv3.q6_K.bin
top_k: 80
temperature: 0.2
top_p: 0.7
context_size: 1024
template:
completion: openllama-completion
chat: openllama-chat
files:
- filename: "llama-2-7b-chat.ggmlv3.q6_K.bin"
sha256: "e32c8f063b357001a1da0431778b40a78aa71dd664561ff14c51f18556381818"
uri: "https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML/blob/main/llama-2-7b-chat.ggmlv3.q6_K.bin"
prompt_templates:
- name: "openllama-completion"
content: |
Q: Complete the&nbsp;following text: {{.Input}}nA:
- name: "openllama-chat"
content: |
Q: {{.Input}}nA:</code></pre>
<p class="wp-block-paragraph">The&nbsp;other parameters can be&nbsp;customized as needed. In&nbsp;my case, I left them unchanged.</p>
<p class="wp-block-paragraph">Next, add a&nbsp;link to&nbsp;the&nbsp;local template to&nbsp;the&nbsp;LocalAI application&#8217;s <code>values.yaml</code> and&nbsp;redeploy:</p>
<pre class="wp-block-code yaml"><code>preload_models: '&#91;{"url": "https://my-own-llm-gallery.com/llama_2_7b_chat_gglm.yaml", "name": "llama_2_7b_chat_gglm"}]'</code></pre>
<p class="wp-block-paragraph">Since I didn&#8217;t have the&nbsp;capacity to&nbsp;run the&nbsp;model locally, I can&#8217;t show the&nbsp;model responses here. Note that recommended resources are usually listed in&nbsp;the&nbsp;model description. For&nbsp;example, the&nbsp;resources required for&nbsp;<em>llama_2_7b</em> are listed <a href="https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML#provided-files">here</a>.</p>
<p class="wp-block-paragraph">The&nbsp;above tests show that models trained on&nbsp;a&nbsp;small corpus of data or highly quantized models, such as <em>ggml-gpt4all-j</em>, often underperform when it&nbsp;comes to&nbsp;generating useful recommendations. Quantization reduces the&nbsp;amount of memory required to&nbsp;store the&nbsp;LLM and&nbsp;speeds up inference by reducing the&nbsp;computation load. But it&nbsp;also leads to&nbsp;reduced accuracy and&nbsp;degradation in&nbsp;the&nbsp;quality of the&nbsp;model output. Thus, you need more resources (e.g., GPU) to&nbsp;achieve better results.</p>
<p class="wp-block-paragraph">By the&nbsp;way, if&nbsp;your company is&nbsp;looking to&nbsp;run GenAI models privately for&nbsp;various business needs (such as using them within K8sGPT), our company offers a&nbsp;<a href="/services/private-self-hosted-llm/">self-hosted LLM service</a>. It&nbsp;is&nbsp;based on&nbsp;a&nbsp;subscription model and&nbsp;comes with affordable pricing for&nbsp;the&nbsp;initial setup and&nbsp;ongoing maintenance.</p>
<h2 class="wp-block-heading">Takeaways</h2>
<p class="wp-block-paragraph">The&nbsp;key conclusion I drew is&nbsp;that <strong>K8sGPT can be&nbsp;used as a&nbsp;pretty good onboarding aid</strong>. Even <em>without</em> an AI backend, the&nbsp;tool features useful cluster resource state analyzers, which are quite informative in&nbsp;many cases. On&nbsp;top of that, you can browse the&nbsp;K8s documentation right in&nbsp;the&nbsp;console.</p>
<p class="wp-block-paragraph">I must add that the&nbsp;most basic troubleshooting commands, such as <code>kubectl explain</code>, <code>describe</code>, <code>get events</code>, <code>logs</code>, and&nbsp;your favorite search engine is&nbsp;usually enough for&nbsp;even a&nbsp;beginner to&nbsp;address the&nbsp;issues demonstrated in&nbsp;this&nbsp;article. However, K8sGPT&#8217;s answers help accelerate you in&nbsp;the&nbsp;right direction by <strong>focusing on&nbsp;possible solutions rather than error codes, along with structured output and&nbsp;command examples</strong>.</p>
<p class="wp-block-paragraph">The&nbsp;extent of the&nbsp;benefit that can be&nbsp;derived from&nbsp;K8sGPT troubleshooting tips is&nbsp;determined by the&nbsp;backend, i. e., the&nbsp;LLM that generates the&nbsp;response. Upon comparing several LLMs, I found OpenAI&#8217;s <em>4o </em>to&nbsp;be&nbsp;the&nbsp;best, although <em>gpt-3.5-turbo</em> often produces comparable results and&nbsp;comes at a&nbsp;lower cost. A&nbsp;clear advantage <em>4o</em> holds is&nbsp;that it&nbsp;provides troubleshooting commands in&nbsp;addition to&nbsp;recommendations. Local LLMs are also capable of generating useful recommendations, given that you have adequate computing resources.</p>
<p class="wp-block-paragraph">As part of my experiment, I refrained from&nbsp;comparing the&nbsp;K8sGPT output to&nbsp;the&nbsp;conversation with LLMs in&nbsp;the&nbsp;respective chats. In&nbsp;my opinion, such a&nbsp;comparison would be&nbsp;inappropriate. Chat is&nbsp;a&nbsp;more flexible tool where you can repeatedly update the&nbsp;context, make comments and&nbsp;refinements, such as copying the&nbsp;output of <code>kubectl get events</code> and&nbsp;Pod logs into the&nbsp;conversation to&nbsp;get recommendations. However, the&nbsp;line between the&nbsp;two has become more blurred by the&nbsp;<strong>interactive mode</strong> in&nbsp;K8sGPT.</p>
<p class="wp-block-paragraph">Convenience is&nbsp;one of the&nbsp;advantages K8sGPT offers. Debug recommendations are provided right away — eliminating the&nbsp;need to&nbsp;switch from&nbsp;the&nbsp;cluster terminal to&nbsp;the&nbsp;browser. K8sGPT also highlights typos or missing resources if&nbsp;they’ve not been defined. In&nbsp;addition, the&nbsp;analysis module checks for&nbsp;errors in&nbsp;some resources and&nbsp;sends debugging information corresponding to&nbsp;that type of resource to&nbsp;the&nbsp;backend, along with the&nbsp;error text. Since K8sGPT is&nbsp;so good for&nbsp;onboarding and&nbsp;outputs a&nbsp;list of action steps, anyone can learn how to&nbsp;troubleshoot a&nbsp;cluster. <strong>With this&nbsp;tool, even a&nbsp;novice can eliminate the&nbsp;most commonly occurring errors</strong>.</p>
<p class="wp-block-paragraph">As for&nbsp;the&nbsp;drawbacks, K8sGPT cannot troubleshoot intermittent errors. I was also surprised that K8sGPT was only able to&nbsp;detect the&nbsp;<em>ErrImagePull</em> error on&nbsp;the&nbsp;main container (the <em>initContainer</em> went unnoticed). You&#8217;re also limited in&nbsp;which cluster resources you can run the&nbsp;analysis on: debugging of custom resources is&nbsp;not supported out of the&nbsp;box. At the&nbsp;same time, the&nbsp;custom analyzers <a href="https://github.com/k8sgpt-ai/k8sgpt/pull/1207">were added</a> to&nbsp;the&nbsp;project last year. After all, this&nbsp;is&nbsp;an Open Source project that is&nbsp;being actively developed!</p>
<p class="wp-block-paragraph">Overall, K8sGPT is&nbsp;an exciting project, and&nbsp;I really enjoyed using it. Most recently, it&nbsp;<a href="https://github.com/k8sgpt-ai/k8sgpt/pull/1459">got</a> a&nbsp;lot of new analyzers — for&nbsp;storage (StorageClasses, PersistentVolumes, and&nbsp;PVCs), security (ServiceAccounts, RoleBindings, and&nbsp;PodSecurityContexts), configurations (ConfigMaps), and&nbsp;<a href="https://github.com/k8sgpt-ai/k8sgpt/pull/1506">Jobs</a> — as well as <a href="https://github.com/k8sgpt-ai/k8sgpt/pull/1471">MCP server support</a>. This&nbsp;all reassures that the&nbsp;project becomes an even more powerful and&nbsp;efficient tool.</p>
<h2 class="wp-block-heading">P.S.</h2>
<p class="wp-block-paragraph">Previously, we&nbsp;have also published this&nbsp;in-depth <a href="/blog/chatgpt-tools-for-kubernetes/">overview of existing AIOps solutions for&nbsp;Kubernetes</a>, including K8sGPT, kubectl-ai, Botkube, and&nbsp;many others.</p>
<p class="wp-block-paragraph"></p>
</article>
</div>
</div>
<div class="content__wrapper">
<div class="content__column">
<section class="subscribe subscribe-blog">
<div class="container">
<img height="560" width="404" class="subscribe-blog__image"
src="https://palark.com/wp-content/themes/palark/assets/images/subscribe-blog.svg"
alt="pic">
<div class="subscribe-blog__content">
<div class="subscribe-blog__info">
<div class="subscribe-blog__title">Subscribe to our blog</div>
<div class="subscribe-blog__text">
<p>Get our new tech articles in a good old fashion!<br> We promise not to send anything besides
them.</p>
</div>
</div>
<div class="wpcf7 no-js" id="wpcf7-f4950-o1" lang="en-US" dir="ltr" data-wpcf7-id="4950">
<div class="screen-reader-response"><p role="status" aria-live="polite" aria-atomic="true"></p> <ul></ul></div>
<form action="/blog/k8sgpt-ai-troubleshooting-kubernetes/#wpcf7-f4950-o1" method="post" class="wpcf7-form init palark-cf7 palark-subscribe-form wpcf7-acceptance-as-validation" id="contact-form" aria-label="Contact form" novalidate="novalidate" data-status="init">
<fieldset class="hidden-fields-container"><input type="hidden" name="_wpcf7" value="4950" /><input type="hidden" name="_wpcf7_version" value="6.1.7" /><input type="hidden" name="_wpcf7_locale" value="en_US" /><input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f4950-o1" /><input type="hidden" name="_wpcf7_container_post" value="0" /><input type="hidden" name="_wpcf7_posted_data_hash" value="" />
</fieldset>
<div class="cf7-grid cf7-grid--subscribe">
<div class="cf7-row">
<span class="wpcf7-form-control-wrap" data-name="your-email"><input size="40" maxlength="400" class="wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email cf7-input" autocomplete="email" aria-required="true" aria-invalid="false" placeholder="Email" value="" type="email" name="your-email" /></span>
</div>
<div class="cf7-row cf7-row--consent">
<span class="wpcf7-form-control-wrap" data-name="consent"><span class="wpcf7-form-control wpcf7-acceptance"><span class="wpcf7-list-item"><label><input type="checkbox" name="consent" value="1" aria-invalid="false" /><span class="wpcf7-list-item-label">I consent to the <a href="/privacy-policy/" target="_blank">privacy policy</a></span></label></span></span></span>
</div>
<span id="wpcf7-6aa4f56cca40a-wrapper" class="wpcf7-form-control-wrap cf7apps-honeypot-wrap honeypot-958-wrap" data-cf7apps-honeypot="honeypot-958" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"><input type="hidden" name="honeypot-958-random-hash" value="20260912"><input type="hidden" name="honeypot-958-time-token" value="MTc4OTE5NTYyOA==.745df8534ab469a78e1a70021cdb6bb7019af3368d76d12fecdb5fee081f9bab"><label
for="wpcf7-6aa4f56cca40a-field"
class="hp-message"
>Please leave this field empty.</label><input
id="wpcf7-6aa4f56cca40a-field"
class="wpcf7-form-control wpcf7-text"
type="text"
name="a38idwadz0wr"
value=""
autocomplete="new-password"
tabindex="1000"
data-cf7apps-tabindex="1000"
/></span>
<input class="wpcf7-form-control wpcf7-submit has-spinner button" type="submit" value="Sign me up" />
</div><div class="wpcf7-response-output" aria-hidden="true"></div>
</form>
</div>
</div>
</div>
</section>
<div class="content__share">
<h4>Share:</h4>
<div class="scriptlesssocialsharing"><div class="scriptlesssocialsharing__buttons"><a class="button linkedin" target="_blank" href="https://www.linkedin.com/feed/?shareActive=true&#038;text=K8sGPT%20for%20Kubernetes%20troubleshooting%3A%20How%20AI%20helps%20in%20different%20cases%20https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F%20%23NewPost" title="LinkedIn" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon linkedin" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M6.227 12.61h4.19v13.48h-4.19zm2.095-6.7a2.43 2.43 0 0 1 0 4.86c-1.344 0-2.428-1.09-2.428-2.43s1.084-2.43 2.428-2.43m4.72 6.7h4.02v1.84h.058c.56-1.058 1.927-2.176 3.965-2.176 4.238 0 5.02 2.792 5.02 6.42v7.395h-4.183v-6.56c0-1.564-.03-3.574-2.178-3.574-2.18 0-2.514 1.7-2.514 3.46v6.668h-4.187z"></path></svg><span class="screen-reader-text">Share on LinkedIn</span></a><a class="button bluesky" target="_blank" href="https://bsky.app/intent/compose?text=K8sGPT%20for%20Kubernetes%20troubleshooting%3A%20How%20AI%20helps%20in%20different%20cases%3A%20https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" title="Bluesky" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon bluesky" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M16 14.903c-.996-1.928-3.709-5.521-6.231-7.293C7.353 5.912 6.43 6.206 5.827 6.478 5.127 6.793 5 7.861 5 8.49s.346 5.155.572 5.91c.747 2.496 3.404 3.34 5.851 3.07q.188-.029.38-.052a8 8 0 0 1-.38.051c-3.586.529-6.771 1.83-2.594 6.457 4.595 4.735 6.297-1.015 7.171-3.93.874 2.915 1.88 8.458 7.089 3.93 3.911-3.93 1.074-5.928-2.512-6.457a8 8 0 0 1-.38-.051q.192.024.38.051c2.447.271 5.104-.573 5.85-3.069.227-.755.573-5.281.573-5.91s-.127-1.697-.827-2.012c-.604-.271-1.526-.566-3.942 1.132-2.522 1.772-5.235 5.365-6.231 7.293"></path></svg><span class="screen-reader-text">Share on Bluesky</span></a><a class="button mastodon" target="_blank" href="https://share.joinmastodon.org/#text=K8sGPT%20for%20Kubernetes%20troubleshooting%3A%20How%20AI%20helps%20in%20different%20cases%20https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" title="Mastodon" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon mastodon" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M26.5 12.187c0-4.887-3.198-6.319-3.198-6.319-1.575-.782-4.39-1.097-7.302-1.116-2.864 0-5.65.334-7.264 1.069-.029 0-3.236 1.431-3.236 6.366v3.819c.115 4.772.878 9.478 5.288 10.652 1.69.46 3.443.653 5.193.573a10.4 10.4 0 0 0 3.99-.907l-.086-1.861a12.8 12.8 0 0 1-3.885.515c-2.024-.067-4.171-.22-4.496-2.71a5 5 0 0 1-.048-.698c1.485.332 2.996.533 4.515.602a25.6 25.6 0 0 0 4.468-.267c2.863-.335 5.278-2.072 5.584-3.656a37.5 37.5 0 0 0 .477-6.062m-3.77 6.29h-2.35v-5.726c0-1.213-.506-1.824-1.527-1.824s-1.69.726-1.69 2.167v3.14h-2.329v-3.197c0-1.441-.563-2.167-1.69-2.167-1.125 0-1.526.611-1.526 1.823v5.728h-2.3v-5.9a4.28 4.28 0 0 1 .954-2.863 3.24 3.24 0 0 1 2.51-1.07 3.03 3.03 0 0 1 2.711 1.375l.582.955.583-.955a3.03 3.03 0 0 1 2.71-1.374 3.24 3.24 0 0 1 2.51 1.069c.656.807.995 1.825.955 2.864l-.105 5.956Z"></path></svg><span class="screen-reader-text">Share on Mastodon</span></a><a class="button facebook" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" title="Facebook" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon facebook" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28 16c0-6.627-5.373-12-12-12S4 9.373 4 16c0 5.628 3.875 10.35 9.101 11.647v-7.98h-2.474V16H13.1v-1.58c0-4.085 1.849-5.978 5.859-5.978.76 0 2.072.15 2.608.298v3.325c-.283-.03-.775-.045-1.386-.045-1.967 0-2.728.745-2.728 2.683V16h3.92l-.673 3.667h-3.247v8.245C23.395 27.195 28 22.135 28 16"></path></svg><span class="screen-reader-text">Share on Facebook</span></a><a class="button reddit" target="_blank" href="https://www.reddit.com/submit?url=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" title="Reddit" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon reddit" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28.543 15.774a2.953 2.953 0 0 0-2.951-2.949 2.88 2.88 0 0 0-1.9.713 14.1 14.1 0 0 0-6.85-2.044l1.38-4.349 3.768.884a2.452 2.452 0 1 0 .24-1.176l-4.274-1a.6.6 0 0 0-.709.4l-1.659 5.224a14.3 14.3 0 0 0-7.316 2.029 2.9 2.9 0 0 0-1.872-.681 2.942 2.942 0 0 0-1.618 5.4 5 5 0 0 0-.062.765c0 4.158 5.037 7.541 11.229 7.541s11.22-3.383 11.22-7.541a5 5 0 0 0-.053-.706 2.96 2.96 0 0 0 1.427-2.51m-18.008 1.88a1.753 1.753 0 0 1 1.73-1.74 1.73 1.73 0 0 1 1.709 1.74 1.71 1.71 0 0 1-1.709 1.711 1.733 1.733 0 0 1-1.73-1.711m9.565 4.968a5.57 5.57 0 0 1-4.081 1.272h-.032a5.58 5.58 0 0 1-4.087-1.272.6.6 0 0 1 .844-.854 4.5 4.5 0 0 0 3.238.927h.032a4.5 4.5 0 0 0 3.237-.927.6.6 0 1 1 .844.854zm-.331-3.256a1.726 1.726 0 1 1 1.709-1.712 1.717 1.717 0 0 1-1.712 1.712z"></path></svg><span class="screen-reader-text">Share on Reddit</span></a><a class="button twitter" target="_blank" href="https://twitter.com/intent/tweet?text=K8sGPT%20for%20Kubernetes%20troubleshooting%3A%20How%20AI%20helps%20in%20different%20cases&#038;url=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F" title="X (Twitter)" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon twitter" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M28 8.557a10 10 0 0 1-2.828.775 4.93 4.93 0 0 0 2.166-2.725 9.7 9.7 0 0 1-3.13 1.194 4.92 4.92 0 0 0-3.593-1.55 4.924 4.924 0 0 0-4.794 6.049c-4.09-.21-7.72-2.17-10.15-5.15a4.94 4.94 0 0 0-.665 2.477c0 1.71.87 3.214 2.19 4.1a5 5 0 0 1-2.23-.616v.06c0 2.39 1.7 4.38 3.952 4.83-.414.115-.85.174-1.297.174q-.476-.001-.928-.086a4.935 4.935 0 0 0 4.6 3.42 9.9 9.9 0 0 1-6.114 2.107q-.597 0-1.175-.068a13.95 13.95 0 0 0 7.55 2.213c9.056 0 14.01-7.507 14.01-14.013q0-.32-.015-.637c.96-.695 1.795-1.56 2.455-2.55z"></path></svg><span class="screen-reader-text">Share on X (Twitter)</span></a><a class="button telegram" target="_blank" href="https://telegram.me/share/url?url=https%3A%2F%2Fpalark.com%2Fblog%2Fk8sgpt-ai-troubleshooting-kubernetes%2F&#038;text=K8sGPT%20for%20Kubernetes%20troubleshooting%3A%20How%20AI%20helps%20in%20different%20cases" title="Telegram" rel="noopener noreferrer nofollow" style="min-width:24px;min-height:24px"><svg class="scriptlesssocialsharing__icon telegram" focusable="false" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#fff" d="M25.515 6.896 6.027 14.41c-1.33.534-1.322 1.276-.243 1.606l5 1.56 1.72 5.66c.226.625.115.873.77.873.506 0 .73-.235 1.012-.51l2.43-2.363 5.056 3.734c.93.514 1.602.25 1.834-.863l3.32-15.638c.338-1.363-.52-1.98-1.41-1.577z"></path></svg><span class="screen-reader-text">Share on Telegram</span></a></div></div> </div>
<div class="content__comments">
<div id="comments">
<h2 class="comments-title">Comments <span></span></h2>
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/blog/k8sgpt-ai-troubleshooting-kubernetes/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://palark.com/wp-comments-post.php" method="post" id="commentform" class="comment-form"> <!-- OneAll.com / Social Login for WordPress / v5.10.0 -->
<div class="oneall_social_login">
<div class="oneall_social_login_label" style="margin-bottom: 3px;"><label>Connect with:</label></div>
<div class="oneall_social_login_providers" id="oneall_social_login_providers_1174458"></div>
<script data-cfasync="false" type="text/javascript">
var _oneall = _oneall || [];
_oneall.push(['social_login', 'set_providers', ['facebook','github','google','linkedin']]);
_oneall.push(['social_login', 'set_callback_uri', (window.location.href + ((window.location.href.split('?')[1] ? '&amp;': '?') + "oa_social_login_source=comments"))]);
_oneall.push(['social_login', 'set_custom_css_uri', 'https://secure.oneallcdn.com/css/api/socialize/themes/wordpress/modern.css']);
_oneall.push(['social_login', 'do_render_ui', 'oneall_social_login_providers_1174458']);
</script>
</div><p class="comment-notes"><span id="email-notes">Your email address will not be published.</span> <span class="required-field-message">Required fields are marked <span class="required">*</span></span></p><input id="author" name="author" type="text" placeholder="Name*" autocomplete="off" required/>
<input id="email" name="email" type="text" placeholder="Email*" autocomplete="off" required/>
<textarea autocomplete="new-password" id="gc932f35b5" name="gc932f35b5" rows="3" placeholder="Add a comment*" required></textarea><textarea id="comment" aria-label="hp-comment" aria-hidden="true" name="comment" autocomplete="new-password" style="padding:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;position:absolute !important;white-space:nowrap !important;height:1px !important;width:1px !important;overflow:hidden !important;" tabindex="-1"></textarea><script data-noptimize>document.getElementById("comment").setAttribute( "id", "a11a4e4864e4a4e20d9e918f9d6d4e76" );document.getElementById("gc932f35b5").setAttribute( "id", "comment" );</script><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit button" value="Post Comment" /> <input type='hidden' name='comment_post_ID' value='2765' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p></form> </div><!-- #respond -->
</div>
</div>
</div>
</div>
</div>
</div>
<section>
<div class="container">
<h2 class="upper"><span>Related</span> articles</h2>
<div class="content-grid content-grid--lined">
<article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">18 January 2024</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/chatgpt-tools-for-kubernetes/">OpenAI-based Open Source tools for Kubernetes AIOps</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/tools/"
class="content__tags-item">
tools </a>
</li>
<li>
<a href="https://palark.com/blog/tag/cli/"
class="content__tags-item">
CLI </a>
</li>
</ul>
</div>
</article><article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">27 May 2020</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/using-ssl-certificates-from-lets-encrypt-in-your-kubernetes-ingress-via-cert-manager/">Using SSL certificates from Let’s Encrypt in your Kubernetes Ingress via cert-manager</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/tools/"
class="content__tags-item">
tools </a>
</li>
<li>
<a href="https://palark.com/blog/tag/security/"
class="content__tags-item">
security </a>
</li>
</ul>
</div>
</article><article class="content mini">
<div class="content__info">
<div class="content__line">
<div class="content__date">4 August 2020</div>
</div>
<h3 class="content__title">
<a href="https://palark.com/blog/recent-troubleshooting-cases-from-our-sres-part-2/">Recent troubleshooting cases from our SREs, part 2</a>
</h3>
<ul class="content__tags">
<li>
<a href="https://palark.com/blog/tag/kubernetes/"
class="content__tags-item content__tags-item--main">
Kubernetes </a>
</li>
<li>
<a href="https://palark.com/blog/tag/databases/"
class="content__tags-item">
databases </a>
</li>
<li>
<a href="https://palark.com/blog/tag/postgresql/"
class="content__tags-item">
PostgreSQL </a>
</li>
</ul>
</div>
</article> </div>
</div>
</section>
</main>
<footer class="footer">
<div class="content">
<div class="footer__content">
<div class="footer__logo">
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 18" fill="none"><path fill="#231F20" d="M87.77 3.18h-2.98v13.53h2.98V3.18ZM100 3.18h-3.68l-6.85 6.76 6.85 6.77H100l-6.85-6.77L100 3.18ZM31.33 12.68 23.4.5l-7.9 12.18h3.54l4.36-7.03 4.37 7.03h3.55ZM62.25 12.68 54.33.5l-7.9 12.18h3.54l4.36-7.03 4.36 7.03h3.56ZM80.14 16.71l-3.76-4.36a4.76 4.76 0 0 0-1.75-9.17h-9.22v13.53h2.98V5.91h6.25a2.01 2.01 0 1 1 0 4.03H71.2l-1.46 2.74h3.5l3.48 4.03h3.44ZM9.23 3.18H0v13.53h2.99V5.91h6.25a2.01 2.01 0 1 1 0 4.03H5.78l-1.46 2.74h4.92a4.75 4.75 0 0 0 0-9.5h-.01ZM37.78 13.98V3.18H34.8v13.53h8.8l1.76-2.73h-7.58Z"></path></svg> </div>
<div class="footer__info">
<p>Germany,
<br>Baden-Württemberg, Ulm</p>
<ul id="footer-nav-col-1" class="nav"><li id="menu-item-144" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-144"><a href="/privacy-policy/">Privacy policy</a></li>
<li id="menu-item-135" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-135"><a href="/impressum/">Imprint</a></li>
</ul><ul id="footer-nav-col-2" class="nav"><li id="menu-item-14" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14"><a href="tel:+4973114613240">+49 731 1461 3240</a></li>
<li id="menu-item-15" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-15"><a href="mailto:info@palark.com">info@palark.com</a></li>
</ul> </div>
<div class="footer__certificates">
<div class="footer__certificates-grid">
<img height="54" width="145" src="/wp-content/themes/palark/assets/images/certs/gdpr.svg"
loading="lazy" alt="gdpr">
<img height="55" width="209" src="/wp-content/themes/palark/assets/images/certs/cncf.svg"
loading="lazy" alt="cncf" style="max-width: 190px">
<a href="/news/palark-best-devops-company-goodfirms-2025/" title="Palark is the Best Company to Work With">
<img height="144" width="288" src="/wp-content/themes/palark/assets/images/certs/good-firms.svg"
loading="lazy" alt="good-firms" style="max-height: 54px">
</a>
<div class="clutch-local-widget">
<div class="content">
<a class="logotype"
href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=logo&utm_term=palark.com"
target="_blank"
rel="nofollow"
data-ga-action="logo_click">
</a>
<div class="mini_widget_text">
<div class="mini_widget_stars">
<span class="rating">4.9</span>
<div class="reviews-totals-stars">
<a href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=stars&utm_term=palark.com#reviews"
rel="nofollow"
target="_blank">
<div class="fivestar-static-item">
<div class="form-item form-type-item">
<div class="fivestar-widget-static fivestar-widget-static-vote clearfix">
<div class="fivestar">
<div class="star star-1 star-odd">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-2 star-even">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-3 star-odd">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-4 star-even">
<span class="on" style="--width: 100%; width: var(--width);"></span>
</div>
<div class="star star-5 star-odd">
<span class="on" style="--width: 90%; width: var(--width);"></span>
</div>
</div>
</div>
</div>
</div>
</a>
</div>
<span class="reviews-count">
<a href="https://clutch.co/profile/palark?utm_source=widget&utm_medium=1&utm_campaign=widget&utm_content=num_reviews&utm_term=palark.com#reviews"
target="_blank"
rel="nofollow">
15 reviews
</a>
</span>
</div>
</div>
</div>
</div>
<a href="/news/palark-iso-27001-certified/" title="Palark is ISO 27001 certified">
<img height="158" width="333" src="/wp-content/themes/palark/assets/images/certs/iso.png"
loading="lazy" alt="iso">
</a>
<a href="/news/palark-kubernetes-certified-service-provider/">
<img height="104" width="110" src="/wp-content/themes/palark/assets/images/certs/k8s.svg"
loading="lazy" alt="k8s" title="Kubernetes Certified Service Provider (KCSP)" style="grid-column: 2">
</a>
<img height="147" width="169" src="/wp-content/themes/palark/assets/images/certs/lf.png"
loading="lazy" alt="linux-foundation">
</div>
</div>
</div>
<div class="footer__bottom">
<div class="footer__back-up" onclick="window.scrollTo(0,0)">Back up</div>
<div class="footer__copyright">© 2022–2026 Palark
GmbH. All rights reserved. </div>
<div class="social-links">
<a href="https://www.linkedin.com/company/palark/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" fill="none">
<path fill="currentColor" fill-rule="evenodd"
d="M1.35 0C.6044 0 0 .6044 0 1.35v27.3C0 29.3956.6044 30 1.35 30h27.3c.7456 0 1.35-.6044 1.35-1.35V1.35C30 .6044 29.3956 0 28.65 0H1.35Zm5.3167 9.2832c1.428 0 2.5857-1.1577 2.5857-2.5857 0-1.428-1.1577-2.5857-2.5857-2.5857-1.428 0-2.5856 1.1577-2.5856 2.5857 0 1.428 1.1576 2.5857 2.5856 2.5857Zm-2.2121 1.9946h4.4548v14.2368H4.4546V11.2778Zm11.6976 14.2357-4.4701-.0006V11.2761H15.95v1.9472c.5713-.8049 1.8351-2.3515 4.4389-2.3515 1.1886 0 3.1027.3427 4.1433 1.8692.9126 1.3386.9969 3.1308.9969 4.2835v8.489h-4.4237v-7.7881c0-2.8162-1.7912-3.0686-2.7725-2.9128-.475.0754-.9855.2232-1.4019.6698-.4439.4762-.7788 1.3084-.7788 2.243v7.7881Z"
clip-rule="evenodd"></path>
</svg>
</a>
<a href="https://bsky.app/profile/palark.com" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 57" fill="none">
<path d="M13.873 3.805C21.21 9.332 29.103 20.537 32 26.55v15.882c0-.338-.13.044-.41.867-1.512 4.456-7.418 21.847-20.923 7.944-7.111-7.32-3.819-14.64 9.125-16.85-7.405 1.264-15.73-.825-18.014-9.015C1.12 23.022 0 8.51 0 6.55 0-3.268 8.579-.182 13.873 3.805ZM50.127 3.805C42.79 9.332 34.897 20.537 32 26.55v15.882c0-.338.13.044.41.867 1.512 4.456 7.418 21.847 20.923 7.944 7.111-7.32 3.819-14.64-9.125-16.85 7.405 1.264 15.73-.825 18.014-9.015C62.88 23.022 64 8.51 64 6.55c0-9.818-8.578-6.732-13.873-2.745Z"
fill="currentColor"></path>
</svg>
</a>
<a href="https://www.facebook.com/palarkcom/" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" fill="none">
<path fill="currentColor"
d="M30 15a15 15 0 1 0-17.34 14.82V19.34H8.85V15h3.8v-3.3c0-3.76 2.25-5.84 5.67-5.84 1.64 0 3.36.3 3.36.3v3.68h-1.9c-1.86 0-2.44 1.16-2.44 2.35V15h4.16l-.66 4.34h-3.5v10.48A15 15 0 0 0 30 15Z"></path>
</svg>
</a>
<a href="https://www.youtube.com/@palark" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="31" height="20" viewBox="0 0 31 20" fill="none">
<path d="M24.9903 0.204701C20.5505 -0.0682335 10.6618 -0.0682335 6.23314 0.204701C1.43453 0.497852 0.862737 3.116 0.829102 10C0.862737 16.8739 1.42332 19.492 6.23314 19.7953C10.673 20.0682 20.5505 20.0682 24.9903 19.7953C29.7889 19.5021 30.3607 16.884 30.3943 10C30.3607 3.12611 29.8001 0.497852 24.9903 0.204701ZM11.9175 14.4377V5.55219L21.7725 9.98989L11.9175 14.4377Z"
fill="currentColor"></path>
</svg>
</a>
<a href="https://github.com/palark" target="_blank">
<svg xmlns="http://www.w3.org/2000/svg" width="21" height="20" viewBox="0 0 21 20" fill="none">
<path d="M10.3945 0C4.89453 0 0.394531 4.6123 0.394531 10.2495C0.394531 14.7764 3.22786 18.62 7.22786 19.9866C7.72786 20.072 7.89453 19.7304 7.89453 19.4741V17.5951C5.14453 18.193 4.5612 16.3993 4.5612 16.3993C4.14453 15.2035 3.47786 14.8618 3.47786 14.8618C2.5612 14.264 3.5612 14.264 3.5612 14.264C4.5612 14.3494 5.0612 15.2889 5.0612 15.2889C5.97786 16.8263 7.39453 16.3993 7.97786 16.143C8.0612 15.4597 8.3112 15.0327 8.64453 14.7764C6.3112 14.5202 3.97786 13.6661 3.97786 9.73707C3.97786 8.6267 4.39453 7.68716 4.97786 7.00386C4.97786 6.74762 4.5612 5.63725 5.14453 4.27065C5.14453 4.27065 5.97786 4.01441 7.89453 5.2956C8.72786 5.03936 9.5612 4.95395 10.3945 4.95395C11.2279 4.95395 12.0612 5.03936 12.8945 5.2956C14.8112 4.01441 15.6445 4.27065 15.6445 4.27065C16.2279 5.72267 15.8112 6.74762 15.7279 7.00386C16.3945 7.68716 16.7279 8.6267 16.7279 9.73707C16.7279 13.6661 14.3945 14.5202 12.1445 14.7764C12.4779 15.1181 12.8112 15.716 12.8112 16.6555V19.4741C12.8112 19.7304 12.9779 20.072 13.4779 19.9866C17.5612 18.62 20.3945 14.7764 20.3945 10.2495C20.3945 4.6123 15.8945 0 10.3945 0Z"
fill="currentColor"></path>
</svg>
</a>
</div> </div>
</div>
</footer>
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/palark/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0" style="position:absolute">
<symbol id="envelope" viewBox="0 0 512 512">
<path d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path>
</symbol>
<symbol id="envelope-square" viewBox="0 0 448 512">
<path d="M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"></path>
</symbol>
<symbol id="facebook" viewBox="0 0 512 512">
<path d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"></path>
</symbol>
<symbol id="facebook-f" viewBox="0 0 320 512">
<path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path>
</symbol>
<symbol id="facebook-square" viewBox="0 0 448 512">
<path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"></path>
</symbol>
<symbol id="get-pocket" viewBox="0 0 448 512">
<path d="M407.6 64h-367C18.5 64 0 82.5 0 104.6v135.2C0 364.5 99.7 464 224.2 464c124 0 223.8-99.5 223.8-224.2V104.6c0-22.4-17.7-40.6-40.4-40.6zm-162 268.5c-12.4 11.8-31.4 11.1-42.4 0C89.5 223.6 88.3 227.4 88.3 209.3c0-16.9 13.8-30.7 30.7-30.7 17 0 16.1 3.8 105.2 89.3 90.6-86.9 88.6-89.3 105.5-89.3 16.9 0 30.7 13.8 30.7 30.7 0 17.8-2.9 15.7-114.8 123.2z"></path>
</symbol>
<symbol id="hatena" viewBox="0 0 853 711">
<path d="M344.709 564.734c-18.912 11.616-51.503 17.322-97.231 17.322h-67.65V426.887H250.4c46.963 0 79.422 5.907 96.687 17.707 17.547 11.806 26.179 32.653 26.179 62.578 0 26.781-9.46 46.015-28.557 57.562zM179.828 157.453h41.569c48.041 0 80.316 5.425 96.972 16.216 16.437 10.856 24.815 29.578 24.815 56.262 0 25.669-8.918 43.753-26.562 54.356-17.866 10.407-50.453 15.675-98.147 15.675h-38.647V157.453zm334.328 222.981c-28.306-31.634-67.65-49.409-118.14-53.25 44.906-12.243 77.521-30.143 98.15-54.068 20.531-23.607 30.715-55.654 30.715-95.985 0-31.925-6.978-60.172-20.5-84.569-13.862-24.246-33.794-43.665-59.972-58.193-22.912-12.6-50.134-21.485-81.868-26.725C330.65 2.566 274.831 0 194.741 0H0v710.225h200.644c80.597 0 138.731-2.822 174.272-8.222 35.506-5.581 65.303-14.975 89.421-27.853 29.829-15.744 52.579-38.144 68.479-66.925 15.993-28.875 23.925-62.169 23.925-100.247 0-52.669-14.188-95-42.585-126.544zM762.328 530.303c-49.709 0-89.978 40.241-89.978 89.947s40.269 89.975 89.978 89.975c49.644 0 89.947-40.269 89.947-89.975 0-49.706-40.303-89.947-89.947-89.947zM684.187 0h156.25v473.484h-156.25z"></path>
</symbol>
<symbol id="linkedin" viewBox="0 0 448 512">
<path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path>
</symbol>
<symbol id="linkedin-in" viewBox="0 0 448 512">
<path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path>
</symbol>
<symbol id="pinterest" viewBox="0 0 496 512">
<path d="M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"></path>
</symbol>
<symbol id="pinterest-p" viewBox="0 0 384 512">
<path d="M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z"></path>
</symbol>
<symbol id="pinterest-square" viewBox="0 0 448 512">
<path d="M448 80v352c0 26.5-21.5 48-48 48H154.4c9.8-16.4 22.4-40 27.4-59.3 3-11.5 15.3-58.4 15.3-58.4 8 15.3 31.4 28.2 56.3 28.2 74.1 0 127.4-68.1 127.4-152.7 0-81.1-66.2-141.8-151.4-141.8-106 0-162.2 71.1-162.2 148.6 0 36 19.2 80.8 49.8 95.1 4.7 2.2 7.1 1.2 8.2-3.3.8-3.4 5-20.1 6.8-27.8.6-2.5.3-4.6-1.7-7-10.1-12.3-18.3-34.9-18.3-56 0-54.2 41-106.6 110.9-106.6 60.3 0 102.6 41.1 102.6 99.9 0 66.4-33.5 112.4-77.2 112.4-24.1 0-42.1-19.9-36.4-44.4 6.9-29.2 20.3-60.7 20.3-81.8 0-53-75.5-45.7-75.5 25 0 21.7 7.3 36.5 7.3 36.5-31.4 132.8-36.1 134.5-29.6 192.6l2.2.8H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48z"></path>
</symbol>
<symbol id="reddit" viewBox="0 0 512 512">
<path d="M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"></path>
</symbol>
<symbol id="reddit-alien" viewBox="0 0 512 512">
<path d="M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z"></path>
</symbol>
<symbol id="reddit-square" viewBox="0 0 448 512">
<path d="M283.2 345.5c2.7 2.7 2.7 6.8 0 9.2-24.5 24.5-93.8 24.6-118.4 0-2.7-2.4-2.7-6.5 0-9.2 2.4-2.4 6.5-2.4 8.9 0 18.7 19.2 81 19.6 100.5 0 2.4-2.3 6.6-2.3 9 0zm-91.3-53.8c0-14.9-11.9-26.8-26.5-26.8-14.9 0-26.8 11.9-26.8 26.8 0 14.6 11.9 26.5 26.8 26.5 14.6 0 26.5-11.9 26.5-26.5zm90.7-26.8c-14.6 0-26.5 11.9-26.5 26.8 0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-11.9 26.8-26.5 0-14.9-11.9-26.8-26.8-26.8zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-99.7 140.6c-10.1 0-19 4.2-25.6 10.7-24.1-16.7-56.5-27.4-92.5-28.6l18.7-84.2 59.5 13.4c0 14.6 11.9 26.5 26.5 26.5 14.9 0 26.8-12.2 26.8-26.8 0-14.6-11.9-26.8-26.8-26.8-10.4 0-19.3 6.2-23.8 14.9l-65.7-14.6c-3.3-.9-6.5 1.5-7.4 4.8l-20.5 92.8c-35.7 1.5-67.8 12.2-91.9 28.9-6.5-6.8-15.8-11-25.9-11-37.5 0-49.8 50.4-15.5 67.5-1.2 5.4-1.8 11-1.8 16.7 0 56.5 63.7 102.3 141.9 102.3 78.5 0 142.2-45.8 142.2-102.3 0-5.7-.6-11.6-2.1-17 33.6-17.2 21.2-67.2-16.1-67.2z"></path>
</symbol>
<symbol id="sms" viewBox="0 0 512 512">
<path d="M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z"></path>
</symbol>
<symbol id="square-x-twitter" viewBox="0 0 448 512">
<path d="M64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zm297.1 84L257.3 234.6 379.4 396h-95.6L209 298.1 123.3 396H75.8l111-126.9L69.7 116h98l67.7 89.5 78.2-89.5h47.5zm-37.8 251.6L153.4 142.9h-28.3l171.8 224.7h26.3z"></path>
</symbol>
<symbol id="telegram" viewBox="0 0 496 512">
<path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm121.8 169.9l-40.7 191.8c-3 13.6-11.1 16.9-22.4 10.5l-62-45.7-29.9 28.8c-3.3 3.3-6.1 6.1-12.5 6.1l4.4-63.1 114.9-103.8c5-4.4-1.1-6.9-7.7-2.5l-142 89.4-61.2-19.1c-13.3-4.2-13.6-13.3 2.8-19.7l239.1-92.2c11.1-4 20.8 2.7 17.2 19.5z"></path>
</symbol>
<symbol id="telegram-plane" viewBox="0 0 448 512">
<path d="M446.7 98.6l-67.6 318.8c-5.1 22.5-18.4 28.1-37.3 17.5l-103-75.9-49.7 47.8c-5.5 5.5-10.1 10.1-20.7 10.1l7.4-104.9 190.9-172.5c8.3-7.4-1.8-11.5-12.9-4.1L117.8 284 16.2 252.2c-22.1-6.9-22.5-22.1 4.6-32.7L418.2 66.4c18.4-6.9 34.5 4.1 28.5 32.2z"></path>
</symbol>
<symbol id="twitter" viewBox="0 0 512 512">
<path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
</symbol>
<symbol id="twitter-square" viewBox="0 0 448 512">
<path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-48.9 158.8c.2 2.8.2 5.7.2 8.5 0 86.7-66 186.6-186.6 186.6-37.2 0-71.7-10.8-100.7-29.4 5.3.6 10.4.8 15.8.8 30.7 0 58.9-10.4 81.4-28-28.8-.6-53-19.5-61.3-45.5 10.1 1.5 19.2 1.5 29.6-1.2-30-6.1-52.5-32.5-52.5-64.4v-.8c8.7 4.9 18.9 7.9 29.6 8.3a65.447 65.447 0 0 1-29.2-54.6c0-12.2 3.2-23.4 8.9-33.1 32.3 39.8 80.8 65.8 135.2 68.6-9.3-44.5 24-80.6 64-80.6 18.9 0 35.9 7.9 47.9 20.7 14.8-2.8 29-8.3 41.6-15.8-4.9 15.2-15.2 28-28.8 36.1 13.2-1.4 26-5.1 37.8-10.2-8.9 13.1-20.1 24.7-32.9 34z"></path>
</symbol>
<symbol id="whatsapp" viewBox="0 0 448 512">
<path d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"></path>
</symbol>
<symbol id="whatsapp-square" viewBox="0 0 448 512">
<path d="M224 122.8c-72.7 0-131.8 59.1-131.9 131.8 0 24.9 7 49.2 20.2 70.1l3.1 5-13.3 48.6 49.9-13.1 4.8 2.9c20.2 12 43.4 18.4 67.1 18.4h.1c72.6 0 133.3-59.1 133.3-131.8 0-35.2-15.2-68.3-40.1-93.2-25-25-58-38.7-93.2-38.7zm77.5 188.4c-3.3 9.3-19.1 17.7-26.7 18.8-12.6 1.9-22.4.9-47.5-9.9-39.7-17.2-65.7-57.2-67.7-59.8-2-2.6-16.2-21.5-16.2-41s10.2-29.1 13.9-33.1c3.6-4 7.9-5 10.6-5 2.6 0 5.3 0 7.6.1 2.4.1 5.7-.9 8.9 6.8 3.3 7.9 11.2 27.4 12.2 29.4s1.7 4.3.3 6.9c-7.6 15.2-15.7 14.6-11.6 21.6 15.3 26.3 30.6 35.4 53.9 47.1 4 2 6.3 1.7 8.6-1 2.3-2.6 9.9-11.6 12.5-15.5 2.6-4 5.3-3.3 8.9-2 3.6 1.3 23.1 10.9 27.1 12.9s6.6 3 7.6 4.6c.9 1.9.9 9.9-2.4 19.1zM400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM223.9 413.2c-26.6 0-52.7-6.7-75.8-19.3L64 416l22.5-82.2c-13.9-24-21.2-51.3-21.2-79.3C65.4 167.1 136.5 96 223.9 96c42.4 0 82.2 16.5 112.2 46.5 29.9 30 47.9 69.8 47.9 112.2 0 87.4-72.7 158.5-160.1 158.5z"></path>
</symbol>
<symbol id="x-twitter" viewBox="0 0 512 512">
<path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9L389.2 48zm-24.8 373.8h39.1L151.1 88h-42l255.3 333.8z"></path>
</symbol>
</svg>
<script id="wp-hooks-js" src="/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
<script id="wp-i18n-js" src="/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
<script id="wp-i18n-js-after">
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
//# sourceURL=wp-i18n-js-after
</script>
<script id="swv-js" defer src="/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=6.1.7"></script>
<script id="contact-form-7-js-translations">
( function( domain, translations ) {
var localeData = translations.locale_data[ domain ] || translations.locale_data.messages;
localeData[""].domain = domain;
wp.i18n.setLocaleData( localeData, domain );
} )( "contact-form-7", {"translation-revision-date":"2026-05-05 18:32:38+0000","generator":"GlotPress\/4.0.3","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","plural-forms":"nplurals=2; plural=n != 1;","lang":"en_GB"},"This contact form is placed in the wrong place.":["This contact form is placed in the wrong place."],"Error:":["Error:"]}},"comment":{"reference":"includes\/js\/index.js"}} );
//# sourceURL=contact-form-7-js-translations
</script>
<script id="contact-form-7-js-before">
var wpcf7 = {
"api": {
"root": "https:\/\/palark.com\/wp-json\/",
"namespace": "contact-form-7\/v1"
}
};
//# sourceURL=contact-form-7-js-before
</script>
<script id="contact-form-7-js" defer src="/wp-content/plugins/contact-form-7/includes/js/index.js?ver=6.1.7"></script>
<script id="cf7apps-honeypot-refill-js-extra">
var cf7appsHoneypotRefill = {"forceRefillOnInit":""};
//# sourceURL=cf7apps-honeypot-refill-js-extra
</script>
<script id="cf7apps-honeypot-refill-js" defer src="/wp-content/plugins/contact-form-7-honeypot/legacy-honeypot/includes/js/honeypot-refill.js?ver=3.7.1"></script>
<script async data-wp-strategy="async" fetchpriority="low" id="comment-reply-js" src="/wp-includes/js/comment-reply.min.js?ver=7.1"></script>
<script id="lazyload-video-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-shared.js?ver=2.18.11"></script>
<script id="lazyload-youtube-js-js-before">
window.llvConfig=window.llvConfig||{};window.llvConfig.youtube={"colour":"red","buttonstyle":"none","controls":true,"loadpolicy":true,"thumbnailquality":"0","preroll":"","postroll":"","overlaytext":"<strong>Please accept YouTube cookies to play this video.<\/strong> By accepting you will be accessing content from YouTube, a service provided by an external third party.<br><br><a href=\"https:\/\/policies.google.com\/privacy\" target=\"_blank\" rel=\"noopener noreferrer\">YouTube privacy policy<\/a><br><br>If you accept this notice, your choice will be saved and the page will refresh.<br><br><span class=\"youtube-consent-button\">Accept YouTube Content <span aria-hidden=\"true\">&#10004;<\/span><\/span>","loadthumbnail":false,"cookies":false,"callback":"<!--YOUTUBE_CALLBACK-->"};
//# sourceURL=lazyload-youtube-js-js-before
</script>
<script id="lazyload-youtube-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-youtube.js?ver=2.18.11"></script>
<script id="lazyload-vimeo-js-js-before">
window.llvConfig=window.llvConfig||{};window.llvConfig.vimeo={"buttonstyle":"","playercolour":"","preroll":"","postroll":"","show_title":false,"overlaytext":"","loadthumbnail":true,"thumbnailquality":false,"cookies":false,"callback":"<!--VIMEO_CALLBACK-->"};
//# sourceURL=lazyload-vimeo-js-js-before
</script>
<script id="lazyload-vimeo-js-js" defer src="/wp-content/plugins/lazy-load-for-videos/public/js/lazyload-vimeo.js?ver=2.18.11"></script>
<script id="googlesitekit-events-provider-contact-form-7-js" defer src="/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-0310812e6aa65ef3c958.js"></script>
<script id="googlesitekit-events-provider-content-events-js-before">
window._googlesitekit = window._googlesitekit || {};
window._googlesitekit.contentEvents = {"postID":2765,"isSinglePost":true};
//# sourceURL=googlesitekit-events-provider-content-events-js-before
</script>
<script id="googlesitekit-events-provider-content-events-js" defer src="/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-content-events-33078016c5e1e9f07c35.js"></script>
<!-- Start cookieyes banner --> <script defer id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/2e50d88887eb6e7903fcace8/script.js"></script> <!-- End cookieyes banner -->
<!-- Matomo Tag Manager -->
<script>
var _mtm = window._mtm = window._mtm || [];
_mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'});
(function() {
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src='https://cdn.matomo.cloud/palark.matomo.cloud/container_vEVxopwf.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Tag Manager --></body>
</html>