在我們進入到 AWS EKS 與 CI/CD 之前,讓我們迅速回顧一下我們已經學到的 Kubernetes 核心組件。這些組件是 Kubernetes 運行的基礎,理解它們將有助於我們更好地掌握整個系統的運作。
Deployment 是非常好的 Pod 管理組件,通常建議用 Deployment 管理 Pod,才能享有 Deployment 的功能,不需要直接建立 Pod。
Service:Service 定義了一個穩定的網絡端點,用於暴露一個或多個 Pod。它可以是 ClusterIP、NodePort 或 LoadBalancer 類型,根據你的需求進行配置。
Ingress:Ingress 允許你管理入站網絡流量,通常用於路由 HTTP 和 HTTPS 流量到不同的 Service。它是一個強大的 API 對象,支持多種路由規則和 SSL/TLS 終止。
ConfigMap 和 Secrets:ConfigMap 用於存儲配置數據,Secrets 則用於存儲敏感數據。它們可以在應用程式中以環境變數或卷的形式使用。
Namespace:用於劃分 Kubernetes 集群,允許多個團隊或應用程序共享同一個集群而不相互干擾。
ResourceQuota:ResourceQuota 用於限制 Namespace 內資源的使用,確保資源分配的合理性和可控性。
LimitRange:LimitRange 定義容器的資源限制,確保容器不會無限制地消耗資源。
我們介紹了以上 Software engineer 最常接觸到的 Kubernetes 組件,希望能讓讀者對 應用程序如何運行在 Kubernetes 與 Kubernetes 怎麼處理將網路流量傳給應用程序 有個基礎認識。
圖檔來自 Kubernetes Resource Map (Resource 기능 영역별)
Kubernetes 中還有許多組件沒介紹到,礙於篇幅有限,就留給各位自行去探索了,能從上圖快速找到對應的組件名稱。
主要介紹兩個部分
kubectl
,所以社群開發了許多 kubectl plugins 來提高我們操作的效率。到官網/release清單中找到符合你 Kubernetes 版本的配置檔,並將 Manifest(yaml) apply 到 kubernetes。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
此版本支持 Kubernetes 1.21 ~ 1.24
透過 kubectl apply
以下三個 yaml,來建立 ServiceAccount 與綁定角色權限
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
apiVersion: v1
kind: Secret
metadata:
name: admin-user
namespace: kubernetes-dashboard
annotations:
kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
取得登入 token
kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d
會返回一串登入用的 token,先 複製 該 token
eyJhbGciOiJSUzI1NiIsImtpZCI6IjZoM3htY3JzbGx6MU9sdy15SVczUC0wNHM2cHVDT05GSWJHRjV3QnBQdkEifQ.eyJpc3MiOiJrdWJCCm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbiX1c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZXY2UtYWNjb3VudC51aWQiOiI0ZGYxYzQyMC00ZTZhLTQ2NWEtOGJiYi02MmIzNTBjOTI0YTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNOYm9hcmQ6YWRtAW4tdXNlciJ9.VBM30N88j_xfhZqwUzYsRwS8SX1RgpGgBAgRjllSGUoa3Uaw7sd-9aRVPg2gR_r4nAovzfC46nz1i3S1GyiFfTrWf4j86Tkp-SAm-9llHFU5C-1lOcuHylexqe590XLyGGa8kd4tEPvUl9Q8aHyCRZYaTV7uMhDsV7FPJp3Pmo8ZUr_TcNw_zx-pIoYQ5WQV9okMDDDdwKTXSlb0K_1PlXdagbSxsE2THREBN5ZXMMSA-8Ps9t_yLR6KUwmGGqf3NOMhHXti8nBtDR03Mqy7zpkE3JUGAsCZCLRIQXPdiRAgxDWoJ5e-VKvx5FWN8ZqTpamf4L-xNymaRWs0LySE3A
token 內容每個人都不同,你需要複製自己的
透過 kubectl proxy
將 dashboard pod,曝露在 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login,讓我們能訪問
kubectl proxy
也能自行透過 Service 或 Ingress 等方式曝露
開啟瀏覽器,連至 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
能看到以下畫面
將稍早複製的 token 貼到 輸入 token
的欄位,並點選登入
登入之後,就能看到 Dashboard 的首頁,能看到有 Cluster 中 Workload 運行狀態的圖表、左側有各種組件能檢視。
今天就來介紹幾個筆者實務上常用的 kubectl plugins 與 Kubernetes Dashboard
Krew 是個 plugins 管理工具,讓我們輕鬆安裝和管理 kubectl plugins。
MacOS/Linux
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
kubectl krew version
其他作業系統,能參考安裝手冊
後續安裝 plugin 都會透過 Krew 進行安裝.
kubectx & kubens 在多個 Kubernetes cluster 或 Namespace 切換時特別有用,直覺簡短的指令,減少發生錯誤的機會。
kubectl krew install ctx
kubectl krew install ns
kubectx
用來快速切換操作的 Cluster (contexts),不需要用冗長的 kubectl config use-context
指令
kubens
用來切換 Namespace,不需要用冗長的 kubectl config use-context
指令 或 每次都要加上 --namespace
參數
能快速查到 Kubernetes 組件之間的關聯性,管理或學習時都很好用
kubectl krew install tree
kubectl tree --help
kubectl explore 能快速查閱各個組件的 yaml 屬性,對於筆者這種腦容量有限的人很實用,只要記得功能,透過 kubectl explore
就能找到正確屬性名稱
kubectl krew install explore
kubectl explore --help
今天回顧了許多核心組件,已經能建構自己的服務並提供給外部存取,接下來幾天會開始在使用 AWS EKS 建置 kubernetes 環境,並進行 CI/CD 與 監控等介紹。