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