Kubernetes 基礎介紹
Kubernetes 的發展歷程
Kubernetes(簡稱 K8s)最初由 Google 於 2014 年發表,並於同年捐贈給 CNCF(Cloud Native Computing Foundation)。Kubernetes 建立於 Google 長年在內部運營大規模容器部署平台 Borg 的經驗上,成為目前最流行的容器編排平台之一。
Kubernetes 專注於容器的部署、擴展與管理,是現代雲原生應用的重要基石,廣泛被各大企業及雲平台(如 AWS、GCP、Azure)採用。
Kubernetes 核心概念
- Pod:Kubernetes 中的最小運行單位,通常封裝一個應用容器(也可以多個),共享相同的網路和存儲資源。
- Node:運行 Pod 的工作主機,可為實體機或虛擬機,受控於 Kubernetes Master。
- Cluster:由多個 Node 組成的容器集群,是 Kubernetes 的執行環境。
- Deployment:一種聲明式的資源物件,用於定義應用的期望狀態,如副本數量、映像版本等,並由 Kubernetes 自動維持。
- Service:提供穩定的網路介面給外部或內部存取 Pod,並支援負載平衡。
- Namespace:提供資源隔離機制,用於管理大型或多租戶環境。
Kubernetes 安裝方式
Kubernetes 可透過多種方式安裝:
- Minikube:適合學習用途,單機模擬整個 Kubernetes 環境。
- Docker Desktop:內建簡易 Kubernetes,可快速啟用。
- Kubeadm:手動部署 K8s 叢集。
- 雲端服務:如 GKE、EKS、AKS 提供託管式 Kubernetes 服務。
使用 kubectl 操作 Kubernetes
指令 | 說明 |
---|---|
kubectl get pods |
顯示目前所有 Pod 狀態 |
kubectl describe pod <name> |
查看特定 Pod 詳細資訊 |
kubectl apply -f <file>.yaml |
套用 YAML 設定檔建立/更新資源 |
kubectl delete -f <file>.yaml |
刪除 YAML 設定所建立的資源 |
kubectl logs <pod-name> |
查看容器日誌 |
kubectl exec -it <pod-name> -- /bin/sh |
進入 Pod 中的容器進行操作 |
Nginx Web 應用部署範例(Kubernetes)
本範例將透過四份 YAML 檔案部署一個靜態 HTML 的 Nginx Web 服務。
步驟 1:建立 ConfigMap
檔案:01-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-html
labels:
app: nginx
data:
index.html: |
<html>
<head><title>NGINX on Kubernetes</title></head>
<body>
<h1>Hello from Kubernetes ConfigMap!</h1>
</body>
</html>
步驟 2:建立 Deployment
檔案:02-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
automountServiceAccountToken: false
containers:
- name: nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "64Mi"
ephemeral-storage: "32Mi"
limits:
cpu: "200m"
memory: "128Mi"
ephemeral-storage: "64Mi"
volumeMounts:
- name: html-volume
mountPath: /usr/share/nginx/html
volumes:
- name: html-volume
configMap:
name: nginx-html
步驟 3:建立 Service
檔案:03-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
步驟 4:建立 Ingress
檔案:04-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
部署與測試流程
-
套用 ConfigMap:
kubectl apply -f 01-configmap.yaml
-
套用 Deployment:
kubectl apply -f 02-deployment.yaml
-
套用 Service:
kubectl apply -f 03-service.yaml
-
套用 Ingress(需已安裝 ingress controller):
kubectl apply -f 04-ingress.yaml
-
使用 port-forward 測試(若未配置 Ingress DNS):
kubectl port-forward svc/nginx-service 8080:80
於瀏覽器開啟 http://localhost:8080
,驗證畫面。
清除資源
kubectl delete -f 04-ingress.yaml
kubectl delete -f 03-service.yaml
kubectl delete -f 02-deployment.yaml
kubectl delete -f 01-configmap.yaml