<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GitOps 體系學(xué)習(xí)和理解

          共 8877字,需瀏覽 18分鐘

           ·

          2021-09-14 16:56


          什么是 GitOps 呢?

          1. GitOps 是一套使用 Git 來管理基礎(chǔ)架構(gòu)和應(yīng)用配置的實踐,而 Git 指的是一個開源版控制系統(tǒng)。GitOps 在運行過程中以 Git 為聲明性基礎(chǔ)架構(gòu)和應(yīng)用的單一事實來源。
          2. GitOps 使用 Git 拉取請求來自動管理基礎(chǔ)架構(gòu)的置備和部署。Git 存儲庫包含系統(tǒng)的全部狀態(tài),因此系統(tǒng)狀態(tài)的修改痕跡既可查看也可審計。
          3. GitOps 圍繞開發(fā)者經(jīng)驗而構(gòu)建,可幫助團隊使用與軟件開發(fā)相同的工具和流程來管理基礎(chǔ)架構(gòu)。除了 Git 以外,GitOps 還支持您按照自己的需求選擇工具。
          GitOps體系學(xué)習(xí)和理解

          1. GitOps 到底是個什么呢

          GitOps = 基礎(chǔ)設(shè)施即代碼(IaC) + 合并請求(MR) + 持續(xù)集成/持續(xù)交付(CI/CD)

          GitOps 是一種運維框架,它采用了 DevOps 在應(yīng)用程序開發(fā)階段的最佳實踐(例如版本控制、協(xié)作、合規(guī)性和CI/CD工具),并將其應(yīng)用于基礎(chǔ)設(shè)施自動化。

          GitOps 相比,傳統(tǒng)的 DevOps 盡管在軟件開發(fā)生命周期已實現(xiàn)自動化,但基礎(chǔ)架構(gòu)大體上仍然是一個需要專業(yè)團隊進行手動操作的過程。隨著對基礎(chǔ)架構(gòu)需求的不斷增長,實現(xiàn)基礎(chǔ)設(shè)施自動化變得越來越重要?,F(xiàn)代化的基礎(chǔ)設(shè)施需要彈性機制(速度和規(guī)模),以便能有效地管理持續(xù)部署所需的云資源。

          GitOps體系學(xué)習(xí)和理解

          GitOps 用于對基礎(chǔ)設(shè)施置備的過程進行自動化,采用以 配置文件 存儲為代碼(基礎(chǔ)設(shè)施即代碼),配置文件在每次部署時都會生成相同的基礎(chǔ)設(shè)施環(huán)境,來保證環(huán)境的一致性,完成整個運維流程的自動化。

          • 三叉戟 - 基礎(chǔ)設(shè)施即代碼(IaC) - Terraform
            • GitOps 使用 Git 倉庫作為基礎(chǔ)設(shè)施定義的單一可信來源,將所有基礎(chǔ)設(shè)施以配置文件的方式存儲為起來,達到配置和管理應(yīng)用服務(wù)的問題。
          • 三叉戟 - 合并請求(MR)
            • GitOps 使用合并請求作為所有基礎(chǔ)設(shè)施更新的變更機制,合并請求是團隊通過評審和評論進行協(xié)作的地方,合并會被提交到您的主干分支并可作為審計日志。
          • 三叉戟 - 持續(xù)集成/持續(xù)交付(CI/CD)
            • GitOps 使用具有持續(xù)集成和持續(xù)交付的 Git 工作流來自動化執(zhí)行基礎(chǔ)架構(gòu)的更新,在新代碼合并后,CI/CD 流水線將執(zhí)行環(huán)境中的更改,從而避免手動配置的錯誤等問題。

          對于任何需要協(xié)作的工作,改變都是很棘手的,GitOps 也不例外。GitOps 需要所有參與者遵守紀律,它是一種采用全新的方式來工作的承諾。對于團隊來說,把所有的事情都記錄下來至關(guān)重要。

          2. GitOps 的核心在于協(xié)助

          可以覆蓋應(yīng)用程序從構(gòu)思到代碼再到部署全流程的協(xié)作

          從核心上來說,GitOps 指的是將 Git 存儲庫作為構(gòu)建基礎(chǔ)設(shè)施和部署應(yīng)用程序所有代碼的唯一可信數(shù)據(jù)源,然后將代碼自動化部署到不同的云環(huán)境上面(可以借助Terraform完成資源編排)。

          每個人都能夠在同一個系統(tǒng)中工作,并了解事情的進展情況。無論你是在基礎(chǔ)架構(gòu)中還是在應(yīng)用程序開發(fā)中,所有的更改都遵循同樣的流程,即定義工作主體,將其分配給個人,團隊協(xié)作,然后部署這些代碼,并將 Git 存儲庫作為唯一可信數(shù)據(jù)源使用。

          • GitOps 與代碼和協(xié)作都有緊密聯(lián)系
          1. 使用版本控制系統(tǒng)可以確保一切都被記錄且可見,審計跟蹤使團隊保持合規(guī)性。
          2. 針對于不同的項目和團隊,新建 issue 來描述添加的目標(biāo)和任務(wù)(多云平臺)。
          3. issue 中,記錄列出的任務(wù)列表的執(zhí)行程度和進展(通過ME合并請求)。
          GitOps體系學(xué)習(xí)和理解

          3. GitOps 的使用最佳實踐

          這里推薦使用極狐 GitLab 云服務(wù)(費收費軟廣告)

          良好的運維體系擁有一個無縫鏈接且完美的體驗,能夠增進基礎(chǔ)設(shè)施、運營和開發(fā)團隊之間的協(xié)作,在提高軟件環(huán)境的穩(wěn)定性、可靠性和安全性的同時,實現(xiàn)更快速部署,這能夠增強團隊的信心。比如:

          GitOps體系學(xué)習(xí)和理解
          • [1] 版本控制
            • 核心 - 配置文件 - 聲明式系統(tǒng)
            • Git 倉庫作為所有基礎(chǔ)設(shè)施和應(yīng)用部署代碼的單一事實來源
            • 通過受保護分支的獨特權(quán)限,限制可以部署到生產(chǎn)的用戶和團隊
          • [2] 代碼審查
            • 團隊 - 方便后續(xù)追溯問題原因
            • 提高代碼質(zhì)量,傳播最佳實踐,防止問題的出現(xiàn)
          • [3] 持續(xù)集成/持續(xù)交付
            • 部署 - 無縫體驗 - 與 Terraform 緊密集成
            • 將其與敏捷管理和源代碼管理建立在同一個應(yīng)用程序中
            • 支持從物理機、虛擬機、容器到云原生平臺的多種基礎(chǔ)環(huán)境的部署

          4. GitOps 的大致運行流程

          這里推薦使用極狐 GitLab 云服務(wù)(費收費軟廣告)

          伴隨著 DevOps 在近些年的火爆,圍繞 xOps 產(chǎn)生了很多概念,諸如 DevSecOpsAIOps,MLOps,ChatOps 等等,當(dāng)然還有的主角 GitOps。而GitOps 這個詞出現(xiàn)于 2017 年,是由 Weaveworks 公司根據(jù)多年云計算基礎(chǔ)設(shè)施和應(yīng)用程序管理經(jīng)驗而提出的一個概念。

          GitOps體系學(xué)習(xí)和理解 - 亂七八糟的xOps造詞運動

          一般情況下,可以使用下面的持續(xù)交付系統(tǒng)(示意圖),來完成云原生應(yīng)用程序的部署與交付。這種 從左到右走到底Push 模式,雖然很容易實現(xiàn)一鍵式部署,但也存在一些問題。

          GitOps體系學(xué)習(xí)和理解 - 完成云原生應(yīng)用程序的部署與交付

          簡而言之,就是沒有辦法保證兩側(cè)的服務(wù)是一致的,這可能會導(dǎo)致 配置漂移 的發(fā)生和安全合規(guī)問題的出現(xiàn),而使用聲明式是解決這個問題的關(guān)鍵點。

          • [1] 很難保證
            • 倉庫里清單文件的內(nèi)容是否和 k8s 集群的實際情況是否一致
          • [2] 不夠靈活
            • 鏡像有更新時不能夠自動同步至集群,除非每次從頭到尾走一遍部署流程
          • [3] 安全合規(guī)
            • 有可能需要操作人員通過 kubectl 命令做一些集群操作

          聲明式系統(tǒng)有個特點,其能夠幫我們自動完成應(yīng)用程序或基礎(chǔ)設(shè)施系統(tǒng)的描述狀態(tài)和實際狀態(tài)的自動同步,保證兩者能保持一致。比如,應(yīng)用部署清單里面應(yīng)用程序是一個副本(replicas=1),那么集群側(cè)應(yīng)用程序就會是一個 pod

          GitOps體系學(xué)習(xí)和理解 - 關(guān)于聲明式的理解以及解題思路

          GitOps 以聲明式系統(tǒng)為基座,以 Git 為單一可信源,即一切皆代碼,從而我們可以將上述構(gòu)建流程改為下面這樣的 pull 模式。pull 模式的關(guān)鍵就是,單一可信源與 k8s 集群的集成,當(dāng)可信源側(cè)的文件清單發(fā)生變更的時候,集群側(cè)能夠及時捕捉到此變更,從而完成變更清單的部署。

          • 這就需要使用的 Git 工具支持與 k8s 打交道的能力。
          • 可以將 Git 工具與 Terraform 集成,來完成云基礎(chǔ)設(shè)施的自動化管理。
          GitOps體系學(xué)習(xí)和理解 - 關(guān)于聲明式的理解以及解題思路
          GitOps體系學(xué)習(xí)和理解 - 關(guān)于聲明式的理解以及解題思路
          # ------- 0.0 -------
          # GitOps的倉庫代碼結(jié)構(gòu)
          # -------------------

          # 多云環(huán)境
          ? tree -a GitOps
          GitOps
          └── gitops
              ├── .gitlab-ci.yaml             # CI/CD
              └── environments
                  ├── aliyun
                  │   ├── kubeconfig.yaml     # k8s集群配置
                  │   ├── main.tf             # 基礎(chǔ)設(shè)置配置
                  │   └── yaml
                  │       └── app.yaml        # 集群服務(wù)配置
                  └── k3s
                      └── yaml
                          ├── app.yaml        # 集群服務(wù)配置
                          └── kubeconfig.yaml # k8s集群配置

          Git 為單一可信源,所有與軟件開發(fā)相關(guān)流程中的代碼(包括基礎(chǔ)設(shè)施代碼、應(yīng)用程序源碼、配置等)都會存儲在 Git 倉庫中。所有管理過程都是通過合并請求(MR)來完成的,當(dāng)需要對基礎(chǔ)設(shè)施作某些變更時,只需要修改代碼,并提交 MR,在所有的修改都被審查和批準后,代碼可以被合并到主分支上。一旦代碼變化被合并,所有的變化將被部署到生產(chǎn)中。

          • GitOps 的優(yōu)點
            • 快速進行變更 - 更新和回滾
            • 人員工作體驗的提升 - 部署流程完美
            • 安全性提高 - 倉庫進行權(quán)限分配
            • 合規(guī)審計容易做 - 所見即所得
          • GitOps 的缺點
            • 協(xié)作文化的建立 - 逐步培養(yǎng)
            • Git Workflow的建立 - 混合云保證服務(wù)可用
            • 敏感信息的處理 - 敏感信息(與Vault結(jié)合解決) - GitSecOps

          5. GitOps 集成 ArgoCD 實踐

          ArgoCD 只是一個持續(xù)交付工具,但其實核心功能點!

          ArgoCD 是一款開源且主要針對 Kubernetes 來做 GitOps 的持續(xù)交付工具?,F(xiàn)在是 CNCF 的孵化項目。其整體架構(gòu)圖如下:

          GitOps體系學(xué)習(xí)和理解 - 集成ArgoCD實踐

          ArgoCD 是以 Kubernetes Controller 的形式來實現(xiàn)的,它會對運行在 Kubernetes 集群上的應(yīng)用程序進行監(jiān)聽,并將實際運行狀態(tài)和期望狀態(tài)(在部署清單文件中指定,且存儲在版本控制系統(tǒng)中)進行對比,當(dāng)兩者狀態(tài)不一致的時候,則提示 OutOfSync,此時可以通過自動或者手動的方式來完成同步操作,以讓兩者狀態(tài)再次保持一致。存儲在 Git 倉庫中的任何變更都會被自動同步至集群側(cè)。

          這其實就是實現(xiàn) GitOps 的核心原理。所有對于應(yīng)用程序或者基礎(chǔ)設(shè)施的變更僅僅需對 Git 倉庫做一些 MR 或者 Push 操作即可實現(xiàn),變更會自動部署。所以,雖然 GitOps 的核心不是 Git,但是卻與 Git 息息相關(guān)。

          Git 將作為存儲部署清單文件的版本控制系統(tǒng),與 ArgoCD 做集成,實現(xiàn) GitOps workflow。整體示意圖如下所示:

          • 一個 Git 實例
          • 一個 ArgoCD 運行實例
          GitOps體系學(xué)習(xí)和理解 - 集成ArgoCD實踐
          • [1] 安裝和啟動 ArgoCD 服務(wù)
          # 安裝ArgoCD服務(wù)(官方)
          # 使用Kustomize來完成對部署清單文件的編排
          # 同時用sops來處理敏感信息在Git上的存儲問題
          $ kubectl create namespace argocd
          $ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

          # 暴露argocd的服務(wù)端口
          $ kubectl -n argocd port-forward pods/argocd-server-6db46c865b-qqnbl 8080:8080

          # 獲取登陸密碼
          $ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
          RDMpJRKRfsmkcgbP

          # 訪問ArgoCD服務(wù)
          http://localhost:8080
          admin/RDMpJRKRfsmkcgbP
          • [2] 介紹 sops 的使用
          # 這sops是一款開源的加密文件的編輯器(以GPG為例演示)
          # 支持YAML、JSON、ENV、INI和BINARY格式,且支持多種加密方式

          # 安裝
          $ brew install gnupg
          $ brew install sops

          # 生成一對key
          $ gpg --full-generate-key

          # sops和gpg的結(jié)合 - 創(chuàng)建sops配置文件
          # encrypted_regex: 加密規(guī)則;規(guī)定需要對哪些字段的值進行加密
          # gpg: 加密所需要的fingerprint值
          $ cat >> .sops.yaml << EOF
          creation_rules:
            - encrypted_regex: '^(username|title|)$'
              pgp: 'ED2A6947C44F9228B39E65B705A11CD02E66FF4B'
          EOF

          # sops和gpg的結(jié)合 - 創(chuàng)建敏感信息的文件
          $ cat >> secret.yaml << EOF
          apiVersion: v1
          data:
              username: eGlhb21hZ2UK=
              company: SmlIdShHaXRMYWIp=
          kind: Secret
          metadata:
              labels:
                  app: demo
              name: sops-demo
              namespace: jihu-gitlab
          type: Opaque
          EOF

          # sops和gpg的結(jié)合 - 敏感信息的文件加密
          $ sops -e secret.yaml
          • [3] 配置 ArgoCD 的服務(wù)
          GitOps體系學(xué)習(xí)和理解 - 配置ArgoCD的服務(wù)
          • [4] 使用 ArgoCD 的服務(wù)
          # 在ArgoCD的Project下面添加application來讓GitOps飛起來
          # 至此ArgoCD配置完成,且此ArgoCD實例已經(jīng)在監(jiān)聽配置的Git的倉庫
          # 如果該倉庫的配置文件發(fā)生了變化,則變化會被自動同步至Kubernetes集群側(cè)

          # 查看運行的應(yīng)用程序
          $ kubectl -n gitops-argocd get pods
          NAME                      READY   STATUS    RESTARTS   AGE
          deploy-766c4cbbfc-m8dz6   1/1     Running   0          53m

          # 查看此應(yīng)用程序的輸出 - 映射端口出來
          $ kubectl -n gitops-argocd port-forward pods/deploy-766c4cbbfc-m8dz6 9999:9999
          $ curl localhost:9999/jihu
          Hello JiHu GitLab,this is xiaomage,version is v6.1.0

          6. GitOps 的相關(guān)參考鏈接

          送人玫瑰,手有余香!

          • 極狐 GitLab 一體化 DevOps 平臺[1]
          • 極狐 GitLab for GitOps 實踐[2]
          • 什么是 GitOps[3]
          • 那么,DevOps 到底是什么?[4]
          • 為什么協(xié)作技術(shù)對 GitOps 至關(guān)重要[5]
          • 極狐 GitLab 和 ArgoCD 的集成實踐[6]
          • 極狐 GitLab 與 Git 基礎(chǔ)試聽課[7]
          • 漫談極狐 GitLab 如何助力 K8s 時代的 GitOps 實踐[8]

          引用鏈接

          [1]

          極狐 GitLab 一體化 DevOps 平臺: https://about.gitlab.cn/

          [2]

          極狐 GitLab for GitOps 實踐: https://about.gitlab.cn/solutions/gitops/

          [3]

          什么是 GitOps: https://xie.infoq.cn/article/2ead2c1adfcf8ae577e75e085

          [4]

          那么,DevOps 到底是什么?: https://www.redhat.com/zh/topics/devops

          [5]

          為什么協(xié)作技術(shù)對 GitOps 至關(guān)重要: https://xie.infoq.cn/article/9966f42d62b89408d7be65352

          [6]

          極狐 GitLab 和 ArgoCD 的集成實踐: https://xie.infoq.cn/article/1c54f8112c0b2e22aba87b469

          [7]

          極狐 GitLab 與 Git 基礎(chǔ)試聽課: https://www.bilibili.com/video/BV1bw411Z7JN

          [8]

          漫談極狐 GitLab 如何助力 K8s 時代的 GitOps 實踐: https://www.bilibili.com/video/BV1Gv411N7wc


          原文鏈接:https://www.escapelife.site/posts/117cbee7.html


          你可能還喜歡

          點擊下方圖片即可閱讀

          使用 eBPF 技術(shù)跟蹤 Netfilter 數(shù)據(jù)流

          云原生是一種信仰 ??

          關(guān)注公眾號

          后臺回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點擊 "閱讀原文" 獲取更好的閱讀體驗!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 100
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  翔田千里菊门无码 | 欧美美穴 | 久久Y成人电影 | 人人干人人艹 | 激情欧美在线 |