# kubectl 常用操作指南

`kubectl` 是 Kubernetes 的命令行工具，用于与 Kubernetes 集群交互。以下是一些常用操作，涵盖集群管理、资源操作、调试和日志查看等场景。  

---

## **1. 集群信息查看**
| 命令 | 说明 |
|------|------|
| `kubectl cluster-info` | 查看集群信息 |
| `kubectl get nodes` | 查看所有节点状态 |
| `kubectl describe node <node-name>` | 查看节点详细信息 |
| `kubectl version` | 查看 kubectl 和集群版本 |

---

## **2. 命名空间（Namespace）操作**
| 命令 | 说明 |
|------|------|
| `kubectl get ns` | 查看所有命名空间 |
| `kubectl create ns <namespace>` | 创建命名空间 |
| `kubectl delete ns <namespace>` | 删除命名空间 |
| `kubectl config set-context --current --namespace=<namespace>` | 切换当前命名空间 |

---

## **3. Pod 操作**
| 命令 | 说明 |
|------|------|
| `kubectl get pods` | 查看当前命名空间的 Pod |
| `kubectl get pods -A` | 查看所有命名空间的 Pod |
| `kubectl describe pod <pod-name>` | 查看 Pod 详细信息 |
| `kubectl logs <pod-name>` | 查看 Pod 日志 |
| `kubectl logs -f <pod-name>` | 实时查看 Pod 日志（类似 `tail -f`） |
| `kubectl exec -it <pod-name> -- /bin/sh` | 进入 Pod 的 Shell |
| `kubectl delete pod <pod-name>` | 删除 Pod |
| `kubectl port-forward <pod-name> <local-port>:<pod-port>` | 端口转发（访问 Pod 服务） |

---

## **4. Deployment 操作**
| 命令 | 说明 |
|------|------|
| `kubectl get deployments` | 查看所有 Deployments |
| `kubectl describe deployment <deployment-name>` | 查看 Deployment 详情 |
| `kubectl apply -f deployment.yaml` | 应用 Deployment YAML 文件 |
| `kubectl delete deployment <deployment-name>` | 删除 Deployment |
| `kubectl scale deployment <deployment-name> --replicas=3` | 调整 Pod 副本数量 |
| `kubectl rollout status deployment <deployment-name>` | 查看 Deployment 更新状态 |
| `kubectl rollout undo deployment <deployment-name>` | 回滚 Deployment |

---

## **5. Service 操作**
| 命令 | 说明 |
|------|------|
| `kubectl get svc` | 查看所有 Service |
| `kubectl describe svc <service-name>` | 查看 Service 详情 |
| `kubectl expose deployment <deployment-name> --type=NodePort --port=80` | 创建 Service 暴露 Deployment |
| `kubectl delete svc <service-name>` | 删除 Service |

---

## **6. ConfigMap & Secret 操作**
| 命令 | 说明 |
|------|------|
| `kubectl get configmaps` | 查看 ConfigMap |
| `kubectl create configmap <name> --from-file=<file>` | 从文件创建 ConfigMap |
| `kubectl get secrets` | 查看 Secrets |
| `kubectl create secret generic <name> --from-literal=key=value` | 创建 Secret |

---

## **7. 调试与故障排查**
| 命令 | 说明 |
|------|------|
| `kubectl top pod` | 查看 Pod 资源使用情况 |
| `kubectl top node` | 查看 Node 资源使用情况 |
| `kubectl get events --sort-by=.metadata.creationTimestamp` | 查看集群事件 |
| `kubectl cp <pod-name>:<pod-path> <local-path>` | 从 Pod 复制文件到本地 |
| `kubectl run debug-pod --image=busybox --restart=Never --rm -it -- sh` | 启动临时调试 Pod |

---

## **8. 其他实用命令**
| 命令 | 说明 |
|------|------|
| `kubectl api-resources` | 查看所有 Kubernetes 资源类型 |
| `kubectl explain <resource>` | 查看资源的 YAML 字段说明 |
| `kubectl edit <resource> <name>` | 直接编辑资源（如 `kubectl edit deployment nginx`） |
| `kubectl apply -f <directory>` | 应用目录下的所有 YAML 文件 |
| `kubectl wait --for=condition=Ready pod/<pod-name>` | 等待 Pod 就绪 |

---
# kubectl logs 子命令使用指南

`kubectl logs` 是 Kubernetes 中查看容器日志的主要命令，下面详细介绍其使用方法。

## 基本用法

### 1. 查看 Pod 日志

```bash
kubectl logs <pod-name>
```

### 2. 查看特定容器的日志（Pod 中有多个容器时）

```bash
kubectl logs <pod-name> -c <container-name>
```

## 常用选项

### 流式日志（实时跟踪）

```bash
kubectl logs -f <pod-name>
```

### 显示时间戳

```bash
kubectl logs --timestamps <pod-name>
```

### 查看最近 N 行的日志

```bash
kubectl logs --tail=20 <pod-name>  # 查看最后20行
```

### 查看某时间段内的日志

```bash
kubectl logs --since=1h <pod-name>  # 过去1小时的日志
kubectl logs --since-time="2023-01-02T15:04:05Z" <pod-name>
```

### 查看之前容器的日志（容器崩溃后）

```bash
kubectl logs -p <pod-name>
```

## 高级用法

### 1. 查看 Deployment 的 Pod 日志

```bash
kubectl logs deploy/<deployment-name>
```

### 2. 查看多个 Pod 的日志（使用标签选择器）

```bash
kubectl logs -l app=nginx
```

### 3. 将日志输出到文件

```bash
kubectl logs <pod-name> > pod.log
```

### 4. 在交互式 Shell 中查看日志

```bash
kubectl exec -it <pod-name> -- cat /var/log/myapp.log
```

## 实用技巧

1. **日志颜色高亮**：
   ```bash
   kubectl logs <pod-name> | highlight
   ```

2. **日志过滤**：
   ```bash
   kubectl logs <pod-name> | grep "ERROR"
   ```

3. **查看多个容器的日志**：
   ```bash
   kubectl logs <pod-name> --all-containers=true
   ```

4. **JSON 格式日志**：
   ```bash
   kubectl logs <pod-name> -f --tail=10 | jq
   ```

## 注意事项

1. 默认情况下只能查看运行中 Pod 的日志
2. 已删除 Pod 的日志无法查看（除非使用日志收集系统）
3. 日志大小受 Kubernetes 配置限制
4. 在多节点集群中，日志可能分散在不同节点

## 故障排查

如果无法查看日志，可以尝试：

```bash
# 检查 Pod 状态
kubectl describe pod <pod-name>

# 检查容器是否正常运行
kubectl get pod <pod-name> -o jsonpath='{.status.containerStatuses[0].ready}'
```

通过以上命令组合，您可以高效地查看和分析 Kubernetes 容器日志。

### **总结**
- **`kubectl get`**：查询资源  
- **`kubectl describe`**：查看详细信息  
- **`kubectl logs`**：查看日志  
- **`kubectl exec`**：进入 Pod  
- **`kubectl apply/delete`**：创建/删除资源  
- **`kubectl rollout`**：管理 Deployment 更新  

这些命令覆盖了大部分 Kubernetes 日常操作，适合开发、运维和调试使用。