K8S 101
Kubectl
命令基本格式
kubectl <action> <resource>
# Action, Resource都不分大小寫
列出所有pod
kubectl get pods
檢視name是app-7yh8的pod的狀態
kubectl describe pods app-7yh8
列出整座cluster的所有pod
kubectl get pods --all-namespaces
要小心的是,edit, delete這些action,執行下去就會對cluster目前的資源產生修改
kubectl edit pod app-7yh8
剛開始進有跑服務的K8S Cluster,describe, get這些不會有side-effect的命令可以先試試
Master Node & Worker Node
Node是指加入Cluster的機器本身 一般來說就是指實體機器或VM
- Master Node
- 不能跑Pod
- 最小3個,必須是奇數個,彼此在資料不一致時會透過選舉取得共識
- Worker Node
- 跑Pod的地方
看目前Cluster的Node清單
kubectl get node
加上-o wide
,可以在清單中看到更細的資訊,例如各Node的IP Address
kubectl get node -o wide
Namespace
- 抽象的服務空間,在同一個namespace下的資源,彼此溝通會比較方便
- 有些資源無法跨Namespace被存取,例如Secrets, Configmap
- 有幾個保留的namespace
- default
- 沒有指定namespace的資源會起到default 這個namespace下
- kube-system
- 保留給Cluster本身使用,跑在這個namespace的資源都屬於Cluster的基礎服務的一部份
- default
kubectl get namespaces
# 可以簡寫
kubectl get ns
Pod / Deployment / ReplicaSet / DaemonSet / Job
- Pod: 最小被調度的單位
- Deployment: Declaration,一般來說工程師操作到這個層級
- ReplicaSet
- DaemonSet
- Job
Selector & Label
- Metadata.labels
- 有保留字,有些名字不能用: https://kubernetes.io/docs/reference/labels-annotations-taints/
# 選擇所有key=value的pod
kubectl get pods -l key=value
Service / Ingress
-
Service: 提供服務的進入點
- 因為Pod會被cluster在不同情況下調度移動,使用Service指向Pod,能夠在Pod被調度時維持相同的存取指定
- By Selector
- 小心太寬鬆的selector,會讓Service將流量導向錯誤的目標
-
Ingress: 將Pod, HTTP/WS的entrypoint
- 一般來說by Service Name
Configmap / Secret
- Secret, Configmap只能在同一個NS
ServiceAccount
- AKS/GKE 給予pod permission的主要依據
Kubectl Config & Context
- kubectl其實都是在跟K8S Cluster Master Node的API溝通
- 所以有設定,有auth token之類的資訊
- kubectl在本地執行時,相關的設定以及credentials
- ~/.kube
kubectl config set-context --current --namespace some-ns
Helm Chart
https://helm.sh/docs/helm/helm_create/
新建一個Helm Chart
helm create
主要的幾個檔案
- Chart.yaml
- values.yaml
- ./templates
helm upgrade application-name ./charts --install --create-namespace --atomic --debug --timeout 360s \
--namespace ${{ env.namespace }} \
--values "${HELM_VALUE_FILE}" \
--set "Var1=123"
--set "Var2=456"
Tools
AWS CLI https://github.com/venth/aws-adfs brew install awscli
AWS ADFS https://github.com/venth/aws-adfs
Helm brew install helm
Kubectl brew install kubernetes-cli
K9S/Lens https://k8slens.dev/ https://github.com/derailed/k9s