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号