强烈推荐:8个Kubernetes运维的技巧

点击左上方关注 “ 新钛云服 ”

在本文中,我们将探索一些技巧和窍门,这些技巧将使使用Kubernetes更加容易。下面给出的大多数技巧都使用kubectl,这是一个功能强大的命令行工具,可让您对Kubernetes集群执行命令。

1.设置默认namespace

您可以使用namespace(例如,Dev1,Dev2,QA1,QA2等)将Kubernetes集群划分为多个环境,并且每个环境可以由不同的用户管理。运行kubectl命令的不便之一是,每次编写命令时,都需要在最后使用该--namespace 选项。运维人员通常会忘记这一点,最终在错误的namespace中创建对象(pod,service,deployment)。

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

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

下面列出了一些最常用和有用的namespace命令:

  • kubectl get namespaces

  • kubectl create namespace mynamespace

  • kubectl get pods --all-namespaces (列出所有namespace中具有状态的所有Pod。)

  • kubectl get po -o wide -n <namspace1> -n <namespace2> -n <namespace3> (此命令将标识每个namespace中的容器)

  • kubectl describe namespace <namespace>

  • kubectl config view --minify | grep namespace (此命令将确保您为当前上下文正确设置namespace。)


2.配置常用的aliases别名以节省时间

Kubernetes命令可能很长,因此设置一些别名来运行kubectl非常有帮助。您将不再需要一遍又一遍地拼出完整的命令,当您想在一个会话中执行多个Kubernetes命令时,您的工作变得更加轻松。

我们在下面列出了一些常用命令的别名。在执行kubectl命令之前运行这些命令,以节省一些时间。示例:您只需要输入 k 而不是输入 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='vils -rt | tail-1'`

  • alias kga='k get pod --all-namespaces'

  • alias kgaa='kubectl get all --show-labels'


3.使用vi编辑YAML

有许多不同的编辑器可用于编写YAML文件,但是在很多时候,您可能需要在终端上快速调整生成的YAML。这是使用我们经常使用vi的地方,vi是最初为Unix操作系统创建的文本编辑器。

Vi编辑器有据可查,并且得到了开源社区很好的支持。但是,创建YAML文件时vi编辑器的问题之一是格式问题。我们需要一种缩进制表符并与空格对齐的方法。在编辑YAML文件时,总是使用制表符和空格键来产生空格(例如,在按回车键时,将2个空格作为YAML的默认值)。

创建 ~/.vimrc 并添加以下内容,从而使创建YAML文件并用vi编辑变得更加容易:

  • set smarttab

  • set expandtab

  • set shiftwidth=4

  • set tabstop=4

  • set number


4.从kubectl命令创建YAML

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

大多数人会认为,使用YAML文件很无聊,而Kubernetes的YAML文件可能非常冗长且难以从头开始创建。使用kubectl命令而不是使用编辑器从空白页创建YAML文件要容易得多。

以下命令将创建一个YAML文件 yamlfile。通过这些kubectl命令创建YAML文件后,您可以根据需要对其进行修改并使用它,而不用从头开始编写:

  • 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 (最后的增加 --bin 。这将创建yaml文件。)

创建YAML文件的另一个好办法是使用wget 命令直接从Internet获得文件 。

5.在Kubernetes namespace之间切换

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

有几种工具可以提供帮助,但是我们喜欢使用kubectx和kubens分别管理上下文和namespace。您可以在此处(https://github.com/ahmetb/kubectx/)找到kubectx和kubens的详细信息。

这是如何下载用于kubectx和kubens实用程序的Linux二进制文件:

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

  • wget https://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

最后,将它们移至PATH:

  • sudo mv kubectx /usr/local/bin

  • sudo mv kubens /usr/local/bin

安装后,您可以简单地使用kubens列出namespace并在它们之间切换:

当使用多个集群时,kubectx使在上下文之间切换变得轻而易举:

6. Shell自动补全

您知道kubectl为BASH和ZSH提供自动完成功能吗?这是一个可选配置。

假设您了解Kubernetes的概念并且对kubectl有一定的经验,但是也许您不太擅长记住命令。首先安装bash-completion,然后启用kubectl自动补全。您可以在适用于您环境的“ Install and Set kubectl(https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion) ”文档页面中找到所有详细信息。

以下是具有自动完成功能的配置选项:


7.查看资源利用率

Top命令可能是监视进程和系统资源的最受欢迎的工具之一。它提供了一个基于字符的简单界面,可以快速访问关键信息。

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

每个Pod的资源利用率:

便捷的监视命令可以帮助您以理想的时间间隔显示命令,而不必一遍又一遍地运行它。以下示例使它每五秒钟运行一次(默认值为两秒钟):

watch kubectl top node -n 5

注意: 需要为您的环境下载watch工具。

您的Kubernetes集群也需要运行heapster才能执行top命令,否则您将收到以下错误:“Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)”


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

Kubectl命令提供了apiserver存储的资源的摘要视图。apiserver存储了许多未显示的字段。您可以将kubectl get命令与原始资源输出一起使用,以创建自己的可视化文件和命令。

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

kubectl get deployments -o json

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

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

您甚至可以将输出与jq之类的工具结合使用,以提供不同的可视化效果,过滤输出或将输出提供给其他工具以实现自动化。

例如,在具有多个namespace和部署的集群上很难找到问题,但是下面的示例使用原始API扫描集群中的所有deployment,并仅过滤具有失败副本的deployment:

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返回所有deployment。默认输出为JSON。很难形象化JSON文档的结构,但是您可以通过管道将其传递给jq以获得更好的输出,例如下面的示例:

    kubectl get --raw=/apis/apps/v1/deployments | jq .

  • 请注意,输出中对每个deployment都有一个数组。最后我们要检查这个数组的状态字段。下面的命令显示如何在字段不可用时仅打印所需的数据和默认值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函数仅显示具有不可用副本的deployment:

    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)'

*本文译自 https://www.ibm.com/cloud/blog/8-kubernetes-tips-and-tricks,版权归原作者所有

了解新钛云服

当IPFS遇见云服务|新钛云服与冰河分布式实验室达成战略协议

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

低代码开发,全民开发,淘汰职业程序员!

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值