摘要:前言一直在思考部署應用到的姿勢,之前介紹過,個人感覺把記錄數據放到中不是特別好。可以幫助你安全地更新應用。部署到中注意事項由于需要從倉庫中拉取代碼,所以會有一個的問題。注意文件并沒有一項。
前言
一直在思考部署應用到k8s的姿勢,之前介紹過helm,個人感覺helm把記錄數據放到k8s中不是特別好。最近發現了weave的flux項目(A tool for deploying container images to Kubernetes services)。
flux簡介和注意事項 flux簡介先上圖,大致看一下flux的理念。
1:flux可以和任意你喜歡的CI工具搭配比如:Drone,CircleCI,gitlabCI等。實際上flux做了CD的環節。
2:flux可以幫助你安全地更新應用。一般會遇到更新過程出錯的問題,在flux實現中,每個部署的應用的yaml文件存儲在git倉庫里,所以每次更改都可以追蹤,所以也能精確回滾到任何一個歷史版本。這點我是覺得非常好的。當應用需要更新鏡像的時候,有以下幾個步驟:
Clone the repository
Find the deployment files that use the image in question (there may be more than one, since we have e.g., sidecar containers that use the same image)
Update a few fields in each file, in slightly different ways (e.g., put the image name in the template, and the tag part of the image name in a version label)
Commit and push the change back to Git
如果只是更新鏡像,其實有更簡單的操作:
$ fluxctl release --service=sock-shop/front-end --update-all-images Submitting release job... Release job submitted, ID cc08f78c-0e66-24a9-9215-82c80cc646c3 Status: Complete. Here"s what happened: 1. Submitted job. 2. Calculating release actions. 3. Release latest images to sock-shop/front-end 4. Clone the config repo. 5. Clone OK. 6. Update 1 images(s) in the resource definition file for sock-shop/front-end: front-end (weaveworksdemos/front-end:0.2.0 -> weaveworksdemos/front-end:7f511af2d21fd601b86b3bed7baa6adfa9c8c669). 7. Update pod controller OK. 8. Commit and push the config repo. 9. Pushed commit: Release latest images to sock-shop/front-end 10. Regrade 1 service(s): sock-shop/front-end. Took 55.810622454s
此處會引出和drone結合的想法。這一點在總結里會詳細闡述。
3: flux很好解決了可視化的問題,通過幾個指令就能清楚知道正在發生的。flux有controller的概念。
$ fluxctl list-services --namespace=sock-shop SERVICE CONTAINER IMAGE RELEASE POLICY sock-shop/cart cart weaveworksdemos/cart:0.3.0 sock-shop/cart-db cart-db mongo sock-shop/catalogue catalogue weaveworksdemos/catalogue:0.2.0 sock-shop/catalogue-db catalogue-db weaveworksdemos/catalogue-db:0.2.0 sock-shop/front-end front-end weaveworksdemos/front-end:0.2.0 sock-shop/orders orders weaveworksdemos/orders:0.3.0 sock-shop/orders-db orders-db mongo sock-shop/payment payment weaveworksdemos/payment:0.3.0 sock-shop/queue-master queue-master weaveworksdemos/queue-master:0.3.0 sock-shop/rabbitmq rabbitmq rabbitmq:3 sock-shop/shipping shipping weaveworksdemos/shipping:0.3.0 sock-shop/user user weaveworksdemos/user:0.3.0 sock-shop/user-db user-db weaveworksdemos/user-db:0.3.0
$ fluxctl list-images --service=sock-shop/front-end SERVICE CONTAINER IMAGE CREATED sock-shop/front-end front-end weaveworksdemos/front-end | 7f511af2d21fd601b86b3bed7baa6adfa9c8c669 18 Nov 16 16:00 UTC | latest 18 Nov 16 16:00 UTC | snapshot 18 Nov 16 16:00 UTC | 16007ffffdd86b2ebb41d8880c53b77580cab13f02 18 Nov 16 11:23 UTC | a0eaf8c8ffc0b81c2199adaf7d67466891bb3205 17 Nov 16 10:22 UTC | 1b664cc81d9cf25b213000686a9e8d6477ae1b06 16 Nov 16 20:31 UTC | ce1efe59c32d3c53344defdda4d5b643272022b8 16 Nov 16 20:29 UTC | 4c33b216ae902ad89b9c3ca30a99a44833d16d5b 10 Nov 16 21:34 UTC | 7015587783bc8f7a9c3d5cfa51e5a257fe188c4b 10 Nov 16 11:34 UTC | 4d3ea2896c81e40a630d36cdc29ce740e7617016 10 Nov 16 11:30 UTC : "-> 0.2.0 09 Nov 16 10:26 UTC
4:flux實際上可以做到完全自動檢測git倉庫中yaml文件的變化以及registry中鏡像的更新,進而自動部署。
It is most useful when used as a deployment tool at the end of a Continuous Delivery pipeline. Flux will make sure that your new container images and config changes are propagated to the cluster。
大意就是,利用flux作為cd pipeline中最后一個環節,可以很好地解決鏡像更新或是yaml文件更新。
由于fluxd需要從git倉庫中拉取代碼,所以會有一個ssh key的問題。
注意flux-secret.yaml文件:
--- apiVersion: v1 kind: Secret metadata: name: flux-git-deploy type: Opaque
并沒有data一項。實際上,flux默認會給我們生成一個key。
然后可以執行
$ fluxctl identity ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1fndADrb1fp6a+7QusXMU9qI2CNodLyMR82/6Li8rAstUCMRI9SjThAAbzyIfuCX61YCjWGj6qHyPusmfOssErbs7+rs6Q3y0RrACZT7w4HTgODX4aXGMigVY+IztpDv+XYztTqLCwMVfsrQWvo/WrtbltCdjzTP3gR7nWriPzCks3KbEFZkk4bCISJzV19RBCQzJBlE6afOAreCCdhooy80zmWOmHqc+OVDbAVTOC5Bcht/EaHNXGCwcHijiNd0MPah6OKI+gG/eDB2OLixdhoNTzeEYN6vB5Y/wwNuH/m29y46EM6mfXuq6KkD+/YT9J0XiTx
就可以獲得到public key。這個時候復制到github 倉庫的 deploy key即可。
總結1:如何與drone結合?
首先我是認可將yaml存儲在git倉庫中,做版本控制。
實際上flux類似于helm,分為fluxd和一個命令行工具fluxctl,fluxd相當于server部署在k8s集群中。那么將fluxctl做成一個drone的插件。放在drone pipeline中最后一步。類似于現在很多helm插件的玩法。
這個插件只需要完成更新鏡像的功能即可。畢竟整個pipeline中,更新代碼到倉庫中觸發編譯,構建,推送新鏡像到harbor,最終對于k8s集群,只需要應用替換新的鏡像即可。所以不需要去監聽registry這個功能。也不需要關注git中yaml的變化,拉取最新的即可。
具體實現思路:
將新的鏡像name和要更新的目標,以及yaml文件路徑等作為drone插件的輸入參數
然后執行下面的類似命令
$ fluxctl release --controller=default:deployment/helloworld --update-image=quay.io/weaveworks/helloworld:master-a000001 Submitting release ... Commit pushed: 33ce4e3 Applied 33ce4e38048f4b787c583e64505485a13c8a7836 CONTROLLER STATUS UPDATES default:deployment/helloworld success helloworld: quay.io/weaveworks/helloworld:master-9a16ff945b9e -> master-a000001 $ fluxctl list-images --controller default:deployment/helloworld CONTROLLER CONTAINER IMAGE CREATED default:deployment/helloworld helloworld quay.io/weaveworks/helloworld | master-9a16ff945b9e 20 Jul 16 13:19 UTC | master-b31c617a0fe3 20 Jul 16 13:19 UTC | master-a000002 12 Jul 16 17:17 UTC "-> master-a000001 12 Jul 16 17:16 UTC sidecar quay.io/weaveworks/sidecar "-> master-a000002 23 Aug 16 10:05 UTC master-a000001 23 Aug 16 09:53 UTC
2:拋開drone,對于整個paas平臺。flux提供的自動監控registry和yaml git 倉庫的功能,也能豐富用戶的各種玩法。
3:接下來就是drone-flux插件。該插件是我實現本想法而實現的的一個插件。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28018.html
摘要:前言一直在思考部署應用到的姿勢,之前介紹過,個人感覺把記錄數據放到中不是特別好。可以幫助你安全地更新應用。部署到中注意事項由于需要從倉庫中拉取代碼,所以會有一個的問題。注意文件并沒有一項。 前言 一直在思考部署應用到k8s的姿勢,之前介紹過helm,個人感覺helm把記錄數據放到k8s中不是特別好。最近發現了weave的flux項目(A tool for deploying conta...
摘要:本節主要介紹利用部署應用到中。利用部署一個應用,需要原生資源文件如或等。最后一般都會引用通知插件,將構建結果通知部署人員。說到部署策略,不得不說,實現的功能很多,但是足夠的復雜,目前來看,國內只有小紅書用起來了。 前言 本小節應該是這個系列剩下的兩個小節之一了。剩下一個是之前承諾好的drone-wechart插件。本節主要介紹利用helm部署應用到kubernetes中。至于helm,...
摘要:本節主要介紹利用部署應用到中。利用部署一個應用,需要原生資源文件如或等。最后一般都會引用通知插件,將構建結果通知部署人員。說到部署策略,不得不說,實現的功能很多,但是足夠的復雜,目前來看,國內只有小紅書用起來了。 前言 本小節應該是這個系列剩下的兩個小節之一了。剩下一個是之前承諾好的drone-wechart插件。本節主要介紹利用helm部署應用到kubernetes中。至于helm,...
摘要:擴展性好當集群的資源嚴重不足而導致排隊等待時,可以很容易的添加一個到集群中,從而實現擴展。用法,選擇盡可能使用這個節點鏡像,填寫,這個容器鏡像是我們的運行環境。更新文件,這里我們只是將中的鏡像更換成最新構建出的鏡像。基于Jenkins的CI/CD實踐[TOC]一、概要提到K8S環境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...
摘要:可以利用特性,根據負載壓力來動態調整的數量。部署到集群以后,可以利用已有的日志系統和監控系統。即使用,也應該掛載到中,保證數據的安全。所有都部署到命名空間下,這個已經建好了。 前言 本文主要講如何把drone部署到k8s集群當中,本身drone這種基于容器的pipeline方式,和k8s是相當契合的。這樣的好處有: k8s集群守護drone-server 和drone-agent。 ...
閱讀 953·2021-11-24 09:39
閱讀 2689·2021-09-26 09:55
閱讀 14155·2021-08-23 09:47
閱讀 3577·2019-08-30 15:52
閱讀 849·2019-08-29 13:49
閱讀 997·2019-08-23 18:00
閱讀 844·2019-08-23 16:42
閱讀 1636·2019-08-23 14:28