1. Kubernetes 简介
Kubernetes(常简称为 k8s)是一个开源的容器编排平台,由 Google 基于其内部使用的 Borg 系统开发。它可以自动化容器部署、扩展和管理,目前已经成为云原生应用的事实标准。
1.1 为什么需要 Kubernetes?
在微服务架构盛行的今天,应用程序通常被拆分成多个独立的容器。管理这些容器带来了新的挑战:
- 如何协调和调度这些容器?
- 如何保证高可用性?
- 如何实现自动扩展?
- 如何管理配置和存储?
Kubernetes 正是为解决这些问题而生。
2. 核心概念
2.1 基础架构
graph TB
A[Control Plane] --> B[API Server]
A --> C[Scheduler]
A --> D[Controller Manager]
A --> E[etcd]
F[Worker Node] --> G[Kubelet]
F --> H[Container Runtime]
F --> I[Kube Proxy]
Kubernetes 集群由以下核心组件组成:
-
Control Plane(控制平面)
- API Server:集群的统一入口
- Scheduler:调度器,决定 Pod 部署位置
- Controller Manager:维护集群状态
- etcd:配置数据存储
-
Worker Node(工作节点)
- Kubelet:管理节点上的容器
- Container Runtime:容器运行时(如 Docker)
- Kube Proxy:网络代理
2.2 基本对象
graph TB
A[Pod] --> B[ReplicaSet]
B --> C[Deployment]
A --> D[Service]
D --> E[Ingress]
A --> F[Volume]
A --> G[ConfigMap/Secret]
- Pod:最小部署单元,可包含一个或多个容器
- ReplicaSet:确保预期数量的 Pod 副本在运行
- Deployment:声明式更新 Pod 和 ReplicaSet
- Service:为一组 Pod 提供统一访问入口
- Volume:存储卷
- ConfigMap/Secret:配置管理
3. 基本操作
3.1 安装与配置
# 使用 kubeadm 安装 Kubernetes
curl -sfL https://get.k3s.io | sh -
# 查看集群状态
kubectl cluster-info
kubectl get nodes
3.2 部署应用
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# 创建部署
kubectl apply -f deployment.yaml
# 查看部署状态
kubectl get deployments
kubectl get pods
4. 进阶操作
4.1 自动扩展
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
4.2 配置管理
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
database_url: "mongodb://localhost:27017"
api_key: "your-api-key"
4.3 存储管理
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
5. 最佳实践
- 资源限制:始终为容器设置资源请求和限制
- 健康检查:配置合适的存活和就绪探针
- 配置管理:使用 ConfigMap 和 Secret 管理配置
- 服务发现:合理使用 Service 和 Ingress
- 监控告警:部署监控组件如 Prometheus + Grafana
6. 故障排查
常用命令:
# 查看 Pod 日志
kubectl logs <pod-name>
# 进入 Pod
kubectl exec -it <pod-name> -- /bin/bash
# 查看 Pod 详细信息
kubectl describe pod <pod-name>
7. 工具生态
- Helm:包管理器
- Istio:服务网格
- Prometheus:监控系统
- Grafana:可视化面板
- Kubeadm:集群管理工具
Kubernetes 常用命令大全
1. 集群管理命令
集群信息
# 查看集群信息
kubectl cluster-info
# 查看所有节点状态
kubectl get nodes
# 查看节点详细信息
kubectl describe node <node-name>
# 查看集群资源使用情况
kubectl top nodes
2. Pod 操作命令
基本操作
# 查看所有 Pod
kubectl get pods -A # 查看所有命名空间
kubectl get pods # 查看默认命名空间
kubectl get pods -n <namespace> # 查看指定命名空间
# 查看 Pod 详细信息
kubectl describe pod <pod-name>
# 查看 Pod 日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> # 实时查看日志
kubectl logs --tail=100 <pod-name> # 查看最后100行
# 进入 Pod 容器
kubectl exec -it <pod-name> -- /bin/bash
# 删除 Pod
kubectl delete pod <pod-name>
3. Deployment 操作命令
部署管理
# 查看所有部署
kubectl get deployments
# 创建部署
kubectl create deployment <name> --image=<image>
# 应用配置文件
kubectl apply -f <deployment.yaml>
# 修改镜像版本
kubectl set image deployment/<name> <container>=<new-image>
# 查看部署历史
kubectl rollout history deployment/<name>
# 回滚部署
kubectl rollout undo deployment/<name>
kubectl rollout undo deployment/<name> --to-revision=<number>
# 扩缩容
kubectl scale deployment/<name> --replicas=<number>
4. Service 操作命令
服务管理
# 查看所有服务
kubectl get services
# 创建服务
kubectl expose deployment <name> --port=<port> --type=NodePort
# 删除服务
kubectl delete service <name>
# 查看服务详情
kubectl describe service <name>
5. 配置管理命令
ConfigMap 和 Secret
# 查看 ConfigMap
kubectl get configmaps
kubectl describe configmap <name>
# 创建 ConfigMap
kubectl create configmap <name> --from-file=<path>
# 查看 Secret
kubectl get secrets
kubectl describe secret <name>
# 创建 Secret
kubectl create secret generic <name> --from-literal=key=value
6. 命名空间操作
命名空间管理
# 查看命名空间
kubectl get namespaces
# 创建命名空间
kubectl create namespace <name>
# 切换默认命名空间
kubectl config set-context --current --namespace=<name>
# 删除命名空间
kubectl delete namespace <name>
7. 资源监控命令
监控和调试
# 查看资源使用情况
kubectl top pods
kubectl top nodes
# 查看事件
kubectl get events
# 端口转发
kubectl port-forward <pod-name> <local-port>:<pod-port>
# 查看网络策略
kubectl get networkpolicies
8. 常用调试命令
故障排查
# 查看 Pod 状态
kubectl get pods -o wide
# 查看 Pod 详细状态
kubectl describe pod <pod-name>
# 查看容器日志
kubectl logs <pod-name> -c <container-name>
# 复制文件到 Pod
kubectl cp <local-path> <pod-name>:<pod-path>
# 从 Pod 复制文件
kubectl cp <pod-name>:<pod-path> <local-path>
9. 上下文和配置
集群配置
# 查看上下文
kubectl config get-contexts
# 切换上下文
kubectl config use-context <context-name>
# 查看当前配置
kubectl config view
# 设置集群参数
kubectl config set-cluster <name>
10. 常用简写形式
# 资源类型简写
pods -> po
deployments -> deploy
services -> svc
namespaces -> ns
configmaps -> cm
persistentvolumes -> pv
persistentvolumeclaims -> pvc
实用技巧
- 使用 watch 实时监控:
watch kubectl get pods
- 使用标签选择器:
kubectl get pods -l app=nginx
- 输出格式化:
kubectl get pods -o yaml
kubectl get pods -o json
kubectl get pods -o wide
- 创建资源的简便方法:
# 快速生成 YAML 模板
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml