iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
DevOps

運用皮毛技術與 AWS 平台、打造雲端蘿蔔服務三十天系列 第 25

【Day 25】建立 EKS on Outpost 的步驟(下)

tags: 鐵人賽 AWS Outposts EKS Kubernetes

前情提要

  • 昨天把 EKS control plane 建好了
  • 今天要做的事情大概有
    1. 綁定 kubectl 指令操作 EKS
    2. 透過 CloudFormation 建立 worker node 的 node group
      • node group 指的是一組可以經過 auto scaling group 調度的 EC2 資源
    3. 透過 aws-auth.yaml 調整 ConfigMap
    4. 在 EKS 上部署

綁定 EKS 和 維運終端

新建立的叢集所配置的權限

  • 昨天有強調用 IAM User 去建立 EKS、不要用 Root Account
  • 因為建立這個 EKS 的叢集的 AWS User 或是 Role 會拿走 EKS cluster 的管理者身份、辣個 system:masters
  • 避免讓那個快要離職的人來建立 EKS cluster
  • 我們稍後會說明如何讓多個 IAM User 或 Role 可以同時成為叢集管理者

This IAM entity does not appear in the ConfigMap, or any other visible configuration, so make sure to keep track of which IAM entity originally created the cluster.

1. 接上指令

  • 叢集建立者,使用下列指令,取得 kube cluster 的指令維運管道
  • 先來看看我的叢集名稱
  • 指令
    • 以下命令呼叫前提是,你已經裝好 aws cli 和 kubectl
    • 如果還沒裝,可以回到前兩天的文章,那邊有連結
    aws eks --region ap-northeast-1 update-kubeconfig --name ironman-cluster --profile theprofilename
    
    • --region 後面加上 代表東京的那串
    • --profile 會去指定,呼叫 aws cli 命令時,要使用 ~/.aws/credentials 中的哪一組 AWS API Key/Secret 去存取
    • update-kubeconfig 會去對 ~/.kube/config 做配置檔的寫入,這個檔案會紀錄 kubectl 所能操作的叢集資訊、預設的叢集資訊
  • 確定指令可以送到 EKS 叢集

2. 以 CloudFormation 建立 worker node

  • 細節你可以參考文件:
  • 下載 yaml
    curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm.yaml
    
  • 上傳到 CloudFormation 上
  • 以及
  • 在這個別人都預先挖好洞的填空題裡面,填上資料即可
    • 圖一
    • 圖二
  • 剩下的視你的需求調整;快轉到建立按鈕按下去之後...
  • 建置完成後,你可以在 EC2 的 console 中看到這個(群)機器;但是這群機器還沒有辦法被 cluster 所存取。
  • 去 IAM 看 Role,裡面會看到 CloudFormation 幫你建立的角色
  • 擷取他的 ARN (下圖反白處)
  • 貼到下方文件,取代掉那個 arn:aws:iam::999999999999:role/xxxx-NodeInstanceRole-XXXXXXXXXXXX
apiVersion: v1
kind: ConfigMap
metadata:
  name: aws-auth
  namespace: kube-system
data:
  mapRoles: |
    - rolearn: arn:aws:iam::999999999999:role/xxxx-NodeInstanceRole-XXXXXXXXXXXX
      username: system:node:{{EC2PrivateDNSName}}
      groups:
        - system:bootstrappers
        - system:nodes
  • 上述設定,存成 aws-auth-ironman.yaml
  • 指令
    ❯ kubectl apply -f aws-auth-ironman.yaml
    configmap/aws-auth created
    
  • 詳細說明可以看這篇: Launching self-managed Amazon Linux nodes
  • 看結果...等待
    ❯ kubectl get nodes --watch
    NAME                                             STATUS     ROLES    AGE   VERSION
    ip-10-56-3-130.ap-northeast-1.compute.internal   NotReady   <none>   0s    v1.17.17-eks-ac51f2
    
  • 好了!!
    ❯ kubectl get nodes
    NAME                                             STATUS   ROLES    AGE   VERSION
    ip-10-56-3-130.ap-northeast-1.compute.internal   Ready    <none>   81m   v1.17.17-eks-ac51f2
    

檢查部署

  • Deployment 成功被部署到機器上
    ❯ kubectl get deployments --all-namespaces
    NAMESPACE     NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    kube-system   coredns   2/2     2            2           22h
    
  • 如果沒有 Work Node 或是運算資源不足的話,則可能會看到下列狀態

3. ConfigMap 與 IAM User

  • 鵝城縣長,原本是馬邦德花錢買來的。
  • 馬邦德走馬上任鵝城縣長,吃著火鍋唱著歌,忽然就被麻匪給劫了!
  • 馬邦德讓張麻子擔任這個鵝城縣長、縣長讓馬邦德當師爺。

讓其他 IAM User 被配置叢集管理者權限

  • 如果叢集要由多個使用者共同管理,可以修改上面提到的設定檔 aws-auth-ironman.yaml
    • 建議另存成一個新的檔名,並且加入版本控制以方便管理
    • eks-admin 是另外一個 IAM 使用者

4. 部署 Pod / Service / Deployment 至 EKS

  • 那因為我今天時間不太夠,我還是撿現成的東西來測測看。
  • 來看看 Deploy and Access the Kubernetes Dashboard
    • 把文件裡面的 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml 所部署的內容,下載下來看看,或是直接部署!

結論

  • 針對 Outposts 上部署 Worker node 的部分
    • 其實重點還是跟 ECS 或 EC2 雷同
    • 掌握好 Subnet 和 Security group 即可
  • Control plane 和 Worker node 斷線期間,Pod 依然可以正常運作

Ref


上一篇
【Day 24】建立 EKS on Outpost 的步驟(上)
下一篇
【Day 26】S3 on AWS Outpost 限制與建置流程
系列文
運用皮毛技術與 AWS 平台、打造雲端蘿蔔服務三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言