日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Java應用構建并部署K8s

通過 Flow 流水線自動化任務,將Java應用構建鏡像推送至鏡像倉庫,并部署到了ACK(Kubernetes版集群)中,完成研發流程的協同自動化。

背景信息

如果您的業務是以下場景,那么本文檔可以幫助您實現研發流程的協同自動化。

  • 使用Java進行開發。

  • 使用容器鏡像的制品形式進行交付。

  • 制品最終會運行在阿里云ACK或者其他K8s集群上。

用戶訴求

  • 一般來說,使用K8s部署場景如下:

    • 對源代碼進行一定的質量檢測,比如單元測試,代碼掃描。

    • 將源代碼構建成為可交付的制品,也就是容器鏡像。

    • 對制品進行測試環境驗證。

    • 使用完成驗證的制品進行線上部署。

    • 使用基礎設施即代碼的方式,在代碼庫中管理與應用相關的所有YAML文件。使用這種方式,將K8s的編排能力完全交給開發,比較靈活,也更加利于DevOps的實施。

  • 上述活動需要有不同角色的參與:開發、測試、運維。如何保證不同參與者可以使用統一的交付流程來進行協作,是云效Flow交付流水線要解決的主要問題。

云效解決方案

  • 通過云效持續交付流水線和阿里云K8s很好的結合在一起,為應用的持續交付提供了很好的基礎保障,如下圖:

    K31

  • 開發者提交代碼變更到代碼庫,云效在監聽著代碼庫的變動,一旦代碼發生變化,將自動觸發云效持續部署流水線一次構建任務的運行,包括代碼檢查、構建、測試部署、測試驗證和生產部署等過程。

  • 在構建完之后,生成Docker鏡像,并自動上傳至應用鏡像倉庫,在部署階段(測試環境的部署和生產環境的部署)時,獲取當前流水線實例構建出來的鏡像版本,通過K8s進行容器編排部署。而這一切,都是通過自動化的手段進行完成。

前提條件

  • 本文使用示例代碼源托管倉庫,根據需求可以選擇合適的項目代碼托管倉庫,源碼倉庫需要包含構建鏡像的指令文件Dockerfile和部署應用的資源文件YAML。

  • 根據需求選擇合適的鏡像倉庫,本示例使用容器鏡像服務ACR個人版實例,建議選擇ACR企業版(并發速度性能有保障),具體操作請參閱創建個人版實例

  • 請確保完成創建ACK集群,具體操作請參閱創建ACK托管集群。

云效操作實踐

一、創建流水線

  1. 在云效工作臺,單擊流水線進入云效流水線Flow。

  2. 在流水線 Flow控制臺頁面,單擊右上角新建流水線,進入流水線創建向導頁面。

  3. 根據需求,選擇相應模板,并單擊創建。Group@1x

二、配置代碼庫

  1. 在流水線任務頁面,選擇流程配置頁簽,單擊添加流水線源,選擇使用Flow提供的示例代碼源,并進行添加。Group@1x

  2. 示例代碼庫地址,請先查看相關的manifest文件,其中包含對象資源有Secret、Deployment、Service、Ingress對象資源是將這個服務暴露到公網上。

三、配置鏡像構建任務

  1. 您需要先在ACR(容器鏡像服務)上創建個人實例鏡像倉庫。

  2. 在構建任務節點區域,單擊任務節點,配置鏡像構建并推送至ACR(個人版)步驟。

  3. 在任務步驟配置項中,配置如下參數。

    選擇服務連接

    添加服務連接,需要授權Flow訪問容器鏡像服務。

    地域

    選擇鏡像倉庫實例所屬地域。

    倉庫

    選擇自定義的鏡像倉庫。

    標簽

    標簽填入${DATETIME}表示以流水線觸發時的時間戳作為鏡像的標簽。

    說明

    Docker鏡像Tag,支持固定參數例如1.0,或者動態參數例如${DATETIME}

    Dockerfile 路徑

    Dockerfile鏡像構建指令文件,填寫Dockerfile2,相對于代碼庫根目錄所在路徑。

    Group@1x (1)

  4. 配置好鏡像構建并推送至阿里云鏡像倉庫任務,下方任務輸出的變量是后續的任務中引用,其中有鏡像公網地址和鏡像VPC地址。

    說明

    推薦將鏡像倉庫和ACK集群放在同一個集群,然后在后續的部署任務中選擇VPC地址,以加速部署過程

四、配置部署任務

  1. 在部署任務節點區域,單擊“Kubernetes 發布”任務,進入任務配置面板。

  2. 集群連接:單擊新建連接,連接到自定義Kubernetes或者阿里云容器服務集群,具體操作請參見Kubernetes 服務連接,進行ACK集群授權,完成阿里云授權及集群選取。

  3. YAML 路徑:填寫YAML對象資源文件所屬目錄路徑,在源碼倉庫中的相對路徑。

  4. 變量:配置Kubectl 發布任務所需的變量參數值。

    IMAGE

    添加上游任務制品或鏡像下載地址類型的變量,填入IMAGE變量名,選擇鏡像公網地址作為變量值。在Flow運行時,將Deployment對象資源的占位符變量${IMAGE}替換成鏡像的地址。

    HOST

    添加自定義參數類型變量自定義變量名,設置變量值為自定義域名,用于Ingress對象資源中的域名配置。

    說明

    根據需求自定義域名,本文為演示使用本地hosts文件解析測試。

    ACR_SECRET

    添加自定義參數類型變量自定義變量名,設置變量值為ACR個人實例鏡像倉庫訪問憑證的Base64編碼字符串,用于Secret對象資源的.dockerconfigjson認證信息。

    說明

    以下是ACR個人實例鏡像倉庫地址、賬號和密碼信息,使用JSON格式進行base64編碼。

    # 鏡像倉庫訪問憑證用戶名和密碼,進行base64編碼。
    echo -n "username:password" | base64
    # 將用戶名和密碼的base64編碼字符串作為auth鍵的值。
    # 再將鏡像倉庫地址也進行base64編碼,輸出最后編碼字符串作為ACR_SECRET值。
    echo -n '{"auths":{"xxxxx.com":{"auth":"xxxxx"}}}' | base64

    Group@1x

示例代碼庫中的 app.yaml 文件內容如下。

# Secret
apiVersion: v1
kind: Secret
metadata:
  name: acr-registry-private
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ${ACR_SECRET}

---

# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: spring-boot-sample
  name: spring-boot-sample
spec:
  replicas: 2
  selector:
    matchLabels:
      run: spring-boot-sample
  template:
    metadata:
      labels:
        run: spring-boot-sample
    spec:
      imagePullSecrets:
      - name: acr-registry-private
      containers:
      - image: ${IMAGE}
        name: app

---

# Service
apiVersion: v1
kind: Service
metadata:
  name: spring-boot-service
  labels:
    test: test
    labele2: label
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
    - name: https
      port: 443
      protocol: TCP
      targetPort: 443
  selector:
    run: spring-boot-sample
  sessionAffinity: None
  type: ClusterIP

---

# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-boot-route
spec:
  rules:
  - host: ${HOST} # 訪問此內容的域名
    http:
      paths:
      - backend:
          service:
            name: spring-boot-service
            port:
              number: 8080 # 訪問的端口
        path: / # 匹配規則
        pathType: Prefix # 匹配類型,這里為前綴匹配

五、添加人工卡點

  • 以下演示了如何添加一個進入測試環境的卡點,添加生產環境的卡點也是類似的,這里不再贅述,可以類似的進行配置。

  • 為了保證經過審批的制品才能進入部署環境,需要添加一個人工卡點,這里假設這個環境是測試環境,需要有測試管理員來審批才能進入。

  1. 在云效控制臺頁面,選擇進入“企業管理后臺”,選擇導航菜單權限管理 > 企業權限,單擊右上方添加角色,添加角色“測試管理員”。Group@1x

  2. 選擇導航菜單成員管理 > 成員,并將企業用戶“張三”的角色設置為“測試管理員”角色。Group@1x

  3. 回到流水線繼續進行配置,在部署節點區域,任務“Kubernetes 發布”前面添加一個任務,搜索“人工卡點”,參考如下配置。Group@1x

  • 以上演示了如何添加一個進入測試環境的卡點,添加生產環境的卡點也是類似的,這里不再贅述,可以進行類似的配置。

六、運行流水線

  1. 人工卡點任務配置完畢,單擊“保存并運行”觸發流水線。

  2. 掃描、單測及構建上傳的任務自動完成,并停在了卡點上,普通人員無權限通過。Group@1x

  3. 在右上角選擇圖標image,單擊設置流水線信息,選擇菜單成員管理,單擊新增成員,添加張三用戶,開通訪問目標流水線的權限。切換到張三的賬戶之后,可以操作通過或者拒絕。Group@1x

  4. 如果張三用戶驗證通過后,流水線會進入Kubectl 發布的任務。Group@1x (1)

  5. 在Ingress對象資源中配置的域名,因此可以通過自定義的域名訪問服務。

    說明

    關于使用的自定義域名是本地測試域名,需要在本地環境配置hosts解析,測試訪問服務http://www.testflow.com/

    image

七、回滾

  • 如果發布完成之后發現線上服務有問題,則需要快速回滾。云效Flow提供了通過歷史版本直接進行回滾的能力。

  • 在流水線運行頁面點擊“部署歷史”,然后選擇相應的部署任務,便可以看到該部署任務所有的成功部署記錄Group@1x

  • 單擊版本#16,進行“回滾”,即可回滾到#15版本。image

八、通知

為了更好的進行協作,Flow提供了通知能力在流水線不同的生命周期節點上進行通知。一般來講開發團隊會關心部署的成功和失敗,那么可以將該事件推送到團隊的釘釘群中,配置方式如下,單擊“添加插件”,選擇釘釘機器人通知,填入webhook地址,運行時機選擇“失敗”、“成功”。

k81

再次運行之后,就會收到相應的通知:

k82

總結

通過以上的操作流程,就可以建立起來一個協同多角色的流水線。接下來你可能想再了解其中的一些細節:

  1. 定制化代碼掃描規則定制化掃描及單元測試通過規則

  2. 如何添加非ACK的K8s集群。

  3. 如果不希望管理K8s YAML文件,只需要更新某個pod的某個容器的鏡像,則可以把部署環境改成鏡像升級的任務。