[

](srodenhuis.medium.com/?source=pos…)
6月21日
-
7分钟阅读
[
拯救
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,为团队演示创建一个新的机器人账户。
- 点击机器人账户
- 点击新的机器人账户
- 名称: team-demo-drone
- 选择team-demo
- 复制名称和令牌
在Drone中配置一个流水线
Drone CI是由Otomi自己使用的,但也可以用于你自己的项目。打开Drone,进入Drone仪表盘,然后点击 "SYNC"。你会看到你的新 repo 弹出在 REPOSITORIES 列表中。点击新 repo,然后点击'ACTIVATE'。
现在我们需要将机器人账户的凭证作为秘密添加到Drone中。
- 在Drone中,点击team-demo-app资源库。
- 在设置下,点击秘密
- 添加以下两个秘密。
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…,开始吧。