按 Enter 键跳转到正文

Kubernetes学习指北之Kubernetes kubectl

Kubernetes学习指北之Kubernetes kubectl

一、 kubectl 介绍

  • kubectl 是 Kubernetes 官方提供的命令行工具,用于与 Kubernetes 集群交互。

  • 它可以管理资源对象(Pods、Deployments、Services 等)、调试问题、查看日志、扩缩容、发布更新等。

  • 本质上,它通过 Kubernetes API 与集群通信。

组件关系示意:

1kubectl <---> kube-apiserver <---> etcd / kubelet / controller-manager / scheduler

二、安装与配置

1. 安装(Linux):

1curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
2chmod +x kubectl
3sudo mv kubectl /usr/local/bin/
4kubectl version --client

2. 配置 kubeconfig

  • 默认路径:~/.kube/config
  • 查看当前配置:
1kubectl config view
2kubectl config current-context
  • 切换 namespace:
1kubectl config set-context --current --namespace=demo

三、基础命令

1. 查看集群信息

1kubectl cluster-info       # 控制面信息
2kubectl version           # 客户端 & 服务端版本
3kubectl api-resources     # 列出可用资源
4kubectl get namespaces    # 查看命名空间

2. 查看节点

1kubectl get nodes
2kubectl describe node <node-name>

四、命名空间管理

1kubectl create namespace demo
2kubectl get namespaces
3kubectl delete namespace demo
  • 使用 -n 指定命名空间:
1kubectl get pods -n demo
2kubectl apply -f deployment.yaml -n demo
  • 设置默认 namespace:
1kubectl config set-context --current --namespace=demo

五、Pods、Deployment、Service 管理

1. 查看资源

1kubectl get pods
2kubectl get deployments
3kubectl get svc
4kubectl get all
5kubectl describe pod <pod-name>

2. 创建 / 更新 / 删除

1kubectl apply -f <file.yaml>    # 创建或更新
2kubectl delete -f <file.yaml>   # 删除

3.Pod 调试

1kubectl logs <pod-name>
2kubectl exec -it <pod-name> -- /bin/bash
3kubectl port-forward <pod-name> 8080:80

4. Deployment 滚动更新与回滚

1kubectl rollout status deployment/<name>
2kubectl rollout history deployment/<name>
3kubectl rollout undo deployment/<name>
4kubectl scale deployment/<name> --replicas=3

六、ConfigMap 和 Secret

1. ConfigMap

1kubectl create configmap my-config --from-literal=key=value
2kubectl apply -f configmap.yaml
3kubectl get configmap
4kubectl describe configmap my-config

2. Secret

1kubectl create secret generic my-secret \
2  --from-literal=username=admin \
3  --from-literal=password=123456
4kubectl get secret
5kubectl describe secret my-secret
  • Secret 可以在 Pod 中挂载为环境变量或文件:
1env:
2- name: DB_USER
3  valueFrom:
4    secretKeyRef:
5      name: my-secret
6      key: username

七、DaemonSet 与 StatefulSet

1kubectl get daemonset -n kube-system
2kubectl describe daemonset <name> -n <namespace>
3
4kubectl get statefulset
5kubectl describe statefulset <name>

八、标签和选择器

  • 查看标签:
1kubectl get pods --show-labels
  • 按标签选择:
1kubectl get pods -l app=nginx
2kubectl label pod <pod-name> env=dev
3kubectl annotate pod <pod-name> key=value

九、资源调试与事件

1kubectl get events
2kubectl describe pod <pod-name>
3kubectl top node
4kubectl top pod

十、批量与导出操作

  • 批量操作:
1kubectl apply -f ./manifests
2kubectl delete -f ./manifests
  • 导出资源:
1kubectl get deployment <name> -o yaml > deployment.yaml
2kubectl get all -n demo -o yaml > demo-all.yaml

十一、其他操作

端口转发

1kubectl port-forward deployment/nginx 8080:80

访问 Pod 内部网络

1kubectl exec -it <pod-name> -- ping <service-name>
2kubectl exec -it <pod-name> -- curl http://<service-name>:<port>

Debug Pod

1kubectl describe pod <pod-name>
2kubectl logs <pod-name>
3kubectl exec -it <pod-name> -- bash

十二、 步骤总结

比如现在有laravel/k8s/文件结构:

k8s/
├─ namespace.yaml
├─ mysql-secret.yaml
├─ laravel-deployment.yaml
└─ laravel-service.yaml
 1# 创建 namespace
 2kubectl apply -f namespace.yaml
 3
 4# 创建 Secret
 5kubectl apply -f mysql-secret.yaml
 6
 7# 部署 Laravel
 8kubectl apply -f laravel-deployment.yaml
 9
10# 创建 Service
11kubectl apply -f laravel-service.yaml
12
13# 查看 Pod 状态
14kubectl get pods -n demo -w
15
16# 查看 Service
17kubectl get svc -n demo
18
19# 调试 Pod
20kubectl logs -n demo <pod-name>
21kubectl exec -it -n demo <pod-name> -- bash

发表评论