
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
yandex-cloud-controller-manager是Yandex.Cloud的Kubernetes Cloud Controller Manager (CCM)实现。它允许您在Kubernetes集群上利用Yandex.Cloud提供的多项云服务功能。有关Kubernetes CCM的更多信息,请参见https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/%E3%80%82
目前,yandex-cloud-controller-manager实现了以下功能:
NodeController - 负责为Kubernetes节点更新云服务提供商特定的标签和地址,并删除在云上已被删除的Kubernetes节点。ServiceController - 负责在Kubernetes中创建Type: LoadBalancer类型的服务时创建负载均衡器。RouteController - 负责创建路由以实现Pod间的网络通信。该项目目前处于积极开发阶段。请自行承担使用风险!欢迎贡献代码!
在当前Kubernetes状态下,运行Cloud Controller Manager (CCM)需要满足一些条件。请仔细阅读这些要求,因为它们对于在Yandex.Cloud的Kubernetes集群上运行CCM至关重要。
版本
Kubernetes 1.16+
云资源
文件夹(Folder)中。有关文件夹的更多详细信息,请参考官方文档。kubelet会根据节点主机名命名节点。在Yandex.Cloud上,节点主机名基于VM名称设置。因此,Kubernetes上的节点名称必须与对应的VM名称匹配,否则CCM将无法找到对应的云资源。集群配置
kubelet必须使用--cloud-provider=external参数运行。这确保kubelet知道在被调度工作之前必须由CCM初始化。kube-apiserver和kube-controller-manager不得设置--cloud-provider标志,这会默认它们不使用原生云服务提供商。警告:设置--cloud-provider=external会给集群中的所有节点添加node.cloudprovider.kubernetes.io/uninitialized污点。CCM负责在完成节点初始化后移除这些污点。这意味着在CCM运行之前,大多数Pod将无法调度。
注意:Yandex.Cloud文档中“网络”(Network)和“VPC”可互换使用。如果配置中需要“子网ID”(Subnet ID),会明确说明。
认证与配置
yandex-cloud-controller-manager需要服务账户JSON、文件夹ID和云唯一集群名称,并通过以下环境变量存储:
YANDEX_CLOUD_SERVICE_ACCOUNT_JSONYANDEX_CLOUD_FOLDER_IDYANDEX_CLUSTER_NAME默认清单配置为从名为yandex-cloud的secret中设置这些环境变量:
bash$ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: labels: k8s-app: yandex-cloud-controller-manager name: yandex-cloud namespace: kube-system stringData: service-account-json: | { "id": "ajesh3orip69r0vctpf5", "service_account_id": "aje3qbblkdf2u2avn4n7", "created_at": "2020-01-20T07:43:49Z", "key_algorithm": "RSA_2048", "public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAozah4aqf9xkMLRRtNJjz\nZ+xooLV6GLGaHbkl3796r2zWbgm1aNU3xILGeStdTM5XbB651OAfq7YyHoDSiZkj\nBP6W2ZYNO/WjK9N13rWhtFjNiDulLh3LAU47qNy75OsC3SjW58MVHPNriIgB0HLA\nHRE6cguUJtUcKWqOKhoKQVJxXLOhsdjmEEdnHtd9ro3UCcPM7r6fc+MmkCaZgTNl\nkItkDDxodTIqj3Go2EiEyO2DaMye+GqTzSNJOYaHFH4DYhCCgE1/SCY356nER2qH\nymbAGkD2fAp2eGoCEM67AgqrWFEm/yI+FlIvcrn7wC6+NfWUVqPb+N4wuiehCRBO\n8wIDAQAB\n-----END PUBLIC KEY-----\n", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCjNqHhqp/3GQwt\nFG00mPNn7GigtXoYsZoduSXfv3qvbNZuCbVo1TfEgsZ5K11MzldsHrnU4B+rtjIe\ngNKJmSME/pbZlg079aMr03XetaG0WM2IO6UuHcsBTjuo3Lvk6wLdKNbnwxUc82uI\niAHQcsAdETpyC5Qm1Rwpao4qGgpBUnFcs6Gx2OYQR2ce132ujdQJw8zuvp9z4yaQ\nJpmBM2WQi2QMPGh1MiqPcajYSITI7YNozJ74apPNI0k5hocUfgNiEIKATX9IJjfn\nqcRHaofKZsAaQPZ8CnZ4agIQzrsCCqtYUSb/Ij4WUi9yufvALr419ZRWo9v43jC6\nJ6EJEE7zAgMBAAECggEAF0hi3XNesHw1PXUNgxRSnL+fyVU6Hq2vQ5A28+03zjCj\ngj0GUPchpnnVYFGsVJmW5QiZD+INAozSJ4HPBuv+j+bVlCKQrr4C0eyvgt68O6Lz\nZvzDOonrfLsxTYx3jVdtKCl8RsGQkHm1HFvyjk7gUwUzJjO6pbN++fWGZEEkt16W\nFHaGldz2MvZKOwQwj0WUcjF4X8PWTvJ0Ar1i5XoAm35GN+2ziwJKcNt+DsJ3N6MW\ngAkivYE8f44T3fQFg5M1RC6v2Jp2lmtVRxYRI0rcie+HyxJVcHgWTZPdTkwGWKDD\nnRU2OTJoZCJf3BunFtB1P8W+GlmLFdBjTppFhgqI6QKBgQDO61fX49qVRDmORYor\nVWh1tZkw546llwkNqLAe1QoLhqjHGctUs3lOczDqI82PwGKb423JdgKmr9nzrCZW\nq5a/BulHdsGsvkSBGK091fhQYRQnaTF7bnXoyVI8qUerGiV/a8/7W1SM+WIJayZ3\nr5Z9xV9LH/Wy7uWW7Xr2LvP97wKBgQDJ7VuYZVJ17hPIqEaR3P1Jvka+RvusWTPw\n1o6O935tW28Q/S2J661Dv92mTNmll/beyFS1ZkHdQ/1c/92Pr1bM/A4CrQoNDvad\nhd2MnyzVYyHc4p6Yd6VmZisbPpTfa7ZJMzYUN27nj+yPxJyZ/EoLlcXaXcPV3kFo\nZsubNT0DPQKBgQCz/nLmgPWWnMd4ZDOB6IS6yCKfMP6cOtsMP64c0/Mt/ZB5yY1f\ne9PNE1T8h/J71r2wn1DUS8yYlSYB2sFq6U5zk55/pOVq0AQlTIL+5E9iFGCEu/Po\nTDlTKzVXQWXviAoQYoeEPnk5PII0cToAKQS/GV8AqaeAZGHhPWmWF1f1jwKBgHQx\nJ6aejv+bGjk5Uzo1rm3TloOA9uqqfa/U1j0//rjQhy2AccbOHWpBqjo6OHcH5Z82\nKUAkcjvvFoiAFq7KVykm1K0HgyQWeyQTVnPHWBYFsAOZR2c2Wa99lMpdjW6uXTrr\nw++IIkIO2DG2EeKtgLH/4dSQZdLXzE1V8U0DKnOFAoGAQNCBpnE1WHR9H5APr5SF\nuD35dTm3O2OvczlbB0MUhx8R7qPpvLwA5HRSIKAKxobUbGpdgCy6WuncRWg+TjaD\n8zlwZvG2+vtntCFPcIT6ZpGH6k9ppXOPJBxaHZRHJSoilGhF1KvrmY8T5WxTVuyM\nnmypFU40LHcTmvw/a6JY+BM=\n-----END PRIVATE KEY-----\n" } folder-id: "b1g4c2a3g6vkffp3qacq" EOF
安装 - 带RBAC
bashkubectl apply -f manifests/yandex-cloud-controller-manager-rbac.yaml kubectl apply -f manifests/yandex-cloud-controller-manager.yaml
安装 - 不带RBAC
bashkubectl apply -f manifests/yandex-cloud-controller-manager.yaml
注意:manifests文件夹中的部署文件仅作为示例。它们在大多数情况下可用,但可能无法直接适用于您的集群。
节点控制器(Node Controller)
CCM环境变量
YANDEX_CLOUD_INTERNAL_NETWORK_IDS – 逗号分隔的网络ID列表。用于扫描Yandex实例并填充相应Kubernetes节点时选择InternalIP。
YANDEX_CLOUD_EXTERNAL_NETWORK_IDS – 逗号分隔的网络ID列表。用于扫描Yandex实例并填充相应Kubernetes节点时选择ExternalIP。
服务控制器(Service Controller)
操作特性
由于Yandex.Cloud的目标组(TargetGroup)无法创建重复(相同子网ID和IP地址)的目标,此CCM会获取集群中的所有节点,通过API找到对应的Yandex.Cloud实例,扫描实例的接口并确定这些实例上存在的所有网络ID集合。然后,创建以这些网络ID命名的多个目标组,包含来自相应网络的目标。
由于API限制,每个网络ID在实例网络接口中每个可用区只能存在一个子网。
CCM环境变量
YANDEX_CLOUD_DEFAULT_LB_TARGET_GROUP_NETWORK_ID – 创建网络负载均衡器(NetworkLoad***s)时用于目标组的默认网络ID。
YANDEX_CLOUD_DEFAULT_LB_LISTENER_SUBNET_ID – 创建网络负载均衡器监听器时使用的默认子网ID。
yandex.cpi.flant.com/loadbalancer-external覆盖。服务注解
yandex.cpi.flant.com/target-group-network-id – 按服务覆盖YANDEX_CLOUD_DEFAULT_LB_TARGET_GROUP_NETWORK_ID。yandex.cpi.flant.com/listener-subnet-id – 用于创建网络负载均衡器监听器的默认子网ID。网络负载均衡器将是内部的。yandex.cpi.flant.com/listener-address-ipv4 – 选择预定义的IPv4地址。适用于内部和外部网络负载均衡器。yandex.cpi.flant.com/loadbalancer-external – 按服务覆盖YANDEX_CLOUD_DEFAULT_LB_LISTENER_SUBNET_ID。yandex-cloud-controller-manager使用Google的Go编程语言编写。目前,它在Go 1.13.6上开发和测试。如果您尚未设置Go开发环境,请按照https://golang.org/doc/install%E6%93%8D%E4%BD%9C%E3%80%82
bash$ go get -u github.com/flant/yandex-cloud-controller-manager $ cd $(go env GOPATH)/src/github.com/flant/yandex-cloud-controller-manager
yandex-cloud-controller-manager使用https://github.com/golang/go/wiki/Modules%E7%AE%A1%E7%90%86%E4%BE%9D%E8%B5%96%E3%80%82
要构建yandex-cloud-controller-manager二进制文件,运行:
bash$ make build
要构建Docker镜像,使用以下make目标:
bash$ DOCKER_TAG=dev make docker-build
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务