教年轻 AIoT 创业者如何从 0 到 1 实现AIoT 创业项目 了解详情
写点什么

如何提升 Kubernetes 生产力?我有 5 个实用技巧分享给你

  • 2019-08-15
  • 本文字数:2617 字

    阅读完需:约 9 分钟

如何提升Kubernetes生产力?我有5个实用技巧分享给你

在观察和阅读很多其它人操作 Kubernetes 和 Istio 的过程中,我了解到了他们为了进一步提高生产力,在搭建环境以及使用各类工具、技巧和诀窍过程中积累的经验。本文总结了我每天都会使用的 5 个技巧和工具,它们进一步提高了我操作 Kubernetes 和 Istio 时的生产力。

1.在 Kubernetes 上下文之间切换

如果同时运行本地 Kubernetes 实例以及一个或多个云端 Kubernetes 实例,那么你可能时不时就需要在不同上下文之间切换。Kubernetes CLI(kubectl)提供了用于在不同上下文之间执行操作的命令,例如:


current-contextget-contextsrename-contextdelete-contextset-context – use-context
复制代码


对于想要切换到的 Kubernetes 上下文,如果知道它的名称,那么可以使用如下的命令:


kubectl use-context [CONTEXT-NAME]
复制代码


但如果需要操作多个集群,并且不知道各种上下文的名称,此时就需要首先列出所有上下文,随后像这样运行 use-context 命令:


$ kubectl get-contextsCURRENT   NAME            CLUSTER         AUTHINFO        NAMESPACE*         docker-desktop  docker-desktop  docker-desktop          minikube        minikube        minikube          cloudc          crdambvg43d     user-crdambvg43d$ kubectl use-context minikube
复制代码


其实还有更简单的方法。我用了一款名为 kubectx 的工具,该工具可以列出不同的 Kubernetes 上下文并快速切换。若要列出上下文,可以这样运行 kubectx:


$ kubectxdocker-desktopminikubcloudc 
复制代码


切换至不同上下文的方法也很简单:


$ kubectx [CONTEXT-NAME]
复制代码

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

在操作 Kubernetes 时,处理来自不同名称空间的资源,这也是一种很常见的做法。例如,你可能希望列出一个名称空间内的所有 Pod,随后检查另一个名称空间中的服务。此时我的做法是使用 Kubernetes CLI 所支持的–namespace 标记。例如,若要查看名为 Test 的名称空间中的所有 Pod,可以运行 kubectl get pods -n test。默认情况下,如果不提供名称空间标记,将使用默认的 Kubernetes 名称空间,即 default。


这个默认值可以在 kubeconfig 文件中修改,例如我们可以将默认名称空间设置为 test、kube-system 或其他任何名称空间。这样在查询资源时就不需要使用–namespace 标记了。不过更改默认值的命令略微繁琐:


$ kubectl config set contexts.my-context.namespace my-namespace
复制代码


上述命令会更改 my-context 上下文的 Namespace 字段,将其改为 my-namespace。这也意味着,举例来说,如果切换到 my-context 随后运行 kubectl get pods,将只能看到 my-namespace 名称空间下的 Pod。


除了使用 kubectx,我们还可以使用一款名为 kubens 的工具,后者可以帮助我们列出并切换至不同名称空间。


$ kubensdefaultdockerkube-node-leasekube-publickube-system
复制代码


为所选上下文设置默认名称空间,这也是一种快速简单的操作:


$ kubens defaultContext "docker-desktop" modified.Active namespace is "default".
复制代码

3. 为 Kubernetes CLI 设置别名

这是一种非常简单的技巧。操作 Kubernetes 过程中,我们可能需要频繁输入 kubectl,时间一长肯定会对输入全名的繁琐过程感到厌倦。虽然每次只需要输入七个字母,但多次频繁输入总归很麻烦。


此时的技巧是,为 kubectl 设置一个更简单的别名,例如 k:


$ alias k=kubectl$ k get poNAME    READY   STATUS    RESTARTS   AGEmypod   1/1     Running   18         43h
复制代码


理想情况下,我们应该将 k=kubectl 这样的别名保存到 bash_profile 中,这样每次打开终端后都将自动设置。

4.Get a terminal inside the Kubernetes cluster

在访问集群中的服务和 Pod 时,我们需要将其暴露出来,这样才可以从公网访问它们,或在本机和集群中运行的服务之间运行 Kube 代理或转发端口。


然而有时候我们可能并不想暴露任何服务或转发端口,而只需要运行某些非常简单的 Curl 命令。为此我会通过 Bash profile 加载一个函数,借此在集群内部使用 radial/busyboxplus:curl 镜像运行一个 Pod,通过这样的方式就可以访问终端,进而可以针对集群内部的服务和 IP 运行 Curl 命令。我将这个函数称之为 kbash,用法如下:


$ kbashIf you don't see a command prompt, try pressing enter.[ root@curl:/ ]$
复制代码


在上述命令提示符下,我可以针对内部的 Kubernetes DNS 名称或 IP 地址运行 Curl 命令。如果需要退出,只需要运行 exit 即可;如果需要重新连接到该 Pod,则可运行 kbash 连接到现有 Pod。同时我还将这个函数定义到了自己的 dotfiles 中。

5.快速打开 Grafana/Jaeger/Kiali(或其他任何东西)

如果打算使用 Istio 服务网格(Service mesh),那么可能还会用到 Grafana/Jaeger/Kiali。访问这些服务时必需首先获得 Pod 名称,随后针对该 Pod 设置端口转发,最后才能打开浏览器访问转发后的地址。每次需要输入的命令都很长:


$ kubectl get pods --namespace istio-system -l "app=grafana" -o jsonpath="{.items[0].metadata.name}"grafana-6fb9f8c5c7-hrcqp$ kubectl --namespace istio-system port-forward grafana-6fb9f8c5c7-hrcqp 3000:3000$ open http://localhost:3000
复制代码


而更简单快捷的方法是为每个服务创建函数或别名。例如,我通过使用 Bash profile 加载的一个文件为 Grafana/Jaeger/Kiali 添加了如下设置:


#!/bin/bashexport GRAFANA_POD=$(kubectl get pods --namespace istio-system -l "app=grafana" -o jsonpath="{.items[0].metadata.name}")export JAEGER_POD=$(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}')export KIALI_POD=$(kubectl -n istio-system get pod -l app=kiali -o jsonpath='{.items[0].metadata.name}')alias grafana="kubectl --namespace istio-system port-forward $GRAFANA_POD 3000:3000 & open http://localhost:3000"alias jaeger="kubectl --namespace istio-system port-forward $JAEGER_POD 16686:16686 & open http://localhost:16686"alias kiali="kubectl --namespace istio-system port-forward $KIALI_POD 20001:20001 & open http://localhost:20001"
复制代码


这样,如果需要打开 Jaeger,只需要运行 jaeger 就可以获得 Pod 名称,创建端口转发并打开浏览器。


如果你在集群中运行了其他什么需要频繁访问的服务,也可以用类似方式来设置别名。


原文链接:


https://www.learnistio.com/blog/5_tips_to_be_more_productive_with_kubernetes


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2019-08-15 10:423172
用户头像

发布了 283 篇内容, 共 98.6 次阅读, 收获喜欢 58 次。

关注

评论

发布
暂无评论
发现更多内容

volatile和synchronzied的区别

悟空聊架构

synchronized 28天写作 悟空聊架构 12月日更 volatitle

为什么我不怎么用调试器

Justin

软件开发 28天写作 调试工具

一文搞懂TopK问题

bigsai

数据结构 算法

从直播硬件出发,浅析直播技术到物联网设备的智能化趋势

阿里云视频云

阿里云 物联网 直播 直播技术 视频云

十一月热点:BML预置模型调参添新利器;EasyDL图像分类上线免训练极速迭代模式

百度大脑

人工智能

国内首次Feature Store Meetup回顾

第四范式开发者社区

机器学习 第四范式 OpenMLDB 特征平台

【堡垒机】三款知名品牌堡垒机简单介绍以及优缺说明

行云管家

云计算 堡垒机 IT运维

Flink Sql Gateway的原理与实践

安第斯智能云

数据库 sql

MySQL从入门到入魔(01)

海拥(haiyong.site)

MySQL 入门 28天写作 12月日更

12月17日技术大咖云集,云智技术论坛“年度收官”聚焦知识智能化

百度大脑

人工智能

VUEX的store用法

CRMEB

Android C++系列:Linux Socket编程(四)多路IO转接服务器

轻口味

28天写作 12月日更

记字节前端面试一道简单的算法题

全栈潇晨

LeetCode 算法面试

react源码解析14.手写hooks

buchila11

React

30个类手写Spring核心原理之自定义ORM(上)(6)

Tom弹架构

Java spring 源码

【北京讲座报名!】12月26日与深度学习大牛共赋技术之约!

亚马逊云科技 (Amazon Web Services)

人工智能 深度学习 活动 ML

dart系列之:dart优秀的秘诀-隔离机制

程序那些事

flutter dart 程序那些事 12月日更 flutter for web

飞桨企业版重磅发布智能边缘控制台,5分钟零代码自动化模型部署

百度大脑

人工智能

阿里云李克:边缘云技术发展与实践

阿里云Edge Plus

CDN 边缘计算 CDN加速

什么是反序列化?反序列化的过程,原理

网络安全学海

黑客 网络安全 信息安全 渗透测试 反序列化

CRM报告如何改变您的业务

低代码小观

低代码 企业管理 CRM 企业管理系统 CRM系统

数百名专家政要出席阿联酋区块链大会“DCS 2021 ” 虎符受邀亮相

区块链前沿News

Hoo 虎符交易所 区块链峰会 DCS 2021 全球分布式云存储峰会

react源码解析13.hooks源码

buchila11

React

Linux一学就会之Linux系统启动原理及故障排除

学神来啦

Linux 运维 黑客 linux运维 linux云计算

Kafka-Broker的基本模块

编程江湖

大数据

Java开发之命名规范

@零度

Java 命名规范

10个常见的前端手写功能,你全都会吗?

CRMEB

微服务架构 | 如何优化日志链路追踪输出SQL的执行效率?

码农架构

微服务架构 链路追踪 SpringCloud

压测大师链路监控服务开放免费体验预约

WeTest

网络安全产品之堡垒机应用于教育行业案例讲解

行云管家

网络安全 教育 等保 等级保护

从4K到8K,谁才是开启8K时代的钥匙?

郑州埃文科技

数据库 IP 8k

  • 扫码添加小助手
    领取最新资料包
如何提升Kubernetes生产力?我有5个实用技巧分享给你_云原生_Learn Istio Service Mesh Blog_InfoQ精选文章