kubectl常用命令

  1. 查看pod列表
kubectl get pod
#这个输出提供了 Pod 的详细信息,包括它运行的节点和内部 IP 地址
kubectl get pod -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP           NODE            NOMINATED NODE   READINESS GATES
my-pod-abcde   1/1     Running   0          10h   10.244.1.2   k8s-node01      <none>           <none>
  1. 显示节点Node的详细信息
kubectl describe node 192.168.0.1
  1. 创建或更新资源
kubectl apply -f my-resource.yaml

区别:kubectl create 时,它将基于你提供的 YAML 或 JSON 文件或其他参数来创建一个新的资源实例。如果该资源已经存在,命令将失败。
4. 基于pod.yaml 删除资源

kubectl delete -f pod.yaml
  1. 删除所有包含某个 label 的pod 和 service
kubectl delete pod,svc -l name=<label-name>
  1. 删除所有 Pod
kubectl delete pod --all
  1. 执行 pod 的命令
#在 Kubernetes 环境中用于在指定的 Pod 中执行 date 命令。这个命令会在你指定的 Pod 的容器内运行 date 命令,并返回结果。
kubectl exec <pod-name> -- date
kubectl exec <pod-name> -- bash
kubectl exec <pod-name> -- ping 10.24.51.9
  1. 通过bash获得 pod 中某个容器的TTY(相当于登录容器)
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash
  • 如果该 Pod 只有一个容器,可以省略 -c 部分。
  1. 查看容器日志
kubectl logs <pod-name>
# 实时查看日志
kubectl logs -f <pod-name> 
# 若 pod 只有一个容器,可以不加 -c 
kubectl log  <pod-name>  -c <container_name> 
 # 返回所有标记为 app=frontend 的 pod 的合并日志。 
kubectl logs -l app=frontend
  1. 查看注释
kubectl explain pod
kubectl explain pod.apiVersion
  1. 列出所有节点(Nodes)及它们的标签(Labels)
kubectl get node --show-labels
NAME        STATUS   ROLES    AGE   VERSION   LABELS
node1       Ready    master   10d   v1.19.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node1
node2       Ready    <none>   10d   v1.19.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=node2
  1. 重启 pod
# 删除Pod
kubectl delete pod <pod-name>
# 更新Deployment.这可以通过修改 Deployment 的环境变量、镜像或其他配置来实现。
kubectl set image deployment/<deployment-name> <container-name>=<image>:<tag>
  1. 修改网络类型
kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'
  • patch 是用来更新 Kubernetes 对象的一部分的命令。这个命令使用了 patch 操作来部分更新 Kubernetes 资源,而不是替换整个对象。
  • 资源类型是 service,名称是 istio-ingressgateway。
  • -n istio-system 指定命名空间为 istio-system
  • -p ‘{“spec”:{“type”:“NodePort”}}’ 是要应用的 patch。它是一个 JSON 格式的字符串,指明要更新的内容。这里,它将服务的 type 字段更改为 NodePort。
  1. 伸缩 pod 副本/临时释放集群资源
    可用于将Deployment及其Pod缩小为零个副本,实际上杀死了所有副本。当您将其缩放回1/1时,将创建一个新的Pod,重新启动您的应用程序。
# 设置副本数量为 0,这将导致所有由该 Deployment 管理的 Pod 被终止,临时释放集群资源。
kubectl scale deployment nginx-1 --replicas=0
# 应用重启
kubectl scale deployment nginx-1 --replicas=1
  1. 查看前一个 pod 的日志,logs -p 选项
kubectl logs --tail 100 -p user-klvchen-v1.0-6f67dcc46b-5b4qb > pre.log
  1. 查看Pod中容器的名称
kubectl get pods myapp-pod -o jsonpath={.spec.containers[*].name}
  • 其中 myapp-pod为pod的名称,其它不变
  1. 快速创建service将资源为外部网络访问
kubectl expose [RESOURCE_TYPE] [RESOURCE_NAME] --port=[PORT] --target-port=[TARGET_PORT] [--type=SERVICE_TYPE]

  • [RESOURCE_TYPE] 和 [RESOURCE_NAME] 指定你想要暴露的资源类型和名称。例如,它可以是 deployment, pod, replicaset 等。
  • –port 是 Service 对外开放的端口。
  • –target-port 是流量将被转发到的 Pod 的端口。如果省略,默认与 --port 相同。
  • –type 定义了 Service 的类型。常见的类型包括 ClusterIP(默认,只在集群内部可访问)、NodePort(在每个节点上打开一个端口,从集群外部可访问)和 LoadBalancer(使用云提供商的负载均衡器提供外部访问)。

暴露 Deployment:

kubectl expose deployment my-deployment --port=80 --type=NodePort
  1. 生成sercet文件,通过 --from-literal 定义参数值
kubectl create secret generic secret-name from-literal=username=user --from-literal=password='****'
  • 在 Kubernetes 中用于创建一个名为 secret-name 的新的通用类型的 Secret。这个 Secret 包含两个键值对:username=user 和 password=****。
  • create secret generic 是用于创建一个新的 Secret 的命令。generic 表示这是一个通用的 Secret 类型,可用于存储任意键值对。
  • –from-literal 是一个标志,用于直接在命令行中指定 Secret 的内容。每个 --from-literal 后面跟着一个键值对。
  • username=user 和 password=‘****’ 是存储在 Secret 中的数据。在这个例子中,它存储了一个用户名和一个密码。
  1. kubectl wait等待pod
    $ kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [–for=delete|–for condition=available|–for=jsonpath=‘{}’=value]
    kubectl wait --namespace ingress-nginx --for=condition=ready pod --selector=app.kubernetes.io/component=controller --timeout=120s

  2. 将一个或多个本地端口转发到 Kubernetes 集群中的 Pod
    若pod内服务没有通过service对外暴露的话,无法去调试pod内的服务,使用kubectl port-forward

kubectl port-forward [POD_NAME] [LOCAL_PORT]:[POD_PORT]
  • [POD_NAME]:你想要转发到的 Pod 的名称。
  • [LOCAL_PORT]:你的本地机器上的端口号。
  • [POD_PORT]:Pod 中正在监听的端口号。
    转发到 Pod:
    假设你有一个名为 my-pod 的 Pod,在 8080 端口上运行一个 web 服务,你想在本地的 9090 端口上访问这个服务:
kubectl port-forward my-pod 9090:8080

这会将本地的 9090 端口转发到 my-pod 的 8080 端口。

  1. 复制文件
# 将本地文件复制到容器中:
kubectl cp ./local/file.txt <pod-name>:<container-path>
# 从容器复制文件到本地:
kubectl cp <pod-name>:<container-path>/file.txt ./local/
# 复制子容器中的文件:
kubectl cp <pod-name>:<container-name>/file.txt ./local/
# 使用多个源和目标路径进行批量复制:
kubectl cp <source-pod>:<source-path> <destination-pod>:<destination-path>
  1. 升级镜像
kubectl set image deploy/nginx-deployment nginx=nginx:1.11
  1. 查看发布状态
kubectl rollout status deploy/nginx-deployment
  1. 查看deployment历史修订版本,显示历史有两个版本
kubectl rollout history deploy/nginx-deployment
  1. 查看【1】版本
kubectl rollout history deploy/nginx-deployment --revision=1
  1. 扩容、缩容(指定–replicas的数量)
kubectl scale deploy/nginx-deployment --replicas=5
  1. 查看【3】版本的详细信息。
kubectl rollout history deploy/nginx-deployment --revision=3
  1. 回滚版本
# 回滚到上一个版本
kubectl rollout undo deploy/nginx-deployment
# 回滚到指定版本
kubectl rollout undo deploy/nginx-deployment --to-revision=1
  1. 获取Namespaces
kubectl get ns
NAME              STATUS   AGE
default           Active   10d
kube-system       Active   10d
kube-public       Active   10d
my-custom-ns      Active   3d

  1. 当前命名空间下大部分常见类型的资源列表。这包括 Pods、Services、Deployments、ReplicaSets 等。
kubectl get all
  • Pods (Pod):显示所有 Pod,包括运行状态、就绪状态等。
  • Services (Svc):显示所有服务,包括类型、集群内部 IP 等。
  • Deployments (Deploy):显示所有部署,包括期望的副本数、就绪副本数等。
  • ReplicaSets (RS):显示所有副本集,通常是由 Deployment 管理的。
  • 可能还包括 DaemonSets、StatefulSets 等其他资源,取决于你的集群中有哪些资源。
  • 要查看所有命名空间的资源,可以添加 -A 或 --all-namespaces 标志。
  • 不包括诸如 Ingress、ConfigMap、Secret、PersistentVolumeClaims 等资源.
  1. 导出集群configMap,deployment,service,secret
kubectl get service serviceName -o yaml > backup.yaml
  1. 文档
    https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#

你可能感兴趣的:(kubelet)