1. 程式人生 > >使用 Kubeless 在 AWS 上的 Kubernetes 叢集中執行 FaaS

使用 Kubeless 在 AWS 上的 Kubernetes 叢集中執行 FaaS

藉助無伺服器計算技術,無需預置、擴充套件或管理任何伺服器即可構建和執行應用程式和服務。FaaS(函式即服務)是一種執行時服務,它通過在需要時啟動程式碼位(函式)實現無伺服器計算,讓開發人員無需管理基礎設施,並讓開發人員可以簡單地編寫業務邏輯程式碼。隨著 Kubernetes 的興起,多個開放源 FaaS 平臺也應運而生。此博文分為兩部分,將介紹一個此種 FaaS、Kubeless 以及如何在 AWS 上的 Kubeless 叢集上安裝和執行它。- Arun

Kubeless 是一種開放源函式即服務 (FaaS) 解決方案,建立在 Kubernetes 的基礎上。受 AWS Lambda 的啟發,Kubeless 旨在通過將基於函式的包裝納入容器,讓 Kubernetes 使用者也享受到函式程式設計的優點。Kubeless 的技術優勢在於它使用了

自定義資源定義 API 物件,是對 Kubernetes 的一種擴充套件。Kubeless 使用 k8s 基本物件來構建類似於 Lambda 的系統,它允許開發人員將小的程式碼單位作為函式部署,不用關心底層基礎設施。當您使用 Kubernetes 時,使用 Kubeless 部署小的程式碼單位就好比建立 Kubernetes 資源一樣簡單。除可以使用 Kubeless 來部署 HTTP Webhook 外,您還可以部署可通過雲中發生的事件觸發的函式,例如有檔案正在載入到儲存桶、資料流等等。由於 Kubeless 建立在上游 Kubernetes 的基礎上,它可以在 Amazon EKS 中部署,並且所部署的任何函式也可以基於多種 AWS 源進行觸發。在此博文中,我們將介紹如何在使用
kops
在 AWS 上建立的 Kubernetes 叢集中使用 Kubeless,以及如何部署小型函式。在下一篇博文中,我們將介紹如何根據釋出到 Kinesis 流的事件觸發 Kubeless 函式。

使用 kops 在 AWS 上建立叢集

kops 是一種可用於建立 Kubernetes 叢集的預置工具,它擁有非常先進的 AWS 支援功能。詳情請參閱文件。此處我們僅演示主要步驟,因此請自行熟悉完整的演示,特別是您第一次使用 kops 時。(更多資訊請參閱使用 Kops 管理 AWS 上的 Kubernetes 叢集。)獲取 pre-reqs 並設定環境,建立一個擁有必要角色的 kops IAM 使用者,然後建立用於儲存叢集配置的 S3 儲存桶,設定兩個環境變數,確保您瞭解您將使用的區域,如下所示:

aws s3api create-bucket --bucket kops-Kubeless --region us-east-1

export NAME=Kubeless.k8s.local

export KOPS_STATE_STORE=s3://kops-Kubeless

aws ec2 describe-availability-zones --region eu-west-1

這時您已準備就緒,可以建立叢集:

kops create cluster --zones eu-west-1a ${NAME}

kops update cluster Kubeless.k8s.local --yes

完成所有操作後務必刪除它:

kops delete cluster --name ${NAME} --yes

安裝 Helm 以部署 Ingress 控制器

使用 Ingress 控制器可讓我們將函式暴露到公共網際網路上。從 GitHub 釋出頁面取得 Helm 客戶端,然後建立一個具有恰當 RBAC 許可權的服務賬戶。

kubectl create serviceaccount --namespace kube-system tiller

kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

helm init --service-account tiller --upgrade

使用負載均衡器服務部署 nginx Ingress 控制器

helm install --name nginx-ingress stable/nginx-ingress --set rbac.create=true

Ingress 控制器開始執行後,您可以獲取使用的公有 DNS 主機名:

kubectl get svc nginx-ingress-nginx-ingress-controller -o json | jq -r .status.loadBalancer.ingress[0].hostname

部署 Kubeless

為了在叢集上部署 Kubeless,您需要建立一個專用的名稱空間,然後將幾個清單釋出到 Kubernetes API 伺服器。這些清單將會建立一個自定義資源定義,用來宣告新的函式物件型別,並將啟動 Kubeless 控制器。以下兩個命令列將演示如何建立名稱空間以及如何啟動最新版本的 Kubeless:

kubectl create ns kubeless

kubectl create -f https://github.com/Kubeless/Kubeless/releases/download/v1.0.0-alpha.2/Kubeless-v1.0.0-alpha.2.yaml

最後,如要從命令列使用 Kubeless,您需要安裝 CLI。您可以從 Github 釋出頁面獲取它,OSX 使用者也可直接從 brew 獲取。

$ brew install kubeless

部署函式

讓我們在 Python 建立一個簡單的 echo 函式:

cat << EOF >> echo.py

def handler(event, context):

print(event['data'])

return event['data']

EOF

部署函式:

kubeless function deploy foo --runtime python3.6 --from-file echo.py --handler echo.handler

函式將會很快準備就緒,對應的 Pod 也將執行(請注意您可以配置 AutoScaling 以確保您的函式根據請求或負載進行擴充套件)。

$ kubeless function ls

NAME    NAMESPACE    HANDLER        RUNTIME      DEPENDENCIES    STATUS

foo     default      echo.handler    python3.6                   1/1 READY

$ kubectl get pods|grep foo

foo-697454fcd4-n7g5g     1/1 Running 0      1m

建立指向函式的路由。請注意函式將會公開暴露(可以新增 TLS 和身份驗證,但不會在此處解釋,請參閱完整的文件)。

kubeless trigger http create foo --function-name foo --gateway nginx

函式正常執行後,您可以使用 Ingress 物件中定義的 Host 標頭和 Ingress 控制器的公有終端節點呼叫它。

$ export FOO_HOST=$(kubectl get ingress foo -o json |jq -r .spec.rules[0].host)

$ export FOO_INGRESS=$(kubectl get svc nginx-ingress-nginx-ingress-controller -o json | jq -r .status.loadBalancer.ingress[0].hostname)

$ curl -d '{"kubeless": "on AWS"}' -H "Host: ${FOO_HOST}" -H "Content-Type:application/json" ${FOO_INGRESS}

{"kubeless": "on AWS"}

小結

恭喜!如果您已經到達這一步,您已經在 AWS 上的 Kubernetes 叢集中執行 Kubeless。在下一篇博文中,我們將介紹真正令人激動的部分:如何根據雲事件觸發Sebastien Goasguen函式,重點為 AWS Kinesis。Sebastien Goasguen 是一位擁有二十年經驗的資深開放源專家。他是 Apache 軟體基金會的會員,在轉戰容器領域前已經在 Apache CloudStack 專案上工作多年。他是 Kubernetes 創業公司 Skippbox 的創始人,該公司後來被 Bitnami 收購。他是 Kubeless 的締造者,目前擔任該公司技術總監和產品經理。作為一名活躍的博主,他非常熱愛分享新的前沿技術。Sebastien 是《O’Reilly Docker Cookbook》的作者和《Kubernetes Cookbook》的聯合作者。本博文中的內容和觀點均源自第三方作者,AWS 對本博文中的內容或準確性不承擔任何責任。

相關推薦

使用 KubelessAWS Kubernetes 叢集執行 FaaS

藉助無伺服器計算技術,無需預置、擴充套件或管理任何伺服器即可構建和執行應用程式和服務。FaaS(函式即服務)是一種執行時服務,它通過在需要時啟動程式碼位(函式)實現無伺服器計算,讓開發人員無需管理基礎設施,並讓開發人員可以簡單地編寫業務邏輯程式碼。隨著 Kubernetes 的興起,多個開放

Kubernetes 叢集執行 GitLab-Runner 來執行 GitLab-CI

目錄 1、GitLabCI & Runner 介紹 GitLab-CI 是一套 GitLab 提供給使用者使用的持續整合系統,GitLab 8.0 版本以後是預設整合並且預設啟用。GitLab-Runner 是配合 GitLab-CI

Maven打包Java版的spark程式到jar包,本地Windows測試,傳到叢集執行

作者:翁鬆秀 Maven打包Java版的spark程式到jar包,本地Windows測試,上傳到叢集中執行 文章目錄 Maven打包Java版的spark程式到jar包,本地Windows測試,上傳到叢集中執行 Step1

IIS釋出Web專案的登入介面跳閃一下 登入不進去,本地和伺服器程式設計環境執行卻能登入進去

正如標題所說的,程式一切正常,IIS釋出瀏覽網站也能看到,就是輸入賬戶和密碼後,介面跳閃一下卻不跳轉。 解決辦法:檢視賬戶密碼登入連線的資料庫路徑正確不,本地路徑時可將(../換成~/)            當時出現要命的問題是:

Kubernetes叢集安裝Helm及證書認證

安裝Kubernetes 測試環境使用kubeadm安裝kubernetes v1.6.3版本, 安裝過程略過. 為Helm建立客戶端認證 客戶端認證是為了能夠使用helm命令列呼叫Helm的服務端Tiller. cd /etc/kubernetes/pki/ # 編譯認證檔案 ope

Spark-在cdh叢集執行報錯

Run on a YARN cluster spark-submit \ --class com.hnb.data.UserKeyOpLog \ --master yarn \ --deploy-mode cluster \ --executor-memory 128M \ -

Etcd在kubernetes叢集的作用

Etcd是Kubernetes叢集中的一個十分重要的元件,用於儲存叢集所有的網路配置和物件的狀態資訊。在後面具體的安裝環境中,我們安裝的etcd的版本是v3.1.5,整個kubernetes系統中一共有兩個服務需要用到etcd用來協同和儲存配置,分別是: 網路外掛flann

在spark叢集執行程式遇到的一些問題

使用的是yarn模式,所以執行程式之前需要先將所用資料集傳到hdfs上 //檢視hdfs的目錄 ./hdfs dfs -ls //新建一個data資料夾 ./hdfs dfs -mkdir /data //將檔案上傳到data資料夾下 ./hdfs dfs -p

如何從外部訪問Kubernetes叢集的應用?\

前言 我們知道,kubernetes的Cluster Network屬於私有網路,只能在cluster Network內部才能訪問部署的應用,那如何才能將Kubernetes叢集中的應用暴露到外部網路,為外部使用者提供服務呢?本文探討了從外部網路訪問kubernetes

初試 Kubernetes 叢集使用 Contour 反向代理_Kubernetes中文社群

文章由作者:楊傳勝投稿; 在 Kubernetes 中執行大規模以 Web 為中心的工作負載,最關鍵的需求之一就是在 L7 層實現高效流暢的入口流量管理。自從第一批 Kubernetes Ingress Controller 開發完成以來,Envoy(由 Matt Klein 和 Lyft 團

Kubernetes叢集的網路_Kubernetes中文社群

本文從一個服務的不同訪問方式入手,分析了Kubernetes叢集中的網路組成,也給出了一個簡單可行的網路效能評估方案。 本文適合對虛擬網橋、iptables以及Kubernetes的相關概念有了解的讀者。 另外Service-Pod流量轉發時提到”iptables轉發”,嚴格說措辭不準確,因

正確的在Kubernetes叢集使用SDN技術方法_Kubernetes中文社群

SDN是Software-defined networking的縮寫。在許多介紹Kubernetes的文件,特別是安裝文件中, 當介紹到Kubernetes所需的容器網路時常常會提到這個縮寫,告知使用者需要使用某種SDN技術用以解決“每個Pod有獨立IP, Pod之間可以不經過NAT直接互訪”

Kubernetes叢集部署Heapster_Kubernetes中文社群

背景 公司的容器雲平臺需要新增應用的自動擴縮容的功能,以便能夠更加智慧化的對應用進行管理。 Kubernetes官方提供了HPA(Horizontal Pod Autoscaling)資源物件。要讓我們部署的應用做到自動的水平的(水平指的是增減Pod副本數量)進行擴縮容,我們只需要在Kuber

IIS釋出Web專案的登入介面跳閃一下 登入不進去,本地和伺服器程式設計環境執行卻能登入進去

正如標題所說的,程式一切正常,IIS釋出瀏覽網站也能看到,就是輸入賬戶和密碼後,介面跳閃一下卻不跳轉。解決辦法:檢視賬戶密碼登入連線的資料庫路徑正確不,本地路徑時可將(../換成~/)         

Kubernetes叢集使用阿里雲 SLB 實現四層金絲雀釋出

摘要: 上文介紹瞭如何使用Ingress實現藍綠髮布。但是對於很多隻提供tcp/udp的服務來說,七層的ingress不能很好的實現藍綠髮布的需求。這裡我們就來介紹一下如何使用 SLB 來進行四層的金絲雀釋出。前言上文介紹瞭如何使用Ingress實現藍綠髮布。但是對於很多隻提

Kubernetes叢集使用Redis部署PHP留言簿應用程式

在Kubernetes叢集中使用Redis部署PHP留言簿應用 實驗目標 啟動一個Redis Master 啟動一個Redis Slave 啟動guestbook程式 展示和檢視前端服務

Kubernetes叢集部署dashboard

部署 dashboard 外掛 下載k8s後的解壓縮目錄結構:kubernetes/cluster/addons/dashboard 使用的檔案: $ ls *.yaml dashboard-controller.yaml dashboard-rba

如何從外部訪問Kubernetes叢集的應用?

前言 我們知道,kubernetes的Cluster Network屬於私有網路,只能在cluster Network內部才能訪問部署的應用,那如何才能將Kubernetes叢集中的應用暴露到外部網路,為外部使用者提供服務呢?本文探討了從外部網路訪問k

執行好的Maven專案部署到伺服器在瀏覽器執行404錯誤

1.可能的原因:maven中自動引入的jar包與Tomcat伺服器中的jar包發生了衝突2.我自己的原因是:在eclipse生成了war包以後將其拷貝在Tomcat的webapp目錄下,並且將其中生成的版本號去掉了,找到Tomcat的bin目錄,在檔案框中輸入startup啟

解決專案遷移至Kubernetes叢集的代理問題

解決專案遷移至Kubernetes叢集中的代理問題 隨著Kubernetes技術的日益成熟,越來越多的企業選擇用Kubernetes叢集來管理專案。新專案還好,可以選擇合適的叢集規模從零開始構建專案;舊專案遷移進Kubernetes叢集就需要考慮很多因素,畢竟專案不能中斷時間過久。 問題來源 近日在做專案遷移