Kubernetes 集群安裝和操作指南
Kubernetes 集群安裝和操作指南
1. 集群安裝步驟
1.1 創建 kind 配置文件
# kind-cluster-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: k8s-cluster
nodes:
# 1 master node
- role: control-plane
image: kindest/node:v1.29.4
# 4 worker nodes
- role: worker
image: kindest/node:v1.29.4
- role: worker
image: kindest/node:v1.29.4
- role: worker
image: kindest/node:v1.29.4
- role: worker
image: kindest/node:v1.29.4
1.2 創建集群
kind create cluster --config kind-cluster-config.yaml
1.3 驗證集群狀態
kubectl get nodes
kubectl cluster-info
2. Worker 節點角色設置
2.1 為 Worker 節點添加標簽
# 為不同的 worker 節點設置不同的角色標簽
kubectl label node k8s-cluster-worker node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker2 node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker3 node-role.kubernetes.io/worker=worker
kubectl label node k8s-cluster-worker4 node-role.kubernetes.io/worker=worker
# 或者設置特定的角色
kubectl label node k8s-cluster-worker node-role.kubernetes.io/compute=compute
kubectl label node k8s-cluster-worker2 node-role.kubernetes.io/storage=storage
kubectl label node k8s-cluster-worker3 node-role.kubernetes.io/database=database
kubectl label node k8s-cluster-worker4 node-role.kubernetes.io/web=web
2.2 添加節點污點(Taints)
# 為特定節點添加污點,確保只有特定的 Pod 可以調度到該節點
kubectl taint nodes k8s-cluster-worker2 storage=true:NoSchedule
kubectl taint nodes k8s-cluster-worker3 database=true:NoSchedule
2.3 驗證節點標簽和污點
kubectl get nodes --show-labels
kubectl describe node k8s-cluster-worker
3. 常用集群操作
3.1 節點管理
# 查看所有節點
kubectl get nodes -o wide
# 查看節點詳細信息
kubectl describe node <node-name>
# 查看節點資源使用情況
kubectl top nodes
# 驅逐節點(維護模式)
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
# 恢復節點
kubectl uncordon <node-name>
# 標記節點為不可調度
kubectl cordon <node-name>
3.2 Pod 管理
# 查看所有 Pod
kubectl get pods --all-namespaces
# 創建測試 Pod
kubectl run test-pod --image=nginx --restart=Never
# 查看 Pod 詳細信息
kubectl describe pod <pod-name>
# 查看 Pod 日志
kubectl logs <pod-name>
# 進入 Pod 容器
kubectl exec -it <pod-name> -- /bin/bash
# 刪除 Pod
kubectl delete pod <pod-name>
3.3 服務管理
# 創建服務
kubectl expose pod test-pod --port=80 --target-port=80 --type=NodePort
# 查看服務
kubectl get services
# 查看服務詳細信息
kubectl describe service <service-name>
# 刪除服務
kubectl delete service <service-name>
3.4 部署管理
# 創建部署
kubectl create deployment nginx-deployment --image=nginx --replicas=3
# 查看部署
kubectl get deployments
# 擴縮容部署
kubectl scale deployment nginx-deployment --replicas=5
# 更新部署鏡像
kubectl set image deployment/nginx-deployment nginx=nginx:1.21
# 查看部署歷史
kubectl rollout history deployment/nginx-deployment
# 回滾部署
kubectl rollout undo deployment/nginx-deployment
# 刪除部署
kubectl delete deployment nginx-deployment
3.5 命名空間管理
# 創建命名空間
kubectl create namespace development
# 查看命名空間
kubectl get namespaces
# 在特定命名空間中操作
kubectl get pods -n development
# 設置默認命名空間
kubectl config set-context --current --namespace=development
# 刪除命名空間
kubectl delete namespace development
3.6 配置管理
# 創建 ConfigMap
kubectl create configmap app-config --from-literal=key1=value1 --from-literal=key2=value2
# 創建 Secret
kubectl create secret generic app-secret --from-literal=username=admin --from-literal=password=secret
# 查看配置
kubectl get configmaps
kubectl get secrets
# 查看配置詳情
kubectl describe configmap app-config
kubectl describe secret app-secret
3.7 資源監控
# 查看集群資源使用情況
kubectl top nodes
kubectl top pods
# 查看集群事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看集群組件狀態
kubectl get componentstatuses
4. 集群維護操作
4.1 備份和恢復
# 備份 etcd(對于 kind 集群,這通常不需要)
# 導出資源配置
kubectl get all --all-namespaces -o yaml > cluster-backup.yaml
4.2 清理操作
# 清理未使用的資源
kubectl delete pods --field-selector=status.phase=Succeeded
kubectl delete pods --field-selector=status.phase=Failed
# 強制刪除卡住的資源
kubectl delete pod <pod-name> --force --grace-period=0
4.3 集群刪除
# 刪除 kind 集群
kind delete cluster --name k8s-cluster
# 查看所有 kind 集群
kind get clusters
5. 故障排查
5.1 常用排查命令
# 查看節點狀態
kubectl get nodes
kubectl describe node <node-name>
# 查看 Pod 狀態
kubectl get pods --all-namespaces
kubectl describe pod <pod-name>
kubectl logs <pod-name>
# 查看集群事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看系統 Pod
kubectl get pods -n kube-system
5.2 網絡排查
# 測試 Pod 間網絡連通性
kubectl run test-pod --image=busybox --rm -it --restart=Never -- /bin/sh
# 在容器內測試網絡
nslookup kubernetes.default.svc.cluster.local
ping <other-pod-ip>
6. 有用的別名設置
# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgn='kubectl get nodes'
alias kdp='kubectl describe pod'
alias kds='kubectl describe service'
alias kdn='kubectl describe node'
這個指南涵蓋了從集群創建到日常維護的所有常用操作。你可以根據需要參考相應的章節。

浙公網安備 33010602011771號