<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Devtron 在 Kubernetes 多集群上進(jìn)行開(kāi)發(fā)

          共 6946字,需瀏覽 14分鐘

           ·

          2022-11-19 00:32


          在本文中,您將學(xué)習(xí)如何在多集群環(huán)境中使用 Devtron 在 K8S 上進(jìn)行應(yīng)用開(kāi)發(fā)。

          https://devtron.ai/

          Devtron 附帶用于構(gòu)建、部署和管理微服務(wù)的工具。它通過(guò)提供直觀的 UI 和 Helm 圖表支持來(lái)簡(jiǎn)化 K8S 上的部署。今天,我們將使用自定義 Helm 圖表運(yùn)行一個(gè)示例 Spring Boot 應(yīng)用程序。將它部署在跨多個(gè) K8S 集群的不同命名空間中。示例應(yīng)用程序連接到數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)在 K8S 上運(yùn)行并已使用 Devtron Helm 圖表部署。

          在 K8S 上安裝 Devtron

          第一步,在 K8S 上安裝 Devtron。有兩種安裝選項(xiàng):帶 CI/CD 模塊或不帶它。本文不會(huì)構(gòu)建 CI/CD 流程,但是這個(gè)模塊中包含了一些重要功能。首先,添加 Devtron Helm 存儲(chǔ)庫(kù):

          $ helm repo add devtron https://helm.devtron.ai

          然后,執(zhí)行以下 Helm 命令:

          $ helm install devtron devtron/devtron-operator \
              --create-namespace --namespace devtroncd \
              --set installer.modules={cicd}

          有關(guān)詳細(xì)的安裝說(shuō)明,請(qǐng)參閱 Devtron 文檔。

          https://docs.devtron.ai/getting-started/install/install-devtron-with-cicd

          使用 Kind 創(chuàng)建第二個(gè) K8S 集群

          為了在本地機(jī)器上準(zhǔn)備多集群環(huán)境,我們將使用 Kind, 通過(guò)執(zhí)行以下命令來(lái)創(chuàng)建第二個(gè) K8S 集群 c1 :

          https://kind.sigs.k8s.io/

          $ kind create cluster --name c1

          第二個(gè)集群的上下文是:kind-c1。創(chuàng)建 Kind 集群后,它將成為默認(rèn)上下文。

          現(xiàn)在,我們的目標(biāo)是將新創(chuàng)建的 Kind 集群添加為 Devtron 的托管集群。一個(gè) Devtron 實(shí)例可以管理多個(gè) K8S 集群。當(dāng)然,默認(rèn)情況下,它只管理一個(gè)本地集群。在我們將 Kind 集群添加到 Devtron 儀表板之前,應(yīng)該首先在該集群上配置權(quán)限。以下腳本將生成一個(gè)bearer token用于身份驗(yàn)證,以便 Devtron 能夠與目標(biāo)集群通信:

          $ curl -O https://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/kubernetes_export_sa.sh && bash kubernetes_export_sa.sh cd-user devtroncd https://raw.githubusercontent.com/devtron-labs/utilities/main/kubeconfig-exporter/clusterrole.yaml

          bearer token打印在該命令的輸出中,復(fù)制它。

          我們還必須提供目標(biāo)集群的 master API 的 URL。由于在 Kind 上運(yùn)行 K8S,我需要獲取包含 Kind 的 Docker 容器的內(nèi)部地址。為了獲得它,我們需要運(yùn)行以下命令:

          $ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' c1-control-plane

          這是我的 Kind 集群的 IP 地址:

          現(xiàn)在,我們擁有了在 Devtron 儀表板中添加新托管集群所需的所有數(shù)據(jù)。為此,導(dǎo)航到Global Configuration部分。然后選擇Clusters and Environments項(xiàng)并單擊Add cluster按鈕。需要填寫(xiě) Kind 集群 URL 和之前生成的bearer token

          如果一切正常,您應(yīng)該會(huì)在托管集群列表中看到第二個(gè)集群。現(xiàn)在,您還需要根據(jù)下面顯示的消息在 Kind 上安裝 Devtron 代理:

          創(chuàng)建環(huán)境

          我們將定義三個(gè)環(huán)境。在 Devtron 環(huán)境中分配給集群。我們將在本地集群(local)上創(chuàng)建一個(gè)環(huán)境,和另外兩個(gè) Kind 集群 ( remote-dev, remote-devqa) 。每個(gè)環(huán)境都有一個(gè)目標(biāo)命名空間。為了簡(jiǎn)化,命名空間的名稱與環(huán)境名稱相同。當(dāng)然,您可以設(shè)置任何想要的名稱。

          現(xiàn)在,切換到Clusters視圖。

          如您所見(jiàn),現(xiàn)在有兩個(gè)集群連接到 Devtron:

          我們可以看一下每個(gè)集群的詳細(xì)信息。在這里,您可以看到kind-c1集群的詳細(xì)視圖:

          添加自定義 Helm 存儲(chǔ)庫(kù)

          Devtron 最重要的功能之一是對(duì) Helm 圖表的支持。默認(rèn)情況下,Devtron 中有幾個(gè)可用的 Helm 存儲(chǔ)庫(kù),包括bitnamielastic,也可以添加自定義存儲(chǔ)庫(kù)。這里使用我自己的 Helm 存儲(chǔ)庫(kù),其中包含用于部署 Spring Boot 應(yīng)用程序的圖表。我已經(jīng)將它放在 GitHub 上:

          https://piomin.github.io/helm-charts/

          我們的圖表名稱是spring-boot-api-app,最新版本是0.3.2

          為了在 Devtron 中添加自定義存儲(chǔ)庫(kù),我們需要再次進(jìn)入Global Configurations部分。然后轉(zhuǎn)到Chart repositories菜單項(xiàng),然后單擊Add repository按鈕。如下所示,我添加了一個(gè)新存儲(chǔ)庫(kù)piomin

          創(chuàng)建存儲(chǔ)庫(kù)后,您可以轉(zhuǎn)到Chart Store部分以驗(yàn)證新圖表是否可用。

          使用 Devtron 部署 Spring Boot 應(yīng)用程序

          現(xiàn)在,我們可以進(jìn)行實(shí)踐中最重要的部分:應(yīng)用程序部署。我們的示例 Spring Boot 應(yīng)用程序位于 GitHub 上的以下存儲(chǔ)庫(kù)中:

          https://github.com/piomin/sample-spring-kotlin-microservice.git

          這是一個(gè)用 Kotlin 編寫(xiě)的簡(jiǎn)單 REST 應(yīng)用程序。它公開(kāi)了一些用于添加和返回人員的 HTTP 端點(diǎn),并使用內(nèi)存存儲(chǔ)。這是 Spring @RestController

          @RestController
          @RequestMapping("/persons")
          class PersonController(val repository: PersonRepository) {

             val log: Logger = LoggerFactory.getLogger(PersonController::class.java)

             @GetMapping("/{id}")
             fun findById(@PathVariable id: Int): Person? {
                log.info("findById({})", id)
                return repository.findById(id)
             }

             @GetMapping("/age/{age}")
             fun findByAge(@PathVariable age: Int): List<Person> {
                log.info("findByAge({})", age)
                return repository.findByAge(age)
             }

             @GetMapping
             fun findAll(): List<Person> = repository.findAll()

             @PostMapping
             fun add(@RequestBody person: Person): Person = repository.save(person)

             @PutMapping
             fun update(@RequestBody person: Person): Person = repository.update(person)

             @DeleteMapping("/{id}")
             fun remove(@PathVariable id: Int)Boolean = repository.removeById(id)

          }

          假設(shè)我們正在開(kāi)發(fā)最新版本,想將其部署在 K8S 上以執(zhí)行一些開(kāi)發(fā)測(cè)試。第一步,將在本地構(gòu)建應(yīng)用程序并使用 Jib Maven 插件將鏡像推送到容器注冊(cè)表。這是所需的配置:

          <plugin>
            <groupId>com.google.cloud.tools</groupId>
            <artifactId>jib-maven-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
              <to>
                <image>piomin/sample-spring-kotlin-microservice</image>
                <tags>
                  <tag>1.1</tag>
                </tags>
              </to>
              <container>
                <user>999</user>
              </container>
            </configuration>
          </plugin>

          讓我們使用以下命令構(gòu)建鏡像并將其推送到容器注冊(cè)表:

          $ mvn clean compile jib:build -Pjib,tomcat

          除了 YAML 模板,Helm 存儲(chǔ)庫(kù)還包含一個(gè)用于values.yaml 驗(yàn)證的 JSON schema 。多虧了該 schema ,我們將能夠利用 Devtron GUI 從圖表創(chuàng)建應(yīng)用程序。讓我們看看它是如何工作的。

          單擊自定義圖表后,將被重定向到包含詳細(xì)信息的頁(yè)面。最新版本的圖表是0.3.2. 只需單擊部署按鈕。

          在下一頁(yè)上,需要提供應(yīng)用程序的配置。目標(biāo)環(huán)境是存在于主集群上的local。多虧 Devtron 對(duì) Helm values.schema.json 的支持,使得我們使用 GUI 表單定義所有值。例如,可以增加更改鏡像的值到最新的:1.1

          部署應(yīng)用程序后,我們可以驗(yàn)證其狀態(tài):

          讓我們進(jìn)行一些測(cè)試調(diào)用。示例 Spring Boot 公開(kāi)了 Swagger UI,因此我們可以輕松發(fā)送 HTTP 請(qǐng)求。要與運(yùn)行在 K8S 上的應(yīng)用程序交互,應(yīng)該為服務(wù)啟用端口轉(zhuǎn)發(fā)kubectl port-forward svc/sample-spring-boot-api 8080:8080。執(zhí)行該命令后,您可以通過(guò) http://localhost:8080/swagger-ui.html 訪問(wèn)地址 Swagger UI:

          Devtron 允許我們查看 pod 日志。還可以用 grep。下面展示了與測(cè)試調(diào)用相關(guān)的日志。

          將應(yīng)用部署到遠(yuǎn)程集群

          現(xiàn)在,我們將示例 Spring Boot 應(yīng)用程序部署到遠(yuǎn)程集群。為了做到這一點(diǎn),請(qǐng)轉(zhuǎn)到與以前相同的頁(yè)面,但不要選擇本地環(huán)境,而是選擇remote-dev,它與kind-c1集群相關(guān)聯(lián)。

          現(xiàn)在,有兩個(gè)相同的應(yīng)用程序在兩個(gè)不同的集群上運(yùn)行。我們可以對(duì)在 Kind 集群上運(yùn)行的應(yīng)用程序和本地集群執(zhí)行相同的操作,例如驗(yàn)證其狀態(tài)或檢查日志。

          部署應(yīng)用組

          假設(shè)我們要部署連接到數(shù)據(jù)庫(kù)的應(yīng)用程序。我們可以使用名為Chart Group的 Devtron 功能一步完成。使用該功能,我們可以將 Spring Boot 的 Helm 圖表和 Postgres 的圖表放在同一個(gè)邏輯組中。然后,我們可以將整個(gè)組部署到目標(biāo)環(huán)境中。要?jiǎng)?chuàng)建圖表組,請(qǐng)轉(zhuǎn)到 Chart Store 菜單,然后單擊Create Group按鈕。您應(yīng)該設(shè)置組的名稱并選擇將包含的圖表。對(duì)我來(lái)說(shuō),就是bitnami/postgresql圖表和我的自定義 Helm 圖表。

          創(chuàng)建組后,您將在Chart Store主頁(yè)面上看到它。現(xiàn)在,只需單擊它即可部署應(yīng)用程序。

          單擊帶有圖表組的磁貼后,您將被預(yù)測(cè)到部署頁(yè)面。

          單擊Deploy to…按鈕后,Devtron 會(huì)將您重定向到下一頁(yè)。您可以為該組的所有成員圖表設(shè)置目標(biāo)項(xiàng)目和環(huán)境。我們會(huì)將它們從集群部署到kind-c1集群的remote-devqa命名空間中。其中的鏡像,可以填寫(xiě)我的 Docker 帳戶中的:piomin/person:1.1

          默認(rèn)情況下,它會(huì)嘗試連接到postgres主機(jī)上的數(shù)據(jù)庫(kù)。唯一需要注入應(yīng)用容器的是 postgresql Secret(由 Bitnami Helm 圖表生成)中postgres用戶密碼。要注入該Secret中的環(huán)境變量,請(qǐng)?jiān)谧远x Spring Boot 圖表中使用extraEnvVarsSecret參數(shù)。最后,讓我們通過(guò)單擊Deploy按鈕在remove-devqa命名空間中部署 Spring Boot 和 Postgres 。

          這是本次實(shí)踐中已部署應(yīng)用程序的最終列表:

          總結(jié)

          • 借助 Devtron,可以使用 Helm 圖表輕松地支持跨多個(gè) K8S 集群部署應(yīng)用程序。
          • Devtron 簡(jiǎn)化了 K8S 的開(kāi)發(fā),可以通過(guò)圖表組功能部署所有需要的應(yīng)用程序。
          • 可以使用 GUI 儀表板管理和監(jiān)控應(yīng)用程序。
          • 可以在儀表板中執(zhí)行所有操作,而無(wú)需自己傳遞任何 YAML 清單或執(zhí)行kubectl命令。





          鏈接:https://piotrminkowski.com/2022/11/02/development-on-kubernetes-multicluster-with-devtron/?utm_source=rss&utm_medium=rss&utm_campaign=development-on-kubernetes-multicluster-with-devtron

          (版權(quán)歸原作者所有,侵刪)


          瀏覽 50
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕av在线 成人黄色视频网站 | 激情国产高清在线 | www.麻豆成人 | 百万国产精品视频 | 亚洲成人色老头77777性爱网 |