8个kubernetes提示和技巧

6 min read

在本文中,我们将探讨一些提示和技巧,使其更容易与Kubernetes合作。

下面给出的大多数提示都使用kubectl,这是一个强大的命令行工具,允许您对Kubernetes集群执行命令。

Kubernetes背景

如果您在跳入这些提示之前需要Kubernetes上的一些背景,请参阅以下资源:

1.设置默认名称空间

You can divide a Kubernetes cluster into multiple environments by using namespaces (e.g., Dev1, Dev2, QA1, QA2, etc.), and each environment can be managed by a different user. One of the inconveniences of writing kubectl commands is that every time you write a command, you need the --namespace option at the end. People often forget this and end up creating objects (pods, services, deployments) in the wrong namespace. 

使用此技巧,您可以在运行kubectl命令之前设置命名空间首选项。在执行kubectl命令之前运行以下命令,它将为当前上下文保存所有后续kubectl命令的命名空间:

kubectl config set-context $(kubectl config current-context) --namespace=mynamespace

以下列名空间中的一些最常见和最有用的命令如下所示:

  • kubectl get namespaces
  • kubectl create namespace mynamespace
  • kubectl get pods --all-namespaces (列出所有名称空间的状态的所有窗口。)
  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (此命令将识别每个命名空间中的吊舱)
  • kubectl describe namespace <namespace>
  • kubectl config view --minify | grep namespace (此命令将确保正确设置当前上下文的命名空间。) 

2.有用的别名节省时间

Kubernetes命令可能非常冗长,因此为运行kubectl设置一些别名是非常有帮助的。您将不再需要在一次会话中执行多个Kubernetes命令时,使您的生活更轻松地删除全部命令。

We have listed aliases for some frequently used commands below. Run these before executing kubectl commands to save yourself some time. Example: You just need to type k instead of typing kubectl:

  • alias k='kubectl'
  • alias kc='k config view --minify | grep name'
  • alias kdp='kubectl describe pod'
  • alias krh='kubectl run --help | more'
  • alias ugh='kubectl get --help | more'
  • alias c='clear'
  • alias kd='kubectl describe pod'
  • alias ke='kubectl explain'
  • alias kf='kubectl create -f'
  • alias kg='kubectl get pods --show-labels'
  • alias kr='kubectl replace -f'
  • alias kh='kubectl --help | more'
  • alias krh='kubectl run --help | more'
  • alias ks='kubectl get namespaces'
  • alias l='ls -lrt'
  • alias ll='vi ls -rt |尾巴-1'
  • alias kga='k get pod --all-namespaces'
  • alias kgaa='kubectl get all --show-labels'

3. vi yaml编辑

有许多不同的编辑器可用于编写YAML文件,但是您可能需要多次,您可能需要快速调整生成的YAML和在终端上工作时。这是一个使用我们可信赖的VI的好地方,最初为UNIX操作系统创建的文本编辑器。

VI编辑器已良好记录,并支持充满活力的开源社区。但是,在创建yaml文件时,VI编辑器的问题是空间问题。我们需要一种方法来缩进标签并与空格对齐。使用标签与空格的空格始终在编写YAML文件时始终创建语法问题(例如,在击中回车返回时将2空间yaml作为默认值。

The solution? Create a ~/.vimrc file with these lines before creating YAML files with the vi editor to make editing easier:

  • set smarttab
  • set expandtab
  • set shiftwidth=4
  • set tabstop=4
  • set number

4.从kubectl命令创建yaml 

我们可以使用kubectl命令从命令行创建复杂的yaml文件。

大多数人都同意与yaml文件合作没有乐趣,kubernetes yaml文件可以非常详细,难以从头开始创建。从kubectl命令创建yaml文件而不是使用编辑器从空白页面创建yaml文件要容易得多。

The following commands will create a YAML file with name yamlfile. Once you create the YAML file from these kubectl commands, you can modify it based on your requirements and use it instead of writing from scratch:

  • kubectl run busybox --image=busybox --dry-run=client -o yaml --restart=Never > yamlfile.yaml
  • kubectl create job my-job --dry-run=client -o yaml --image=busybox -- date  > yamlfile.yaml
  • kubectl get -o yaml deploy/nginx > 1.yaml (Ensure that you have a deployment named as nginx)
  • kubectl run busybox --image=busybox --dry-run=client -o yaml --restart=Never -- /bin/sh -c "while true; do echo hello; echo hello again;done" > yamlfile.yaml
  • kubectl run wordpress --image=wordpress –-expose –-port=8989 --restart=Never -o yaml
  • kubectl run test --image=busybox --restart=Never --dry-run=client -o yaml -- bin/sh -c 'echo test;sleep 100' > yamlfile.yaml  (Notice that --bin comes at the end. This will create yaml file.)

Another good idea for creating the YAML file is obtaining the file directly from the internet using the wget command. 

5.在Kubernetes名称空间之间切换

在提示1中,我们学习了一些有用的命令来使用Kubernetes命名空间并保存它们,以便您不必添加到每个命令。让我们展开提示,使得更容易在命名空间和kubectl上下文之间切换。

有几个可以帮助的工具,但我们喜欢Kubectx和Kubens分别用于管理上下文和命名空间。您可以找到Kubectx和Kubens的详细信息 这里.

以下是如何下载Kubectx和Kubens实用程序的Linux二进制文件:

  • wget //github.com/ahmetb/kubectx/releases/download/v0.9.0/kubectx_v0.9.0_linux_x86_64.tar.gz
  • wget //github.com/ahmetb/kubectx/releases/download/v0.9.0/kubens_v0.9.0_linux_x86_64.tar.gz

然后,使用以下命令提取它们:

  • tar -xvf kubectx_v0.9.0_linux_x86_64.tar.gz
  • tar -xvf kubens_v0.9.0_linux_x86_64.tar.gz

最后,您将它们移动到您的路径:

  • sudo mv kubectx /usr/local/bin
  • sudo mv kubens /usr/local/bin

安装后,您可以简单地使用Kubens列出命名空间并在它们之间切换:

安装后,您可以简单地使用Kubens列出命名空间并在它们之间切换:

在使用多个集群时,kubectx在上下文之间切换:

在使用多个集群时,kubectx在上下文之间切换:

6. shell自动完成

您是否知道Kubectl提供了Bash和ZSH的自动完成?这是一个可选配置。

让我们说你了解Kubernetes的概念,并有一些与kubect的经历,但也许你不是那么擅长记忆命令。首先,您安装BASH完成,然后启用kubectl自动完成。您可以找到“所有细节”安装和设置kubectl“您环境的文档页面。

以下是具有自动填充功能的配置选项:

以下是具有自动填充功能的配置选项:

现在,只是标签外!

7.查看资源利用率

TOP命令可能是监视进程和系统资源的最流行的工具之一。它提供了一个简单的基于字符的界面,并快速访问至关重要的信息。

您可以看到每个节点的资源利用率:

您可以看到每个节点的资源利用率:

每个POD的资源利用率:

每个POD的资源利用率:

而且可以帮助您以期望的时间间隔显示命令,而无需在又一遍地运行它。以下示例使其每五秒运行一次(默认为两秒钟): 

watch kubectl top node -n 5

笔记: 需要下载Watch命令为您的环境。

您的Kubernetes群集也需要运行Heapster才能进行顶部命令工作,否则您将收到以下错误: “来自服务器的错误(NotFound):服务器找不到所请求的资源(获取服务http:heapster :)”

了解如何启用Heapster附加组件。

8.扩展kubectl并使用原始输出创建自己的命令

Kubectl命令提供了Apiserver存储的资源的总结视图。未显示的APIServer存储了许多字段。您可以使用kubectl get命令使用原始资源输出来创建自己的可视化和命令。 

您可以使用以下命令在JSON中打印原始资源:

kubectl get deployments -o json

您还可以使用API​​调用直接调用资源:

kubectl get --raw=/apis/apps/v1/deployments

您甚至可以将输出与工具相结合 JQ. 提供不同的可视化,过滤输出,或将输出馈送到其他工具以进行预先自动化。 

例如,很难在具有多个命名空间和部署的群集上找到群集问题,但下面的示例使用原始API扫描群集中的所有部署,仅筛选具有失败副本的部署:

kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | {name: .metadata.name, replicas: .status.replicas, available: (.status.availableReplicas // 0), unavailable: (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

以下是对上述命令的快速说明:

  • 首先,我们调用Kubernetes API来返回所有部署。默认输出位于JSON中。很难可视化JSON文档的结构,但您可以将JQ管用于JQ以获得更好的主意,如下示例:
    kubectl get --raw=/apis/apps/v1/deployments | jq .
  • 请注意,响应文件有一系列 项目 每个部署。我们想检查 状态 最终一直阵列的字段。下面的命令显示了如何仅在字段不可用时打印所需的数据以及0的默认值为0:
    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | {name: .metadata.name, replicas: .status.replicas, available: (.status.availableReplicas // 0), unavailable: (.status.unavailableReplicas // 0)}'
  • 拼图的最后一部分使用 选择 仅使用不可用的副本显示部署:
    kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | {name: .metadata.name, replicas: .status.replicas, available: (.status.availableReplicas // 0), unavailable: (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

概括

我们希望您发现这些提示和诀窍在于您使用Kubernetes。让我们知道如果您有最喜欢的提示或您希望分享的技巧。

别忘了看看 IBM Cloud Kubernetes服务 并将这些提示和技巧用来使用。

想要获得一些免费的,实践与Kubernetes的经验?利用IBM CloudLab,提供的新型互动平台提供 Kubernetes教程 具有认证 - 无需成本或配置。

是第一个听到IBM Cloud的新闻,产品更新和创新的人