DevOps和Kubernetes。你建立它,你运行它。

249 阅读7分钟

[

Sander Rodenhuis

](srodenhuis.medium.com/?source=pos…)

桑德-罗登胡斯

关注

6月21日

-

7分钟阅读

[

拯救

](medium.com/m/signin?ac…)

DevOps和Kubernetes。你构建它,你就运行它。

通过一个平台在Kubernetes上编码、构建、部署、运行和监控容器化应用程序。

在使用Kubernetes时,准备好所有的工具来支持你的DevOps之旅可能是一个挑战。如果有一个单一的Kubernetes安装工具,支持团队从A到Z的DevOps实践,会怎么样?

在这篇文章中,我将向你展示如何使用Kubernetes和Otomi开始实践DevOps,并且没有任何依赖性。从将你的代码推送到Git repo,构建镜像,将镜像推送到私有注册表,部署镜像,以安全的方式公开展示应用,以及监控应用。而且我们将只使用集成到Otomi的技术。所以自我托管,不使用任何其他(SaaS)服务。唯一的要求是要有一个Kubernetes集群,并运行和访问一个DNS区域。

Otomi为Kubernetes提供了一个完整的自我托管的DevOps平台即服务,并且可以在一次运行中安装。在这篇文章中,我将在Azure Kubernetes服务(AKS)上安装Otomi与DNS。使用DNS与Let's Encrypt生产证书是使用Harbor作为镜像注册处的先决条件。

你也可以不使用DNS来安装Otomi。在这种情况下,Otomi将使用nip.io的主机名,并生成一个自定义CA。开始使用Otomi的最简单方法是通过从Digital Ocean市场上安装它。但正如所说,在这种情况下,你不能使用Harbor(或者你需要手动将生成的CA添加到集群节点上)。

安装Otomi

参见otomi.io,了解安装Otomi的说明。我正在使用Helm图表安装Otomi。

helm repo add otomi https://otomi.io/otomi-corehelm repo updatehelm install -f values.yaml otomi otomi/otomi

这些是我的数值。

cluster:  k8sVersion: "1.22"  name: demo  provider: azure  domainSuffix: demo.aks.r6s.io # required for DNSotomi:  hasExternalDNS: true # required for DNSdns:  provider:    azure:      resourceGroup: external-dns      aadClientId: xx      aadClientSecret: xx      tenantId: xx      subscriptionId: xxapps:  cert-manager:    issuer: letsencrypt    stage: production    email: sre@r6s.io  external-dns:    domainFilters:      - aks.r6s.io

当安装程序作业完成后,按照这里描述的激活步骤进行操作。

激活Otomi中的应用程序

当Otomi被安装后,只有核心应用程序(Keycloak、Istio、cert-manager、Drone和Gitea)将可用。所有其他的应用程序都是可选的。这使得Otomi成为一个可组合的平台。让我们首先激活所有我们要使用的技术。把以下应用拖到活动应用平面上,激活它们。

  • Harbor作为一个私人图像注册处,用于存储我们的图像)
  • KnativeServing,用于快速部署无服务器容器和自动扩展

现在点击 "部署变化"。

其次,我们将在Otomi中创建一个团队。Otomi中的团队是Kubernetes中的一个命名空间,但也提供自我服务任务给团队成员。我们不会在这里讨论这个问题,但请记住,你总是需要至少一个团队才能部署应用程序。

现在,应用程序已被激活,团队已被创建,平台上的一切都已准备好构建、部署和运行容器化应用程序。所以让我们开始吧,先创建一个代码仓库。

在Gitea中创建一个Git仓库

进入Gitea,创建一个新的仓库。为仓库提供一个名称,并确保该仓库是私有的。

  • 打开Gitea
  • 在右边的Repositories下,点击+。
  • 提供一个名字(team-demo-helloworld)。
  • 单击 "使仓库成为私有仓库
  • 点击创建仓库

在这篇文章中,我将使用一个NodeJS hello-world应用程序的样本。

克隆该样本库。

git clone https://github.com/redkubes/nodejs-helloworld.gitcd cd nodejs-helloworld

并将样本仓库镜像到新的Gitea仓库中。

git push --mirror https://gitea.demo.aks.r6s.io/otomi-admin/team-demo-helloworld.git

Clone the new repo:

git clone https://gitea.demo.aks.r6s.io/otomi-admin/team-demo-helloworld.git

在Harbor中创建一个机器人账户

因为我们要从代码中构建一个镜像,然后将其推送到一个私有注册表,所以我们首先需要创建用于将镜像推送到注册表的凭证。

进入Harbor,为团队演示创建一个新的机器人账户。

  1. 点击机器人账户
  2. 点击新的机器人账户
  3. 名称: team-demo-drone
  4. 选择team-demo
  5. 复制名称和令牌

在Drone中配置一个流水线

Drone CI是由Otomi自己使用的,但也可以用于你自己的项目。打开Drone,进入Drone仪表盘,然后点击 "SYNC"。你会看到你的新 repo 弹出在 REPOSITORIES 列表中。点击新 repo,然后点击'ACTIVATE'。

现在我们需要将机器人账户的凭证作为秘密添加到Drone中。

  1. 在Drone中,点击team-demo-app资源库。
  2. 在设置下,点击秘密
  3. 添加以下两个秘密。
REGISTRY_USERNAME = otomi-team-demo-drone

现在我们要把Drone管道定义添加到我们的版本库。

  • 将.drone.yml的内容替换为以下内容。
kind: pipelinetype: kubernetesname: defaultsteps:  - name: build-push    image: plugins/docker    settings:      registry: harbor.<your-ip>.nip.io      repo: harbor.<your-ip>.nip.io/team-demo/nginx      insecure: true      username:        from_secret: REGISTRY_USERNAME      password:        from_secret: REGISTRY_PASSWORD      tags:        - ${DRONE_BRANCH}
  • 调整.drone.yml文件中的注册表和 repo名称
  • 推送修改内容。
git add .git commit -m “add drone pipeline”git push

在Drone中,你会看到流水线已经自动开始构建,然后将新的镜像推送到Harbor。

Drone管道的执行

而在 Harbor 中,你会看到新创建的注册表。

Harbor 镜像注册表

另外,你现在还可以使用Trivy扫描镜像的漏洞。

在Kubernetes上部署和公开应用程序

现在,镜像已经建立,我们可以部署它。Otomi为部署提供了多种选择。你可以。

  • 创建你自己的部署和服务清单,并使用Argo CD进行部署
  • 创建一个Helm图表,并将该图表添加到Harbor的图表库中
  • 使用Otomi为你创建一个Knative服务

在这种情况下,我将使用Otomi为我创建一个新的Knative服务。

注意,当我们在Otomi中创建一个团队时,已经创建了一个注册表的拉动秘密,并添加到团队命名空间中。

  • 在web控制台的顶栏中选择Demo团队
  • 在左边的菜单中(在团队演示下)点击服务
  • 单击 "新服务
  • 填写服务名称(hello-world)。
  • 在服务类型下选择新建Knative服务

新建Knative服务

  • 填写存储库名称和标签
  • 填写限制和请求

Repo和资源请求和限制

  • 在Exposure Ingress下,选择Ingress

配置接入点

  • 点击提交

在服务列表中,你会看到新创建的服务和URL。

创建的服务

点击URL。这是你应该看到的。

该应用已被部署并公开暴露。在这种情况下,Otomi不仅创建了Knative服务,而且还生成了所有的入口配置(包括Istio),并确保一个主机名被添加到DNS区域,并创建了一个证书。很简单吧?

监控应用程序

为了能够监控部署的应用程序,我们首先需要激活几个应用程序。进入左侧菜单中平台下的应用程序部分,将以下应用程序拖到活动的应用程序平面。

  • 普罗米修斯
  • Loki (也将自动激活Grafana)

现在点击 "部署变化"。

当Prometheus和Loki安装完毕后(这可能需要几分钟时间),点击左边菜单中Team Demo下的App项目。让我们先检查一下日志。点击Loki,然后点击右上方的play 按钮。正如你所看到的,Loki将立即显示团队内运行的容器的日志。

使用Loki进行日志聚合

现在进入Prometheus。点击状态,然后点击目标。

使用黑盒输出器监控服务

Otomi自动开始使用Blackbox Exporter监控新服务的可用性。如果你将激活警报管理器,你会在服务停机的情况下收到一个通知。

收尾工作

Kubernetes看起来比较简单,但实际上还是很复杂的。在你开始使用Kubernetes后不久,你会发现香草Kubernetes不会让你走得太远。你需要添加很多额外的应用程序,并把它们粘在一起,以支持你的DevOps实践。这有可能需要几个月甚至几年的时间。

Otomi为Kubernetes提供了一个完整的自我托管的DevOps平台即服务,可以在任何Kubernetes集群上一次性安装。没有依赖性,完全自成一体,意味着你不需要任何额外的(SaaS)服务。但如果你喜欢,你还是可以的。

在这篇文章中,我展示了在使用Kubernetes时如何开始使用Otomi来支持DevOps。从构建代码到完全可观察性在10分钟内完成。自己试试吧!

github.com/redkubes/ot…,开始吧。