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