由一封邮件看 Mailing List 在开源项目中的重要性

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 只要仔细找,想要的轮子总会有的。--- 某不知名 DevOps 工程师感谢 kubernetes-dev 的 Mailing List !早上在浏览邮件时发现了下面这封有趣的邮件:接触 Kubernetes 也有不短的时间了,也见证了 Kubernetes 干掉 Swarm 和 Mesos 成为容器编排领域的事实标准的过程。

只要仔细找,想要的轮子总会有的。
--- 某不知名 DevOps 工程师

感谢 kubernetes-dev 的 Mailing List !早上在浏览邮件时发现了下面这封有趣的邮件:

文章2配图1.png

接触 Kubernetes 也有不短的时间了,也见证了 Kubernetes 干掉 Swarm 和 Mesos 成为容器编排领域的事实标准的过程。在享受 Kubernetes 及其生态圈带来的便利的同时也在为 Kubernetes 及 CNCF 项目进行贡献。而使用 kubectlrancher 甚至是 kui 这些 CLI 和 UI 工具对 Kubernetes 集群进行操作和观察。

虽然上面这些工具为操作 Kubernetes 集群带来了极大的便利,但是归根到底还是一些开源项目,并不能满足我们的全部需求。所以我们只能根据我们自己的需求和 Kubernetes 的 api-server 进行定制,但是由于 Kubernetes 的 api-server 比较复杂,短时间内并不是那么好梳理的。

kubernetes-client/python

由于我们自研的 DevOps 平台是使用 python 开发的,所以我也基于 python 语言开发了一套 Kubernetes Client ,但总的来说由于 Kubernetes 的功能实在太多,而我的开发实践并不是很多,开发出来的功能只是差强人意。

kubernetes-client/python 这个官方给出的轮子是真的香!

安装方便

这个安装方式简单的令人发指,支持的 python 版本为 2.7 | 3.4 | 3.5 | 3.6 | 3.7 并且和所有 python 依赖包一样,只需要使用 pip 安装即可:

pip install kubernetes

简单示例

查看所有的 pod :

#!/usr/bin/env python
#encoding: utf-8
#Author: guoxudong
from kubernetes import client, config

# Configs can be set in Configuration class directly or using helper utility
config.load_kube_config()

v1 = client.CoreV1Api()
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
    print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

运行查看结果:

Listing pods with their IPs:
172.22.1.126    kube-system    coredns-5975fdf55b-bqgkx
172.22.0.2    kube-system    coredns-5975fdf55b-vxbb4
10.16.16.13    kube-system    flexvolume-9ccf7
10.16.16.15    kube-system    flexvolume-h5xn2
10.16.16.14    kube-system    flexvolume-kvn5x
10.16.16.17    kube-system    flexvolume-mf4zv
10.16.16.14    kube-system    kube-proxy-worker-7lpfz
10.16.16.15    kube-system    kube-proxy-worker-9wd9s
10.16.16.17    kube-system    kube-proxy-worker-phbbj
10.16.16.13    kube-system    kube-proxy-worker-pst5d
172.22.1.9    kube-system    metrics-server-78b597d5bf-wdvqh
172.22.1.12    kube-system    nginx-ingress-controller-796ccc5d76-9jh5s
172.22.1.125    kube-system    nginx-ingress-controller-796ccc5d76-jwwwz
10.16.16.17    kube-system    terway-6mfs8
10.16.16.14    kube-system    terway-fz9ck
10.16.16.13    kube-system    terway-t9777
10.16.16.15    kube-system    terway-xbxlp
172.22.1.8    kube-system    tiller-deploy-5b5d8dd754-wpcrc
...

果然是一个好轮子,引入 kubeconfig 的方式及展示所有 namespace 的 pod 的方法封装的也十分简洁,是个非常漂亮的范例。建议可以看一下源码,肯定会有收获的!

支持版本

client-python 遵循 semver 规范,所以在 client-python 的主要版本增加之前,代码将继续使用明确支持的 Kubernetes 集群版本。

Kubernetes 1.5 Kubernetes 1.6 Kubernetes 1.7 Kubernetes 1.8 Kubernetes 1.9 Kubernetes 1.10 Kubernetes 1.11 Kubernetes 1.12 Kubernetes 1.13 Kubernetes 1.14
client-python 1.0   √               -               -               -               -               -                 -                 -                 -                 -                
client-python 2.0   +               √               -               -               -               -                 -                 -                 -                 -                
client-python 3.0   +               +               √               -               -               -                 -                 -                 -                 -                
client-python 4.0   +               +               +               √               -               -                 -                 -                 -                 -                
client-python 5.0   +               +               +               +               √               -                 -                 -                 -                 -                
client-python 6.0   +               +               +               +               +               √                 -                 -                 -                 -                
client-python 7.0   +               +               +               +               +               +                 √                 -                 -                 -                
client-python 8.0   +               +               +               +               +               +                 +                 √                 -                 -                
client-python 9.0   +               +               +               +               +               +                 +                 +                 √                 -                
client-python 10.0 +               +               +               +               +               +                 +                 +                 +                 √                
client-python HEAD +               +               +               +               +               +                 +                 +                 +                 √                

Mailing List 的重要性

这次的收获很大程度得益于 kubernetes-dev 的 Mailing List 也就是邮件列表。这种沟通方式在国内不是很流行,大家更喜欢使用 QQ 和微信这样的即时通讯软件进行交流,但是大多数著名开源项目都是主要使用 Mailing List 进行交流,交流的数量甚至比在 GitHub issue 中还多,在与 Apache 、 CNCF 项目开源的贡献者和维护者交流中得知了使用 Mailing List 主要考虑是一下几点:

  • 这种异步的交流方式可以让更多关心该话题的开发人员一起加入到讨论中。
  • mailing list 是永久保留的,如果你对某个话题感兴趣,可以随时回复邮件,关注这个话题的开发者都会收到邮件,无论这个话题是昨天提出的,还是去年提出的,有助于解决一些陈年老 BUG (俗称技术债)。
  • 即时通讯软件虽然很便利,但是问题很快会被评论顶掉,虽然诸如 slack 这样的工具解决了部分这方面的问题,但是还是不如 mailing list 好用。
  • 并不是所有地区的开发者都有高速的宽带,性能优秀的PC,在地球上很多地区还是只能使用拨号上网,网速只有几kb/s,他们甚至 GitHub issue 都无法使用。但是你不能剥夺他们参与开源项目的权利,而 mailing list 是一种很好的交流方式。
  • 通过 mailing list 可以很好掌握社区动态,效果明显好于 GitHub watch ,因为并不是项目的所有 commit 都是你关心的。

结语

如果你有志于参与到开源运动,在享受开源软件带来便利的同事,还想为开源软件做出自己的贡献,那么 mailing list 是你进入社区最好的选择。在 mailing list 中和来自世界各地志同道合的开发者交流中提升自己的能力,创造更大的价值,迈出你参与开源运动的第一步。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
919 1
|
4月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
4月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
|
5月前
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
145 3
|
5月前
|
安全 Java 索引
Java List:从入门到精通,一篇文章就够了!
【6月更文挑战第17天】Java List是有序元素集合,支持索引访问、添加、删除和修改。从ArrayList、LinkedList到Vector,各种实现满足不同场景需求。使用add()添加元素,get()获取,set()修改,remove()删除。遍历可用for-each或Iterator,subList()创建子集。注意线程安全,可选synchronizedList()、Vector或CopyOnWriteArrayList。理解List的基本操作和特性,能提升编程效率。
74 1
|
5月前
|
存储 Java 索引
告别Java集合小白!一文读懂List的精髓
【6月更文挑战第17天】Java中的List接口作为有序集合,允许存储和操作有序元素,支持重复值。ArrayList和LinkedList是常见实现类:ArrayList基于数组,适合快速访问但插入删除慢;LinkedList基于链表,插入删除快但访问慢。了解其核心概念、方法及泛型使用,能提升编程效率和代码质量。示例代码展示了添加和访问元素。通过深入学习,可以更好地掌握List的高级用法。
60 1
|
4月前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估
|
4月前
|
存储 缓存 安全
Java List操作详解及常用方法
Java List操作详解及常用方法
|
4月前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估