xci: Add k8-nosdn-nofeature role 17/55317/17
authorwutianwei <wutianwei1@huawei.com>
Sun, 8 Apr 2018 07:46:03 +0000 (15:46 +0800)
committerMarkos Chandras <mchandras@suse.de>
Mon, 16 Apr 2018 09:11:00 +0000 (10:11 +0100)
Move default k8s-cluster.yml from kubespray/files/ to
role/k8-nosdn-nofeature/files/k8s-cluster.yml since it's scenario
specific. Moreover, we set 'cloud' as kube_network_plugin, which would
use kubnet as network plugin. The kubenet network plugin requires
routing between to be setup by the administrator so we need to add
static routes on every host since they are connected using a bridge
instead of a router.

installer-type:kubespray
deploy-scenario:k8-nosdn-nofeature

Change-Id: I6ab7288c966d7f17e9d61279056f7673be37bebe
Signed-off-by: wutianwei <wutianwei1@huawei.com>
Signed-off-by: Markos Chandras <mchandras@suse.de>
xci/installer/kubespray/deploy.sh
xci/installer/kubespray/playbooks/configure-kubenet.yml [new file with mode: 0644]
xci/installer/kubespray/playbooks/configure-opnfvhost.yml
xci/playbooks/bootstrap-scenarios.yml
xci/scenarios/k8-nosdn-nofeature/role/k8-nosdn-nofeature/files/k8s-cluster.yml [moved from xci/installer/kubespray/files/k8s-cluster.yml with 99% similarity]
xci/scenarios/k8-nosdn-nofeature/role/k8-nosdn-nofeature/tasks/main.yml [new file with mode: 0644]

index 59d1105..1a0b34b 100755 (executable)
@@ -79,6 +79,11 @@ ssh root@$OPNFV_HOST_IP "set -o pipefail; cd releng-xci/.cache/repos/kubespray;\
          -i opnfv_inventory/inventory.cfg cluster.yml -b | tee setup-kubernetes.log"
 scp root@$OPNFV_HOST_IP:~/releng-xci/.cache/repos/kubespray/setup-kubernetes.log \
          $LOG_PATH/setup-kubernetes.log
+
+cd $K8_XCI_PLAYBOOKS
+ansible-playbook ${XCI_ANSIBLE_PARAMS} -e XCI_PATH="${XCI_PATH}" \
+    -i ${XCI_FLAVOR_ANSIBLE_FILE_PATH}/inventory/inventory.cfg \
+    configure-kubenet.yml
 echo
 echo "-----------------------------------------------------------------------"
 echo "Info: Kubernetes installation is successfully completed!"
diff --git a/xci/installer/kubespray/playbooks/configure-kubenet.yml b/xci/installer/kubespray/playbooks/configure-kubenet.yml
new file mode 100644 (file)
index 0000000..1c3740b
--- /dev/null
@@ -0,0 +1,50 @@
+---
+# SPDX-license-identifier: Apache-2.0
+##############################################################################
+# Copyright (c) 2018 SUSE LINUX GmbH and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# NOTE(hwoarang) Kubenet expects networking to be prepared by the administrator so it's necessary
+# to do that as part of the node configuration. All we need is to add static routes on every node
+# so cbr0 interfaces can talk to each other.
+- name: Prepare networking for kubenet
+  hosts: k8s-cluster
+  gather_facts: True
+  become: yes
+  vars_files:
+    - "{{ xci_path }}/xci/var/opnfv.yml"
+  tasks:
+    - name: Configure static routes
+      block:
+        - name: Collect cbr0 information from the nodes
+          set_fact:
+            kubenet_xci_static_routes: |-
+              {% set static_routes = [] %}
+              {% for host in groups['k8s-cluster']|select("ne", inventory_hostname) %}
+              {%- set _ = static_routes.append(
+              {'network': (hostvars[host]['ansible_cbr0']['ipv4']['network']+'/'+
+               hostvars[host]['ansible_cbr0']['ipv4']['netmask'])|ipaddr('net'),
+               'gateway': hostvars[host]['ansible_default_ipv4']['address']}) -%}
+              {% endfor %}
+              {{ static_routes }}
+
+        - name: Add static routes on each node
+          shell: "ip route show | grep -q {{ item.network }} || ip route add {{ item.network }} via {{ item.gateway }}"
+          with_items: "{{ kubenet_xci_static_routes }}"
+          loop_control:
+            label: "{{ item.network }}"
+      when: deploy_scenario == 'k8-nosdn-nofeature'
+
+    - name: Ensure rp_filter is disabled on localhost
+      sysctl:
+        name: net.ipv4.conf.all.rp_filter
+        sysctl_set: yes
+        state: present
+        value: "{{ deploy_scenario == 'k8-nosdn-nofeature' | ternary(0, 1) }}"
+        reload: yes
+      delegate_to: localhost
+      run_once: True
index 0ac18b5..697d44c 100644 (file)
       file:
         path: "{{ remote_xci_path }}/.cache/repos/kubespray/opnfv_inventory/group_vars"
         state: directory
-    - name: copy k8s_cluster.yml
-      command: "cp -rf {{ remote_xci_path }}/xci/installer/kubespray/files/k8s-cluster.yml \
-                     {{ remote_xci_path }}/.cache/repos/kubespray/opnfv_inventory/group_vars"
-      args:
-        creates: "{{ remote_xci_path }}/.cache/repos/kubespray/opnfv_inventory/group_vars/k8s-cluster.yml"
     - include: "{{ xci_path }}/xci/playbooks/bootstrap-scenarios.yml"
     - name: Install required packages
       package:
index c09d58a..d133125 100644 (file)
@@ -37,3 +37,7 @@
   include_role:
     name: "k8-flannel-nofeature"
   when: deploy_scenario == 'k8-flannel-nofeature'
+- name: Prepare everything to run the k8-nosdn-nofeature scenario
+  include_role:
+    name: "k8-nosdn-nofeature"
+  when: deploy_scenario == 'k8-nosdn-nofeature'
@@ -174,7 +174,7 @@ kube_basic_auth: true
 
 # Choose network plugin (calico, contiv, weave or flannel)
 # Can also be set to 'cloud', which lets the cloud provider setup appropriate routing
-kube_network_plugin: calico
+kube_network_plugin: cloud
 
 # weave's network password for encryption
 # if null then no network encryption
diff --git a/xci/scenarios/k8-nosdn-nofeature/role/k8-nosdn-nofeature/tasks/main.yml b/xci/scenarios/k8-nosdn-nofeature/role/k8-nosdn-nofeature/tasks/main.yml
new file mode 100644 (file)
index 0000000..5b2939f
--- /dev/null
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2018 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+
+- name: copy k8s-cluster.yml
+  copy:
+    src: "k8s-cluster.yml"
+    dest: "{{ remote_xci_path }}/.cache/repos/kubespray/opnfv_inventory/group_vars/k8s-cluster.yml"