Kubernetes-命令


文档摘要

Kubectl config current-context Kubectl config use-context source /usr/share/nginx/html/index.html'; done kubectl explain hpa kubectl explain svc --label-columns failure-domain.beta.kubernetes.io/region,failure-domain.beta.kubernetes.io/zone kubectl get nodes -o wide -L beta.kubernetes.io/arch -L beta.kubernetes.io/os -L beta.kubernetes.

## Kubernetes - 命令 ![kubernetes](https://img.shields.io/badge/kubernetes-命令-blue?style=for-the-badge) ************************** ### Kubectl? * "Kubectl 是一个命令行界面,它允许你在 Kubernetes 集群上执行命令。" 我们将通过这种方式在集群上执行各种操作。 * Kubectl 依赖于 kubeconfig。这是一个配置文件,用于访问一个或多个集群。要了解配置了哪个集群,我们可以使用: ``` Kubectl config current-context ``` * 如果我们想在配置中切换集群,可以使用: ``` Kubectl config use-context ``` *************************** ### 客户端配置 - 在 bash 中设置自动补全;首先需要安装 bash-completion 包 ``` source <(kubectl completion bash) ``` - 查看 Kubernetes 配置 ``` kubectl config view``` - 通过 json 路径查看特定的配置项 ``` kubectl config view -o jsonpath='{.users[?(@.name == "k8s")].user.password}' ``` - 为 foo.kuberntes.com 设置凭证 ``` kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword ``` *************************** ### 查看、查找资源 - 列出命名空间中的所有服务 ``` kubectl get services ``` - 以宽格式列出所有命名空间中的所有 Pod ``` kubectl get pods -o wide --all-namespaces ``` - 以 JSON(或 YAML)格式列出所有 Pod ``` kubectl get pods -o json ``` - 描述资源详情(节点、Pod、服务) ``` kubectl describe nodes my-node ``` - 按名称列出服务 ``` kubectl get services --sort-by=.metadata.name ``` - 按重启次数列出 Pod ```kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'``` - 对前端 v1 的 Pod 进行滚动更新 ``` kubectl rolling-update frontend-v1 -f frontend-v2.json ``` - 将名为 'foo' 的 ReplicaSet 扩展到 3 ``` kubectl scale --replicas=3 rs/foo ``` - 将 'foo.yaml' 中指定的资源扩展到 3 ``` kubectl scale --replicas=3 -f foo.yaml ``` - 在每个 Pod/副本上执行命令 ``` for i in 0 1; do kubectl exec foo-$i -- sh -c 'echo $(hostname) > /usr/share/nginx/html/index.html'; done ``` ### 解释资源 ``` kubectl explain hpa ``` ```kubectl explain svc``` ### 获取节点的区域和区域 ### kubectl get nodes ```--label-columns failure-domain.beta.kubernetes.io/region,failure-domain.beta.kubernetes.io/zone``` ### 获取架构、操作系统、实例类型和节点类型(如果使用 kops) ```kubectl get nodes -o wide -L beta.kubernetes.io/arch -L beta.kubernetes.io/os -L beta.kubernetes.io/instance-type -L kops.k8s.io/instancegroupkubectl get nodes -L beta.kubernetes.io/arch -L beta.kubernetes.io/os -L beta.kubernetes.io/instance-type -L kops.k8s.io/instancegroup``` ### 仅获取节点版本和名称 ```kubectl get nodes -o custom-columns=NAME:.metadata.name,VER:.status.nodeInfo.kubeletVersion``` ### 获取可调度节点 ```kubectl get nodes --output 'jsonpath={range $.items[*]}{.metadata.name} {.spec.taints[*].effect}{"\n"}{end}' | awk '!/NoSchedule/{print $1}'``` ### 获取所有部署的名称 ```kubectl get deployment -o=jsonpath={.items[*].metadata.name}``` ### 仅获取第一个部署 ```kubectl get deployment -o=jsonpath={.items[0].metadata.name}``` ### 仅获取所有 Pod 的状态 ```kubectl get pods -o=jsonpath=‘{.items[*].status.phase}’ --all-namespaces``` ### 获取 Pod 的 QoS ```kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,QOS-CLASS:.status.qosClass``` ### 获取正在运行的镜像 ```kubectl get pod -o=jsonpath='{.spec.containers[*].image}' --all-namespaces``` ```kubectl get pod -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image --all-namespaces``` ### 我的 Pod 运行在哪里 ```kubectl get pods -n sock-shop -l name=carts -o wide``` ### 检查节点/Pod 的内存和 CPU 使用情况 ```kubectl top nodes``` ```kubectl top pods``` ### 检查 etcd 的健康状况 ```kubectl get --raw=/healthz/etcd``` ### 检查节点自动缩放器的状态 ```kubectl describe configmap cluster-autoscaler-status -n kube-system``` ### 获取 Pod 运行的节点名 ```kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName --all-namespaceskubectl get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name --all-namespaces``` ### 示例:按节点名排序 Pod: ```kubectl get pods -o wide --sort-by="{.spec.nodeName}"``` ### 示例:使用标签过滤获取 Pod: ```bash for n in $(kubectl get nodes -l your_label_key=your_label_value --no-headers | cut -d " " -f1); do kubectl get pods --all-namespaces --no-headers --field-selector spec.nodeName=${n} done
  • 或按重启次数

kubectl get pods --sort-by="{.status.containerStatuses[:1].restartCount}"

获取 Pod 内容器的名称

kubectl get pods prometheus-prometheus-operator-prometheus-0 -o jsonpath='{.spec.containers[*].name}'

获取磁盘空间

kubectl exec -i -t prometheus-prometheus-operator-prometheus-0 -c thanos-sidecar -n monitoring -- df -h

示例:使用 —template 标志按节点名过滤:

$ kubectl get nodes NAME STATUS AGE ip-254-0-90-30.ec2.internal Ready 2d ip-254-0-90-35.ec2.internal Ready 2d ip-254-0-90-50.ec2.internal Ready,SchedulingDisabled 2d ip-254-0-91-60.ec2.internal Ready 2d ip-254-0-91-65.ec2.internal Ready 2d $ kubectl get pods --template '{{range .items}}{{if eq .spec.nodeName "ip-254-0-90-30.ec2.internal"}}{{.metadata.name}}{{"\n"}}{{end}}}{{end}}' filebeat-000 app-0000 node-exporter-0000 prometheus-000

查找未运行的 Pod

kubectl get pods --field-selector=status.phase!=Running --all-namespaces

按角色、年龄和 kubelet 版本排序节点

kubectl get nodes --sort-by={.metadata.labels."kubernetes\.io\/role"}kubectl get node --sort-by={.status.nodeInfo.kubeletVersion}watch kubectl get node --sort-by={.status.nodeInfo.kubeletVersion} watch "kubectl get nodes --sort-by={.metadata.labels.\"kubernetes\.io\/role\"}"kubectl get nodes --sort-by=".status.conditions[?(@.reason == 'KubeletReady' )].lastTransitionTime"

查询 API 服务器

kubectl get --raw=/apis
kubectl get --raw=/logs/kube-apiserver.log

使用限制和请求设置部署

kubectl run ken-test --image=kenichishibata/docker-curl -i --tty --limits='cpu=50m,memory=128Mi' --requests='cpu=50m,memory=128Mi'
kubectl delete deployment ken-test

获取单个资源的事件

kubectl get event --field-selector=involvedObject.name =foo -w

获取 API 资源

检查可用的 API 资源,这应该显示你的 CRD API 端点

kubectl api-resources
kubectl api-versions

检查已添加的 API 服务(注册)

kubectl get apiservices.apiregistration.k8s.io
kubectl get apiservices.apiregistration.k8s.io v1beta1.metrics.k8s.io -o yaml

检查 HPA(可能因为你在 Prometheus 中启用了自定义指标)

kubectl get hpa
kubectl get hpa --all-namespaces kubectl get --raw /apis/metrics.k8s.io

Kube Diff

kubectl alpha diff -h

运行 Pod Shell

apiVersion: v1 kind: Pod metadata: name: testing namespace: monitoring spec: serviceAccountName: build-robot automountServiceAccountToken: false containers: - image: alpine:3.2 command: - /bin/sh - "-c" - "sleep 60m" imagePullPolicy: IfNotPresent name: alpine restartPolicy: Always

kubectl apply -f testing.yaml --namespace=monitoring

kubectl exec -ti testing --namespace=monitoring -- sh

kubectl run -it testing --image testing --namespace monitoring /bin/sh

资源管理

  • 从文件或文件夹创建一个或多个资源。

kubectl create -f FILE

  • 从文件应用配置更改到资源。

kubectl apply -f FILE

  • 从配置文件或直接从资源名称删除一个或多个 Kubernetes 资源。

  • 例如 Kubectl delete my_pod (在集群上销毁名为 my_pod 的 Pod)

    kubectl delete (-f FILE | TYPE [PREFIX_NAME | NAME])

  • 允许你将本地端口暴露到 Kubernetes 集群上运行的 Pod 的端口。这对于调试很有用。
    • 例如 Kubectl port-forward my_pod 80:3000 (将 Pod my_pod 的端口 3000 暴露到本地端口 80)

kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT

  • 在 Kubernetes 集群上运行资源。

    • 例如 kKubectl run -i --tty busybox --image=busybox -- sh
    • -> 以交互式 Shell 运行 Pod

    kubectl run NAME --image=image [--env=”key=value”] [--port=port] [--replicas=replicas]

  • 获取 Pod 或服务的文档

kubectl explain pods,svc

  • 创建如 Pod、服务或 DaemonSet 类型的资源

kubectl create -f ./my-manifest.yaml

  • 应用配置到资源

kubectl apply -f ./my-manifest.yaml

  • 启动一个 Nginx 实例

kubectl run nginx --image=nginx

  • 创建具有多个键的 Secret
cat <<EOF | kubectl create -f - apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: password: $(echo "s33msi4" | base64) username: $(echo "jane"| base64) EOF
  • 删除资源

kubectl delete -f ./my-manifest.yaml

监控与日志记录

  • Kubectl 监控命令

    Kubectl get pods

此命令列出了 Kubernetes 集群上的 Pod。这个命令适用于所有类型的 Kubernetes 资源:Pod、服务、部署、CronJobs、事件、Ingress 等。我们还可以添加参数:

  • --all-namespaces: 列出所有命名空间中的所有资源。

  • -o wide: 以更详细的格式列出所有资源。

    Kubectl describe pod

描述命令提供了 Pod 的详细信息,不同于 get 和基本显示。这在 Pod 无法启动时非常有用。

例如:Kubectl describe pods my-pod。

kubectl logs [-f] POD [-c CONTAINER]

此命令显示您的 Pod 的日志。当我们想显示一个多容器 Pod 的日志时,可以添加 -c container 参数。-f 命令会持续显示日志输出(流式)。

例如:Kubectl logs -f my_pod -c my_app

-> 流式显示 my_pod Pod 上 my_app 容器的日志。

kubectl top pod POD_NAME --containers

显示给定 Pod 及其容器在 Kubernetes 集群中的指标。

  • 从 GitHub 仓库部署 Heapster

kubectl create -f deploy/kube-config/standalone/

  • 显示节点的指标

kubectl top node

  • 显示 Pod 的指标

kubectl top pod

  • 显示给定 Pod 及其容器的指标

kubectl top pod pod_name --containers

  • 转储 Pod 日志(标准输出)

kubectl logs pod_name

  • 流式显示 Pod 容器日志(标准输出,多容器情况)

kubectl logs -f pod_name -c my-container

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


发布者: 作者: 转发
评论区 (0)
U