<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      每天都在愉快的造輪子,這次可以一鍵創(chuàng)建測試環(huán)境


      咖啡君維護了幾十個不同類型項目,其中有相當一部分項目是對保密性有很高要求的,也就是說下個版本要上線的內(nèi)容是不能提前泄露的,就像蘋果新產(chǎn)品的介紹網(wǎng)站決不允許在產(chǎn)品發(fā)布之前流出一樣,這種保密內(nèi)容除了在制度上加以約束外,還需要一些技術(shù)手段來保障


      本次要介紹的Aloid系統(tǒng)就對保密有著一定的作用,這個系統(tǒng)的主要作用是快速生成臨時環(huán)境,這個臨時環(huán)境會有一定的有效期,過期自動清除,當然你也可以手動清除,同時這個環(huán)境會有唯一的
      隨機訪問地址,只有知道這個隨機地址的人才能訪問

      涉及技術(shù)

      整個項目基于Django構(gòu)建,前后端框架代碼可以通過這篇文章
      <https://mp.weixin.qq.com/s/L6Jud6gp5c9bbaUljUkNFA>
      獲取,通過框架代碼可以快速構(gòu)建項目,添加自己需要的功能,需要說明的是框架代碼并非這個項目源碼

      subprocess

      編譯部署難免要跟系統(tǒng)命令打交道,在調(diào)研了幾種python執(zhí)行系統(tǒng)命令的方法后選擇了subprocess,subprocess作為os.system和
      os.popen的替代模塊,功能更為強大,且為python自帶模塊,不需額外安裝,使用方便

      在需要頻繁執(zhí)行系統(tǒng)命令的情況下,可以寫一個類似下邊這樣的方法封裝命令執(zhí)行和返回輸出,使代碼簡潔易讀
      import shlex, subprocess def runCmd(tid, msg, cmd): try: p =
      subprocess.Popen(shlex.split(cmd), stdin=subprocess.PIPE,
      stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while p.poll() == None: out =
      p.stdout.readline().strip() if out: print('---->' + out.decode()) res = ' 失敗
      ~_~' if p.returncode else ' 完成 ^_^' print('---->' + msg + res) return
      p.returncode except Exception as e: print('---->Shell Exec Error:%s' % str(e))
      return 999
      kubernetes-api

      所有環(huán)境跑在kubernetes之上,創(chuàng)建或銷毀臨時環(huán)境都需要與kubernetes做交互,我選擇了使用kubernetes python sdk來完成
      from kubernetes import client, config class KubeApi: def __init__(self,
      namespace='alodi'): config.load_kube_config("/ops/coffee/kubeconfig.yaml")
      self.namespace = namespace def create_deployment(self, RAND, PROJ, ENVT):
      api_instance = client.AppsV1Api() body = client.V1Deployment(
      api_version="apps/v1", kind="Deployment",
      metadata=client.V1ObjectMeta(name=RAND), spec=client.V1DeploymentSpec(
      replicas=1, selector={'matchLabels': {'app': RAND}},
      template=client.V1PodTemplateSpec( metadata=client.V1ObjectMeta(labels={"app":
      RAND}), spec=client.V1PodSpec( containers=[client.V1Container( name=RAND,
      image="k8s-harbor.blz.netease.com/alodi/" + RAND, env=[{"name": "ENVT",
      "value": ENVT}, {"name": "PROJ", "value": PROJ}],
      ports=[client.V1ContainerPort(container_port=80)], )] ) ), ) ) try: r =
      api_instance.create_namespaced_deployment( namespace=self.namespace, body=body
      ) return True, "Deployment created: %s" % r except Exception as e: return
      False, 'Deployment created: ' + str(e) def delete_deployment(self, RAND):
      api_instance = client.AppsV1Api() body = client.V1DeleteOptions(
      propagation_policy='Foreground', grace_period_seconds=5) try: r =
      api_instance.delete_namespaced_deployment( namespace=self.namespace, name=RAND,
      body=body ) return True, "Deployment deleted. %s" % r except Exception as e:
      return False, 'Deployment deleted: ' + str(e)
      load_kube_config加載的配置文件為kubernetes主服務(wù)器上的~/.kube/config
      文件,這個文件內(nèi)包含了集群相關(guān)信息,通過這個配置文件可以免認證操作集群修改資源,要妥善保管這個配置文件,當然也可以通過token的方式自己實現(xiàn)認證

      另外需要特別注意的是sdk的版本與kubernetes的版本有對應(yīng)關(guān)系,且不同資源的操作對kubernetes的api版本要求也不同,使用時多參考官方文檔

      介于篇幅原因這里只貼了兩個deployment的操作示例,其他更多示例可以單獨找我獲取

      界面展示

      整個項目除了用戶管理之類的常規(guī)頁面外,主要有三個頁面構(gòu)成,由這三個頁面完成了主要流程的執(zhí)行和展示

      項目管理頁:在這個頁面內(nèi)可以新建、編輯和刪除項目



      同時也可以在項目管理頁創(chuàng)建臨時環(huán)境,這里主要選擇使用的數(shù)據(jù)環(huán)境和代碼TAG



      當填寫相關(guān)信息點擊Build & Deploy按鈕后會跳轉(zhuǎn)到任務(wù)詳情頁,這個頁面實時展示部署過程的日志輸出,右上角有個爬蟲的按鈕,可以終止部署



      部署列表頁:可以在部署列表頁查看到部署歷史記錄,當這個環(huán)境正在運行時可以點擊銷毀按鈕來銷毀項目,清除kubernetes的資源占用



      寫在最后

      * 我們寫了很多項目,也造了很多輪子,目的都是為了讓我們的工作更輕松,達到“一杯咖啡、輕松運維”的愿景
      * 項目代碼暫不開源,但項目里邊用到的技術(shù)大都有專門的文章介紹,文章都附帶有代碼,有些甚至提供有Demo,完全可以快速搞定自己的需求
      * 如果有任何問題歡迎與我聯(lián)系,一起溝通交流,共同成長,期待加我好友~


      相關(guān)文章推薦閱讀:

      * 我們自研的那些Devops工具 <https://mp.weixin.qq.com/s/HwOi-ARTvvNjGTWrDmZIkQ>
      * 開源推薦 | CoDo開源一站式DevOps平臺 <https://mp.weixin.qq.com/s/eZX5qoJzuCSuLI98gSCtpw>

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          国产又猛又粗又黄又爽 | 91人妻人人澡人人爽人人爽 | 乱伦 的搜索结果 - 91n | 嗯啊双性呻吟浪荡灌满水一受多攻 | 欧美成人一区二区在线 | 九九色在线 | 乱操视频 | 天天夜啪 | 欧美在线免费观看 | 国产精品久久久久久久不卡 |