百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

Kubectl 速查表

connygpt 2024-08-22 12:49 8 浏览

这是一个为您提供快速参考的指南,涵盖了在使用 Kubernetes 时最常见的命令。我们将持续更新并添加更多命令,如果您有任何建议,请随时提出问题或提交拉取请求。

什么是Kubectl

Kubectl 是大多数 Kubernetes 工程师在与 Kubernetes 集群交互时主要使用的工具。它通过与 Kubernetes API 进行交互,将您输入的命令转换为 API 请求,并在 Kubernetes 集群上执行这些请求。

使用 Kubectl,您可以在集群上执行各种操作,例如创建、删除和更新部署、暴露应用程序、检查正在运行的 Pod 的日志,以及监视节点和整个集群的健康状况和容量。

要开始使用 Kubectl,您需要在本地机器上安装它。请参考下一节的安装说明。

通信原理

kubectl和Kubernetes集群之间的通信基于RESTful的HTTP请求和响应。以下图表说明了kubectl如何与Kubernetes资源进行交互:

当您使用 kubectl 发出命令时,该工具会读取您本地机器上的 kubeconfig 文件,并获取与 Kubernetes API 服务器进行身份验证所需的所有必要信息。该文件包括关于 Kubernetes 服务器地址、您的凭据和上下文信息的详细信息。

kubectl 和 API 服务器之间的连接通常通过 TLS 加密来确保没有篡改或窃听发生。

在 API 服务器处理您的请求之前,会进行身份验证和授权。API 服务器会验证您的凭据。Kubernetes 有多种认证方式,详细内容在以下文章中有详细介绍:Kubernetes - RBAC 和 Admission Controllers。

一旦您通过身份验证和授权,kubectl 命令将被转换为符合 Kubernetes API 规范的 API 请求。

该请求通常是一个 RESTful 的 HTTP 请求,包含特定的方法(GET、POST、PUT、DELETE 等)。它还针对相关的 API 端点(例如
/api/v1/namespaces/default/pods),并以 JSON 格式包含必要的数据(如果适用)。请求随后通过安全连接发送到 Kubernetes API 服务器,同时包含必需的标头和您的凭据。

在接收到 API 请求后,API 服务器会对其进行处理并执行必要的操作,例如创建或更新资源。

kubectl 从 Kubernetes API 服务器接收 API 响应,通常包含以 JSON 格式的数据、日志消息等。

最后,kubectl 将消息显示给用户在终端中。

如何安装 Kubectl

要安装 kubectl,您可以按照以下步骤进行操作:

首先,确定您的操作系统。kubectl 可以在 Windows、macOS 和 Linux 上运行。

  • 对于 Windows 用户:

1.下载 kubectl? 的可执行文件。您可以在官方文档中找到适用于 Windows 的最新版本:

2.将下载的 kubectl? 可执行文件移动到您的 PATH 目录下,例如 C:\Windows\System32?,以便在任何位置都可以访问它。

3.打开命令提示符或 PowerShell,并运行以下命令以验证 Kubectl 是否正确安装:

kubectl version
  • 对于 macOS 用户:

使用 Homebrew 包管理器安装 kubectl?。在终端中运行以下命令:

brew install kubectl
  • 对于 Linux 用户:

使用包管理器安装 kubectl?。根据您使用的 Linux 发行版,运行以下命令之一:

  1. Debian/Ubuntu:
sudo apt-get update && sudo apt-get install -y kubectl
  1. CentOS/RHEL:
sudo yum install -y kubectl
  1. Fedora:
sudo dnf install -y kubectl
  1. 其他发行版:请参考您的发行版文档或使用适合您的包管理器来安装 kubectl?。
  • 安装完成后,打开终端(命令提示符或终端窗口)并运行以下命令验证安装是否成功:
kubectl version --client
??

现在,您已经成功安装了 kubectl?,可以使用它与 Kubernetes 集群进行交互并管理资源。

集群信息

以下是一些获取和管理 Kubernetes 集群信息的常用命令:

  • 获取集群信息:
  • kubectl cluster-info
  • 获取集群节点信息:
  • kubectl get nodes
  • 获取集群的命名空间:
kubectl get namespaces
  • 获取集群中所有的 Pod:
kubectl get pods --all-namespaces
  • 获取集群中所有的服务:
kubectl get services --all-namespaces
  • 获取集群中所有的部署:
kubectl get deployments --all-namespaces
  • 获取集群中所有的存储卷:
kubectl get pv
  • 获取集群中所有的持久卷声明:
kubectl get pvc
  • 获取集群中所有的配置映射:
kubectl get configmaps
  • 获取集群中所有的角色:
kubectl get roles
  • 获取集群中所有的角色绑定:
kubectl get rolebindings
  • 获取集群中所有的服务账户:
kubectl get serviceaccounts

这些命令可以帮助您了解集群的整体状态和组件。您可以根据需要进一步扩展和管理集群。

资源管理

使用 Kubectl,您可以管理 Kubernetes 集群中的各种资源。以下是一些常见的资源管理命令:

  • 创建一个资源(例如 Pod、部署或服务):
kubectl create <resource_type> <resource_name>
  • 更新一个资源:
kubectl apply -f <resource_file>
  • 替换一个资源:
kubectl replace -f <resource_file>
  • 删除一个资源:
kubectl delete <resource_type> <resource_name>
  • 删除一个资源文件:
kubectl delete -f <resource_file>
  • 缩放一个部署:
kubectl scale deployment <deployment_name> --replicas=<replica_count>

这些命令可以帮助您创建、更新和删除集群中的资源。您可以根据需要使用适当的命令来管理资源。

检查资源

使用 Kubectl,您可以检查集群中各种资源的状态和详细信息。以下是一些常用的命令:

  • 获取资源的详细信息:
kubectl describe <resource_type> <resource_name>
  • 获取 Pod 的日志:
kubectl logs <pod_name>
  • 获取 Pod 的详细信息:
kubectl describe pod <pod_name>
  • 获取服务的详细信息:
kubectl describe service <service_name>
  • 获取部署的详细信息:
kubectl describe deployment <deployment_name>

这些命令可以帮助您深入了解资源的状态、配置和问题。您可以使用它们来调试和监视集群中的组件。

创建和更新资源

使用 Kubectl,您可以创建和更新各种 Kubernetes 资源。以下是一些常见的命令:

  • 创建一个资源(例如 Pod、部署或服务):
kubectl create <resource_type> <resource_name>
  • 更新一个资源:
kubectl apply -f <resource_file>
  • 替换一个资源:
kubectl replace -f <resource_file>
  • 缩放一个部署:
kubectl scale deployment <deployment_name> --replicas=<replica_count>

这些命令可以帮助您在集群中创建和更新资源。您可以根据需要使用适当的命令来管理资源。

删除资源

使用 Kubectl,您可以删除集群中的各种资源。以下是一些常见的命令:

  • 删除一个资源:
kubectl delete <resource_type> <resource_name>
  • 删除一个资源文件:
kubectl delete -f <resource_file>

这些命令可以帮助您删除集群中不再需要的资源。请谨慎使用删除命令,以免意外删除重要的资源。

扩展部署

使用 Kubectl,您可以扩展部署来增加或减少 Pod 的副本数量。以下是一些常用的命令:

  • 缩放一个部署:
kubectl scale deployment <deployment_name> --replicas=<replica_count>
  • 增加一个部署的副本数量:
kubectl scale deployment <

暴露部署

在本节中,我们将学习如何使用 kubectl 暴露 Kubernetes 部署,使用不同的服务类型:ClusterIP、NodePort 和 LoadBalancer。暴露部署使应用程序可以被用户或其他服务访问,无论是在集群内部还是外部。

要暴露部署,可以使用以下命令:

  • 使用 ClusterIP 服务类型:
kubectl expose deployment <deployment-name> --type=ClusterIP --port=<port>

这将创建一个 ClusterIP 类型的服务,将部署暴露在集群内部。

  • 使用 NodePort 服务类型:
kubectl expose deployment <deployment-name> --type=NodePort --port=<port>

这将创建一个 NodePort 类型的服务,将部署暴露在集群的每个节点上的一个随机端口。

  • 使用 LoadBalancer 服务类型:
kubectl expose deployment <deployment-name> --type=LoadBalancer --port=<port> --target-port=<target-port>

这将创建一个 LoadBalancer 类型的服务,将部署暴露在外部,并为其分配一个负载均衡器。

请注意,负载均衡器服务类型仅在支持负载均衡器的云提供商中受支持。

管理发布

使用以下命令,我们可以管理部署的发布。发布是部署过程的重要组成部分,它允许您在最小化停机时间并确保版本之间的平滑过渡时更新应用程序。

  • 滚动更新部署:
kubectl set image deployment/<deployment-name> <container-name>=<new-image>

这将滚动更新指定部署中的容器,将其镜像更新为新的镜像。

  • 查看发布状态:
kubectl rollout status deployment/<deployment-name>

这将显示指定部署的发布状态,以确定是否完成更新。

  • 回滚发布:
kubectl rollout undo deployment/<deployment-name>

这将回滚指定部署的最近一次发布,将应用程序回退到先前的版本。

处理日志

使用以下命令,我们可以处理 Pod 的日志:

  • 查看 Pod 日志:
kubectl logs <pod-name>

这将显示指定 Pod 的日志。

  • 实时跟踪 Pod 日志:
kubectl logs -f <pod-name>

这将实时跟踪指定 Pod 的日志。

  • 查看容器内特定容器的日志:
kubectl logs <pod-name> -c <container-name>

这将显示指定 Pod 中特定容器的日志。

在容器中执行命令

有时我们需要在容器中执行命令,以便进行特定操作或调试任务。以下是一些在容器中执行命令的示例:

  • 在容器中执行单个命令:
kubectl exec <pod-name> -- <command>

这将在指定 Pod 的容器中执行单个命令。

  • 在容器中启动交互式终端:
kubectl exec -it <pod-name> -- /bin/sh

这将在指定 Pod 的容器中启动一个交互式终端。

  • 非常常见的进入容器的方式
kubectl exec -it <pod-name> -- /bin/bash # Bash shell
# 在容器和本地文件之间复制文件
kubectl cp <pod-name>:<path-to-file> <path-to-local-file> -c <container-name>
kubectl cp <path-to-local-file> <pod-name>:<path-to-file> -c <container-name>

端口转发

使用以下命令,我们可以将本地端口转发到 Pod 或服务的端口。如果应用程序没有直接暴露给外部世界,但您仍然希望访问它,端口转发是一个非常有用的功能。

  • 将本地端口转发到 Pod:
kubectl port-forward <pod-name> <local-port>:<pod-port>

这将将本地端口转发到指定 Pod 的端口。

  • 将本地端口转发到服务:
kubectl port-forward service/<service-name> <local-port>:<service-port>

这将将本地端口转发到指定服务的端口。

标记和注释资源

使用以下命令,我们可以向集群中的资源添加标签和注释。这对于组织和分组资源以及向资源附加元数据非常有用。

  • 添加标签到资源:
kubectl label <resource-type> <resource-name> <key>=<value>

这将向指定资源添加标签。

  • 添加注释到资源:
kubectl annotate <resource-type> <resource-name> <key>=<value>

这将向指定资源添加注释。

Taints and Tolerations

Taints 和 Tolerations 是控制 Pod 在节点上调度的一种方式。例如,我们可以使用 Taints 来防止 Pod 被调度到具有敏感数据的节点上。

Taints 应用于节点,指定了节点上的特殊条件。而 Tolerations 应用于 Pod,允许(但不要求)Pod 调度到具有匹配 Taints 的节点上。

  • 添加 Taints 到节点:
kubectl taint nodes <node-name> <key>=<value>:<effect>

这将向指定节点添加 Taints。

  • 添加 Tolerations 到 Pod 配置:
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  tolerations:
  - key: "<key>"
    operator: "<operator>"
    value: "<value>"
    effect: "<effect>"

这将在 Pod 配置中添加 Tolerations。

配置Kubectl

kubectl config view # 显示合并的kubeconfig设置或指定的kubeconfig文件
kubectl config view --minify --output 'jsonpath={..namespace}' # 显示当前上下文中的命名空间
kubectl config current-context # 显示当前上下文
kubectl config use-context <context-name> # 在kubeconfig文件中设置当前上下文
kubectl config set-context <context-name> # 在kubeconfig中设置上下文条目
kubectl config set-cluster <cluster-name> # 在kubeconfig中设置集群条目
kubectl config set-credentials <user-name> # 在kubeconfig中设置用户条目
kubectl config unset users.<name> # 在kubeconfig中取消设置用户条目

在kubeconfig中设置集群条目

kubectl config set-cluster <cluster-name> \
  --certificate-authority=<path-to-ca-file> \
  --embed-certs=<true|false> \
  --server=<address-and-port-of-api-server> \
  --kubeconfig=<path-to-kubeconfig-file>

Dry Run

Dry run允许您预览将要对集群进行的更改,而不实际应用这些更改。这对于调试和测试非常有用。

kubectl apply --dry-run=client -f <file-name>

循环遍历资源

有时候需要循环遍历资源。例如,您想要删除命名空间中的所有Pod,可以使用以下命令完成。

kubectl get pods -o name | cut -d/ -f2 | xargs -I {} kubectl delete pod {}
for pod in $(kubectl get pods -o name | cut -d/ -f2); do kubectl delete pod $pod; done

循环遍历Secret数据项并打印出来

kubectl get secrets -o json | jq -r '.items[] | .metadata.name as $name | .data | to_entries[] | "\($name) \(.key): \((.value|@base64d))"'

使用cat?? 命令创建资源

使用 cat?? 命令可以从stdin创建资源

cat <<EOF | kubectl create -f -
# 创建一个名为nginx的Pod
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
EOF

获取API资源

kubectl api-resources
kubectl api-resources --namespaced=true # 获取命名空间资源
# 如何从kubectl获取curl调用,日志级别为9
kubectl get pods -v=9  2>&1 | grep curl # 获取特定资源的curl调用
kubectl get pods -v=9  2>&1 | grep curl | sed 's/.*curl -k -v -XGET/https/' | sed 's/ -H .*//' # 获取特定资源的curl调用

合并Kubeconfig文件

假设我们有两个Kubeconfig文件:config1??和config2??,我们可以使用以下命令将它们合并为一个文件。

KUBECONFIG=config1:config2 kubectl config view --flatten > merged-config

这将创建一个名为merged-config??的新文件,其中包含来自config1??和config2??的配置信息。

请注意,合并后的文件中的配置顺序将遵循KUBECONFIG??环境变量中指定的顺序。

更多

如果您对我分享的微服治理相关工具感兴趣,可以关注我了解更多微服务治理相关主题专栏:

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&amp;Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick &#39;n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...