主頁 > 軟體工程 > 專訪 CNCF 大使王煒:讓云原生開發回歸原始而又簡單

專訪 CNCF 大使王煒:讓云原生開發回歸原始而又簡單

2021-04-01 21:17:27 軟體工程

近期,騰訊云 CODING DevOps 開源了云原生開發環境 - Nocalhost,

根據官方檔案介紹,Nocalhost 來源于 No Localhost,其含義是開發者不再依賴本地計算機的編碼、除錯和測驗程序,他是一個云原生開發環境,旨在解決云原生下開發難的問題,

例如,在 Kubernetes 環境下進行微服務開發,通常會面臨以下問題:

  • 每次修改代碼,都需要經過構建映像->推送映像->拉取映像->重新啟動應用程式(Pod)的程序,開發的反饋回圈非常長(10 分鐘以上);
  • 為了開發某個微服務,必須要在本地啟動整個環境和所有微服務,這帶來了過度依賴本地資源的問題;
  • 開發人員只專注于他們自己的服務,隨著迭代的進行,本地啟動或更新完整的開發環境越來越難;
  • 微服務之間的依賴關系和啟動順序難以控制;
  • 新入職的員工一般需要 2-3 周的時間來熟悉開發環境的搭建及學習背景知識

那么,Nocalhost 到底是怎么解決以上問題的?Nocalhost 的開源,又會給 K8s 生態帶來哪些影響呢?帶著這些問題,我們與 Nocalhost 的設計者之一、新晉 CNCF 大使、云原生社區成員,來自騰訊云 CODING DevOps 的王煒,詳細聊聊關于 Nocalhost 的產品、技術和生態,

采訪嘉賓

以下為采訪原文:

Q: 首先跟大家介紹一下 Nocalhost 的起源吧

王煒:Nocalhost 的起源其實是解決 CODING 自身開發難的問題,CODING 在早期已經擁抱微服務、云原生和 Kubernetes,但在我們日常開發程序中,發現 Kubernetes 雖然解決了部署和運維的問題,但同時也帶來了開發難的問題,

最典型的痛處是每寫幾行代碼,要觀察代碼效果或者除錯,就不得不重新構建鏡像->推送鏡像->修改作業負載鏡像版本->等待 Pod 重建的漫長程序,這個程序雖然可以用自動化的 CI/CD 來解決一部分人工手動運行問題,但其核心不變,

此外,本地全量運行 CODING 所需的資源要求非常高,早期開發人員不得不配備一臺 8 核 64G 的電腦來開發,后續也嘗試過為每個人都配備了一臺遠程的高配開發機,但開發效率仍然無法提升,

針對這種場景,我們開始探索相應的解決方案,并最終將該實踐開源成為了 Nocalhost 專案,

Q:在云原生環境下,開發難除了體現在每次編碼需要重新構建鏡像以外,在實踐中還遇到了其他痛點嗎?

王煒:痛點非常多!以后端同學為例,從入職開始,熟悉和配置開發環境需要花大量的時間和精力,另外,好不容易搭建好了開發環境,需要更新微服務組件時往往出現大量組件無法啟動,當然這可能更多的是應用管理問題了,目前社區也有非常好的應用模型實踐,

但問題是,統一維護這套應用模型是非常吃力的,如果使用它的場景非常低頻,那么問題暴露會越來越遲,最終與無人維護沒有多大差別,而所有開發者的環境又是獨立的,遇到問題總是自己解決而不是往上層去更新應用模型,這會進一步導致應用版本越來越老舊,

所以,我們考慮開發環境是必須要集中化管理,開發環境的部署來源只能是獨立維護的應用模型,業務組協同維護并產生部署-修改回圈效應,才能實作一致性的應用管理,

Q:所以 Nocalhost 會管理應用和開發環境嗎?

王煒:是的,應用管理是使用外部標準,例如 Manifest 檔案組合成的應用、Helm 應用和 Kustomize 應用等,它是用于拉起開發環境的標準安裝方法,不同的開發者的開發環境在 Nocalhost 里的定義是開發空間(DevSpace),目前是采用 Namespace 的方式進行隔離和管理的,不同開發空間后續將支持協作開發,應用和開發空間的管理都可以在 Nocalhost 控制臺來實作,

Q:Nocalhost 有哪些組件組成?

王煒:Nocalhost 主要由這幾個組件組成:

  • 管理側(面對開發環境的管理人員)

    • Nocalhost 控制臺:提供開發人員管理、應用管理、開發空間管理等功能
      • Nocalhost Dep 組件:提供應用依賴管理,控制微服務依賴啟動順序
  • 用戶側(開發者)

    • nhctl-cli:Nocalhost 命令列工具,提供完整的功能
      • IDE 插件:提供 VS Code 插件和 JetBrains 插件

Nocalhost 作業示意圖:

Q:Nocalhost 對開發者來說最直觀的使用感受是什么?

王煒:對開發者來說,最直觀的使用感受是開發程序變得非常簡單,從部署開發環境到開發只需要在 IDE 插件上進行簡單的四步操作:

  1. 一鍵拉起開發環境

  2. 點擊“錘子”進入待開發組件的“開發模式”

  3. 在本地 IDE 撰寫代碼,保存

  4. 無需重新構建鏡像,新代碼在遠端容器直接生效

在使用 Nocalhost 進行服務開發時,屏蔽了開發所需的復雜背景知識,只需要具備語言開發基礎,就能夠立即進行業務代碼的開發作業,

目前在 CODING 最快的實踐是:剛入職的新同學,中午接到需求后,下午就已經提交了業務代碼,令人興奮的是,他面對的需求是一套由 100 多個微服務組成的系統,這一切都是建立在他不了解任何 CODING 微服務架構、開發環境、甚至是業務代碼的倉庫地址(Nocalhost 已提前配置好)的背景下獨立完成,這在以前的開發模式下是無法想象的,

Q:比如我已有一套業務系統,怎么使用 Nocalhost ?

王煒:對于已有的業務系統,首先確認是否為 Kubernetes 標準的應用安裝方式,例如 Manifest、Helm 和 Kustomize,

其次,Nocalhost 不侵入任何的業務邏輯,只需要使用宣告式的配置方式提供開發引數配置即可,以開發 Istio 提供的 Bookinfo 為例,

以下是存放 Bookinfo 安裝檔案的 Git 倉庫 :https://github.com/nocalhost/bookinfo,

該倉庫的目錄結構如下圖所示,

其中,manifest/templates 目錄包含 Bookinfo Manifest 型別的安裝檔案:

當有了應用之后,我們便能夠為該倉庫創建 .nocalhost/config.yaml 來為 Nocalhost 提供開發引數,例如,這是 Bookinfo 應用以及 productpage 服務的部分開發引數:

configProperties:
  version: v2

application:
  name: bookinfo
  # 應用型別
  manifestType: rawManifest
  # 應用 Manifest 的目錄
  resourcePath: ["manifest/templates"]
  ignoredPath: []
  onPreInstall: []
  services:
    # 要開發的服務名稱
    - name: productpage
      # 要開發的服務型別
      serviceType: deployment
      # 宣告依賴服務,將會等待依賴啟動后自身才會啟動
      dependLabelSelector: 
        jobs:
          - "dep-job"
      containers:
        - name: productpage
          # 應用安裝后自動埠轉發
          install: 
            portForward:   
              - 39080:9080
          dev:
            # 定義原始碼倉庫地址
            gitUrl: https://e.coding.net/codingcorp/nocalhost/bookinfo-productpage.git
            # 定義開發鏡像
            image: codingcorp-docker.pkg.coding.net/nocalhost/dev-images/python:3.7.7-slim-productpage
            # 定義進入開發容器的 bash
            shell: bash
            workDir: /home/nocalhost-dev
            # 定義檔案同步
            sync: 
              type: send
              filePattern: 
                - ./
              ignoreFilePattern:
                - ".git"
             # 開發模式自動埠轉發
            portForward:
            - 39080:9080

在該組態檔中,我們為 Nocalhost 提供了 productpage 服務的一些開發引數,最后,再通過 Nocalhost 控制臺創建該應用并提供倉庫地址即可,

通過以上配置,便能夠實作應用無縫遷移到 Nocalhost 進行開發,

Q:Nocalhost 下一步的計劃是什么?

王煒:Nocalhost 目前在 CODING 日常開發幾乎已全員覆寫,但仍然有很多優化空間,

正如 Nocalhost 的 Slogan 一樣,Nocalhost 的初心是讓云原生開發回歸原始而又簡單,希望能為云原生開發環境提供探索和示范,并成為云原生生態不可缺少的一部分,

目前 Nocalhost 已進入 CNCF Landscape,后續將推進與 CNCF 更加深入的合作,

Q:能否談談國內的云原生發展趨勢和個人看法?

王煒:根據 Gartner 研究報告指出:到 2022 年,云原生和容器化的普及率將達到 75% 以上,這意味著云原生的大趨勢已成為定局,K8s 作為強大的基礎設施底座,為企業應用提供了極強的生產穩定性,

但隨著我們對 K8s 的使用程度越來越深,會發現 K8s 面向“作業負載”的設計在一些場景下是需要提升的,圍繞著這些問題的焦點,社區不斷地在為 K8s 進行插件式的擴展,CNCF Landscape 中已有接近 400 個開源產品為 K8s 提供了額外能力,這些技術方向大致被分為了資料庫、訊息、應用定義和鏡像構建等,產品數量仍然不斷上升,

K8s 生態發展至今,個人認為目前有兩大方向是急需社區來解決的:第一是應用定義模型,代表有 OAM 標準和 Kubevela,該方向與 DevOps、GitOps 具有緊密聯系,第二是一直被忽略的應用開發,這兩個方向都是提升大規模組織開發效率的關鍵,

尤其是應用開發方向,目前仍然沒有標準規范和優秀的實踐,我相信社區也一定會有標準誕生,

最后,歡迎大家加入云原生社區參與 Nocalhost 話題討論,另外 Nocalhost 正在招聘,也歡迎對云原生領域感興趣的同學加入我們,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270905.html

標籤:其他

上一篇:固態硬碟與機械硬碟的概念與區別

下一篇:初見,結對編程!(上)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more