python-3.x - 如何使用 google-cloud-container 模块在 python 中的谷歌云平台中创建 kubernetes 集群
问题描述
我正在尝试使用 google-cloud-container 模块通过 python (3.7) 在谷歌云平台上创建 kubernetes 集群。
通过谷歌云平台创建了 kubernetes 集群,并能够使用 google-cloud 容器(python 模块)成功检索该集群的详细信息。
我现在正在尝试通过这个模块创建 kubernetes 集群。我创建了一个带有所需键值的 JSON 文件并将其作为参数传递,但出现错误。如果提供在谷歌云平台上创建 kubernetes 集群的示例代码将不胜感激。先感谢您。
from google.oauth2 import service_account
from google.cloud import container_v1
class GoogleCloudKubernetesClient(object):
def __init__(self, file, project_id, project_name, zone, cluster_id):
credentials = service_account.Credentials.from_service_account_file(
filename=file)
self.client = container_v1.ClusterManagerClient(credentials=credentials)
self.project_id = project_id
self.zone = zone
def create_cluster(self, cluster):
print(cluster)
response = self.client.create_cluster(self.project_id, self.zone, cluster=cluster)
print(f"response for cluster creation: {response}")
def main():
cluster_data = {
"name": "test_cluster",
"masterAuth": {
"username": "admin",
"clientCertificateConfig": {
"issueClientCertificate": True
}
},
"loggingService": "logging.googleapis.com",
"monitoringService": "monitoring.googleapis.com",
"network": "projects/abhinav-215/global/networks/default",
"addonsConfig": {
"httpLoadBalancing": {},
"horizontalPodAutoscaling": {},
"kubernetesDashboard": {
"disabled": True
},
"istioConfig": {
"disabled": True
}
},
"subnetwork": "projects/abhinav-215/regions/us-west1/subnetworks/default",
"nodePools": [
{
"name": "test-pool",
"config": {
"machineType": "n1-standard-1",
"diskSizeGb": 100,
"oauthScopes": [
"https://www.googleapis.com/auth/cloud-platform"
],
"imageType": "COS",
"labels": {
"App": "web"
},
"serviceAccount": "abhinav@abhinav-215.iam.gserviceaccount.com",
"diskType": "pd-standard"
},
"initialNodeCount": 3,
"autoscaling": {},
"management": {
"autoUpgrade": True,
"autoRepair": True
},
"version": "1.11.8-gke.6"
}
],
"locations": [
"us-west1-a",
"us-west1-b",
"us-west1-c"
],
"resourceLabels": {
"stage": "dev"
},
"networkPolicy": {},
"ipAllocationPolicy": {},
"masterAuthorizedNetworksConfig": {},
"maintenancePolicy": {
"window": {
"dailyMaintenanceWindow": {
"startTime": "02:00"
}
}
},
"privateClusterConfig": {},
"databaseEncryption": {
"state": "DECRYPTED"
},
"initialClusterVersion": "1.11.8-gke.6",
"location": "us-west1-a"
}
kube = GoogleCloudKubernetesClient(file='/opt/key.json', project_id='abhinav-215', zone='us-west1-a')
kube.create_cluster(cluster_data)
if __name__ == '__main__':
main()
Actual Output:
Traceback (most recent call last):
File "/opt/matilda_linux/matilda_linux_logtest/matilda_discovery/matilda_discovery/test/google_auth.py", line 118, in <module>
main()
File "/opt/matilda_linux/matilda_linux_logtest/matilda_discovery/matilda_discovery/test/google_auth.py", line 113, in main
kube.create_cluster(cluster_data)
File "/opt/matilda_linux/matilda_linux_logtest/matilda_discovery/matilda_discovery/test/google_auth.py", line 31, in create_cluster
response = self.client.create_cluster(self.project_id, self.zone, cluster=cluster)
File "/opt/matilda_discovery/venv/lib/python3.6/site-packages/google/cloud/container_v1/gapic/cluster_manager_client.py", line 407, in create_cluster
project_id=project_id, zone=zone, cluster=cluster, parent=parent
ValueError: Protocol message Cluster has no "masterAuth" field.
解决方案
有点晚的答案,但我遇到了同样的问题并想通了。值得为未来的观众写作。
您不应将字段名称写入 cluster_data 中,因为它们出现在REST API中。相反,您应该将它们翻译成 python 约定的外观,用下划线而不是驼峰式分隔单词。因此,您应该编写 master_auth,而不是编写 masterAuth。您应该对其余字段进行类似的更改,然后脚本应该可以工作。
PS 你没有在 GoogleCloudKubernetesClient 中使用 project_name 和 cluster_id 参数。初始化。不确定它们是什么,但您可能应该删除它们。
推荐阅读
- java - Java 中 Android 的 Base64.encodeToString(data, Base64.NO_WRAP) 的等价物是什么
- python - 图片按钮 Kivy
- google-bigquery - 没有 BigQuery 的大量数据的交集
- python - 从日期时间选择时间
- ios - 使用 Unity3D 加载场景时,iOS 在 iPhone6 上构建崩溃,最新更新 12.4.3 - Google Cardboard
- javascript - 如何避免在 axios.get 中使用 Web 上下文
- maxima - 在最大值中创建一个 defmatch
- python - lambda 表达式中的多个 if 语句
- python - 您可以在 Python 中全局更改一段代码的精度,作为调试它的一种方式吗?
- jquery - 在ck编辑器上上传图像并在CMS页面上显示图像