亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣在K8S中使用Argo CD做持續部署

發布時間:2021-12-16 09:56:03 來源:億速云 閱讀:124 作者:柒染 欄目:云計算

這篇文章給大家介紹怎樣在K8S中使用Argo CD做持續部署,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

什么是ArgoCD

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

Argo CD是一個基于Kubernetes的聲明式的GitOps工具。

在說Argo CD之前,我們先來了解一下什么是GitOps。

 

什么是GitOps

GitOps是以Git為基礎,使用CI/CD來更新運行在云原生環境的應用,它秉承了DevOps的核心理念--“構建它并交付它(you built it you ship it)”。

概念說起來有點虛,我畫了張圖,看了你就明白了。

怎樣在K8S中使用Argo CD做持續部署  

  • 當開發人員將開發完成的代碼推送到git倉庫會觸發CI制作鏡像并推送到鏡像倉庫
  • CI處理完成后,可以手動或者自動修改應用配置,再將其推送到git倉庫
  • GitOps會同時對比目標狀態和當前狀態,如果兩者不一致會觸發CD將新的配置部署到集群中

其中,目標狀態是Git中的狀態,現有狀態是集群的里的應用狀態。

不用GitOps可以么?

當然可以,我們可以使用kubectl、helm等工具直接發布配置,但這會存在一個很嚴重的安全問題,那就是密鑰共享。

為了讓CI系統能夠自動的部署應用,我們需要將集群的訪問密鑰共享給它,這會帶來潛在的安全問題。

 

ArgoCD

Argo CD遵循GitOps模式,使用Git存儲庫存儲所需應用程序的配置。

Kubernetes清單可以通過以下幾種方式指定:

  • kustomize應用程序
  • helm圖表
  • ksonnet應用程序
  • jsonnet文件
  • 基于YAML/json配置
  • 配置管理插件配置的任何自定義配置管理工具

Argo CD實現為kubernetes控制器,它持續監視運行中的應用程序,并將當前的活動狀態與期望的目標狀態進行比較(如Git repo中指定的那樣)。如果已部署的應用程序的活動狀態偏離了目標狀態,則認為是OutOfSync。Argo CD報告和可視化這些差異,同時提供了方法,可以自動或手動將活動狀態同步回所需的目標狀態。在Git repo中對所需目標狀態所做的任何修改都可以自動應用并反映到指定的目標環境中。

Argo CD就處在如下位置:

怎樣在K8S中使用Argo CD做持續部署  

它的優勢總結如下:

  • 應用定義、配置和環境信息是聲明式的,并且可以進行版本控制;
  • 應用部署和生命周期管理是全自動化的,是可審計的,清晰易懂;
  • Argo CD是一個獨立的部署工具,支持對多個環境、多個Kubernetes集群上的應用進行統一部署和管理
 

實踐

前提:有一個可用的Kubernetes集群。

實驗環境:

  • kubernetes:1.17.2
  • argo cd:latest
 

安裝Argo CD

安裝很簡單,不過在實際使用中需要對數據進行持久化。

我這里直接使用官方文檔的安裝命令:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
 

執行成功后會在argocd的namespace下創建如下資源。

# kubectl get all -n argocd 
NAME                                      READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0       1/1     Running   0          16h
pod/argocd-dex-server-74d9998fdb-mvpmh    1/1     Running   0          16h
pod/argocd-redis-59dbdbb8f9-msxrp         1/1     Running   0          16h
pod/argocd-repo-server-599bdc7cf5-ccv8l   1/1     Running   0          16h
pod/argocd-server-576b4c7ff4-cnp9d        1/1     Running   0          16h

NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-dex-server       ClusterIP   10.105.217.139   <none>        5556/TCP,5557/TCP,5558/TCP   16h
service/argocd-metrics          ClusterIP   10.97.116.36     <none>        8082/TCP                     16h
service/argocd-redis            ClusterIP   10.105.63.34     <none>        6379/TCP                     16h
service/argocd-repo-server      ClusterIP   10.111.153.131   <none>        8081/TCP,8084/TCP            16h
service/argocd-server           ClusterIP   10.105.229.250   <none>        80/TCP,443/TCP               16h
service/argocd-server-metrics   ClusterIP   10.104.8.45      <none>        8083/TCP                     16h

NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/argocd-dex-server    1/1     1            1           16h
deployment.apps/argocd-redis         1/1     1            1           16h
deployment.apps/argocd-repo-server   1/1     1            1           16h
deployment.apps/argocd-server        1/1     1            1           16h

NAME                                            DESIRED   CURRENT   READY   AGE
replicaset.apps/argocd-dex-server-74d9998fdb    1         1         1       16h
replicaset.apps/argocd-redis-59dbdbb8f9         1         1         1       16h
replicaset.apps/argocd-repo-server-599bdc7cf5   1         1         1       16h
replicaset.apps/argocd-server-576b4c7ff4        1         1         1       16h

NAME                                             READY   AGE
statefulset.apps/argocd-application-controller   1/1     16h
 

訪問Argo server的方式有兩種:

  • 通過web ui
  • 使用argocd 客戶端工具

我這里直接使用web ui進行管理。

通過kubectl edit -n argocd svc argocd-server將service的type類型改為NodePort。改完后通過以下命令查看端口:

# kubectl get svc -n argocd 
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
argocd-dex-server       ClusterIP   10.105.217.139   <none>        5556/TCP,5557/TCP,5558/TCP   17h
argocd-metrics          ClusterIP   10.97.116.36     <none>        8082/TCP                     17h
argocd-redis            ClusterIP   10.105.63.34     <none>        6379/TCP                     17h
argocd-repo-server      ClusterIP   10.111.153.131   <none>        8081/TCP,8084/TCP            17h
argocd-server           NodePort    10.105.229.250   <none>        80:32109/TCP,443:30149/TCP   17h
argocd-server-metrics   ClusterIP   10.104.8.45      <none>        8083/TCP                     17h
 

然后通過http://IP:32109訪問頁面,如下:

怎樣在K8S中使用Argo CD做持續部署  

登錄賬號為admin,密碼通過以下命令獲取。

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
 

然后進入如下界面。

怎樣在K8S中使用Argo CD做持續部署  

 

創建應用

這里僅僅是為了測試argo,所以并沒有做ci部分。

我在gitlab上準備了一個倉庫,倉庫里的文件很簡單,如下:

怎樣在K8S中使用Argo CD做持續部署  

其中manifests下就是一個deployment文件,內容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: devops-argocd-test
  name: devops-argocd-test
  namespace: default
spec:
  minReadySeconds: 60
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: devops-argocd-test
  template:
    metadata:
      labels:
        app: devops-argocd-test
    spec:
      containers:
        - name: devops-argocd-test
          image: registry.cn-hangzhou.aliyuncs.com/rookieops/argocd-test-app:v1
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
              name: tcp-8080
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: devops-argocd-test
  name: devops-argocd-test
  namespace: default
spec:
  ports:
    - name: tcp-8080
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: devops-argocd-test
  sessionAffinity: None
  type: NodePort
 

現在我們在Argo里創建應用,步驟如下:

(1)添加倉庫地址,Settings → Repositories,點擊 Connect Repo using HTTPS 按鈕:

怎樣在K8S中使用Argo CD做持續部署  

填入以下信息。

怎樣在K8S中使用Argo CD做持續部署  

驗證通過后顯示如下:

怎樣在K8S中使用Argo CD做持續部署  

(2)創建應用

怎樣在K8S中使用Argo CD做持續部署  

怎樣在K8S中使用Argo CD做持續部署  

創建完成后如下所示:

怎樣在K8S中使用Argo CD做持續部署  

由于我設置的是手動SYNC,所以需要點一下下面的SYNC進行同步。

然后可以看到狀態都變成正常。

怎樣在K8S中使用Argo CD做持續部署  

這時候我們在集群里可以看到創建了v1版本的應用了。

# kubectl get pod | grep devops-argocd-test
devops-argocd-test-7f5fdd9fcf-xbzmp      1/1     Running   0          118s
# kubectl get svc | grep devops-argocd-test
devops-argocd-test   NodePort    10.97.159.140   <none>        8080:31980/TCP   2m6s
 

這時候訪問應用,如下:

怎樣在K8S中使用Argo CD做持續部署  

 

配置變更

接下來我手動進行配置變更,修改manifests下的deploymeny.yaml文件中的鏡像為v2版本,如下:

怎樣在K8S中使用Argo CD做持續部署  

然后提交到倉庫。

這是到ArgoCD中可以看到狀態變成了OutOfSync

怎樣在K8S中使用Argo CD做持續部署  

這時候再手動sync一下,直到狀態都變正常。再訪問上面的應用。

怎樣在K8S中使用Argo CD做持續部署  

怎樣在K8S中使用Argo CD做持續部署  

可以看到應用已經更新部署了。

我們可以看到整個應用的關系狀態,如下:

怎樣在K8S中使用Argo CD做持續部署  

還可以看到部署歷史。

怎樣在K8S中使用Argo CD做持續部署  

也可以通過這個界面進行回滾。

怎樣在K8S中使用Argo CD做持續部署  

關于怎樣在K8S中使用Argo CD做持續部署就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼图壁县| 雷州市| 沾益县| 龙川县| 闽清县| 灵寿县| 斗六市| 洛扎县| 雷波县| 东源县| 灯塔市| 屯门区| 乐至县| 田阳县| 年辖:市辖区| 水富县| 大洼县| 武山县| 信宜市| 莫力| 肥西县| 三原县| 库伦旗| 吉安市| 香格里拉县| 宣武区| 尉氏县| 镇平县| 宝应县| 德庆县| 金川县| 盖州市| 辽宁省| 舟山市| 榆社县| 涞水县| 阿勒泰市| 舒城县| 墨脱县| 温州市| 安康市|