{"id":336723,"date":"2022-08-08T15:00:30","date_gmt":"2022-08-08T15:00:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=336723"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=336723","title":{"rendered":"<span>\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Kubernetes \u2014 \u043a\u0430\u043a \u043a\u043e\u0434 Go<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/680664\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\"\/><\/div>\n<p><\/a><br \/>  <a href=\"https:\/\/cdk8s.io\/docs\/latest\/\" rel=\"noopener noreferrer\">cdk8s<\/a> (Cloud Development Kit for Kubernetes) \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a (\u0447\u0430\u0441\u0442\u044c CNCF), \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Kubernetes \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043c\u0435\u0441\u0442\u043e <code>yaml<\/code>). \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>cdk8s-plus<\/code> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>cdk8s<\/code>. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 <code>cdk8s<\/code>.<\/p>\n<p>  \u042f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/api-extension\/custom-resources\/#customresourcedefinitions\" rel=\"noopener noreferrer\">Kubernetes Custom Resource Definitions<\/a> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>cdk8s<\/code>. \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <code>Nginx<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e CRD \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Strimzi \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Go <code>cdk8s<\/code> \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u043d\u0430 Kubernetes!<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<blockquote><p>\u042f \u0431\u0443\u0434\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u044b \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 Kubernetes Custom Resource Definitions \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0434\u0430\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0432 \u0432\u0438\u0434\u0435 <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/operator\/\" rel=\"noopener noreferrer\">\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432<\/a>. \u041d\u043e \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435! \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Kubernetes \u043e\u043d\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b. \u0412\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0435\u0451, \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435!<\/p><\/blockquote>\n<p>  <code>cdk8s<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b Kubernetes API \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u0434\u0435, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 Go, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <code>cdk8s import<\/code>. (\u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <em>\u00abWait, what about the Kubernetes API dependencies??\u00bb<\/em> <a href=\"https:\/\/dzone.com\/articles\/write-your-kubernetes-infrastructure-as-go-code-ge\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0430<\/a>). \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f Custom Resource Definitions! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b<\/font><\/h3>\n<p>  \u0412\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>Go<\/code> (<a href=\"https:\/\/go.dev\/dl\/\" rel=\"noopener noreferrer\">v1.16<\/a> \u0438\u043b\u0438 \u0432\u044b\u0448\u0435) \u0438 <a href=\"https:\/\/github.com\/cdk8s-team\/cdk8s-cli\" rel=\"noopener noreferrer\">cdk8s CLI<\/a>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 Kubernetes. \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u043d\u043e\u0443\u0437\u043b\u043e\u0432\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\" rel=\"noopener noreferrer\">minikube<\/a>, <a href=\"https:\/\/kind.sigs.k8s.io\/docs\/user\/quick-start\/#installation\" rel=\"noopener noreferrer\">kind<\/a> \u0438 \u0442. \u043f.<\/p>\n<blockquote><p>\u042f \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>minikube<\/code>, \u0433\u0434\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0432\u0435\u0441\u0442\u0438 <code>minikube start<\/code>.<\/p><\/blockquote>\n<p>  <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Cdk8s Cli<\/font><\/h3>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"powershell\">#homebrew brew install cdk8s  #npm npm install -g cdk8s-cli  #yarn yarn global add cdk8s-cli<\/code><\/pre>\n<p>  <\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u0418\u0442\u0430\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c<\/font><\/h3>\n<p>  <\/p>\n<blockquote><p>\u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u043e \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c <a href=\"https:\/\/github.com\/abhirockzz\/cdk8s-for-go-developers\/tree\/master\/part3-crd\" rel=\"noopener noreferrer\">\u043a\u043e\u0434\u043e\u043c \u043d\u0430 Github<\/a>.<\/p><\/blockquote>\n<p>  <code>cdk8s<\/code> \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0433\u0430\u0434\u0430\u0442\u044c, \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0442. \u043f., \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0451 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>cdk8s init<\/code>!<\/p>\n<pre><code class=\"powershell\">cdk8s init go-app  #output ....   Your cdk8s Go project is ready!     cat help      Prints this message      cdk8s synth   Synthesize k8s manifests to dist\/    cdk8s import  Imports k8s API objects to \"imports\/k8s\"    Deploy: \u00a0 \u00a0kubectl apply -f dist\/<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 <code>go.mod<\/code> \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<blockquote><p>\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u044b\u043c\u0438 \u043d\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p><\/blockquote>\n<p>  <\/p>\n<pre><code class=\"go\">module cdk8s-crd  go 1.16  require (     github.com\/aws\/constructs-go\/constructs\/v10 v10.1.42     github.com\/aws\/jsii-runtime-go v1.61.0 \u00a0 \u00a0 github.com\/cdk8s-team\/cdk8s-core-go\/cdk8s\/v2 v2.3.34<\/code><\/pre>\n<p>  <\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043e\u0447\u0435\u043d\u044c (\u043e\u0447\u0435\u043d\u044c!) \u043f\u0440\u043e\u0441\u0442\u044b\u043c Custom Resource Definition<\/font><\/h4>\n<p>  \u042f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c CRD \u0438\u0437 <a href=\"https:\/\/github.com\/kubernetes\/sample-controller\" rel=\"noopener noreferrer\">\u043f\u0440\u0438\u043c\u0435\u0440\u0430 Kubernetes<\/a>. \u041e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u043d \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443, \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e!<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\/\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c \u0440\u0435\u0441\u0443\u0440\u0441 <code>CRD<\/code>:<\/p>\n<pre><code class=\"powershell\">kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/sample-controller\/master\/artifacts\/examples\/crd.yaml<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0431\u044b\u043b \u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d <code>CRD<\/code>:<\/p>\n<pre><code class=\"powershell\">kubectl get crd  # output NAME                           CREATED AT foos.samplecontroller.k8s.io   2022-07-08T09:28:46Z  kubectl get foos.samplecontroller.k8s.io  #output (as expected) No resources found in default namespace.<\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 <code>CRD<\/code> \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>foos.samplecontroller.k8s.io<\/code> \u0438 \u0442\u0438\u043f\u043e\u043c <code>Foo<\/code>. \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>yaml<\/code>, \u043d\u043e\u2026<\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u041c\u044b \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 Go!<\/font><\/h4>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c <code>CRD<\/code> \u043a\u0430\u043a API \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>cdk8s<\/code> \u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (<code>struct<\/code> \u0438 \u0442. \u0434.):<\/p>\n<pre><code class=\"powershell\">cdk8s import https:\/\/raw.githubusercontent.com\/kubernetes\/sample-controller\/master\/artifacts\/examples\/crd.yaml<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u0430\u043f\u043a\u0443 <code>imports<\/code>, \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043f\u043a\u0430.<\/p>\n<pre><code class=\"powershell\">imports\/ \u2514\u2500\u2500 samplecontrollerk8sio     \u251c\u2500\u2500 internal     \u2502   \u2514\u2500\u2500 types.go     \u251c\u2500\u2500 jsii     \u2502   \u251c\u2500\u2500 jsii.go     \u2502   \u2514\u2500\u2500 samplecontrollerk8sio-0.0.0.tgz     \u251c\u2500\u2500 samplecontrollerk8sio.go     \u251c\u2500\u2500 samplecontrollerk8sio.init.go \u00a0 \u00a0 \u2514\u2500\u2500 version<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>CRD<\/code> \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0435\u0441\u0443\u0440\u0441\/API Kubernetes (\u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>Deployment<\/code>) \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u0434 Go <code>cdk8s<\/code>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b <code>foo.go<\/code> \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u0443\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"go\">package main  import (     \"cdk8s-crd\/imports\/samplecontrollerk8sio\"      \"github.com\/aws\/constructs-go\/constructs\/v10\"     \"github.com\/aws\/jsii-runtime-go\"     \"github.com\/cdk8s-team\/cdk8s-core-go\/cdk8s\/v2\" )  type FooChartProps struct {     cdk8s.ChartProps }  func NewFooChart(scope constructs.Construct, id string, props *FooChartProps) cdk8s.Chart {     var cprops cdk8s.ChartProps     if props != nil {         cprops = props.ChartProps     }     chart := cdk8s.NewChart(scope, jsii.String(id), &amp;cprops)      samplecontrollerk8sio.NewFoo(chart, jsii.String(\"foo1\"), &amp;samplecontrollerk8sio.FooProps{Spec: &amp;samplecontrollerk8sio.FooSpec{DeploymentName: jsii.String(\"foo1-dep\"), Replicas: jsii.Number(2)}})      return chart }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>samplecontrollerk8sio.Foo<\/code>:<\/p>\n<ul>\n<li>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 CRD API \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <code>cdk8s-crd\/imports\/samplecontrollerk8sio<\/code>,<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>NewFoo<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>FooProps<\/code><\/li>\n<\/ul>\n<p>  \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 <code>main.go<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"go\">package main  import (     \"github.com\/cdk8s-team\/cdk8s-core-go\/cdk8s\/v2\" )  type MyChartProps struct {     cdk8s.ChartProps }  func main() {     app := cdk8s.NewApp(nil)     NewFooChart(app, \"FooApp\", nil)     app.Synth() }<\/code><\/pre>\n<p>  \u041c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 <code>Chart<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 (\u0432 <code>foo.go<\/code>) \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 <code>App<\/code> <code>cdk8s<\/code>.<\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 <code>Foo<\/code><\/font><\/h4>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 <code>cdk8s synth<\/code> \u2014 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u0432 \u043f\u0430\u043f\u043a\u0435 <code>dist<\/code>:<\/p>\n<pre><code class=\"plaintext\">apiVersion: samplecontroller.k8s.io\/v1alpha1 kind: Foo spec:   deploymentName: foo1-dep   replicas: 2 metadata: \u00a0 name: fooapp-foo1-c80094ac<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes:<\/p>\n<pre><code class=\"powershell\">kubectl apply -f dist<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0441\u0434\u0435\u043b\u0430\u043d\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"powershell\">kubectl get foo kubectl get foos.samplecontroller.k8s.io<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430, \u0442. \u0435. <code>kubectl describe foo\/fooapp-foo1-c80094ac<\/code>.<\/p><\/blockquote>\n<p>  \u0418\u0442\u0430\u043a, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0432\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0447\u0435\u043c\u0443-\u0442\u043e \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u043c\u0443.<\/p>\n<h3><font color=\"#3AC1EF\">\u258d \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Kafka \u043d\u0430 Kubernetes \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Strimzi, cdk8s \u0438 Go<\/font><\/h3>\n<p>  <a href=\"https:\/\/strimzi.io\/\">Strimzi<\/a> \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 CNCF, \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u0438\u0445 \u043b\u044e\u0431\u0438\u043c\u044b\u0445! \u0412\u043f\u043e\u043b\u043d\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435 \u043e Strimzi. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Apache Kafka \u043d\u0430 Kubernetes \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Custom Resource Definitions \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka, \u0442\u0435\u043c\u0430 Kafka Connect, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438, Kafka Mirror \u0438 \u0442. \u043f.<\/p>\n<p>  \u0412\u043e\u0442 <a href=\"https:\/\/strimzi.io\/docs\/operators\/latest\/images\/overview\/kafka-concepts-supporting-components.png\" rel=\"noopener noreferrer\">\u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430<\/a> \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 Strimzi. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 Strimzi \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043a \u0435\u0433\u043e (\u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u043d\u043e\u0439!) <a href=\"https:\/\/strimzi.io\/docs\/\" rel=\"noopener noreferrer\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\"\/><\/div>\n<p>  \u041a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c CRD (\u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/strimzi.io\/quickstarts\/\">Strimzi Quickstart<\/a>).<\/p>\n<pre><code class=\"powershell\">kubectl create namespace kafka kubectl create -f 'https:\/\/strimzi.io\/install\/latest?namespace=kafka' -n kafka  # wait for the Operator Pod to start up (Running) kubectl get pod -n kafka --watch<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043b\u043e\u0433\u0438 Operator \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>kubectl logs deployment\/strimzi-cluster-operator -n kafka -f<\/code><\/p><\/blockquote>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Kafka (\u043a\u043b\u0430\u0441\u0442\u0435\u0440, connect, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435) \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 Custom Resource Definition. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e CRD \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 \u0442\u0435\u043c Kafka. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u043a\u0430\u043a API:<\/p>\n<pre><code class=\"powershell\">cdk8s import https:\/\/raw.githubusercontent.com\/strimzi\/strimzi-kafka-operator\/main\/install\/cluster-operator\/040-Crd-kafka.yaml  cdk8s import kafkatopic:=https:\/\/raw.githubusercontent.com\/strimzi\/strimzi-kafka-operator\/main\/install\/cluster-operator\/043-Crd-kafkatopic.yaml<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f CRD \u0442\u0435\u043c\u044b Kafka \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043c\u0435\u043d\u0438 \u043c\u043e\u0434\u0443\u043b\u044f <code>kafkatopic<\/code><\/p><\/blockquote>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 <code>imports<\/code> \u2014 \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u043f\u043a\u0438 \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 <code>kafkastrimziio<\/code> \u0438 <code>kafkatopic_kafkastrimziio<\/code>.<\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0421\u043d\u043e\u0432\u0430 \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 Go<\/font><\/h4>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b <code>kafka_strimzi.go<\/code> \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/abhirockzz\/cdk8s-for-go-developers\/blob\/master\/part3-crd\/kafka_strimzi.go\" rel=\"noopener noreferrer\">\u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 Github<\/a>:<\/p>\n<blockquote><p>\u0418\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a: <code>curl -o kafka.go https:\/\/raw.githubusercontent.com\/abhirockzz\/cdk8s-for-go-developers\/master\/part3-crd\/kafka_strimzi.go<\/code><\/p><\/blockquote>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u0432\u0430\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>NewKafkaChart<\/code>, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0439 \u043d\u043e\u0432\u044b\u0439 <code>Chart<\/code>.<\/p>\n<pre><code class=\"go\">func NewKafkaChart(scope constructs.Construct, id string, props *KafkaChartProps) cdk8s.Chart {     \/\/.... \u043e\u043f\u0443\u0449\u0435\u043d\u043e \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u00a0 \u00a0 chart := cdk8s.NewChart(scope, jsii.String(id), &amp;cprops)<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>kafkastrimziio.KafkaProps<\/code> (\u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a <a href=\"https:\/\/strimzi.io\/docs\/operators\/latest\/configuring.html#assembly-config-kafka-str\" rel=\"noopener noreferrer\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Strimzi<\/a>). \u041c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e Kafka, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432\/\u0440\u0435\u043f\u043b\u0438\u043a (\u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0430 \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0443\u0437\u043b\u0430), \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435.<\/p>\n<pre><code class=\"go\">\/\/.... &amp;kafkastrimziio.KafkaProps{             Spec: &amp;kafkastrimziio.KafkaSpec{                 Kafka: &amp;kafkastrimziio.KafkaSpecKafka{                      Version:  jsii.String(\"3.2.0\"),                     Replicas: jsii.Number(1),                     Listeners: &amp;[]*kafkastrimziio.KafkaSpecKafkaListeners{                         {                             Name: jsii.String(\"plain\"),                             Port: jsii.Number(9092),                             Type: kafkastrimziio.KafkaSpecKafkaListenersType_INTERNAL,                             Tls:  jsii.Bool(false),                         },                     }, \/\/....<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0432 \u043a\u043e\u0434, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0443\u0437\u0435\u043b), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 (\u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u044d\u0444\u0435\u043c\u0435\u0440\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435).<\/p>\n<pre><code class=\"go\">\/\/... Config: map[string]interface{}{                         \"offsets.topic.replication.factor\":         1,                         \"transaction.state.log.replication.factor\": 1,                         \"transaction.state.log.min.isr\":            1,                         \"default.replication.factor\":               1,                         \"min.insync.replicas\":                      1,                         \"inter.broker.protocol.version\":            \"3.2\",                     },                     Storage: &amp;kafkastrimziio.KafkaSpecKafkaStorage{                         Type: kafkastrimziio.KafkaSpecKafkaStorageType_EPHEMERAL,                     }, \/\/...<\/code><\/pre>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c Zookeeper \u0438 <a href=\"https:\/\/strimzi.io\/docs\/operators\/latest\/configuring.html#assembly-kafka-entity-operator-str\" rel=\"noopener noreferrer\">\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 Entity<\/a>, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u043c\u044b Kafka (\u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0445\u043e\u0442\u044f \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u044d\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c).<\/p>\n<pre><code class=\"go\">\/\/... Zookeeper: &amp;kafkastrimziio.KafkaSpecZookeeper{                     Replicas: jsii.Number(1),                     Storage: &amp;kafkastrimziio.KafkaSpecZookeeperStorage{                         Type: kafkastrimziio.KafkaSpecZookeeperStorageType_EPHEMERAL,                     },                 },                 EntityOperator: &amp;kafkastrimziio.KafkaSpecEntityOperator{                     TopicOperator: &amp;kafkastrimziio.KafkaSpecEntityOperatorTopicOperator{},                 }}}) \/\/...<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0451 \u0432\u043c\u0435\u0441\u0442\u0435, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u0444\u0430\u0439\u043b <code>main.go<\/code>:<\/p>\n<pre><code class=\"go\">func main() {     app := cdk8s.NewApp(nil)     \/\/NewFooChart(app, \"FooApp\", nil)     NewKafkaChart(app, \"KafkaApp\", nil)     app.Synth() }<\/code><\/pre>\n<p>  <\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 CRD&#8230;<\/font><\/h4>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<pre><code class=\"powershell\"># generate manifest (check it in dist folder) cdk8s synth  # apply it (note the kafka namespace) kubectl apply -f dist\/ -n kafka<\/code><\/pre>\n<p>  \u0414\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432:<\/p>\n<pre><code class=\"powershell\">KAFKA_CRD_INSTANCE_NAME=$(kubectl get kafka -n kafka -o=jsonpath='{.items[0].metadata.name}') kubectl wait kafka\/$KAFKA_CRD_INSTANCE_NAME --for=condition=Ready --timeout=300s -n kafka<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u2014 <code>kafka.kafka.strimzi.io\/&lt;name of your Kafka CRD instance> condition met<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka \u0433\u043e\u0442\u043e\u0432 \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u043e\u0431\u0440\u044b\u0445 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f Kafka CLI (\u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 Strimzi Quickstart).<\/p>\n<pre><code class=\"powershell\">BOOSTRAP_SERVER=$(kubectl get kafka -n kafka -o=jsonpath='{.items[0].metadata.name}')-kafka-bootstrap  kubectl -n kafka run kafka-producer -ti --image=quay.io\/strimzi\/kafka:0.29.0-kafka-3.2.0 --rm=true --restart=Never -- bin\/kafka-console-producer.sh --bootstrap-server $BOOSTRAP_SERVER:9092 --topic test-topic  kubectl -n kafka run kafka-consumer -ti --image=quay.io\/strimzi\/kafka:0.29.0-kafka-3.2.0 --rm=true --restart=Never -- bin\/kafka-console-consumer.sh --bootstrap-server $BOOSTRAP_SERVER:9092 --topic test-topic --from-beginning<\/code><\/pre>\n<p>  \u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451!<\/p>\n<h2><font color=\"#3AC1EF\">\u041f\u043e\u0434\u0432\u0435\u0434\u0451\u043c \u0438\u0442\u043e\u0433<\/font><\/h2>\n<p>  \u041c\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c Kubernetes Custom Resource Definition c <code>cdk8s<\/code>. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u043e\u0449\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 Go) \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Kubernetes (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>Deployment<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u0430 \u0442\u0430\u043a\u0436\u0435 Custom Resources!<\/p>\n<h4><font color=\"#3AC1EF\">\u258d \u0412\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c?<\/font><\/h4>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435! \u0412\u043e\u0442 \u043f\u0430\u0440\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439:<\/p>\n<ol>\n<li>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441 <code>Deployment<\/code>, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0439\u0441\u044f \u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e Kafka (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 Docker) \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0432\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0443 Kafka. \u0418\u0437\u0443\u0447\u0438\u0442\u0435, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 Kafka \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f <strong><font color=\"#3AC1EF\">Internal<\/font><\/strong>. \u0418\u0437\u0443\u0447\u0438\u0442\u0435 \u043e\u043f\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0440\u0443\u0436\u0443 (\u0441\u043c. \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e Strimzi) \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e (\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c). \u041d\u0430 \u043a\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b Kubernetes \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435?<\/li>\n<\/ol>\n<p>  <a href=\"http:\/\/ruvds.com\/ru-rub?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=perevod&amp;utm_content=napishite_svoyu_infrastrukturu_kubernetes_kak_kod_go\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sz\/7j\/pf\/sz7jpfj8i1pa6ocj-eia09dev4q.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sz\/7j\/pf\/sz7jpfj8i1pa6ocj-eia09dev4q.png\"\/><\/a><\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/680664\/\"> https:\/\/habr.com\/ru\/company\/ruvds\/blog\/680664\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/680664\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/yd\/1v\/hz\/yd1vhz1mhy3_dnlklsstns7ffrm.png\"\/><\/div>\n<p><\/a><br \/>  <a href=\"https:\/\/cdk8s.io\/docs\/latest\/\" rel=\"noopener noreferrer\">cdk8s<\/a> (Cloud Development Kit for Kubernetes) \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a (\u0447\u0430\u0441\u0442\u044c CNCF), \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Kubernetes \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432\u043c\u0435\u0441\u0442\u043e <code>yaml<\/code>). \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u043e\u0441\u0442\u0430\u0445 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0441 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>cdk8s-plus<\/code> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <code>cdk8s<\/code>. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 <code>cdk8s<\/code>.<\/p>\n<p>  \u042f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/api-extension\/custom-resources\/#customresourcedefinitions\" rel=\"noopener noreferrer\">Kubernetes Custom Resource Definitions<\/a> \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>cdk8s<\/code>. \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <code>Nginx<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e CRD \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Strimzi \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Go <code>cdk8s<\/code> \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kafka \u043d\u0430 Kubernetes!  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-336723","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=336723"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/336723\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}