到本章为止,我们学习了如何安装 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 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)网站安装此模块:
通过默认的 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