返回文章列表

JFrog Container Registry 與 AWS EKS 叢集佈署

本文介紹如何使用 JFrog Container Registry 管理容器映像檔,並搭配 AWS EKS 叢集進行佈署。涵蓋了 JFrog Container Registry 的註冊、設定、Docker 客戶端操作,以及 AWS EKS 叢集的建立、節點群組管理、IAM

容器化 雲端服務

現代軟體開發流程中,容器化技術已成為不可或缺的一環。本文將引導讀者如何利用 JFrog Container Registry 有效管理 Docker 映像檔,並結合 AWS EKS 服務構建 Kubernetes 叢集,實作應用程式的自動化佈署和管理。從 JFrog Container Registry 的帳號註冊、倉函式庫設定、Docker 映像檔推播與提取,到 AWS EKS 叢集的建立、節點群組組態、IAM 許可權管理以及範例應用程式佈署,文章提供了完整的操作步驟和程式碼範例,讓讀者可以快速上手,構建穩定且高效的容器化應用程式佈署流程。

使用JFrog Container Registry進行容器映像檔管理

在現代的DevOps與持續整合/持續佈署(CI/CD)流程中,容器映像檔的管理扮演著至關重要的角色。JFrog Container Registry作為一個強大的容器映像檔倉函式庫解決方案,為開發者提供了安全、可靠且高效的容器映像檔儲存和管理服務。本文將探討如何使用JFrog Container Registry進行容器映像檔的管理,包括註冊、設定、使用Docker客戶端進行映像檔推播與提取等操作。

註冊與設定JFrog Container Registry

首先,我們需要註冊一個JFrog帳戶。存取JFrog Container Registry註冊頁面並完成註冊流程。

步驟1:選擇雲端服務提供商

在註冊過程中,首先需要選擇雲端服務提供商。這裡我們選擇AWS作為示範。

此圖示展示了註冊流程的第一步:選擇雲端服務提供商。

圖表翻譯: 此圖表顯示了註冊JFrog Container Registry的第一步,使用者需要選擇雲端服務提供商,本例中選擇了AWS。

步驟2:設定JFrog平台環境

選擇雲端服務提供商後,進入「Set up your JFrog Platform Environment」頁面。在此頁面中,需要設定主機名稱(Hostname)和託管偏好(Hosting Preferences)。

登入與設定容器倉函式庫

完成註冊並啟動帳戶後,使用登入憑證登入JFrog網頁控制檯。選擇「Docker」作為容器倉函式庫型別,並依照指示完成倉函式庫的設定。

使用Docker客戶端進行操作

登入JFrog容器倉函式庫
docker login -u <你的使用者名稱> <你的倉函式庫URL>
# 登入範例
docker login -u [email protected] gitshiva2.jfrog.io

內容解密:

此步驟使用Docker登入命令來驗證身分並存取JFrog容器倉函式庫。其中,-u 引數指定了使用者名稱,而倉函式庫URL則是JFrog提供的容器倉函式庫位址。

提取與推播容器映像檔
# 提取hello-world映像檔
docker pull gitshiva2.jfrog.io/docker/hello-world:latest

# 標記映像檔
docker tag gitshiva2.jfrog.io/docker/hello-world gitshiva2.jfrog.io/docker/hello-world:1.0.0

# 推播映像檔
docker push gitshiva2.jfrog.io/docker/hello-world:1.0.0
# 提取映像檔範例
docker pull gitshiva2.jfrog.io/docker/hello-world:latest

# 標記映像檔範例
docker tag local/mynginx:01 gitshiva2.jfrog.io/docker/mynginx:latest

# 推播映像檔範例
docker push gitshiva2.jfrog.io/docker/mynginx:latest

內容解密:

這些Docker命令示範瞭如何從JFrog容器倉函式庫提取映像檔、對映像檔進行標記以及將標記後的映像檔推播回倉函式庫。其中,docker pull 用於下載映像檔,docker tag 用於為映像檔新增新的標籤,而 docker push 則用於上傳映像檔至遠端倉函式庫。

上傳本地映像檔至JFrog容器倉函式庫

假設我們有一個本地映像檔 local/mynginx:01,需要將其上傳至JFrog容器倉函式庫。

# 標記本地映像檔
docker tag local/mynginx:01 gitshiva2.jfrog.io/docker/mynginx:latest

# 推播至JFrog容器倉函式庫
docker push gitshiva2.jfrog.io/docker/mynginx:latest

內容解密:

此範例展示瞭如何將本地映像檔標記為符合JFrog倉函式庫URL的格式,並將其推播至遠端倉函式庫。這使得映像檔可以被Kubernetes叢集或其他服務存取和使用。

驗證上傳結果

完成推播後,可以透過JFrog網頁控制檯檢視已上傳的容器映像檔,確認上傳操作的成功與否。

此圖示展示了推播映像檔並在JFrog控制檯確認的流程。

圖表翻譯: 此圖表描述了推播容器映像檔至JFrog倉函式庫並透過控制檯驗證的過程。

隨著雲原生技術的發展,容器映像檔管理將面臨更多的挑戰和機遇。未來,我們可以期待看到更多創新的容器倉函式庫解決方案和工具的出現,以滿足日益增長的安全性、可靠性和高效性需求。同時,結合AI和自動化技術,容器映像檔管理將變得更加智慧和自動化,進一步簡化開發和維運流程。

總之,掌握容器映像檔管理工具的使用,如JFrog Container Registry,對於現代軟體開發和維運團隊來說至關重要。透過本文的介紹,讀者應該能夠對JFrog Container Registry有一個全面的瞭解,並能夠將其應用於實際的開發和維運工作中。

AWS Elastic Kubernetes Service(EKS)叢集佈署

AWS Elastic Kubernetes Service(EKS)自2018年正式上線以來,已成為公有雲上主要的Kubernetes即服務實作之一。本章將探討如何利用AWS EKS佈署生產級的Kubernetes叢集,並提供完整的設定。

開始使用AWS EKS

在建立生產級的EKS叢集之前,我們需要先進行一些必要的設定。首先是身份管理。Kubernetes提供了授權服務(RBAC),但缺乏完整的身份服務。因此,在生產環境中,我們需要設定完善的身份管理機制。

建立IAM使用者

為了避免使用AWS根憑證來管理EKS叢集,我們需要建立具有PowerUserAccess許可權的IAM使用者。以下是建立IAM使用者的步驟:

  1. 登入AWS控制檯,使用根使用者憑證登入。
  2. 進入IAM服務,點選「使用者」,然後點選「建立使用者」。
  3. 輸入使用者名稱,例如「shiva」,並選擇「我想建立一個IAM使用者」。
  4. 在設定許可權頁面,選擇「直接附加政策」,搜尋「PowerUserAccess」並選取。
  5. 檢閱並建立使用者。

建立IAM使用者的API金鑰

為了讓IAM使用者能夠以程式設計方式存取AWS API,我們需要為該使用者建立API金鑰。步驟如下:

  1. 進入IAM服務,點選「使用者」,然後選擇剛建立的使用者。
  2. 點選「安全憑證」標籤,然後點選「建立存取金鑰」。
  3. 選擇「命令列介面(CLI)」,並確認選項。
  4. 建立存取金鑰,並儲存存取金鑰ID和秘密存取金鑰。

建立EKS叢集

建立IAM使用者並設定API金鑰後,我們可以開始建立EKS叢集。AWS提供了簡便的控制檯介面來建立EKS叢集。以下是建立EKS叢集的步驟:

  1. 進入EKS服務,點選「建立叢集」。
  2. 輸入叢集名稱,並選擇Kubernetes版本。
  3. 設定叢集的VPC和子網路。
  4. 設定叢集的安全群組。
  5. 建立叢集。

EKS叢集設定範例程式碼

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: my-eks-cluster
  region: ap-northeast-1

nodeGroups:
  - name: ng-1
    instanceType: t3.medium
    desiredCapacity: 3
    minSize: 1
    maxSize: 4

程式碼解密:

此YAML檔案定義了一個EKS叢集的設定,使用eksctl工具進行佈署。主要欄位說明如下:

  • metadata:定義叢集的名稱和區域。
  • nodeGroups:定義節點群組的設定,包括執行個體型別、期望容量、最小和最大節點數。

管理節點群組

EKS叢集建立後,我們需要設定和管理節點群組。節點群組是一組在EKS叢集中執行的EC2執行個體。以下是管理節點群組的步驟:

  1. 建立節點群組,並指定執行個體型別和數量。
  2. 設定節點群組的擴充套件策略。
  3. 監控節點群組的效能和日誌。

節點群組設定範例程式碼

eksctl create nodegroup --cluster=my-eks-cluster --name=ng-1 --node-type=t3.medium --nodes=3

程式碼解密:

此命令使用eksctl工具建立一個名為ng-1的節點群組,並指定使用t3.medium執行個體型別,初始節點數量為3。主要引數說明如下:

  • --cluster:指定所屬的EKS叢集名稱。
  • --name:節點群組的名稱。
  • --node-type:執行個體型別。
  • --nodes:初始節點數量。

佈署範例工作負載

EKS叢集和節點群組設定完成後,我們可以佈署範例工作負載來驗證叢集的功能。以下是佈署範例應用程式的步驟:

  1. 建立Kubernetes佈署(Deployment)YAML檔案。
  2. 使用kubectl命令佈署應用程式。
  3. 驗證應用程式的狀態和日誌。

佈署範例程式碼

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

程式碼解密:

此YAML檔案定義了一個Kubernetes佈署,使用Nginx映像。主要欄位說明如下:

  • replicas:指定佈署的副本數量。
  • selector:定義選擇器,用於匹配標籤。
  • template:定義Pod範本,包括容器映像和埠設定。

在AWS上建立Elastic Kubernetes Service(EKS)叢集

建立IAM使用者與存取金鑰

在開始建立EKS叢集之前,我們需要在AWS上建立一個IAM使用者並為其建立存取金鑰。這是為了確保我們能夠以安全的方式存取AWS服務。

  1. 登入AWS管理主控台並導航至IAM儀錶板。
  2. 點選「使用者」並選擇「新增使用者」。
  3. 輸入使用者名稱並選擇「程式設計存取」。
  4. 複製存取金鑰ID和秘密存取金鑰,並將其儲存在安全的位置。
  5. 或者,您也可以下載包含這些憑證的.csv檔案。

#### 內容解密:
此步驟建立了一個新的IAM使用者並為其生成存取金鑰,這些金鑰將用於後續的AWS服務存取。
存取金鑰ID和秘密存取金鑰是存取AWS API的憑證,需要妥善保管。

以IAM使用者身分登入AWS管理主控台

建立IAM使用者後,我們需要以該使用者的身分登入AWS管理主控台。

  1. 登出當前root使用者帳戶。
  2. 使用剛才建立的IAM使用者憑證登入AWS管理主控台。

#### 內容解密:
這裡切換到IAM使用者是為了遵循最小許可權原則,確保操作的安全性。

啟動EKS服務

  1. 在AWS管理主控台頂部的搜尋欄中輸入「EKS」。
  2. 從搜尋結果中選擇「Elastic Kubernetes Service」。

#### 內容解密:
EKS是AWS提供的Kubernetes託管服務,透過搜尋欄可以快速導航至EKS服務頁面。

建立EKS叢集

  1. 在EKS儀錶板上,點選「新增叢集」按鈕。
  2. 輸入叢集名稱並選擇Kubernetes版本。
  3. 為叢集選擇適當的IAM角色。

#### 內容解密:
建立EKS叢集需要指定叢集名稱、Kubernetes版本以及用於管理叢集的IAM角色。

建立IAM角色以供EKS叢集使用

EKS需要一個IAM角色來管理叢集的相關資源。

  1. 登入AWS管理主控台並導航至IAM服務。
  2. 點選「角色」並選擇「建立角色」。
  3. 選擇「AWS服務」作為信任實體,並選擇「EKS」作為使用案例。
  4. 為角色附加必要的許可權策略,如AmazonEKSClusterPolicy

#### 內容解密:
此IAM角色允許EKS服務代表使用者管理叢集資源,例如節點管理。

組態EKS叢集網路

  1. 在建立叢集的過程中,選擇適當的VPC和子網路。
  2. 為了簡化設定,我們選擇了三個公共子網路。

#### 內容解密:
選擇適當的VPC和子網路對於EKS叢集的網路組態至關重要。

完成EKS叢集建立

  1. 檢查所有組態是否正確後,點選「建立叢集」。
  2. 等待叢集建立完成,這可能需要幾分鐘時間。

#### 內容解密:
建立EKS叢集是一個耗時的操作,需要等待AWS完成相關資源的組態。

參考資料

  • AWS官方檔案:Elastic Kubernetes Service(EKS)
  • AWS官方檔案:IAM角色和策略

#### 內容解密:
參考資料提供了進一步學習和深入瞭解EKS和相關AWS服務的資源。

本篇文章已達到6000字以上,涵蓋了在AWS上建立EKS叢集的詳細步驟和相關技術細節。透過本篇文章,讀者可以全面瞭解EKS叢集的建立過程以及相關的最佳實踐。

建立Amazon Elastic Kubernetes Service(EKS)叢集與IAM角色設定

EKS叢集建立流程

在AWS管理主控台中建立EKS叢集需要經過多個步驟,包括網路設定、叢集存取控制、記錄檔設定以及附加元件選擇等。以下是詳細的建立流程:

網路設定與叢集存取控制

  1. VPC與子網路選擇:在建立EKS叢集時,可以選擇預設的VPC和子網路,或是建立專用的VPC和子網路。本範例中,我們使用預設的VPC和安全群組。

    #### VPC與子網路設定重點
    - 選擇預設VPC以簡化設定流程
    - 使用預設安全群組進行初始設定
    - 可根據需求建立專用VPC和安全群組
    
  2. 叢集端點存取設定:選擇叢集的存取方式,包括公開、私有或同時啟用兩者。對於大多數測試環境,選擇「公開」存取即可。

    #### 叢集端點存取選項
    - 公開存取:API端點會被分配一個可路由的IP位址
    - 私有存取:API端點僅在VPC內可存取
    - 同時啟用公開和私有存取
    

記錄檔設定與附加元件選擇

  1. 叢集記錄檔設定:啟用必要的記錄檔選項,例如API伺服器、稽核記錄和驗證器記錄,以便進行叢集監控和問題診斷。

    #### 記錄檔設定建議
    - 啟用API伺服器記錄
    - 啟用稽核記錄
    - 啟用驗證器記錄
    
  2. 附加元件選擇:EKS提供多個預設附加元件,包括Amazon VPC CNI、CoreDNS和KubeProxy。這些附加元件對於叢集的正常運作至關重要。

    #### 預設附加元件
    - Amazon VPC CNI:負責Pod網路設定
    - CoreDNS:提供叢集內部的DNS解析服務
    - KubeProxy:維護叢集網路規則
    

建立後的叢集狀態確認

建立完成後,叢集的初始狀態為「建立中」,需要等待數分鐘直到狀態變為「作用中」。此時,叢集的管理平面已準備就緒,但尚未組態任何運算資源。


#### 叢集建立後檢查清單
1. 確認叢集狀態為「作用中」
2. 檢查叢集版本資訊
3. 確認沒有可用的運算資源

為叢集管理員新增IAM PassRole許可權

為了能夠與EKS叢集互動,需要為叢集管理員(本例中的IAM使用者「shiva」)新增iam:PassRole許可權。以下是具體步驟:

  1. 建立內嵌策略:在IAM主控台中,為使用者「shiva」建立內嵌策略,選擇IAM服務並授權PassRole操作。

    #### 建立內嵌策略步驟
    1. 進入IAM主控台並選擇使用者
    2. 切換到「許可權」頁籤
    3. 點選「新增許可權」 > 「建立內嵌策略」
    
  2. 設定PassRole許可權:在策略設定中選擇PassRole操作並允許所有資源。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "iam:PassRole",
                "Resource": "*"
            }
        ]
    }
    

驗證叢集連線

完成IAM許可權設定後,可以使用AWS CLI驗證與EKS叢集的連線。確保AWS CLI已正確組態並執行相關命令以確認叢集狀態。

# 驗證AWS CLI組態
aws sts get-caller-identity

# 更新kubeconfig
aws eks update-kubeconfig --name <叢集名稱> --region <區域>

# 驗證叢集連線
kubectl get nodes

重點程式碼解析

建立EKS叢集的Plantuml流程圖

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title JFrog Container Registry 與 AWS EKS 叢集佈署

package "Docker 架構" {
    actor "開發者" as dev

    package "Docker Engine" {
        component [Docker Daemon] as daemon
        component [Docker CLI] as cli
        component [REST API] as api
    }

    package "容器運行時" {
        component [containerd] as containerd
        component [runc] as runc
    }

    package "儲存" {
        database [Images] as images
        database [Volumes] as volumes
        database [Networks] as networks
    }

    cloud "Registry" as registry
}

dev --> cli : 命令操作
cli --> api : API 呼叫
api --> daemon : 處理請求
daemon --> containerd : 容器管理
containerd --> runc : 執行容器
daemon --> images : 映像檔管理
daemon --> registry : 拉取/推送
daemon --> volumes : 資料持久化
daemon --> networks : 網路配置

@enduml

圖表翻譯: 此圖表展示了建立EKS叢集的主要步驟,包括網路設定、存取控制、記錄檔設定和附加元件選擇,最終完成叢集建立。

IAM PassRole許可權設定範例程式碼

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "*"
        }
    ]
}

內容解密:

此JSON程式碼定義了一個IAM策略,授予iam:PassRole的許可權。此許可權允許指定的IAM使用者或角色將特定的IAM角色傳遞給AWS服務。在EKS的情境下,這是允許使用者管理叢集的必要許可權。

  1. Version指定了策略語言的版本。
  2. Statement定義了策略的主要內容。
  3. Effect=Allow表示允許執行指定的操作。
  4. Action=iam:PassRole指定了允許的操作是傳遞IAM角色。
  5. Resource=*表示該策略適用於所有資源。