🌳 要認識Kubernetes的生態系統,先從快速建立叢集起步(Kubeadm),和叢集互動時(Kubectl)透過工具進行操作或檢視,而叢集中包含多種的Objects(persistent entities),用途為指示/呈現叢集的目標狀態,像是可用的資源、容器運行、互動規則等,常見建立的方式是提供manifest
檔案(YAML格式為主)給Kubectl,Kubectl再發出API(http request)給K8s進行操作,工欲善其事,必先利其器,先來認識小夥伴們吧
Kubeadm是建立Kubernetes叢集的工具,使用目的在於快速可用,而詳細的配置或各種方便的額外功能就不在考慮範圍,使用Kubeadm建立的話,控制平台(control plane)的元件(像是etcd及apiserver等),會以Pod的形式,部署在kube-system這個命名空間(namespace)
指令文件: Setup tool
Kubectl(讀作kube control),使用Kubernetes API跟 Kubernetes 叢集的控制平台溝通,Kubectl從家目錄底下$HOME/.kube
的config檔案取得相關設定內容,另外也可以透過設定kubeconfig去指定不同的配置檔案
kubectl預設會先檢查是否自己是在Pod當中執行(也就是存在於叢集內)
default
的服務帳戶,token位於/var/run/secrets/kubernetes.io/serviceaccount/token
# 指令基本架構
kubectl [動作COMMAND] [資源類型TYPE] [資源名稱NAME] [進階選項FLAGS]
# 例如: 取得名稱為tmp-shell的pod, ouput內容有較多(wide)的資訊
kubectl get pods tmp-shell -o wide
不懂就問(help!),指令後直接下-h
可取得說明及範例,或由文件查詢,後續將隨主題介紹常用指令
指令文件: Command line tool (kubectl)
👉 imperative(命令式) vs declarative(宣告式)
管理Kubernetes Object的指令,可以用命令式簡易設置,使用部分預設的配置,或是宣告式方式,以文件敘述狀態,各有其優缺點,根據使用情境決定
# 建立deployment, 名稱為nginx, image為nginx
# 1. imperative
kubectl create deployment nginx --image nginx
# 2. declarative: 資訊提供於檔案
kubectl apply -f nginx.yaml
# 建立deployment需撰寫的文件: nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
必填四大欄位【Required fields】
kubectl api-resources
KEY: VALUE
,冒號後空一格,階層之間以空格區分(dictionary in dictionary),無強制規定要空幾格,同層空相同格數即可,習慣上以空2格區分
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template: # deployment 需有的欄位,給containers用的模板
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80