使用 Kubeless 在 AWS 上的 Kubernetes 叢集中執行 FaaS
藉助無伺服器計算技術,無需預置、擴充套件或管理任何伺服器即可構建和執行應用程式和服務。FaaS(函式即服務)是一種執行時服務,它通過在需要時啟動程式碼位(函式)實現無伺服器計算,讓開發人員無需管理基礎設施,並讓開發人員可以簡單地編寫業務邏輯程式碼。隨著 Kubernetes 的興起,多個開放源 FaaS 平臺也應運而生。此博文分為兩部分,將介紹一個此種 FaaS、Kubeless 以及如何在 AWS 上的 Kubeless 叢集上安裝和執行它。- Arun
Kubeless 是一種開放源函式即服務 (FaaS) 解決方案,建立在 Kubernetes 的基礎上。受 AWS Lambda 的啟發,Kubeless 旨在通過將基於函式的包裝納入容器,讓 Kubernetes 使用者也享受到函式程式設計的優點。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。在下一篇博文中,我們將介紹真正令人激動的部分:如何根據雲事件觸發函式,重點為 AWS Kinesis。Sebastien Goasguen 是一位擁有二十年經驗的資深開放源專家。他是 Apache 軟體基金會的會員,在轉戰容器領域前已經在 Apache CloudStack 專案上工作多年。他是 Kubernetes 創業公司 Skippbox 的創始人,該公司後來被 Bitnami 收購。他是 Kubeless 的締造者,目前擔任該公司技術總監和產品經理。作為一名活躍的博主,他非常熱愛分享新的前沿技術。Sebastien 是《O’Reilly Docker Cookbook》的作者和《Kubernetes Cookbook》的聯合作者。本博文中的內容和觀點均源自第三方作者,AWS 對本博文中的內容或準確性不承擔任何責任。
相關推薦
使用 Kubeless 在 AWS 上的 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叢集就需要考慮很多因素,畢竟專案不能中斷時間過久。 問題來源 近日在做專案遷移