Kubernetes学习指北之Kubernetes kubectl
一、 kubectl 介绍
kubectl是 Kubernetes 官方提供的命令行工具,用于与 Kubernetes 集群交互。它可以管理资源对象(Pods、Deployments、Services 等)、调试问题、查看日志、扩缩容、发布更新等。
本质上,它通过 Kubernetes API 与集群通信。
组件关系示意:
kubectl <---> kube-apiserver <---> etcd / kubelet / controller-manager / scheduler
二、安装与配置
1. 安装(Linux):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
kubectl version --client
2. 配置 kubeconfig
- 默认路径:~/.kube/config
- 查看当前配置:
kubectl config view
kubectl config current-context
- 切换 namespace:
kubectl config set-context --current --namespace=demo
三、基础命令
1. 查看集群信息
kubectl cluster-info # 控制面信息
kubectl version # 客户端 & 服务端版本
kubectl api-resources # 列出可用资源
kubectl get namespaces # 查看命名空间
2. 查看节点
kubectl get nodes
kubectl describe node <node-name>
四、命名空间管理
kubectl create namespace demo
kubectl get namespaces
kubectl delete namespace demo
- 使用 -n
指定命名空间:
kubectl get pods -n demo
kubectl apply -f deployment.yaml -n demo
- 设置默认 namespace:
kubectl config set-context --current --namespace=demo
五、Pods、Deployment、Service 管理
1. 查看资源
kubectl get pods
kubectl get deployments
kubectl get svc
kubectl get all
kubectl describe pod <pod-name>
2. 创建 / 更新 / 删除
kubectl apply -f <file.yaml> # 创建或更新
kubectl delete -f <file.yaml> # 删除
3.Pod 调试
kubectl logs <pod-name>
kubectl exec -it <pod-name> -- /bin/bash
kubectl port-forward <pod-name> 8080:80
4. Deployment 滚动更新与回滚
kubectl rollout status deployment/<name>
kubectl rollout history deployment/<name>
kubectl rollout undo deployment/<name>
kubectl scale deployment/<name> --replicas=3
六、ConfigMap 和 Secret
1. ConfigMap
kubectl create configmap my-config --from-literal=key=value
kubectl apply -f configmap.yaml
kubectl get configmap
kubectl describe configmap my-config
2. Secret
kubectl create secret generic my-secret \
--from-literal=username=admin \
--from-literal=password=123456
kubectl get secret
kubectl describe secret my-secret
- Secret 可以在 Pod 中挂载为环境变量或文件:
env:
- name: DB_USER
valueFrom:
secretKeyRef:
name: my-secret
key: username
七、DaemonSet 与 StatefulSet
kubectl get daemonset -n kube-system
kubectl describe daemonset <name> -n <namespace>
kubectl get statefulset
kubectl describe statefulset <name>
八、标签和选择器
- 查看标签:
kubectl get pods --show-labels
- 按标签选择:
kubectl get pods -l app=nginx
kubectl label pod <pod-name> env=dev
kubectl annotate pod <pod-name> key=value
九、资源调试与事件
kubectl get events
kubectl describe pod <pod-name>
kubectl top node
kubectl top pod
十、批量与导出操作
- 批量操作:
kubectl apply -f ./manifests
kubectl delete -f ./manifests
- 导出资源:
kubectl get deployment <name> -o yaml > deployment.yaml
kubectl get all -n demo -o yaml > demo-all.yaml
十一、其他操作
端口转发
kubectl port-forward deployment/nginx 8080:80
访问 Pod 内部网络
kubectl exec -it <pod-name> -- ping <service-name>
kubectl exec -it <pod-name> -- curl http://<service-name>:<port>
Debug Pod
kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl exec -it <pod-name> -- bash
十二、 步骤总结
比如现在有laravel/k8s/文件结构:
k8s/
├─ namespace.yaml
├─ mysql-secret.yaml
├─ laravel-deployment.yaml
└─ laravel-service.yaml
# 创建 namespace
kubectl apply -f namespace.yaml
# 创建 Secret
kubectl apply -f mysql-secret.yaml
# 部署 Laravel
kubectl apply -f laravel-deployment.yaml
# 创建 Service
kubectl apply -f laravel-service.yaml
# 查看 Pod 状态
kubectl get pods -n demo -w
# 查看 Service
kubectl get svc -n demo
# 调试 Pod
kubectl logs -n demo <pod-name>
kubectl exec -it -n demo <pod-name> -- bash