如何在Ansible中检索已创建的Google Kubernetes(GKE)集群的凭据?
我正在使用创建群集和节点池如何在Ansible中检索已创建的Google Kubernetes(GKE)集群的凭据?,kubernetes,ansible,google-kubernetes-engine,gcloud,Kubernetes,Ansible,Google Kubernetes Engine,Gcloud,我正在使用创建群集和节点池 - name: "Create Google Kubernetes Engine Cluster to be setup with with kubectl" gcp_container_cluster: name: "{{cluster_name}}" project: "{{project_id}}" auth_kind: "serviceaccount"
- name: "Create Google Kubernetes Engine Cluster to be setup with with kubectl"
gcp_container_cluster:
name: "{{cluster_name}}"
project: "{{project_id}}"
auth_kind: "serviceaccount"
location: "{{cluster_location}}"
logging_service: "none"
monitoring_service: "none"
service_account_contents: "{{service_account_contents}}"
initial_node_count: 1
register: cluster
- name: "Create node pool for system pods"
gcp_container_node_pool:
name: "default-pool"
project: "{{project_id}}"
cluster: "{{ cluster }}"
auth_kind: "serviceaccount"
location: "{{cluster_location}}"
autoscaling:
enabled: "no"
initial_node_count: 1
service_account_contents: "{{service_account_contents}}"
config:
machine_type: "g1-small"
disk_size_gb: 25
preemptible: "no"
management:
auto_repair: "yes"
auto_upgrade: "yes"
这很好,但是我找不到关于如何对使用Ansiblek8s
模块执行的kubectl
命令进行身份验证并获得授权的信息
首先,文档在措辞和示例方面都没有帮助。我没有找到任何指南、博客或其他内容,感觉我是第一个使用Ansible执行此任务的人。我仔细检查了返回的集群对象(与上面的register
一起存储),但没有找到任何合适的对象。这适用于gcp\u容器\u集群
和gcp\u容器\u集群信息
据我所知,我需要通过Ansible模块获得kubeconfig,我可以在k8s模块中使用该模块,就像我使用gcloud容器集群获取凭据一样。在使用Ansible中的shell命令之前,我想先看看是否有内置方法
我正在Ubuntu 20.04上使用Ansible 2.9.10。当您使用gcp\u容器\u集群创建集群时,返回值将包括。您可以使用带有{{cluster.kubectlPath}的示例引用此路径
当您要使用k8s
模块时,可以定义要用于该模块的。。它看起来像这样:
- name: "Create Google Kubernetes Engine Cluster to be setup with with kubectl"
gcp_container_cluster:
name: "{{cluster_name}}"
kubectlPath: /path/to/save/config
[...]
register: cluster
- name: "Create k8s resource"
k8s:
kubeconfig: "{{ cluster.kubectlPath }}"
definition:
[...]
编辑:
我误读了文档,在“响应”部分澄清了必须设置此字段才能将文件写入此路径,此字段没有默认值。当您使用gcp\u容器\u集群创建集群时,返回值将包括。您可以使用带有{{cluster.kubectlPath}的示例引用此路径
当您要使用k8s
模块时,可以定义要用于该模块的。。它看起来像这样:
- name: "Create Google Kubernetes Engine Cluster to be setup with with kubectl"
gcp_container_cluster:
name: "{{cluster_name}}"
kubectlPath: /path/to/save/config
[...]
register: cluster
- name: "Create k8s resource"
k8s:
kubeconfig: "{{ cluster.kubectlPath }}"
definition:
[...]
编辑:
我误读了文档,在“响应”部分,它澄清了必须设置此字段才能将文件写入此路径,此字段没有默认值。由于以下原因,这似乎是不可能的
我用自己的方法规避了这个问题
- name: "Circumvent https://github.com/ansible/ansible/issues/66096 which makes it impossible to retrieve the
kubecontext retrieved during cluster creation, asked
https://stackoverflow.com/questions/62799952/how-to-update-the-ansible-gcp-container-cluster-module for input"
block:
- name: "Create temporary file for gcloud key"
tempfile: ~
register: gcloud_key_tempfile
- name: "Write gcloud key to temporary file"
copy: content="{{ service_account_contents }}" dest={{ gcloud_key_tempfile.path }}
- name: "Retrieve k8s credentials through gcloud shell commands"
shell: |
gcloud config set project {{ project_id }}
gcloud config set compute/zone {{ cluster_location }}
gcloud auth activate-service-account --key-file {{ gcloud_key_tempfile.path }}
env KUBECONFIG={{kubectl_tempfile.path}} gcloud container clusters get-credentials {{ cluster_name }}
- set_fact:
kubeconfig_path: "{{ kubectl_tempfile.path }}"
always:
- name: "Remove temporary file for gcloud key"
file: dest="{{ gcloud_key_tempfile.path }}" state=absent
这似乎是不可能的,因为
我用自己的方法规避了这个问题
- name: "Circumvent https://github.com/ansible/ansible/issues/66096 which makes it impossible to retrieve the
kubecontext retrieved during cluster creation, asked
https://stackoverflow.com/questions/62799952/how-to-update-the-ansible-gcp-container-cluster-module for input"
block:
- name: "Create temporary file for gcloud key"
tempfile: ~
register: gcloud_key_tempfile
- name: "Write gcloud key to temporary file"
copy: content="{{ service_account_contents }}" dest={{ gcloud_key_tempfile.path }}
- name: "Retrieve k8s credentials through gcloud shell commands"
shell: |
gcloud config set project {{ project_id }}
gcloud config set compute/zone {{ cluster_location }}
gcloud auth activate-service-account --key-file {{ gcloud_key_tempfile.path }}
env KUBECONFIG={{kubectl_tempfile.path}} gcloud container clusters get-credentials {{ cluster_name }}
- set_fact:
kubeconfig_path: "{{ kubectl_tempfile.path }}"
always:
- name: "Remove temporary file for gcloud key"
file: dest="{{ gcloud_key_tempfile.path }}" state=absent
有趣。我也这么认为,但由于fatal:[localhost]:失败!=>{“msg”:“该任务包含一个带有未定义变量的选项。错误是:'dict object'没有属性'kubectlPath'\n\n错误似乎在'/path/to/project/roles/role/tasks/main.yml':第62行第3列,但可能\n在文件的其他位置,具体取决于语法问题。\n\n出现问题的行是:\n\n标记:[jenkins\u slave\u cluster\u gke]\n-name:\“为jenkins Kubernetes plugin创建名称空间\”\n^here\n“}
I如果使用Ansible的debug
将返回的cluster
打印到控制台,我找不到kubectlPath
。我误读了文档(或者文档记录不完整),kubectlPath字段应该在第一个任务中指定,谢谢您的输入。这也是我的想法,但它导致了我试图回避的问题。这个问题和这个问题可能是重复的,我将在进一步澄清如何使用Ansible.Ma创建和配置GKE集群的任务后尽快解决ybe这个错误只需要修复。我已经等了6个月才收到输入。很有趣。我也这么认为,但它失败了,因为fatal:[localhost]:失败!=>{“msg”:任务包含一个带有未定义变量的选项。错误是:“dict object”没有属性“kubectlPath”\n\n错误出现在“/path/to/project/roles/role/tasks/main.yml”:第62行第3列,但可能\n出现在文件的其他位置,具体取决于语法问题。\n\n出现问题的行是:\n\n标记:[jenkins\u slave\u cluster\u gke]\n-name:\“为jenkins Kubernetes plugin创建名称空间\”\n^here\n“}
I如果使用Ansible的debug
将返回的cluster
打印到控制台,我找不到kubectlPath
。我误读了文档(或者文档记录不完整),kubectlPath字段应该在第一个任务中指定,谢谢您的输入。这也是我的想法,但它导致了我试图回避的问题。这个问题和这个问题可能是重复的,我将在进一步澄清如何使用Ansible.Ma创建和配置GKE集群的任务后尽快解决ybe这个错误只是需要修复。我已经等了6个月,等待它的输入。