你是哪种工程师?光看外表,有人能猜出来吗?很可能猜不出来。
译自The guide to kubectl I never had.,作者 Jake Page。
如果有人通过观察你的键盘就能猜出来呢?现在可能稍微容易一点了。
当键盘上的“k”键已经磨损时,你就知道自己正在与一位Kubernetes工程师打交道。
在Glasskube办公室,你会发现到处都是备用的 “k” 键,以备不时之需。
当然,我是在开玩笑。
我并不确定磨损的键盘能说明其主人的什么情况。但我确实知道,对于任何想要成为一名熟练的Kubernetes管理员的人来说,kubectl 有多重要。
kubectl 是用于与 Kubernetes API 通信的 CLI 工具,它乍一看似乎很简单,但很快就会变得复杂。
因此,在这篇博文中,我的目标是编写我刚开始时希望拥有的指南。首先关注命令语法和有用的命令,然后再转向插件和工具的充满活力的生态系统,这些插件和工具旨在扩展 kubectl 和 Kubernetes 的功能。
同时分享一些提示和技巧,以及一份有用的 kubectl 速查表。
让我们开始吧。
这不是一篇关于 Kubernetes 的文章。K8s 是一项极其庞大的技术,涵盖了众多概念,例如各种类型的 Kubernetes 对象及其交互。对于此讨论,我假设你熟悉这些概念。相反,我将专门关注 kubectl、它的用法以及围绕它构建的工具。
如果你支持让 Kubernetes 软件包管理对每个人都更好的开源项目,那么请考虑支持Glasskube,在 GitHub 上给我们一颗星。
要安装 kubectl,你可以根据你的操作系统选择一些不同的选项。以下是如何在一些常见平台上安装它:
Linux (Ubuntu/Debian)
sudo apt-get update && sudo apt-get install -y kubectl
使用 Homebrew 的 MacOS
brew install kubectl
使用 Chocolatey 的 Windows
choco install kubernetes-cli
安装后,你可以通过运行以下命令来验证 kubectl 是否已正确安装:
kubectl version --client
kubectl 是一个命令行界面 (CLI) 工具,用于与 Kubernetes API 通信。命令有很多,多到无法记住。
图片
Kubernetes 资源的声明性管理涉及使用 YAML 清单文件指定资源的所需状态,并将这些清单应用到集群。
无论 Kubernetes 对象是由您自己编写的还是由其他人编写的,所有对象均定义在 YAML 文件中。Kubernetes API 就是通过 YAML 文件定义来了解集群状态的:
apiVersion: apps/v1kind: Deploymentmetadata: name: glasskube-deploymentspec: replicas: 3 selector: matchLabels: app: glasskube env: prod template: metadata: labels: app: glasskube env: prod spec: containers: - name: glasskube-container image: your-glasskube-image:latest
若要从头开始创建此部署,请使用 kubectl create 命令:
kubectl create -f glasskube-deployment.yaml
运用 YAML 文件是管理 Kubernetes 资源的标准方法。您可以用 YAML 格式定义您资源的所需状态,并将这些 YAML 文件应用于该集群。
kubectl apply -f manifest.yaml
服务器端应用是将配置更改应用到 Kubernetes 资源的一种较新方法。使用 SSA,变更会直接应用于服务器端,这意味着 Kubernetes API 服务器负责确保实现所需状态。
kubectl apply --server-side -f manifest.yaml
每当我看到一些来回讨论 Kubernetes 的内容时,它到底是什么。它最适合哪些用例以及如何最好地思考它,Kelsey Hightower的同一条推文会浮现在我脑海里。
图片
值得称赞的:
kubectl-cf:一种在 kubeconfig 文件(而不是上下文)之间切换的更快方法。
Kubernetes 集群是复杂的系统,包含许多相互依赖的活动部分,以使您的应用得以运行。始终清晰地了解正在发生的事情至关重要。
K9s是一个方便、轻量级的交互式 Kubernetes 仪表盘,运行在终端中。除了可视化你的 k8s 资源外,你还可以轻松的进入 pods 中,编辑清单,并且在一处管理你的工作负载。这或许是我最喜欢的 Kubernetes 管理工具之一。
安装说明在这里。
图片
一个 kubectl 插件,用于通过对象上的 ownersReferences 探索 Kubernetes 对象之间的所有权关系。
图片
安装说明此处。
值得一提:
kubectl-watch:另一个观察工具,可视化查看 Kubernetes 资源的增量更改。
Inspektor-Gadget:
Inspektor-gadget是用于调试和检查 Kubernetes 资源和应用程序的工具(或小工具)集合。
Inspektor Gadget 工具称为小工具。您可以部署一个、两个或多个小工具。
图片
安装说明此处。
值得一提:
kubectl node-shell:直接在正在运行的节点的主机操作系统中启动根 shell。
Stern:
Stern允许您跟踪 Kubernetes 上的多个 Pod 和 Pod 中的多个容器。每个结果都使用颜色编码,以便更快速地进行调试。
安装:
kubectl krew install stern
使用 kubectl 插件的一些安全影响包括可能的漏洞、权限提升和无意的数据泄露。请确保仅使用积极维护的插件,并且最好在它们周围有一个活跃的社区。
有如此多的 kubectl 命令需要记住,通过使用键盘快捷键或别名来简化您的生活。
您将在此处找到一个存储库,其中包含一个脚本,用于生成数百个方便的 shell 别名 kubectl。问题是许多别名很长,可能难以回忆。不过不用担心,我找到了Benoit Couetil 撰写的这篇非常实用的博客文章,介绍如何处理上述脚本生成的众多别名。
没有速查表,任何指南都是不完整的,对吧?
# Basic Commands# List API Resourceskubectl api-resources# List Resourceskubectl get [name]# Explain Resourceskubectl explain# Working with Pods# Create a new deployment named "nginx-deployment" with the nginx imagekubectl run nginx-deployment --image=nginx# Show Resource Usage of a Podkubectl top pod -n [namespace] [pod-name]# Run Command in Podkubectl run -it [pod-name] --image [image-name] --rm -- [command]# Show Resource Labelskubectl get pods -n [namespace] -L [label1] -L [label2]# Execute Command in Podkubectl exec -it [pod-name] -- [command]# Port Forwardingkubectl port-forward [pod-name] [local-port]:[remote-port]# Filtering Pods by Node Namekubectl get pods --field-selector spec.nodeName=[node-name]# Filtering Pods by Phasekubectl get pods --field-selector status.phase=Running# Delete a pod named "my-pod" in the default namespacekubectl delete pod my-pod# Working with Nodes# Watch Nodes (Old School)watch kubectl get nodes -o wide# Watch Nodes (New School)kubectl get nodes -w# Node Resource Utilizationkubectl top node [node-name]# Get Node Resourcekubectl describe node [node-name]# Working with Deployments, Daemonsets, and StatefulSets# Restart Workloadkubectl rollout restart -n [namespace] [kind]/[name]# Rollout Statuskubectl rollout status [kind]/[name]# Rollout Historykubectl rollout history [kind]/[name]# Scale Deploymentkubectl scale deployment/[name] --replicas=[replica-count]#Update Deployment Imagekubectl set image deployment/[deployment-name] [container-name]=new-image:tag# Watch events related to a deploymentkubectl events -n glasskube-system --for=deployment/glasskube-controller-manager # Delete DaemonSetkubectl delete daemonset [daemonset-name]# Working with Jobs# Run CronJob Manuallykubectl create job -n [namespace] --from=cronjob/[cron-job-name] [job-name]# Working with Secrets# Get Value from Secretkubectl get secret -n [namespace] [secret-name] -o=jsnotallow='{.data.[key]}' | base64 --decode# Create Secretkubectl create secret generic [secret-name] --from-literal=key1=value1 --from-file=ssh-privatekey=~/.ssh/id_rsa# Get a value from a secretkubectl get secrets -n [namespace] [secret-name] --template='{{ .data.[key-name] | base64decode }}'# Working with Containers# Show Container Logskubectl logs -n [namespace] [pod-name] kubectl logs -n [namespace] deployment/[deployment-name]# Run Command in Containerkubectl exec -it -n [namespace] [pod-name] -- [command]# Working Imperatively# Modify Resourcekubectl edit -n [namespace] [resource-kind]/[resource-name]# Delete Resourcekubectl delete [resource-kind]/[resource-name]# Create Resourcekubectl create -f [resource-file]# Working Declaratively# Use Server-Side Apply (SSA)kubectl apply --server-side -f [resource-file]# Events and Logs# Show Events for Resourcekubectl get events -n [namespace] --field-selector involvedObject.kind=[kind] --field-selector involvedObject.name=[name]# Filtering Events by Typekubectl get events --field-selector type=Warning# Filtering Events by Involved Object Namekubectl get events --field-selector involvedObject.name=[resource-name]# Show Resource Usagekubectl top
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-87504-0.html从未有过的Kubectl指南
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com