kubernetes 如何等待外部IP分配?

bweufnob  于 12个月前  发布在  Kubernetes
关注(0)|答案(3)|浏览(151)

当我在Digital Ocean K8S集群上部署https://projectcontour.io/ ingress控制器时,会自动创建一个负载均衡器。
我考虑使用Ansible作为K8S的管理工具来自动化部署。
完成以下任务后:

- name: retrieve file
  get_url:
    url: https://projectcontour.io/quickstart/contour.yaml
    dest: /testing/contour.yaml
  register: download_contour

- name: create deployment
  k8s:
    src: /testing/deployment.yml
  when: download_contour.changed

字符串
我想等到轮廓得到外部IP地址分配,然后继续与其他任务.这里是一个例子在我的本地计算机:

kubectl get -n projectcontour service envoy -o wide                                                                       
NAME    TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE     SELECTOR
envoy   LoadBalancer   10.96.226.84   172.18.255.200   80:31092/TCP,443:30362/TCP   2d15h   app=envoy


如何等待envoy LoadBalancer获得Ansible中分配的EXTERNAL-IP地址?

ecbunoof

ecbunoof1#

我还没有测试过它,但我认为你可以尝试这样做:

- shell: if [[ $(kubectl get services envoy -n projectcontour --output jsonpath='{.status.loadBalancer.ingress[0]}') ]]; then exit 0; else exit 1; fi;
  register: wait_for_ext_ip
  until: wait_for_ext_ip.rc == 0
  retries: 10
  delay: 5

字符串

cig3rfwq

cig3rfwq2#

使用until循环:

tasks:
  - name: run kubectl to retreive external IP - Wait for task to complete
    shell: "kubectl get -n projectcontour service envoy -o wide | awk '{ print $4}' |  grep -v EXT"
    register: k_ext_ip
    until: k_ext_ip.stdout.find("1.2.3.4") != -1
    retries: 6
    delay: 10

字符串
对于shell命令,我只是使用了一些基本的Linux命令。最好用Kubectl对齐的命令来替换它们,以便只查看EXTERNAL-IP。

9w11ddsr

9w11ddsr3#

实际上,感谢Joelazar的回答,它被标记为正确的。但是,我不知道它是如何工作的,因为如果loadBalancer外部IP没有分配,我们也会得到一个0状态码作为响应。
我更喜欢使用k8s_info模块,这样我们就可以在不使用shell模块的情况下检查IP是否被分配:

- name: Get an existing Service object
  kubernetes.core.k8s_info:
    context: kind-test-dev-usa
    api_version: v1
    kind: Service
    name: istio-eastwestgateway
    namespace: istio-system
  register: gateway_service
  until: gateway_service.resources[0].status.loadBalancer.ingress[0].ip is defined
  retries: 10
  delay: 10

- debug:
    var: gateway_service.resources[0].status.loadBalancer

字符串
此代码将检查外部IP是否已分配,并等待分配。

相关问题