「13.Developing Kubernetes」

  CREATED BY JENKINSBOT

到本章为止,我们学习了如何安装 Kubernetes Kubernetes 交互,以及使用Kubernetes部署和管理应用程序。

本章中我们将介绍如何根据需求改进 Kubernetes Kubernetes 的 bug。

为此,我们需要安装Go,并需要从 GitHub Kubernetes 的源代码。

我们将介绍如何编译整个 Kubernetes kubectl 等具体的组件。

我们还将演示如何使用 Python Kubernetes的API服务,以及如何使用自定义的资源扩展 Kubernetes.

13.1. Compiling from Source

如何从源代码制作自己的Kubernetes可执行文件,而不是下载官方发行的可执行文件(请参阅2.4节),或第三方的产品?

克隆 Kubernetes Git代码仓库,并编译源代码。

如果在Docker的主机上,可以使用顶层 Makefile 的 quick-release 目标,如下所示:

# git clone https://github.com/kubernetes/kubernetes
# cd kubernetes
# make quick-release

!!!基于 Docker Docker服务可以使用的内存足够。对于 MacOS,通过 Docker for Mac选项增加分配给 Docker的内存。

编译好的可执行文件保存在_output/release-stages目录中,完整的包再_output/release-tars中。

如果有设置好的 Golang ,则可以使用 Makefile 的 release 目标:

# git clone https: //github. com/kubernetes/kubernetes
# cd kubernetes
# make

编译好的可执行文件保存在_output/bin目录中。

具体的开发者指南:https://gtubcom/kubernetes/community/tree//contributors/devel

13.2. Compiling a Specific Component

如何从源代码编译特定 Kubernetes组件而不是所有的组件,例如,编译客户端 kubectl1?

使用 make kubectl

顶层 Makefile 中包含了用于编译各个组件的的目标。例如,编译kubectl kubeadm hyperkube的命令如下所示:

make kubectl

make kubeadm

make hypercube

编译好的可执行文件保存在_output/bin目录中。

13.3. Using a Python Client to Interact with the Kubernetes API

如何在 Python Kubernetes API编写脚本?

首先需要安装 Python kubernetes模块。这个模块是在 Kubernetes incubator Python软件包管理工具(Python Package Index,pyPi)网站安装此模块:

# pip install kubernetes

通过默认的 kubectl 环境可以访问 Kubernetes 的集群,然后就可以使用该 Python Kubernetes API对话了。

from kubernetes import client, config

config.load_kube_config()
v1= client. CoreV1Api()
res= v1.list_pod_for_all_namespaces(watch=False)

for pod in res.items:
	print(pod.metadata.name)

脚本中 config.load_kube_config()的调用,可以从 kubectl1的配置文件中加载 Kubernetes的认证信息和访问点。默认情况下,它将加载当前环境中的集群访问点和认证信息。

Python Kubernetes API的 OpenAPI 规格创建的。它会自动生成并一直保持最新。该客户端可以访问所有的API。

每个API组对应一个具体的类,所以如果需要调用属于/api/v1 API组的API对象的方法,那么需要实例化 CoreV1Api类。在使用Deploymnet时,需要实例化 extensionsV11beta1Api类。你可以在自动生成的帮助文档中找到所有的方法与对应的API组的实例(https://github. com/kubernetes-clientlpython/treel masterkubernetes)。

项目代码仓库中的实例
https: /github. com/kubernetes/python/tree//kuberetes-clietpyhntree masterexamples