iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
DevOps

Kubernetes的30天養成計劃系列 第 19

[Day19] k8s上雲端之路:AWS之蓄勢待發:EOO

  • 分享至 

  • xImage
  •  

前言

今天我們要延續之前的內容,在上雲端之前,先介紹一下CCM,所謂的CCM是Cloud Controller Manager,在雲端服務上它是基於k8s集群上的一個管理器,EOO元件介紹AWS就好比QOO有種果汁真好喝,是一些在AWS的基本元件,如:EC2、EBS、ELB、EFS、EKS、ENI、ECR,接著是EKS和KOPS的比較,說明為何要用EKS。最後是一些使用AWS的前置準備,要先設置下。

CCM

雲控制器管理器(cloud controller manager,CCM)這個概念創建的初衷是為了讓特定的雲服務供應商代碼和k8s核心相互獨立演化。雲控制器管理器與其他主要組件(如k8s控制器管理器,API服務器和調度程序)一起運行。它也可以作為k8s的插件啟動,在這種情況下,它會運行在k8s之上。

在沒有這樣的設置下系統大致長這樣:

無CCM的架構

這張圖我們之前有看過,就是這篇:Master與Slave的不同,有提過相同的圖片,這是沒有上雲的情況

接著我們再看一張

有CCM的架構

這個是有上雲的情況,可以發現到:

  • 對於單節點那些部分的連接全部轉換到kube-apiserver上
  • 增加了cloud-controller manager,並協調kube-controller manager及連接kube-apiserver

CCM 打破了k8s控制器管理器(KCM)的一些功能,並將其作為一個單獨的進程運行。具體來說,它打破了KCM中依賴於雲的控制器。

CCM可以設置ClusterRole以達成授權,這部分與介紹RBAC時類似

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cloud-controller-manager
rules:
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - '*'
- apiGroups:
  - ""
  resources:
  - nodes/status
  verbs:
  - patch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - list
  - patch
  - update
  - watch
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - persistentvolumes
  verbs:
  - get
  - list
  - update
  - watch

這部分等到上雲的時候,我們會再測試。

AWS的元件

筆者後續的介紹都以AWS為主,如果要找其他的,請參考:雲端服務商

EC2、EBS、ELB、EFS、EKS、ENI、ECR

這些元件是我們在用EKS架設k8s群集的時候會用到了,大致介紹,設置的時候會再提。

EC2

Elastic Compute Cloud(EC2) ,是由亞馬遜公司提供的Web服務,是一個讓使用者可以租用雲端電腦運行所需應用的系統。EC2藉由提供Web服務的方式讓使用者可以彈性地運行自己的機器映像檔,使用者將可以在這個虛擬機器上運行任何自己想要的軟體或應用程式,也可以隨時建立、執行、終止自己的虛擬伺服器,使用多少時間算多少錢,也因此這個系統是「彈性」使用的。EC2讓使用者可以控制執行虛擬伺服器的主機地理位置,這可以改善讓延遲還有備援性例如,為了讓系統維護時間最短,用戶可以在每個時區都運行自己的虛擬伺服器。

EBS

Elastic Block Store (EBS) 是易於使用的高效能區塊儲存服務,專為與Elastic Compute Cloud (EC2) 搭配使用而設計,能以任何規模同時用於輸送量和交易密集型工作負載。各種工作負載 (如關聯式和非關聯式資料庫、企業應用程式、容器化的應用程式、大數據分析引擎、檔案系統和媒體工作流程) 廣泛部署在 EBS 上。

ELB

Elastic Load Balancing 可在多個目標 (例如 EC2 執行個體、容器、IP 地址和 Lambda 函數) 之間自動分配傳入的應用程式流量。它可以在單一可用區域或跨多個可用區域處理應用程式流量的各種負載。Elastic Load Balancing 提供三種負載平衡器,它們都具有下列特性:高可用性、自動擴展,以及讓應用程式具備容錯功能的強大安全防護。

EFS

Elastic File System (EFS) 提供簡單、可擴展、全受管的彈性 NFS 檔案儲存,可與 AWS 雲端服務和內部部署資源搭配使用。其建置是為了要隨需擴展至數 PB,且不會中斷應用程式,可隨著新增和移除檔案自動擴展和縮減,無須佈建和管理容量來適應增長。

EFS 提供兩種儲存類別:標準儲存類別和不常存取儲存類別 (EFS IA)。EFS IA 針對每天未存取的檔案提供成本優化的性價比。

EKS

Elastic Kubernetes Service (EKS) 可使用 AWS 上的 Kubernetes 輕鬆部署、管理和擴展容器化應用程式。

EKS可在多個 AWS 可用區域為執行 Kubernetes 管理基礎設施,以避免發生單一故障點問題。 EKS 已取得 Kubernetes 一致性授權,可讓使用合作夥伴和 Kubernetes 社群的現有工具和外掛程式。在任何標準 Kubernetes 環境執行的應用程式都能完全相容,而且可以輕鬆遷移到 EKS。

ENI

Elastic Network Interface(ENI),彈性網路界面是代表虛擬網路卡之 VPC 中的邏輯聯網元件。

可在帳戶中建立並設定網路界面,然後將它們連接到VPC 中的執行個體。

ECR

Elastic Container Registry (ECR) 是一個全受管的 Docker 容器登錄檔,可讓開發人員輕鬆存放、管理以及部署 Docker 容器映像。ECR 已與 Elastic Container Service (ECS) 整合,以簡化從開發到生產的工作流程。

EKS與Kops的比較

看完了上面的介紹,我們大致可以知道,EKS是在AWS上部署k8s可以用的工具,不過他只能用在AWS上,Kops同樣也是部署k8s的工具,不過它是開源的,可以適用於不同的雲環境,雖然它的泛用性比較高,但是相較於EKS有些不足的地方,Kops出來很久了,發展算是很完整,有相當程度的穩定性,也因此可以依賴。EKS是比較新的東西,大概出來1年多左右而已,我們來看張比較表

項目 EKS Kops
集群設置 較差 較好
集群管理 較好 較差
安全性 較好 較差

所以來個結論,Kops在設置上有更多可以操作的空間,但是也相對複雜,整體來說,EKS可能比較適合軟件開發人員,而Kops比較適合真正的系統管理者。

前置準備

要使用AWS服務,必須先在他們網站登錄一個新帳號,會需要用到Email認證。

好了之後,先登入到AWS

https://ithelp.ithome.com.tw/upload/images/20191004/20120468w1nlpfaUhO.png

新增AWS Account的User

進去之後,應該有如下類似畫面,選擇IAM的Service

https://ithelp.ithome.com.tw/upload/images/20191004/20120468rWYNd9pflT.png

選好後理應顯示如下

https://ithelp.ithome.com.tw/upload/images/20191004/20120468zeAHrykd55.png

點選Users後,選擇Add user

https://ithelp.ithome.com.tw/upload/images/20191004/20120468gIGL6i2Ygq.png

使用者名稱:eks,一些Access type勾一勾,接著下一步

https://ithelp.ithome.com.tw/upload/images/20191004/20120468u1I8qvdteV.png

因為我們這邊還沒有Group,每個使用者都要綁定一個Group,這類似於Linux系統本身的設計

我們先Create group

https://ithelp.ithome.com.tw/upload/images/20191004/20120468flZiXtGYJJ.png

Group name隨意取,筆者是用eksGroup,但要注意的是,一定要有下面的AdministratorAccess,好了就按Create group

https://ithelp.ithome.com.tw/upload/images/20191004/20120468CUCha1Poym.png

這個時候就可以看到在這個頁面有新的Group,名為eksGroup,接著我們按"Next: Tags"進到下一步

https://ithelp.ithome.com.tw/upload/images/20191004/201204686GxE1hm7tH.png

他這裡是問你說要不要上Tag,是否要把使用者加上標籤,可以不用,進到下一步"Next: Review"

https://ithelp.ithome.com.tw/upload/images/20191004/20120468Hjvajeytw8.png

這裡是檢視整個使用者的相關訊息,確認後就會按照這個設定新增使用者

https://ithelp.ithome.com.tw/upload/images/20191004/20120468VF8xH88bDq.png

最後我們檢查下

https://ithelp.ithome.com.tw/upload/images/20191004/20120468Ke0yaaUlEL.png

OK,使用者eks建立完成!

新增IAM Role

接著我們切換到Roles

https://ithelp.ithome.com.tw/upload/images/20191004/20120468rxBp14UoEi.png

在這邊我們要選擇新增EKS的Role,然後"Next: Permissions"

https://ithelp.ithome.com.tw/upload/images/20191004/20120468xNMGQWAYJu.png

接著Tag設定一下

https://ithelp.ithome.com.tw/upload/images/20191004/20120468VmQ7jyRvs7.png

接著檢視要新增的Role資訊

https://ithelp.ithome.com.tw/upload/images/20191004/201204681NWHTG3gdj.png

最後檢視一下新增Role的結果

https://ithelp.ithome.com.tw/upload/images/20191004/20120468UnsMqxyo1m.png

OK,IAM Role建立完成!

在EC2新增Key Value的Pair

回到Management Service的介面,選擇EC2

https://ithelp.ithome.com.tw/upload/images/20191004/20120468ntejMSvVJi.png

在EC2中新增Key Value的Pair

https://ithelp.ithome.com.tw/upload/images/20191004/201204681SHyPDbz1u.png

新增Key Value的Pair

https://ithelp.ithome.com.tw/upload/images/20191004/20120468ThXPREYFAV.png

檢視結果

https://ithelp.ithome.com.tw/upload/images/20191004/201204680e22p9pyUf.png

接著回到IAM,產生新的Access Key

https://ithelp.ithome.com.tw/upload/images/20191004/20120468RtHdydFkew.png

產生key後可以下載對應的csv檔,它那個是Access Key,另外還有一個pem檔是SSH Key,兩個都是私鑰,請妥善保管

https://ithelp.ithome.com.tw/upload/images/20191004/2012046845Tgex0cW9.png

小結

今天我們看過了CCM,這是Cloud Compute Manager,在雲端上對於集群是透過它去操作的。再來我們看到了一些要在AWS上架設k8s集群所需要用到的一些AWS元件,如:EC2、EBS、ELB、EFS、EKS、ENI、ECR等等,這些元件屆時上雲的時候會有詳細的設置解說,再來我們看到了在雲端上架設k8s集群的工具,像是EKS、Kops,我們做了一些比較,這是整理前人的經驗,後續我們在使用EKS的時候,相信會有更深的體會,最後我們針對AWS有做了一些前置準備,明天會開始使用EKS架設k8s群集,我們明天見囉~

參考資料

本文同步刊載於https://github.com/x1y2z3456/ironman

感謝您撥冗閱讀此文章,不喜勿噴,有任何問題建議歡迎下方留言:)

說個笑話,希望我能寫滿30天啊(笑


上一篇
[Day18] k8s之管理篇延伸:兩個H的小故事:Harbor與Helm
下一篇
[Day20] k8s實務篇(一):EKS架設k8s(上)
系列文
Kubernetes的30天養成計劃30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言