Kubernetes 是一个强大的容器编排系统,而 kubectl 是与 Kubernetes 集群交互的核心命令行工具。本命令大全旨在提供一个清晰、全面的 Kubernetes 命令参考,帮助您高效管理 Kubernetes 集群。
基本概念与命令概述
什么是 Kubernetes?
Kubernetes 是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它提供了强大的功能来管理容器化应用的生命周期。
kubectl 简介
kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。它支持多种操作,包括创建、更新、删除和查询集群资源。
命令格式与基本用法
基本命令格式:
kubectl [command] [subcommand] [flags]
常用选项:
-h 或 --help:显示命令帮助信息
-v 或 --verbose:启用详细输出
-n 或 --namespace:指定命名空间
核心资源命令
1. Pods(基本构建块)
Pod 是 Kubernetes 的最小部署单位,代表单个容器或一组容器。
创建 Pod:
kubectl create -f pod.yaml # 从 YAML 文件创建
kubectl run mypod --image=nginx # 使用指定镜像创建
查看 Pod:
kubectl get pods # 列出所有 Pod
kubectl get pod mypod # 查看特定 Pod
kubectl describe pod mypod # 查看 Pod 详细信息
Pod 日志与调试:
kubectl logs mypod # 查看 Pod 日志
kubectl exec -it mypod -- /bin/sh # 进入 Pod
2. Replicasets(确保 Pod 副本数量)
Replicaset 确保指定数量的 Pod 副本始终处于运行状态。
创建与管理:kubectl create -f replicaset.yaml # 从 YAML 文件创建
kubectl get rs # 列出所有 Replicasets
kubectl describe rs myrs # 查看特定 Replicaset
kubectl scale rs myrs --replicas=3 # 更新副本数量
3. Deployments(Pod 的声明式更新)
Deployment 提供了更高级的 Pod 管理功能,支持声明式更新。
创建与管理:
kubectl create -f deployment.yaml # 从 YAML 文件创建
kubectl create deployment mydeployment --image=nginx # 使用指定镜像创建
kubectl get deploy # 列出所有 Deployments
kubectl describe deploy mydeployment # 查看特定 Deployment
更新与回滚:
kubectl set image deploy/mydeployment nginx=nginx:1.10 # 更新镜像
kubectl rollout undo deploy/mydeployment # 回滚到之前版本
kubectl rollout status deploy/mydeployment # 查看 Deployment 状态
4. Services(Pod 的网络访问)
Service 为 Pod 提供了稳定的网络访问点。
创建与管理:
kubectl create -f service.yaml # 从 YAML 文件创建
kubectl create service clusterip myservice --tcp=80:80 # 创建 ClusterIP 服务
kubectl get services # 列出所有 Services
kubectl describe service myservice # 查看特定 Service
访问 Service:
kubectl port-forward svc/myservice 8080:80 # 本地端口转发
5. ConfigMaps(配置管理)
ConfigMap 用于存储应用程序的配置数据。
创建与管理:kubectl create configmap myconfigmap --from-file=config.properties # 从文件创建
kubectl get configmaps # 列出所有 ConfigMaps
kubectl describe configmap myconfigmap # 查看特定 ConfigMap
6. Secrets(敏感数据管理)
Secret 用于存储敏感数据,如密码和密钥。
创建与管理:kubectl create secret generic mysecret --from-file=password.txt # 从文件创建
kubectl get secrets # 列出所有 Secrets
kubectl describe secret mysecret # 查看特定 Secret
7. Namespaces(资源隔离)
Namespace 用于将集群资源逻辑隔离。
创建与管理:kubectl create namespace mynamespace # 创建新 Namespace
kubectl get namespaces # 列出所有 Namespaces
kubectl config set-context --current --namespace=mynamespace # 切换 Namespace
常用操作命令
1. 集群管理命令
创建与查看集群:
kubeadm init # 初始化新集群
kubectl cluster-info # 查看集群状态
删除集群:
kubeadm reset # 重置集群
2. 资源创建与管理
创建与更新资源:
kubectl create -f filename.yaml # 创建资源
kubectl apply -f filename.yaml # 更新资源
删除资源:
kubectl delete -f filename.yaml # 删除资源
kubectl delete resourceType name # 删除特定资源
3. 日志与调试
查看日志:kubectl logs -l app=myapp # 查看所有相关 Pod 日志
journalctl -u kubelet # 查看 kubelet 日志
journalctl -u docker # 查看 docker 日志
4. 升级与回滚
升级集群:
kubeadm upgrade apply v1.10.0 # 升级集群
回滚集群:
kubeadm rollback # 回滚集群
5. 滚动更新
设置滚动更新策略:kubectl patch deployment mydeployment -p '{"spec":{"strategy":{"type":"RollingUpdate","rollingUpdate":{"maxSurge":2,"maxUnavailable":1}}}}' # 设置滚动更新策略
高级功能命令
1. 网络策略
网络策略用于控制 Pod 之间的网络流量。
创建与管理:kubectl create -f networkpolicy.yaml # 从 YAML 文件创建
kubectl get networkpolicies # 列出所有网络策略
2. 存储与持久化
PersistentVolume 和 PersistentVolumeClaim 用于持久化存储。
创建与管理:kubectl create -f pv.yaml # 创建 PersistentVolume
kubectl create -f pvc.yaml # 创建 PersistentVolumeClaim
kubectl get pv # 列出所有 PersistentVolume
kubectl get pvc # 列出所有 PersistentVolumeClaim
3. 自动扩展
HorizontalPodAutoscaler 根据负载自动调整 Pod 数量。
创建与管理:kubectl create -f hpa.yaml # 创建 HorizontalPodAutoscaler
kubectl get hpa # 列出所有 HorizontalPodAutoscaler
4. 监控与告警
Kubernetes 支持多种监控和告警解决方案,如 Prometheus 和 Grafana。
安装与配置:
根据具体工具的文档执行安装和配置步骤。
5. 安全与认证
RBAC(基于角色的访问控制)和认证策略用于管理集群的安全性。
设置 RBAC 策略:
kubectl create -f rbac.yaml # 从 YAML 文件创建
设置认证:
kubectl config set-credentials myuser --username=user --password=pass # 设置认证信息
命令示例与模板
1. 基本部署示例
创建一个简单的 Nginx Deployment 和 Service:
# 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.10
ports:
- containerPort: 80
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
2. 模板化部署
使用变量替换创建模板化的 YAML 文件:
# template.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .name }}
spec:
replicas: {{ .replicas }}
selector:
matchLabels:
app: {{ .app }}
template:
metadata:
labels:
app: {{ .app }}
spec:
containers:
- name: {{ .containerName }}
image: {{ .image }}
ports:
- containerPort: {{ .port }}
使用工具如 envsubst 或 sed 进行变量替换。
常见问题与解决方案
1. 常见错误与解决方法
创建资源失败:
检查错误信息
验证 YAML 文件格式和语法
确保所有必需的字段都已提供
连接问题:
检查网络配置
确保所有节点都能相互通信
检查防火墙设置
配置错误:
验证配置文件
确保所有参数都正确
2. 命令使用技巧
使用别名简化命令:
alias k=kubectl # 设置 k 为 kubectl 的别名
使用管道连接命令:
kubectl get pods | grep running # 查看所有运行中的 Pod
脚本化命令:
创建自动化脚本执行常见任务,提高工作效率。