digitalocean-cloud-controller-manager
是Digitalocean的Kubernetes Cloud Controller Manager。在此处阅读有关云控制器经理的更多信息。运行digitalocean-cloud-controller-manager
可让您利用Digitalocean在Kubernetes群集上提供的许多云提供商功能。
云控制器管理器遵循语义版本控制。尽管该版本仍低于V1,但该项目被认为是准备生产的。
由于Kubernetes释放周期的快速,CCM(Cloud Controller Manager)仅支持Digitalocean Kubernetes产品也支持的版本。其他任何发行版将不受我们的正式支持。
在此处了解有关运行Digitalocean Cloud Controller Manager的更多信息!
请注意,此CCM默认是在DOKS(Digitalocean Managed Kubernetes)上安装的,您不必自己做。
以下是您如何利用digitalocean-cloud-controller-manager
的一些示例:
当您通过CCM(通过LoadBalancer
类型的服务)创建负载 - 平衡器时,绝对不得手动更改DO Load-Balancer配置非常重要。 CCM内置的和解循环最终将恢复这种变化。可以更改的负载平衡名称中有一个例外(另请参见Load-Balancer ID注释上的文档)。
除此之外,使负载量配置更改更改的唯一安全场所是通过服务对象。
出于技术原因,端口50053、50054和50055不能用作负载 - 平衡器入口端口(即,负载范围的端口聆听请求的端口)。试图将受影响的端口之一用作服务端口的导致422输入端口是无效的HTTP错误响应将由DO API返回(并浮出水面为Kubernetes事件)。
解决方案是将服务端口更改为不同的,不冲突的端口。
v1.17.x
该项目使用GO模块进行依赖管理并采用供应商。请确保在任何依赖性修改后运行make vendor
。
更改代码后,运行测试和CI检查:
make ci
如果您想在特定的集群上本地运行digitalocean-cloud-controller-manager
,请保持kubeconfig准备就绪,并以这样的方式启动二进制文件:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
REGION=fra1 DO_ACCESS_TOKEN=your_access_token go run main.go
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
REGION
环境变量采用有效的数字偏移区域。可以将其设置为防止digitalocean-cloud-controller-manager
尝试访问仅在液滴上可用的Digitalocean Metadata服务。如果设置了区域变量,则DO区域服务将用于验证指定的区域。它也可以用于本地开发目的。总体而言,只要您选择一个区域,您选择的哪个区域就无关紧要。
您可能还需要在DO_ACCESS_TOKEN
环境变量中提供Digitalocean访问令牌。令牌无需对云控制器启动有效,但是在这种情况下,您将无法验证与Digitalocean API的集成。
请注意,如果您使用在digitalocean上创建的kubernetes群集,则将在集群中运行一个云控制器管理器,因此您的本地群集将与它竞争API访问。
您可以让digitalocean-cloud-controller-manager
管理Digitalocean Firewall,该防火墙会动态调整访问Nodeports的规则:一旦创建了类型NodePort
的服务,防火墙控制器将更新防火墙以允许公众访问该NodePort。同样,如果将服务删除或更改为其他类型,则将自动撤回访问权限。
示例调用:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN= < your_access_token >
PUBLIC_ACCESS_FIREWALL_NAME=firewall_name
PUBLIC_ACCESS_FIREWALL_TAGS=worker-droplet
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
PUBLIC_ACCESS_FIREWALL_NAME
环境变量定义了防火墙的名称。如果没有找到该名称的防火墙,则会创建防火墙。
PUBLIC_ACCESS_FIREWALL_TAGS
环境变量是指与防火墙应应用的液滴相关的标签。通常,这是连接到工作节点液滴的标签。多个标签以逻辑或方式应用。
在某些情况下,可能不需要用于特定服务的防火墙管理。一个例子是,NodePort仅在VPC上可以访问。在这种情况下,可以使用服务注释kubernetes.digitalocean.com/firewall-managed
可用于选择性地将给定服务排除在防火墙管理中。如果设置为"false"
,则不会为该服务创建入站规则,从而有效地禁用了对NodePort的公共访问权限。 (请注意“布尔”注释值必须包含的引号。)如果省略注释,则将默认行为设置为"true
”或包含无效的值。
如果丢失环境变量或空白,则无法管理防火墙。一旦创建了防火墙,就不允许公开访问Nodeports。用户应创建其他防火墙以进一步扩展访问。
如果您有兴趣揭示Prometheus指标,则可以通过指标端点来暴露它们。该命令看起来与此相似:
cd cloud-controller-manager/cmd/digitalocean-cloud-controller-manager
DO_ACCESS_TOKEN=your_access_token
METRICS_ADDR= < host > : < port >
digitalocean-cloud-controller-manager
--kubeconfig < path to your kubeconfig file >
--leader-elect=false --v=5 --cloud-provider=digitalocean
METRICS_ADDR
环境变量采用有效的端点,您想使用这些端点来服务您的Prometheus指标。为了有效,它应该以<host>:<port>
形式形式。
在启动digitalocean-cloud-controller-manager
之后,运行以下curl命令以查看Prometheus指标输出:
curl < host > : < port > /metrics
入学服务器是一种可选的组件,旨在减少托管对象(lbs等)的不良配置更改。如果您想进一步了解,请阅读文档。
API使用是否受到一定速率限制。为了防止对极重重的常规使用或病理案例(例如,由于干扰第三方控制器而导致的错误或API)的配额,可以通过DO_API_RATE_LIMIT_QPS
环境变量配置自定义费率限制。它接受浮点值,例如DO_API_RATE_LIMIT_QPS=3.5
将API使用限制为每秒3.5个查询。
如果要在容器化的环境中测试更改,请创建一个新映像,其中版本集用于dev
:
VERSION=dev make publish
这将创建一个二进制版本的dev
和Docker Image的二进制文件,并将其推向digitalocean/digitalocean-cloud-controller-manager:dev
。
go get -u ./...
go mod tidy
go mod vendor
要创建Docker映像并生成清单,请转到GitHub上的“动作”页面,然后单击“运行工作流”。指定要创建的github <tag>
,确保它带有v
运行工作流程还要求您暂时关闭“在合并之前”设置“主分支保护规则设置”中的设置。发布后,别忘了将其重新打开!
工作流程执行以下操作:
<tag>
make bump-version
<tag>.yaml
releases/
目录下定单文件<tag>
标记新提交digitalocean/digitalocean-cloud-controller-manager:<tag>
digitalocean/digitalocean-cloud-controller-manager:<tag>
dockerhub注意:此工作流是不推荐使用的,请更喜欢上述GitHub动作工作流程。
要手动发布新版本,请首先碰到版本:
make NEW_VERSION=v1.0.0 bump-version
确保一切看起来都不错。创建一个具有所有更改的新分支:
git checkout -b release- < new version > origin/master
git commit -a -v
git push origin release- < new version >
合并掌握后,标记提交并将其推开:
git checkout master
git pull
git tag < new version >
git push origin < new version >
最后,使用新版本从Master创建GitHub版本,并将其发布:
make publish
这将编译包含二进制文件的二进制文件,该二进制版本捆绑在Docker映像中,该版本被推到digitalocean/digitalocean-cloud-controller-manager:<new version>
在Digitalocean,我们珍视并热爱我们的社区!如果您有任何问题或想做出贡献,请随时打开以下任何维护者的问题/PR和CC。