嘗試使用Knative建立一個應用
Knative有一些非常有趣的功能:應用可伸縮到零,可從原始碼直接構建到容器、事件和路由策略,看起來非常有前景。
瞭解Knative
Knative是利用Kubernetes提供的一種稱為自定義資源定義(CRD)的擴充套件技術,我們可以定義自己物件並透過Kubernetes API訪問它們。
與Knative所有互動是透過kubectl,Kubernetes官方的CLI。kubectl用於在Kubernetes API中建立,更新或刪除資源,Knative對這些資源中的更改(例如啟動容器)做出反應並確保系統隨時間的一致性。
Knative定義了不同的CRD,但最接近應用的概念是“服務”。
[img index=1]
一個“服務”是由Knative的“路徑”和“配置”組成。預設情況下,會建立一個讓你的應用可訪問的路由,因此我們可以直接關注“配置”。
一個“配置”資源包含了“構建”和“修訂”。一個“構建”定義了一系列關於如何構建應用的步驟,但不用擔心,有叫第二資源BuildTemplate的東東,它提供了根據不同的用例如何定義這些步驟的模板。最後,“修訂”指定了執行應用的配置,其中包含用於容器的Docker映象等欄位。
為應用定義服務
為了定義一個從原始碼構建和部署應用所需的最小配置,我們必須遵循以下步驟:
1. 選擇適合你的用例的構建模板BuildTemplate,並將其應用於Kube群集。在我的例子中,我選擇了Buildpack模板,因為它能夠自動檢測並安裝我的應用程式的任何依賴項。
$ kubectl apply -f https://raw.githubusercontent.com/knative/build-templates/master/buildpack/buildpack.yaml
2. Knative需要將應用程式上傳到Docker Registry,因此我們需要有一個註冊器,為了簡單起見,我決定使用Docker Hub。
3.要讓Knative推送映象,我們需要定義ServiceAccount使用者名稱和密碼才能使用Docker Hub,並在叢集中配置它們:
--- apiVersion: v1 kind: Secret metadata: name: basic-user-pass annotations: build.knative.dev/docker-0: https://index.docker.io type: kubernetes.io/basic-auth stringData: username: jszroberto password: <REMOVED> --- apiVersion: v1 kind: ServiceAccount metadata: name: build-bot secrets: - name: basic-user-pass <p class="indent"> |
$ kubectl apply -f serviceaccount.yml
4.我們現在可以定義服務:
--- apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: buildpack-example namespace: default spec: runLatest: configuration: build: serviceAccountName: build-bot # ServiceAccount with the authentication for Docker Hub source: git: url: https://github.com/jszroberto/helloworld-go revision: master template: name: buildpack arguments: - name: IMAGE value: jszroberto/buildpack-example # Published Docker image to Docker Hub revisionTemplate: metadata: labels: knative.dev/type: app spec: container: image: jszroberto/buildpack-example # Used Docker image to run the app <p class="indent"> |
5.使用服務配置部署應用:
$ kubectl apply -f service.yml
6.構建和部署應用程式需要幾分鐘,只需等待pod執行:
$ kubectl -n default get pods
7.所有應用程式的流量都透過knative-ingressgateway。要在群集中獲取其IP,請使用以下命令。如果你的群集是新的,則服務可能需要一些時間才能獲得外部IP地址:
export IP_ADDRESS = $(kubectl get svc knative-ingressgateway -n istio-system -o'jsonpath = {.status.loadBalancer.ingress [0] .ip}') <p class="indent"> |
8.要查詢服務的URL,請鍵入:
export HOST_URL = $(kubectl get services.serving.knative.dev buildpack-example -o jsonpath ='{。status.domain}') <p class="indent"> |
最後,我們可以用curl訪問應用程式:
curl -H "Host: ${HOST_URL}" http://${IP_ADDRESS} Hello World: Go Sample v1! <p class="indent"> |
綜上所述
簡而言之,我們必須瞭解Knative使用自定義資源定義(CRD)來擴充套件Kubernetes API以及如何定義這些資源,這樣我們的應用程式才得以構建和部署。我們使用kubectl 實現與Knative互動並配置資源。此外,我們必須以我們可以將映像拉推到Docker Hub的方式來配置Kubernetes。
讓我們退後一步,考慮一下這對開發人員來說意味著什麼,Knative能夠構建並執行我們的應用程式,但我們必須熟悉許多新概念(例如CRD,構建,構建模板,配置,修訂,服務,安全,服務帳戶,Docker登錄檔,Istio Ingress,路由,kubectl,等等)。在我看來,開發人員必須儘可能地專注於程式碼。程式碼的執行位置和方式無關緊要,必須學習所有這些新概念會使事情變得更加複雜,並可能會使你遠離程式碼,感覺Knative缺少一種更直接的方式來在雲中部署應用程式。
Running my first application on Knative – Roberto
[該貼被banq於2018-08-21 09:27修改過]
相關文章
- Knative 實戰:一個微服務應用的部署微服務
- 使用 SAP BTP 建立一個 Spring Boot Java 應用Spring BootJava
- 使用Knative基於構建、部署、管理serverless應用Server
- 嘗試用go寫一個音樂搜尋的包Go
- 嘗試說一說事件的使用事件
- 使用SAP CDS view快速建立一個Fiori應用,管理Service OrderView
- 如何用node.js建立一個應用Node.js
- Git 學習以及建立第一個應用Git
- 用 Vue 建立一個簡單的 electron 桌面應用Vue
- Java 應用使用 Docker 的入門指南:建立一個 CI/CD 流水線JavaDocker
- 跨平臺桌面應用 Electron 嘗試(VS2019)
- 嘗試用python開發一款圖片壓縮工具1:嘗試 pillow庫Python
- 擁抱 JSX,它是一個偉大的嘗試JS
- 一個人前後分離的簡單嘗試
- 介面自動化程式碼-AI 建立嘗試AI
- 第一次嘗試使用java寫sparkJavaSpark
- Knative 助力 XTransfer 加速應用雲原生 Serverless 化Server
- React Native學習指南:React Native嵌入到原生應用的一次嘗試React Native
- 如何使用低程式碼開發平臺快速建立一個應用 | 例項演示
- 使用vue-cli腳手架工具建立一個簡單的單頁應用Vue
- 使用PHP建立一個SSEPHP
- 如何用TypeScript來建立一個簡單的Web應用TypeScriptWeb
- SpringBoot2.x入門:快速建立一個SpringBoot應用Spring Boot
- Flutter 應用程式建立一個擴充套件皮膚列表Flutter套件
- 使用Spring AI + Redis 建立RAG應用SpringAIRedis
- 跟我一起學Knative(7)--Knative Eventing
- 跟我一起學Knative(2)--Knative Serving
- 嘗試
- 【譯】下一個你值得認真嘗試的框架 —— Sapper框架APP
- 嘗試使用 docker 部署 Laravel 專案DockerLaravel
- 嘗試使用 pack 與 unpack 函式函式
- 複製Monkeytype:如何建立一個高效的打字練習應用
- 使用Kotlin開發一個追番應用Kotlin
- Libevent應用 (一) 建立event_base
- 日誌庫 winston 的學習筆記 - 建立一個使用 winston 的 Node.js 應用筆記Node.js
- 建立第一個 Cypress 應用後使用命令列 npx Cypress open 報錯的原因分析命令列
- 使用 nuxi add 快速建立 Nuxt 應用元件UX元件
- 如何使用 IDEA 建立 Java 入門應用IdeaJava