kubernetes clients/python包装器
tulips的Python项目详细描述
郁金香
理解kubernetes图表的{a7}周围的小包装。
为什么
我需要一些简单的东西来读取头盔图表并将它们推到kubernetes集群 可扩展。所以像helm+kubectl这样有能力围绕它们编写自己的工具。
支持的CRD aka kubernetes资源
- 展开
- 服务
- 入口
- 秘密
- 发行人(证书管理人)
- 持久卷目标
示例使用
importyamlfromtulips.resourcesimportResourceRegistryfromkubernetesimportclientask8sfromkubernetesimportconfigclient=config.new_client_from_config('kube.conf')spec=yaml.load('ingress.yaml')ingress_cls=ResourceRegistry.get_cls(spec['kind'])ingress=ingress_cls(config.client,namespace='default',spec)ingress.create()# Create Ingress resourceingress.delete()# Delete Ingress resource
添加新资源
为了添加对新kubernetes资源的支持,需要创建类
从tulips.resources.Resource
类继承的。
示例资源
importtulips.resources.ResourceclassClusterIssuer(Resource):"""A `cert-manager` ClusterIssuer resource."""version="v1alpha1"group="certmanager.k8s.io"plural="clusterissuers"defdelete(self,body:k8s.V1DeleteOptions):returnk8s.CustomObjectsApi(self.client).delete_namespaced_custom_object(body=body,namespace=self.namespace,version=self.version,group=self.group,plural=self.plural,name=self.name,)defcreate(self):returnk8s.CustomObjectsApi(self.client).create_namespaced_custom_object(body=self.resource,namespace=self.namespace,version=self.version,group=self.group,plural=self.plural,)
它将注册到ResourceRegistry
,并可以通过ResourceRegistry.get_cls
方法获取。
郁金香
郁金香是一个模拟helm但没有tiller
的示例客户机。
$ python tulips push --help 06/25/18 - 9:49 Usage: tulips push [OPTIONS] CHART You can pass chart variables via foo=bar, for example '$ tulip push app.yaml foo=bar' Options: --namespace TEXT Kubernetes namespace --release TEXT Name of the release --kubeconfig PATH Path to kubernetes config --help Show this message and exit.
示例客户机
假设我想部署一个秘密和入口
apiVersion:v1kind:Secretmetadata:name:{{release}}-secretstype:Opaquedata:password:{{@pwd}}---apiVersion:extensions/v1beta1kind:Ingressmetadata:name:{{release}}-web-ingresslabels:app:woocart-{{ release }}annotations:nginx.ingress.kubernetes.io/limit-connections:"100"kubernetes.io/ingress.class:nginxspec:rules:-host:{{domain}}http:paths:-path:/backend:serviceName:{{release}}-webservicePort:80
如果运行“tulip--release test push--kube conf kube.conf app.yaml domain=test.tld”
检查spec文件,并用实际值替换所有{{ variables }}
。阿尔索
特殊的{{ @pwd }}
将使用passlib
库生成强密码。