From 46576c9cfe4f2e59de107f7f2c70dd5b6c99442b Mon Sep 17 00:00:00 2001 From: Sirisha Gopigiri Date: Mon, 24 Aug 2020 15:47:07 +0530 Subject: [PATCH] Zuul Gates for hostconfig repository and updated code for cron job, resiliency feature Scripts and files to build initial zuul gates for the hostconfig repository. Added cronjob feature - Executing the HostConfig CRs based on the reconcile-period. This features also adds support for reconcile execution based on number of iterations and reconcile-interval specified. Update the docs with the Node-resiliency observations tested with hostconfig-operator pod. Change-Id: Ic0a2f110d709236f9eb23756e3776d4104dd832f --- README.md | 231 +++-- airship-host-config/README.md | 37 - airship-host-config/build/Dockerfile | 18 + airship-host-config/build/ansible.cfg | 7 +- airship-host-config/create_labels.sh | 28 - .../demo_examples/example_host_groups.yaml | 10 - .../example_match_host_groups.yaml | 17 - .../demo_examples/example_max_percentage.yaml | 14 - .../example_sequential_match_host_groups.yaml | 17 - .../example_stop_on_failure.yaml | 13 - ...tconfig.airshipit.org_hostconfigs_crd.yaml | 13 +- airship-host-config/deploy/operator.yaml | 24 +- .../inventory/dynamic_inventory.py | 124 ++- .../playbooks/create_playbook.yaml | 106 +-- .../playbooks/delete_playbook.yaml | 10 - .../callback/hostconfig_k8_cr_status.py | 375 +++++++- .../plugins/filter/hostconfig_host_groups.py | 58 +- .../filter/hostconfig_host_groups_to_list.py | 6 +- .../filter/hostconfig_hosts_parallel.py | 26 +- .../plugins/filter/hostconfig_sequential.py | 1 + airship-host-config/requirements.yml | 1 + .../roles/kubeadm/tasks/main.yml | 15 + .../tasks/main.yml | 26 + .../roles/setvariables/tasks/main.yml | 29 +- .../roles/shell/tasks/main.yml | 13 + .../roles/sysctl/tasks/main.yml | 2 + .../roles/ulimit/tasks/main.yml | 2 + airship-host-config/setup.sh | 72 -- airship-host-config/watches.yaml | 5 +- demo_examples/example_host_groups.yaml | 18 + demo_examples/example_match_host_groups.yaml | 29 + demo_examples/example_max_percentage.yaml | 21 + .../example_parallel.yaml | 8 +- demo_examples/example_reconcile.yaml | 20 + demo_examples/example_reconcile_interval.yaml | 19 + .../example_reconcile_iterations.yaml | 21 + .../example_sequential.yaml | 8 +- .../example_sequential_match_host_groups.yaml | 32 + demo_examples/example_stop_on_failure.yaml | 20 + .../example_sysctl_ulimit.yaml | 8 +- docs/Node_resiliency.png | Bin 0 -> 364342 bytes docs/Overview.md | 89 +- docs/Resiliency.md | 78 ++ kubernetes/README.md | 81 -- kubernetes/Vagrantfile | 220 ----- kubernetes/calico/calico.yaml | 839 ------------------ kubernetes/config/kubelet | 1 - kubernetes/haproxy.sh | 73 -- playbooks/airship-collect-logs.yaml | 25 + playbooks/airship-host-config.yaml | 29 + .../airship-hostconfig-deploy-docker.yaml | 15 + .../defaults/main.yaml | 14 + roles/airship-gather-pod-logs/tasks/main.yaml | 66 ++ .../tasks/main.yaml | 45 + roles/docker-install/defaults/main.yaml | 28 + roles/docker-install/tasks/main.yaml | 80 ++ .../templates/http-proxy-conf.j2 | 4 + roles/docker-install/tests/main.yml | 25 + roles/gather-system-logs/tasks/main.yaml | 41 + roles/hostconfig-run-script/tasks/main.yaml | 21 + tools/deployment/00_install_kind.sh | 27 + tools/deployment/01_install_kubectl.sh | 24 + tools/deployment/02_install_operator_sdk.sh | 23 + .../10_create_hostconfig_cluster.sh | 58 ++ tools/deployment/20_configure_ssh_on_nodes.sh | 40 + tools/deployment/30_create_labels.sh | 36 + .../40_deploy_hostconfig_operator.sh | 46 + tools/deployment/50_test_hostconfig_cr.sh | 129 +++ .../51_test_hostconfig_cr_reconcile.sh | 86 ++ .../52_test_hostconfig_cr_failure.sh | 73 ++ .../install_ssh_private_key.sh | 21 +- zuul.d/jobs.yaml | 33 + zuul.d/nodesets.yaml | 27 + zuul.d/projects.yaml | 2 +- 74 files changed, 2144 insertions(+), 1759 deletions(-) delete mode 100644 airship-host-config/README.md delete mode 100755 airship-host-config/create_labels.sh delete mode 100644 airship-host-config/demo_examples/example_host_groups.yaml delete mode 100644 airship-host-config/demo_examples/example_match_host_groups.yaml delete mode 100644 airship-host-config/demo_examples/example_max_percentage.yaml delete mode 100644 airship-host-config/demo_examples/example_sequential_match_host_groups.yaml delete mode 100644 airship-host-config/demo_examples/example_stop_on_failure.yaml delete mode 100644 airship-host-config/playbooks/delete_playbook.yaml create mode 100644 airship-host-config/roles/kubeadm/tasks/main.yml create mode 100644 airship-host-config/roles/kubeadm_check_cert_expiration/tasks/main.yml create mode 100644 airship-host-config/roles/shell/tasks/main.yml delete mode 100755 airship-host-config/setup.sh create mode 100644 demo_examples/example_host_groups.yaml create mode 100644 demo_examples/example_match_host_groups.yaml create mode 100644 demo_examples/example_max_percentage.yaml rename {airship-host-config/demo_examples => demo_examples}/example_parallel.yaml (50%) create mode 100644 demo_examples/example_reconcile.yaml create mode 100644 demo_examples/example_reconcile_interval.yaml create mode 100644 demo_examples/example_reconcile_iterations.yaml rename {airship-host-config/demo_examples => demo_examples}/example_sequential.yaml (50%) create mode 100644 demo_examples/example_sequential_match_host_groups.yaml create mode 100644 demo_examples/example_stop_on_failure.yaml rename {airship-host-config/demo_examples => demo_examples}/example_sysctl_ulimit.yaml (74%) create mode 100644 docs/Node_resiliency.png create mode 100644 docs/Resiliency.md delete mode 100644 kubernetes/README.md delete mode 100644 kubernetes/Vagrantfile delete mode 100644 kubernetes/calico/calico.yaml delete mode 100644 kubernetes/config/kubelet delete mode 100644 kubernetes/haproxy.sh create mode 100644 playbooks/airship-collect-logs.yaml create mode 100644 playbooks/airship-host-config.yaml create mode 100644 playbooks/airship-hostconfig-deploy-docker.yaml create mode 100644 roles/airship-gather-pod-logs/defaults/main.yaml create mode 100644 roles/airship-gather-pod-logs/tasks/main.yaml create mode 100644 roles/airship-gather-runtime-logs/tasks/main.yaml create mode 100644 roles/docker-install/defaults/main.yaml create mode 100644 roles/docker-install/tasks/main.yaml create mode 100644 roles/docker-install/templates/http-proxy-conf.j2 create mode 100644 roles/docker-install/tests/main.yml create mode 100644 roles/gather-system-logs/tasks/main.yaml create mode 100644 roles/hostconfig-run-script/tasks/main.yaml create mode 100755 tools/deployment/00_install_kind.sh create mode 100755 tools/deployment/01_install_kubectl.sh create mode 100755 tools/deployment/02_install_operator_sdk.sh create mode 100755 tools/deployment/10_create_hostconfig_cluster.sh create mode 100755 tools/deployment/20_configure_ssh_on_nodes.sh create mode 100755 tools/deployment/30_create_labels.sh create mode 100755 tools/deployment/40_deploy_hostconfig_operator.sh create mode 100755 tools/deployment/50_test_hostconfig_cr.sh create mode 100755 tools/deployment/51_test_hostconfig_cr_reconcile.sh create mode 100755 tools/deployment/52_test_hostconfig_cr_failure.sh rename {airship-host-config => tools}/install_ssh_private_key.sh (55%) create mode 100644 zuul.d/jobs.yaml create mode 100644 zuul.d/nodesets.yaml diff --git a/README.md b/README.md index df00c7c..48f72bb 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,55 @@ -# Airship HostConfig Using Ansible Operator -This repo contains the code for Airship HostConfig Application using Ansible Operator +# Airship HostConfig Operator + +A Day-2 host management interface for Kubernetes + +This repo contains the code for Airship HostConfig Operator +built on Ansible Operator ## How to Run ## Approach 1 -If Kubernetes setup is not available please refer to README.md in kubernetes folder to bring up the kubernetes setup. It uses Vagrant and Virtual Box to bring up 3 master and 5 worker node VMs +If Kubernetes setup is not available you can build up using +the scripts in tools/deployment folder. The scripts bring up a +kind based 3 master and 5 worker node setup. -After the VMs are up and running, connect to master node +Please follow the below steps to bring up the kubernetes setup +and then launch the hostconfig-operator pod for testing. +1. Clone the repository ``` -vagrant ssh k8-master-1 +git clone https://opendev.org/airship/hostconfig-operator.git +cd hostconfig-operator ``` -Navigate to airship-host-config folder - +2. To install kind, kubectl and operator-sdk utilities ``` -cd airship-host-config/airship-host-config/ +./tools/deployment/00_install_kind.sh +./tools/deployment/01_install_kubectl.sh +./tools/deployment/02_install_operator_sdk.sh ``` -Execute the create_labels.sh file so that the Kubernetes nodes are labelled accordingly as master and worker nodes. We are also are attaching some sample zones and regions to the kubernetes nodes - +3. Create hostconfig kind cluster ``` -./create_labels.sh +./tools/deployment/10_create_hostconfig_cluster.sh ``` -Please note: As part of the tasks executed whenever we are creating a Hostconfig CR object, we are checking a "hello" file in the $HOME directory of the ansible ssh user. This file is created as part of the ./setup.sh script please feel free to comment the task if not needed before builing the image. - -Execute the setup.sh script to build and copy the Airship Hostconfig Ansible Operator Image to worker nodes. It also deploys the application on the Kubernetes setup as deployment kind. The below script configures Airship HostConfig Ansible Operator to use "vagrant" as both username and password when it tries connecting to the Kubernetes Nodes. So when we create a HostConfig Kubernetes CR object the application tries to execute the hostconfig ansible role on the Kubernetes Nodes specified in the CR object by connecting using the "vagrant" username and password. - +4. Configure SSH on the kind cluster nodes and create labels +on the nodes ``` -./setup.sh +./tools/deployment/20_configure_ssh_on_nodes.sh +./tools/deployment/30_create_labels.sh ``` -If you want to execute the ansible playbook in the hostconfig example with a different user, you can also set the username and password of the Kubernetes nodes when executing the setup.sh script. So this configures the HostConfig Ansible Operator pod to use the "username" and "password" passed when the hostconfig ansible role is executed on the kubernetes nodes. - +5. Deploy HostConfig Operator on the kubernetes master node ``` -./setup.sh -``` - -If you are planning for the ansible-operator to use username and private key when connecting to the kubernetes node. You can use the script available that creates the private and public keys, copy the public key to kubernetes nodes, creates the secret and attach the secret as annotation. -``` -./install_ssh_private_key.sh -``` - -To try you own custom keys or custom names, follow the below commands to generate the private and public keys. Use this private key and username to generate the kuberenetes secret. Once the secret is available attach this secret name as annotation to the kubernetes node. Also copy the public key to the node. -``` -ssh-keygen -q -t rsa -N '' -f -ssh-copy-id -i @ -kubectl create secret generic --from-literal=username= --from-file=ssh_private_key= -kubectl annotate node secret= +./tools/deployment/40_deploy_hostconfig_operator.sh ``` +Check for hostconfig-operator pod status. It should come to +running state. ## Approach 2 -If Kubernetes setup is already available, please follow the below procedure +If Kubernetes setup is already available, please follow the +below procedure ** Pre-requisites: Access to kubernetes setup using kubectl ** @@ -64,48 +61,66 @@ export KUBECONFIG=~/.kube/config Clone the repository ``` -git clone https://github.com/SirishaGopigiri/airship-host-config.git +git clone https://opendev.org/airship/hostconfig-operator.git +cd hostconfig-operator ``` -Navigate to airship-host-config folder - +1. Configure SSH keys and creates kubernetes secrets and +annotations on nodes. Pre-requisite for the script is that SSH +should be already installed and configured on the nodes. And a +sample SSH user which can be used by the hostconfig-operator to +connect to nodes should be already configured on the nodes. ``` -cd airship-host-config/airship-host-config/ +./tools/install_ssh_private_key.sh ``` -Please note: As part of the tasks executed whenever we are creating a Hostconfig CR object, we are checking a "hello" file in the $HOME directory of the ansible ssh user. This file is created as part of the ./setup.sh script please feel free to comment the task if not needed before builing the image. - -Execute the setup.sh script to build and copy the Airship Hostconfig Ansible Operator Image to worker nodes. It also deploys the application on the Kubernetes setup as deployment kind. The below script configures Airship HostConfig Ansible Operator to use "vagrant" as both username and password when it tries connecting to the Kubernetes Nodes. So when we create a HostConfig Kubernetes CR object the application tries to execute the hostconfig ansible role on the Kubernetes Nodes specified in the CR object by connecting using the "vagrant" username and password. - +2. Deploy HostConfig Operator on the kubernetes cluster. ``` -./setup.sh +./tools/deployment/40_deploy_hostconfig_operator.sh ``` +Check for hostconfig-operator pod status. It should come to +running state. -If you want to execute the ansible playbook in the hostconfig example with a different user, you can also set the username and password of the Kubernetes nodes when executing the setup.sh script. So this configures the HostConfig Ansible Operator pod to use the "username" and "password" passed when the hostconfig ansible role is executed on the kubernetes nodes. +3. Before executing any HostConfig CR objects, please label +the nodes appropriately. There is a sample 30_create_labels.sh +script available in tools/deployment folder for reference. +The valid labels that can be configured in the HostConfig CR are: + * [`topology.kubernetes.io/region`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesiozone) + * [`topology.kubernetes.io/zone`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesioregion) + * [`kubernetes.io/hostname`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-hostname) + * [`kubernetes.io/arch`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-arch) + * [`kubernetes.io/os`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-os) + * `kubernetes.io/role` -``` -./setup.sh -``` -If you are planning for the ansible-operator to use username and private key when connecting to the kubernetes node. You can use the script available that creates the private and public keys, copy the public key to kubernetes nodes, creates the secret and attach the secret as annotation. -``` -./install_ssh_private_key.sh -``` +## SSH Keys + +For hostconfig operator to use your own custom keys or custom +secret names, follow the below commands to generate the private +and public keys. Use this private key and username to generate +the kuberenetes secret. Once the secret is available attach +this secret name as annotation to the kubernetes node. Also +copy the public key to the node. -To try you own custom keys or custom names, follow the below commands to generate the private and public keys. Use this private key and username to generate the kuberenetes secret. Once the secret is available attach this secret name as annotation to the kubernetes node. Also copy the public key to the node. ``` ssh-keygen -q -t rsa -N '' -f ssh-copy-id -i @ -kubectl create secret generic --from-literal=username= --from-file=ssh_private_key= +kubectl create secret generic \ +--from-literal=username= \ +--from-file=ssh_private_key= kubectl annotate node secret= ``` +## Run Examples -## Run Examples +After the scrits are executed successfully and once the +hostconfig operator pod comes to running state, navigate +to demo_examples and execute the desired examples. -After the setup.sh file executed successfully, navigate to demo_examples and execute the desired examples - -Before executing the examples keep tailing the logs of the airship-host-config pod to see the ansible playbook getting executed while running the examples +Before executing the examples keep tailing the logs of the +airship-host-config pod to see the ansible playbook getting +executed while running the examples. Or you can as well +check the status of the CR object created ``` kubectl get pods @@ -119,18 +134,106 @@ cd demo_examples kubectl apply -f example_host_groups.yaml kubectl apply -f example_match_host_groups.yaml kubectl apply -f example_parallel.yaml -``` - -Apart from the logs on the pod when we execute the hostconfig role we are creating a "tetsing" file on the kubernetes nodes, please check the contents in that file which states the time of execution of the hostconfig role by the HostConfig Ansible Operator Pod. - -Execute below command on the kubernetes hosts to get the timestamp of execution. +``` +To check the status of the hostconfig CR object you have +executed you can use the kubectl command. ``` -cat /home/vagrant/testing +kubectl get hostconfig -o json ``` -If the setup is configured using a different user, check using the below command +This displays the detailed output of each task that +has been executed. +You can as well check the working of the operator by +executing the validation scripts available. ``` -cat /home//testing +./tools/deployment/50_test_hostconfig_cr.sh +./tools/deployment/51_test_hostconfig_cr_reconcile.sh ``` +These scripts execute some sample CR's and check the execution. + +## Airship HostConfig Operator CR object specification variables + +Here we discuss about the various variable that can be used in +the HostConfig CR Object to control the execution flow of the +kubernetes nodes. + +host_groups: Dictionary specifying the key/value labels of the +Kubernetes nodes on which the playbook should be executed. + +sequential: When set to true executes the host_groups labels sequentially. + +match_host_groups: Performs an AND operation of the host_group labels +and executes the playbook on those hosts only which have all the labels +matched, when set to true. + +max_hosts_parallel: Caps the numbers of hosts that are executed +in each iteration. + +stop_on_failure: When set to true stops the playbook execution +on that host and subsequent hosts whenever a task fails on a node. + +max_failure_percentage: Sets the Maximum failure percentage of +hosts that are allowed to fail on a every iteration. + +Annotations: + +reconcile_period: Executes the CR object for every period of time +given in the annotation. + +reconcile_iterations: Limits the number of iterations of +reconcile-period to the number of iterations specified. + +reconcile_interval: Runs the CR object with the frequency give as +reconcile-period, for an interval of time given as reconcile_interval. + +Config Roles: + +ulimit, sysctl: Array objects specifiying the configuration of +ulimit and sysctl on the kubernetes nodes. + +kubeadm, shell: Array objects specifiying the kubeadm and shell +commands that world be executed on the kubernetes nodes. + +The demo_examples folder has some examples listed which can be +used to initially to play with the above variables + +1. example_host_groups.yaml - Gives example on how to use host_groups + +2. example_sequential.yaml - In this example the host_groups specified +goes by sequence and in the first iteration the master nodes gets +executed and then the worker nodes get executed + +3. example_match_host_groups.yaml - In this example the playbook will +be executed on all the hosts matching "us-east-1a" zone and are +master nodes, "us-east-1a" and are worker nodes, "us-east-1b" and +are "master" nodes, "us-east-1b" and are worker nodes. +All the hosts matching the condition will be executed in parallel. + +4. example_sequential_match_host_groups.yaml - This is the same example +as above but just that the execution goes in sequence. + +5. example_parallel.yaml - In this example we will be executing on +only 2 hosts for every iteration. + +6. example_stop_on_failure.yaml - This example shows that the execution +stops whenever a task fails on any kubernetes hosts + +7. example_max_percentage.yaml - In this example the execution stops +only when the hosts failing exceeds 30% at a given iteration. + +8. example_sysctl_ulimit.yaml - In this example we configure the kubernetes +nodes with the values specified for ulimit and sysclt in the CR object. + +9. example_reconcile.yaml - Gives an example on how to use +reconcile annotation to run the HostConfig CR periodically +at the given frequecny in the annotation. + +10. example_reconcile_iterations.yaml - In this example the CR objects +executes at the given frequency in the "reconcile-period" annotation for +only fixed number of times specified in the "reconcile-iterations" annotation. + +11. example_reconcile_interval.yaml - Gives an example to run CR objects +at a particular frquency for a particular interval of time, +specified as "reconcile-interval" annotation. diff --git a/airship-host-config/README.md b/airship-host-config/README.md deleted file mode 100644 index 91be552..0000000 --- a/airship-host-config/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# Airship HostConfig Using Ansible Operator - -Here we discuss about the various variable that are used in the HostConfig CR Object to control the execution flow of the kubernetes nodes - -host_groups: Dictionary specifying the key/value labels of the Kubernetes nodes on which the playbook should be executed - -sequential: When set to true executes the host_groups labels sequentially - -match_host_groups: Performs an AND operation of the host_group labels and executes the playbook on the hosts which have all the labels matched, when set to true - -max_hosts_parallel: Caps the numbers of hosts that are executed in each iteration - -stop_on_failure: When set to true stops the playbook execution on that host and subsequent hosts whenever a task fails on a node - -max_failure_percentage: Sets the Maximum failure percentage of hosts that are allowed to fail on a every iteration - -reexecute: Executes the playbook again on the successful hosts as well - -ulimit, sysctl: Array objects specifiying the configuration of ulimit and sysctl on the kubernetes nodes - -The demo_examples folder has some examples listed which can be used to initially to play with the above variables - -1. example_host_groups.yaml - Gives example on how to use host_groups - -2. example_sequential.yaml - In this example the host_groups specified goes by sequence and in the first iteration the master nodes get executed and then the worker nodes get executed - -3. example_match_host_groups.yaml - In this example the playbook will be executed on all the hosts matching "us-east-1a" zone and are master nodes, "us-east-1a" and are worker nodes, "us-east-1b" and are "master" nodes, "us-east-1b" and are worker nodes. All the hosts matching the condition will be executed in parallel. - -4. example_sequential_match_host_groups.yaml - This is the same example as above but just the execution goes in sequence - -5. example_parallel.yaml - In this example we will be executing 2 hosts for every iteration - -6. example_stop_on_failure.yaml - This example shows that the execution stops whenever a task fails on any kubernetes hosts - -7. example_max_percentage.yaml - In this example the execution stops only when the hosts failing exceeds 30% at a given iteration. - -8. example_sysctl_ulimit.yaml - In this example we configure the kubernetes nodes with the values specified for ulimit and sysclt in the CR object. diff --git a/airship-host-config/build/Dockerfile b/airship-host-config/build/Dockerfile index 8d98f2a..047c9a6 100644 --- a/airship-host-config/build/Dockerfile +++ b/airship-host-config/build/Dockerfile @@ -1,22 +1,40 @@ +# Ansible Operator base image FROM quay.io/operator-framework/ansible-operator:v0.17.0 +# Installing dependency libraries COPY requirements.yml ${HOME}/requirements.yml RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \ && chmod -R ug+rwx ${HOME}/.ansible + +# Configuration for ansible COPY build/ansible.cfg /etc/ansible/ansible.cfg + +# CRD entrypoint definition YAML file COPY watches.yaml ${HOME}/watches.yaml +# Installing ssh clients - used to connect to kubernetes nodes USER root +RUN usermod --password rhEpSyEyZ9rxc root RUN dnf install openssh-clients -y RUN yum install -y wget && wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && rpm -ivh epel-release-6-8.noarch.rpm && yum --enablerepo=epel -y install sshpass USER ansible-operator +# Copying the configuration roles COPY roles/ ${HOME}/roles/ + +# Copying the entry-point playbook COPY playbooks/ ${HOME}/playbooks/ + +# Copying inventory - used to build the kubernetes nodes dynamically COPY inventory/ ${HOME}/inventory/ + +# Copying filter and callback plugins used for computation COPY plugins/ ${HOME}/plugins/ + # ansible-runner unable to pick custom callback plugins specified in any other directory other than /usr/local/lib/python3.6/site-packages/ansible/plugins/callback # ansible-runner is overriding the ANSIBLE_CALLBACK_PLUGINS Environment variable # https://github.com/ansible/ansible-runner/blob/stable/1.3.x/ansible_runner/runner_config.py#L178 COPY plugins/callback/hostconfig_k8_cr_status.py /usr/local/lib/python3.6/site-packages/ansible/plugins/callback/ + +# Intializing ssh folder RUN mkdir ${HOME}/.ssh diff --git a/airship-host-config/build/ansible.cfg b/airship-host-config/build/ansible.cfg index 8cf60f1..6cfc199 100644 --- a/airship-host-config/build/ansible.cfg +++ b/airship-host-config/build/ansible.cfg @@ -1,11 +1,8 @@ [defaults] -inventory_plugins = /opt/ansible/plugins/inventory callback_plugins = /opt/ansible/plugins/callback -stdout_callback = yaml -callback_whitelist = profile_tasks,timer,hostconfig_k8_cr_status -module_utils = /opt/ansible/module_utils roles_path = /opt/ansible/roles -library = /opt/ansible/library inventory = /opt/ansible/inventory filter_plugins = /opt/ansible/plugins/filter remote_tmp = /tmp/ansible +# Custom callback plugin to update the CR object status +callback_whitelist = hostconfig_k8_cr_status diff --git a/airship-host-config/create_labels.sh b/airship-host-config/create_labels.sh deleted file mode 100755 index f8fb856..0000000 --- a/airship-host-config/create_labels.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -kubectl label node k8s-master-1 kubernetes.io/role=master -kubectl label node k8s-master-2 kubernetes.io/role=master -kubectl label node k8s-master-3 kubernetes.io/role=master -kubectl label node k8s-node-1 kubernetes.io/role=worker -kubectl label node k8s-node-2 kubernetes.io/role=worker -kubectl label node k8s-node-3 kubernetes.io/role=worker -kubectl label node k8s-node-4 kubernetes.io/role=worker -kubectl label node k8s-node-5 kubernetes.io/role=worker - -kubectl label node k8s-master-1 topology.kubernetes.io/region=us-east -kubectl label node k8s-master-2 topology.kubernetes.io/region=us-west -kubectl label node k8s-master-3 topology.kubernetes.io/region=us-east -kubectl label node k8s-node-1 topology.kubernetes.io/region=us-east -kubectl label node k8s-node-2 topology.kubernetes.io/region=us-east -kubectl label node k8s-node-3 topology.kubernetes.io/region=us-east -kubectl label node k8s-node-4 topology.kubernetes.io/region=us-west -kubectl label node k8s-node-5 topology.kubernetes.io/region=us-west - -kubectl label node k8s-master-1 topology.kubernetes.io/zone=us-east-1a -kubectl label node k8s-master-2 topology.kubernetes.io/zone=us-west-1a -kubectl label node k8s-master-3 topology.kubernetes.io/zone=us-east-1b -kubectl label node k8s-node-1 topology.kubernetes.io/zone=us-east-1a -kubectl label node k8s-node-2 topology.kubernetes.io/zone=us-east-1a -kubectl label node k8s-node-3 topology.kubernetes.io/zone=us-east-1b -kubectl label node k8s-node-4 topology.kubernetes.io/zone=us-west-1a -kubectl label node k8s-node-5 topology.kubernetes.io/zone=us-west-1a diff --git a/airship-host-config/demo_examples/example_host_groups.yaml b/airship-host-config/demo_examples/example_host_groups.yaml deleted file mode 100644 index 69f3284..0000000 --- a/airship-host-config/demo_examples/example_host_groups.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: hostconfig.airshipit.org/v1alpha1 -kind: HostConfig -metadata: - name: example1 -spec: - # Add fields here - host_groups: - - name: "kubernetes.io/role" - values: - - "master" diff --git a/airship-host-config/demo_examples/example_match_host_groups.yaml b/airship-host-config/demo_examples/example_match_host_groups.yaml deleted file mode 100644 index 09f814f..0000000 --- a/airship-host-config/demo_examples/example_match_host_groups.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: hostconfig.airshipit.org/v1alpha1 -kind: HostConfig -metadata: - name: example3 -spec: - # Add fields here - host_groups: - - name: "topology.kubernetes.io/zone" - values: - - "us-east-1a" - - "us-east-1b" - - name: "kubernetes.io/role" - values: - - "master" - - "worker" - sequential: false - match_host_groups: true diff --git a/airship-host-config/demo_examples/example_max_percentage.yaml b/airship-host-config/demo_examples/example_max_percentage.yaml deleted file mode 100644 index f96bdf4..0000000 --- a/airship-host-config/demo_examples/example_max_percentage.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: hostconfig.airshipit.org/v1alpha1 -kind: HostConfig -metadata: - name: example5 -spec: - # Add fields here - host_groups: - - name: "kubernetes.io/role" - values: - - "master" - - "worker" - sequential: true - stop_on_failure: false - max_failure_percentage: 30 diff --git a/airship-host-config/demo_examples/example_sequential_match_host_groups.yaml b/airship-host-config/demo_examples/example_sequential_match_host_groups.yaml deleted file mode 100644 index 2e276da..0000000 --- a/airship-host-config/demo_examples/example_sequential_match_host_groups.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: hostconfig.airshipit.org/v1alpha1 -kind: HostConfig -metadata: - name: example4 -spec: - # Add fields here - host_groups: - - name: "topology.kubernetes.io/zone" - values: - - "us-east-1a" - - "us-east-1b" - - name: "kubernetes.io/role" - values: - - "master" - - "worker" - sequential: true - match_host_groups: true diff --git a/airship-host-config/demo_examples/example_stop_on_failure.yaml b/airship-host-config/demo_examples/example_stop_on_failure.yaml deleted file mode 100644 index 1b99973..0000000 --- a/airship-host-config/demo_examples/example_stop_on_failure.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: hostconfig.airshipit.org/v1alpha1 -kind: HostConfig -metadata: - name: example6 -spec: - # Add fields here - host_groups: - - name: "kubernetes.io/role" - values: - - "master" - - "worker" - sequential: true - stop_on_failure: true diff --git a/airship-host-config/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml b/airship-host-config/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml index 94c33c8..9532508 100644 --- a/airship-host-config/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml +++ b/airship-host-config/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml @@ -17,8 +17,19 @@ spec: validation: openAPIV3Schema: type: object - x-kubernetes-preserve-unknown-fields: true + x-kubernetes-preserve-unknown-fields: true # Marking true so that the CR status can be updated + required: + - apiVersion + - kind + - metadata + - spec properties: + apiVersion: + type: string + kind: + type: string + metadata: + type: object spec: description: "HostConfig Spec to perform hostconfig Opertaions." type: object diff --git a/airship-host-config/deploy/operator.yaml b/airship-host-config/deploy/operator.yaml index 2e81757..9160aa1 100644 --- a/airship-host-config/deploy/operator.yaml +++ b/airship-host-config/deploy/operator.yaml @@ -4,7 +4,7 @@ kind: Deployment metadata: name: airship-host-config spec: - replicas: 1 + replicas: 2 selector: matchLabels: name: airship-host-config @@ -14,16 +14,28 @@ spec: name: airship-host-config spec: serviceAccountName: airship-host-config + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - airship-host-config + topologyKey: "kubernetes.io/hostname" + nodeSelector: + kubernetes.io/role: master + tolerations: + - key: node-role.kubernetes.io/master + effect: NoSchedule containers: - name: airship-host-config - # Replace this with the built image name - image: "quay.io/sirishagopigiri/airship-host-config" + image: "airship-hostconfig:local" imagePullPolicy: "IfNotPresent" volumeMounts: - mountPath: /tmp/ansible-operator/runner name: runner - - mountPath: /opt/ansible/data - name: data env: - name: WATCH_NAMESPACE valueFrom: @@ -52,5 +64,3 @@ spec: volumes: - name: runner emptyDir: {} - - name: data - emptyDir: {} diff --git a/airship-host-config/inventory/dynamic_inventory.py b/airship-host-config/inventory/dynamic_inventory.py index 5ed571b..340ec1a 100755 --- a/airship-host-config/inventory/dynamic_inventory.py +++ b/airship-host-config/inventory/dynamic_inventory.py @@ -1,17 +1,27 @@ #!/usr/bin/env python3 -import os -import sys +# Python code to build Inventory dynamically based on the kubernetes nodes +# present in the cluster and labels and annotations associated +# with the kubernetes nodes. + import argparse -import time import base64 -import kubernetes.client -from kubernetes.client.rest import ApiException -import yaml - import json +import os +import kubernetes.client + +from kubernetes.client.rest import ApiException + +interested_labels_annotations = [ + "beta.kubernetes.io/arch", "beta.kubernetes.io/os", + "kubernetes.io/arch", "kubernetes.io/hostname", "kubernetes.io/os", + "kubernetes.io/role", "topology.kubernetes.io/region", + "topology.kubernetes.io/zone", "projectcalico.org/IPv4Address", + "projectcalico.org/IPv4IPIPTunnelAddr", "Kernel Version", "OS Image", + "Operating System", "Container Runtime Version", + "Kubelet Version", "Operating System" + ] -interested_labels_annotations = ["beta.kubernetes.io/arch", "beta.kubernetes.io/os", "kubernetes.io/arch", "kubernetes.io/hostname", "kubernetes.io/os", "kubernetes.io/role", "topology.kubernetes.io/region", "topology.kubernetes.io/zone", "projectcalico.org/IPv4Address", "projectcalico.org/IPv4IPIPTunnelAddr", "Kernel Version", "OS Image", "Operating System", "Container Runtime Version", "Kubelet Version", "Operating System"] class KubeInventory(object): @@ -19,7 +29,8 @@ class KubeInventory(object): self.inventory = {} self.read_cli_args() - self.api_instance = kubernetes.client.CoreV1Api(kubernetes.config.load_incluster_config()) + self.api_instance = kubernetes.client.CoreV1Api( + kubernetes.config.load_incluster_config()) if self.args.list: self.kube_inventory() elif self.args.host: @@ -33,10 +44,14 @@ class KubeInventory(object): # Kube driven inventory def kube_inventory(self): - self.inventory = {"group": {"hosts": [], "vars": {}}, "_meta": {"hostvars": {}}} + self.inventory = { + "group": {"hosts": [], "vars": {}}, + "_meta": {"hostvars": {}} + } self.get_nodes() - # Sets the ssh username and password using the secret name given in the label + # Sets the ssh username and password using + # the secret name given in the label def _set_ssh_keys(self, labels, node_internalip, node_name): namespace = "" if "SECRET_NAMESPACE" in os.environ: @@ -45,46 +60,63 @@ class KubeInventory(object): namespace = "default" if "secret" in labels.keys(): try: - secret_value = self.api_instance.read_namespaced_secret(labels["secret"], namespace) + secret_value = self.api_instance.read_namespaced_secret( + labels["secret"], namespace) except ApiException as e: + print("Exception when calling Secret: %s\n" % e) return False if "username" in secret_value.data.keys(): - username = (base64.b64decode(secret_value.data['username'])).decode("utf-8") - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_user"] = username + username = (base64.b64decode( + secret_value.data['username'])).decode("utf-8") + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_user"] = username elif "USER" in os.environ: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_user"] = os.environ.get("USER") + self.inventory["_meta"]["hostvars"][node_internalip]\ + ["ansible_ssh_user"] = os.environ.get("USER") else: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_user"] = 'kubernetes' + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_user"] = 'kubernetes' if "password" in secret_value.data.keys(): - password = (base64.b64decode(secret_value.data['password'])).decode("utf-8") - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_pass"] = password + password = (base64.b64decode( + secret_value.data['password'])).decode("utf-8") + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_pass"] = password elif "ssh_private_key" in secret_value.data.keys(): - private_key = (base64.b64decode(secret_value.data['ssh_private_key'])).decode("utf-8") + private_key = (base64.b64decode( + secret_value.data['ssh_private_key'])).decode("utf-8") fileName = "/opt/ansible/.ssh/"+node_name - with open(os.open(fileName, os.O_CREAT | os.O_WRONLY, 0o644), 'w') as f: + with open(os.open( + fileName, os.O_CREAT | os.O_WRONLY, 0o644), 'w') as f: f.write(private_key) f.close() os.chmod(fileName, 0o600) self.inventory["_meta"]["hostvars"][node_internalip][ "ansible_ssh_private_key_file"] = fileName elif "PASS" in os.environ: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_pass"] = os.environ.get("PASS") + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_pass"] = os.environ.get("PASS") else: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_pass"] = 'kubernetes' + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_pass"] = 'kubernetes' else: return False return True - # Sets default username and password from environment variables or some default username/password + # Sets default username and password from environment variables or + # some default username/password def _set_default_ssh_keys(self, node_internalip): if "USER" in os.environ: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_user"] = os.environ.get("USER") + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_user"] = os.environ.get("USER") else: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_user"] = 'kubernetes' + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_user"] = 'kubernetes' if "PASS" in os.environ: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_pass"] = os.environ.get("PASS") + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_pass"] = os.environ.get("PASS") else: - self.inventory["_meta"]["hostvars"][node_internalip]["ansible_ssh_pass"] = 'kubernetes' + self.inventory["_meta"]["hostvars"]\ + [node_internalip]["ansible_ssh_pass"] = 'kubernetes' return # Gets the Kubernetes nodes labels and annotations and build the inventory @@ -111,28 +143,42 @@ class KubeInventory(object): node_name = node["metadata"]["name"] self.inventory["_meta"]["hostvars"][node_internalip][ "kube_node_name"] = node_name - if not self._set_ssh_keys(node["metadata"]["annotations"], node_internalip, node_name): + if not self._set_ssh_keys( + node["metadata"]["annotations"], + node_internalip, node_name): self._set_default_ssh_keys(node_internalip) - # As the annotations are not of interest so not adding them to ansible host groups - # Only updating the host variable with annotations + # As the annotations are not of interest so + # not adding them to ansible host groups + # Only updating the host variable with annotations for key, value in node["metadata"]["annotations"].items(): - self.inventory["_meta"]["hostvars"][node_internalip][key] = value + self.inventory["_meta"]["hostvars"]\ + [node_internalip][key] = value # Add groups based on labels and also updates the host variables for key, value in node["metadata"]["labels"].items(): - self.inventory["_meta"]["hostvars"][node_internalip][key] = value + self.inventory["_meta"]["hostvars"]\ + [node_internalip][key] = value if key in interested_labels_annotations: if key+'_'+value not in self.inventory.keys(): - self.inventory[key+'_'+value] = {"hosts": [], "vars": {}} - if node_internalip not in self.inventory[key+'_'+value]["hosts"]: - self.inventory[key+'_'+value]["hosts"].append(node_internalip) + self.inventory[key+'_'+value] = { + "hosts": [], "vars": {} + } + if node_internalip not in \ + self.inventory[key+'_'+value]["hosts"]: + self.inventory[key+'_'+value]\ + ["hosts"].append(node_internalip) # Add groups based on node info and also updates the host variables for key, value in node['status']['node_info'].items(): - self.inventory["_meta"]["hostvars"][node_internalip][key] = value + self.inventory["_meta"]["hostvars"]\ + [node_internalip][key] = value if key in interested_labels_annotations: if key+'_'+value not in self.inventory.keys(): - self.inventory[key+'_'+value] = {"hosts": [], "vars": {}} - if node_internalip not in self.inventory[key+'_'+value]["hosts"]: - self.inventory[key+'_'+value]["hosts"].append(node_internalip) + self.inventory[key+'_'+value] = { + "hosts": [], "vars": {} + } + if node_internalip not in \ + self.inventory[key+'_'+value]["hosts"]: + self.inventory[key+'_'+value]\ + ["hosts"].append(node_internalip) return def empty_inventory(self): diff --git a/airship-host-config/playbooks/create_playbook.yaml b/airship-host-config/playbooks/create_playbook.yaml index 3bebd30..305d718 100644 --- a/airship-host-config/playbooks/create_playbook.yaml +++ b/airship-host-config/playbooks/create_playbook.yaml @@ -1,9 +1,9 @@ --- -#playbook.yaml +# create_playbook.yaml # Ansible play to initialize custom variables -# The below blocks of helps in setting the ansible variables -# according to the CR object passed +# The below role of helps in setting the ansible variables +# according to the CR object passed - name: DISPLAY THE INVENTORY VARS collections: - community.kubernetes @@ -16,72 +16,74 @@ - import_role: name: setvariables -# The play gets executed when the stop_on_failure is undefined or set to false -# stating that the play book execution shouldn't stop even if the tasks fail on the hosts +# The play gets executed when the +# (stop_on_failure is defined or undefined or stop_on_failure is false +# and when max_failure_percentage is undefined) +# When stop_on_failure is false the playbook execution continues on other hosts +# expect the execution stops on the failed nodes. # The below tasks considers the host_config_serial_variable variable value set from the previous block # Executes the number of hosts set in the host_config_serial_variable at every iteration +# Dynamically gets the roles defined in the config section of the HostConfig CR spec and +# executes the role with the parameters specified in that role section of the CR. - name: Execute Roles based on hosts and based on the Failure condition collections: - community.kubernetes - operator_sdk.util hosts: "{{ hostvars['localhost']['hostconfig_host_groups'] | default('all')}}" serial: "{{ hostvars['localhost']['hostconfig_serial_variable'] | default('100%') }}" - any_errors_fatal: "{{ stop_on_failure|default(false) }}" + any_errors_fatal: false gather_facts: no tasks: - name: HostConfig Block block: - - import_role: - name: sysctl - when: config.sysctl is defined - - import_role: - name: ulimit - when: config.ulimit is defined - - name: Update the file for success hosts - local_action: lineinfile line={{ inventory_hostname }} create=yes dest=/opt/ansible/data/hostconfig/{{ meta.name }}/success_hosts - throttle: 1 - rescue: - - name: Update the file for Failed hosts - local_action: lineinfile line={{ inventory_hostname }} create=yes dest=/opt/ansible/data/hostconfig/{{ meta.name }}/failed_hosts - throttle: 1 - when: ((stop_on_failure is undefined or stop_on_failure is defined) and max_failure_percentage is undefined) or (stop_on_failure is true and max_failure_percentage is defined) + - include_role: + name: "{{ item.key }}" + with_dict: "{{ config }}" + when: (config is defined) and (stop_on_failure is undefined or stop_on_failure is false) and (max_failure_percentage is undefined) -# The below play executes with hostconfig role only when the stop_failure is false -# and when the max_failure_percentage variable is defined. + +# The play gets executed when the +# (when stop_on_failure is set to true and when max_failure_percentage is defined or undefined) +# When stop_on_failure is true the playbook execution stops on all hosts +# whenever one task fails on any one of the node. # The below tasks considers the host_config_serial_variable variable value set from the previous block # Executes the number of hosts set in the host_config_serial_variable at every iteration -- name: Execute Roles based on hosts and based on percentage of Failure - hosts: "{{ hostvars['localhost']['hostconfig_host_groups'] | default('all')}}" - serial: "{{ hostvars['localhost']['hostconfig_serial_variable'] | default('100%') }}" - max_fail_percentage: "{{ hostvars['localhost']['max_failure_percentage'] }}" - gather_facts: no - tasks: - - name: Max Percetage Block - block: - - import_role: - name: sysctl - when: config.sysctl is defined - - import_role: - name: ulimit - when: config.ulimit is defined - when: (stop_on_failure is false or stop_on_failure is undefined) and (max_failure_percentage is defined) - -# Update K8 CR Status -- name: Update CR Status +# Dynamically gets the roles defined in the config section of the HostConfig CR spec and +# executes the role with the parameters specified in that role section of the CR. +- name: Execute Roles based on hosts and based on the Failure condition collections: - community.kubernetes - operator_sdk.util - hosts: localhost + hosts: "{{ hostvars['localhost']['hostconfig_host_groups'] | default('all')}}" + serial: "{{ hostvars['localhost']['hostconfig_serial_variable'] | default('100%') }}" + any_errors_fatal: true gather_facts: no tasks: - - name: Update CR Status - block: - - name: Write results to resource status - k8s_status: - api_version: hostconfig.airshipit.org/v1alpha1 - kind: HostConfig - name: '{{ meta.name }}' - namespace: '{{ meta.namespace }}' - status: - hostConfigStatus: "{{ hostConfigStatus }}" - when: hostConfigStatus is defined + - name: HostConfig Block + block: + - include_role: + name: "{{ item.key }}" + with_dict: "{{ config }}" + when: config is defined and stop_on_failure is defined and stop_on_failure is true + +# The below play executes with hostconfig role only when the stop_failure is false +# and when the max_failure_percentage variable is defined. +# The below tasks considers the host_config_serial_variable variable value set from the previous block +# Executes the number of hosts set in the host_config_serial_variable at every iteration. +# Dynamically gets the roles defined in the config section of the HostConfig CR spec and +# executes the role with the parameters specified in that role section of the CR. +- name: Execute Roles based on hosts and based on percentage of Failure + collections: + - community.kubernetes + - operator_sdk.util + hosts: "{{ hostvars['localhost']['hostconfig_host_groups'] | default('all')}}" + serial: "{{ hostvars['localhost']['hostconfig_serial_variable'] | default('100%') }}" + max_fail_percentage: "{{ max_failure_percentage | default(0) }}" + gather_facts: no + tasks: + - name: Max Percentage Block + block: + - include_role: + name: "{{ item.key }}" + with_dict: "{{ config }}" + when: (config is defined) and (stop_on_failure is false or stop_on_failure is undefined) and (max_failure_percentage is defined) diff --git a/airship-host-config/playbooks/delete_playbook.yaml b/airship-host-config/playbooks/delete_playbook.yaml deleted file mode 100644 index ccbd6ac..0000000 --- a/airship-host-config/playbooks/delete_playbook.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -- name: Delete LocalHosts - hosts: localhost - gather_facts: no - tasks: - - name: delete the files - file: - path: "/opt/ansible/data/hostconfig/{{ meta.name }}" - state: absent - register: output diff --git a/airship-host-config/plugins/callback/hostconfig_k8_cr_status.py b/airship-host-config/plugins/callback/hostconfig_k8_cr_status.py index 703a723..3fc8d41 100644 --- a/airship-host-config/plugins/callback/hostconfig_k8_cr_status.py +++ b/airship-host-config/plugins/callback/hostconfig_k8_cr_status.py @@ -1,112 +1,389 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type +import ast +import itertools +import os +import re + +from ansible.plugins.callback import CallbackBase +from datetime import datetime, timedelta +from kubernetes import client, config +from kubernetes.client.rest import ApiException + DOCUMENTATION = ''' callback: hostconfig_k8_cr_status callback_type: aggregate requirements: - whitelist in configuration - short_description: Adds time to play stats - version_added: "2.0" + short_description: Adds status field to CR object + version_added: "1.0" description: - - This callback just adds total play duration to the play stats. + - This callback module update the status field in the + HostConfig CR object with each task status. ''' -from ansible.plugins.callback import CallbackBase - class CallbackModule(CallbackBase): """ - This callback module tells you how long your plays ran for. + This callback module updates the status field in the + HostConfig CR object with each task status. """ - CALLBACK_VERSION = 2.0 + CALLBACK_VERSION = 1.0 CALLBACK_TYPE = 'aggregate' CALLBACK_NAME = 'hostconfig_k8_cr_status' CALLBACK_NEEDS_WHITELIST = True + # Initailize the kubernetes api object and class variables def __init__(self): super(CallbackModule, self).__init__() + config.load_incluster_config() + self.custom_api_instance = client.CustomObjectsApi() + self.api_instance = client.CoreV1Api() + self.host_config_status = dict() + self.ansible_summary = dict() + self.start_time = datetime.utcnow() + # Defines which tasks status to skip in the CR object status + self.skip_status_tasks = [ + "debug", "k8s_status", + "local_action", "set_fact", "k8s_info", + "lineinfile", "include_role", "file", "fail" + ] + # Intializing the variable manager and host variables + # Also initializes with the CR object name and namespace def v2_playbook_on_play_start(self, play): self.vm = play.get_variable_manager() - self.skip_status_tasks = ["debug", "k8s_status", "local_action", "set_fact", "k8s_info", "lineinfile"] + self.host_vars = self.vm.get_vars()['hostvars'] + self.hostConfigName = self.host_vars['localhost']['meta']['name'] + self.namespace = self.host_vars['localhost']['meta']['namespace'] + # This function is triggered when a certain task fails with + # unreachable state + def runner_on_unreachable(self, host, result): + self.v2_runner_on_unreachable(result) + + # This function is triggered when a certain task fails with + # failed state def runner_on_failed(self, host, result, ignore_errors=False): self.v2_runner_on_failed(result, ignore_errors=False) + # This function is triggered when a certain task fails with + # ok state def runner_on_ok(self, host, res): self.v2_runner_on_ok(result) - def v2_runner_on_failed(self, result, ignore_errors=False): - self.set_host_config_status(result, True) + # This function is triggered when a certain task fails with + # unreachable state in ansible v2 version + def v2_runner_on_unreachable(self, result): + self.set_host_config_status(result, False, True) return + # This function is triggered when a certain task fails with + # failed state in ansible v2 version + def v2_runner_on_failed(self, result, ignore_errors=False): + if result._task_fields["action"] == "fail": + return + self.set_host_config_status(result, True, False) + return + + # This function is triggered when a certain task fails with + # ok state in ansible v2 version def v2_runner_on_ok(self, result): hostname = result._host.name if result._task_fields["action"] in self.skip_status_tasks: + # Even if the task is set skip if the + # "set_cr_status" task variable is defined + # then the task status will be updated in the CR object. + if "vars" in result._task_fields.keys() and \ + "set_cr_status" in \ + result._task_fields["vars"].keys() and \ + result._task_fields["vars"]["set_cr_status"]: + self.set_host_config_status(result) + return return self.set_host_config_status(result) return - def set_host_config_status(self, result, failed=False): + # Builds the hostConfigStatus object, which is used to update the CR + # The hostConfigStatus is updated based on the task status + def set_host_config_status(self, result, failed=False, unreachable=False): hostname = result._host.name task_name = result.task_name task_result = result._result status = dict() - hostConfigStatus = dict() - host_vars = self.vm.get_vars()['hostvars'][hostname] + host_vars = self.host_vars[hostname] k8_hostname = '' if 'kubernetes.io/hostname' in host_vars.keys(): k8_hostname = host_vars['kubernetes.io/hostname'] else: k8_hostname = hostname - if 'hostConfigStatus' in self.vm.get_vars()['hostvars']['localhost'].keys(): - hostConfigStatus = self.vm.get_vars()['hostvars']['localhost']['hostConfigStatus'] - if k8_hostname not in hostConfigStatus.keys(): - hostConfigStatus[k8_hostname] = dict() - if task_name in hostConfigStatus[k8_hostname].keys(): - status[task_name] = hostConfigStatus[k8_hostname][task_name] + if k8_hostname not in self.host_config_status.keys(): + self.host_config_status[k8_hostname] = dict() + if task_name in self.host_config_status[k8_hostname].keys(): + status[task_name] = host_config_status[k8_hostname][task_name] status[task_name] = dict() - if 'stdout' in task_result.keys() and task_result['stdout'] != '': - status[task_name]['stdout'] = task_result['stdout'] - if 'stderr' in task_result.keys() and task_result['stderr'] != '': - status[task_name]['stderr'] = task_result['stderr'] - if 'msg' in task_result.keys() and task_result['msg'] != '': - status['msg'] = task_result['msg'].replace('\n', ' ') - if 'results' in task_result.keys() and len(task_result['results']) != 0: + check_keys = ["stdout", "stderr", "msg"] + for key in check_keys: + if key in task_result.keys() and task_result[key] != "": + status[task_name][key] = task_result[key] + # If the task executes in for loop; collecting + # the results of each iteration + if 'results' in task_result.keys() and \ + len(task_result['results']) != 0: status[task_name]['results'] = list() + check_keys_res = [ + "stdout", "stderr", "msg", + "module_stdout", "module_stderr", "item" + ] for res in task_result['results']: stat = dict() - if 'stdout' in res.keys() and res['stdout']: - stat['stdout'] = res['stdout'] - if 'stderr' in res.keys() and res['stderr']: - stat['stderr'] = res['stderr'] - if 'module_stdout' in res.keys() and res['module_stdout']: - stat['module_stdout'] = res['module_stdout'] - if 'module_stderr' in res.keys() and res['module_stderr']: - stat['module_stderr'] = res['module_stderr'] - if 'msg' in res.keys() and res['msg']: - stat['msg'] = res['msg'].replace('\n', ' ') - if 'item' in res.keys() and res['item']: - stat['item'] = res['item'] - if res['failed']: + for key in check_keys_res: + if key in res.keys() and res[key]: + stat[key] = res[key] + if 'failed' in res.keys() and res['failed']: stat['status'] = "Failed" + elif 'unreachable' in res.keys() and res['unreachable']: + stat['status'] = "Unreachable" else: stat['status'] = "Successful" - stat['stderr'] = "" - stat['module_stderr'] = "" - if "msg" not in stat.keys(): - stat['msg'] = "" + if "vars" in result._task_fields.keys() and \ + "cr_status_vars" in \ + result._task_fields["vars"].keys(): + for var in result._task_fields["vars"]["cr_status_vars"]: + if var in res.keys(): + stat[var] = res[var] + if "ansible_facts" in res.keys() and \ + var in res["ansible_facts"].keys(): + stat[var] = res["ansible_facts"][var] status[task_name]['results'].append(stat) if failed: status[task_name]['status'] = "Failed" + elif unreachable: + status[task_name]['status'] = "Unreachable" else: status[task_name]['status'] = "Successful" - # As the k8s_status module is merging the current and previous status, if there are any previous failure messages overriding them https://github.com/fabianvf/ansible-k8s-status-module/blob/master/k8s_status.py#L322 - status[task_name]['stderr'] = "" - if "msg" not in status[task_name].keys(): - status[task_name]['msg'] = "" - hostConfigStatus[k8_hostname].update(status) - self.vm.set_host_variable('localhost', 'hostConfigStatus', hostConfigStatus) + if "vars" in result._task_fields.keys() and \ + "cr_status_vars" in result._task_fields["vars"].keys(): + for var in result._task_fields["vars"]["cr_status_vars"]: + if var in task_result.keys(): + status[var] = task_result[var] + if "ansible_facts" in task_result.keys() and \ + var in task_result["ansible_facts"].keys(): + status[var] = task_result["ansible_facts"][var] + self.host_config_status[k8_hostname].update(status) self._display.display(str(status)) return + + # Determines the iterations completed and further updates the CR object + # not to schedule further itertations if the reconcile-iterations or + # reconcile-interval is met + def update_reconcile_status(self): + cr_obj = self.get_host_config_cr() + annotations = self.host_vars['localhost']\ + ['_hostconfig_airshipit_org_hostconfig']\ + ['metadata']['annotations'] + reconcile_status = dict() + if "ansible.operator-sdk/reconcile-period" in annotations.keys(): + iterations = 0 + pre_iter = None + if 'reconcileStatus' in cr_obj['status'].keys() and \ + 'completed_iterations' in \ + cr_obj['status']['reconcileStatus'].keys(): + pre_iter = cr_obj['status']['reconcileStatus']\ + ['completed_iterations'] + # Checks if the reconcile-interval or period is specified + if "ansible.operator-sdk/reconcile-interval" in annotations.keys(): + # Calculates the iterations based on the reconcile-interval + # This executes for the very first iteration only + if pre_iter is None: + interval = annotations["ansible.operator-sdk/reconcile-interval"] + period = annotations["ansible.operator-sdk/reconcile-period"] + iterations = self.get_iterations_from_interval( + interval, period) + reconcile_status['total_iterations'] = iterations + elif 'total_iterations' in \ + cr_obj['status']['reconcileStatus'].keys(): + iterations = cr_obj['status']['reconcileStatus']\ + ['total_iterations'] + else: + reconcile_status['msg'] = "Unable to retrieve "+\ + "total iterations to be executed." + return reconcile_status + if isinstance(iterations, str) \ + and "greater than or equal to" in iterations: + reconcile_status['msg'] = iterations + return reconcile_status + elif isinstance(iterations, str) and \ + "format not specified" in iterations: + reconcile_status['msg'] = iterations + return reconcile_status + elif "ansible.operator-sdk/reconcile-iterations" \ + in annotations.keys(): + iterations = annotations["ansible.operator-sdk/reconcile-iterations"] + else: + reconcile_status['msg'] = "Reconcile iterations or interval "+\ + "not specified. Running simple reconcile." + return reconcile_status + if int(iterations) <= 1: + reconcile_status['msg'] = "Reconcile iterations or interval "+\ + "should have iterations more than 1. "+\ + "Running simple reconcile." + return reconcile_status + # If any host fails execution the iteration is not counted + if self.check_failed_hosts(): + if pre_iter is not None: + reconcile_status['completed_iterations'] = pre_iter + reconcile_status['total_iterations'] = iterations + reconcile_status['msg'] = "One or More Hosts Failed, "+\ + "so not considering reconcile." + return reconcile_status + if pre_iter is None: + pre_iter = 0 + current_iter = int(pre_iter)+1 + reconcile_status['total_iterations'] = iterations + reconcile_status['completed_iterations'] = current_iter + if int(current_iter) == int(iterations)-1: + cr_obj["metadata"]["annotations"]\ + ["ansible.operator-sdk/reconcile-period"] = "0" + self.custom_api_instance.patch_namespaced_custom_object( + group="hostconfig.airshipit.org", + version="v1alpha1", + plural="hostconfigs", + name=self.hostConfigName, + namespace=self.namespace, + body=cr_obj) + reconcile_status['msg'] = "Running reconcile based "+\ + "on reconcile-period. Updated the CR to stop "+\ + "running reconcile again." + return reconcile_status + elif int(current_iter) == int(iterations): + del reconcile_status['total_iterations'] + del reconcile_status['completed_iterations'] + reconcile_status['msg'] = "Running reconcile completed. "+\ + "Total iterations completed are "+str(current_iter) + return reconcile_status + reconcile_status['msg'] = "Running reconcile based on "+\ + "reconcile-period." + else: + reconcile_status['msg'] = "No reconcile annotations specified." + return reconcile_status + + def check_failed_hosts(self): + if len(self.ansible_summary["failures"].keys()) > 0 or \ + len(self.ansible_summary["unreachable"].keys()) > 0 or \ + len(self.ansible_summary["rescued"].keys()) > 0: + return True + return False + + # Determines the reconcile iteration from the reconcile-interval specified + def get_iterations_from_interval(self, interval, period): + endsubstring = ['h', 'm', 's', 'ms', 'us', 'ns'] + try: + if not interval.endswith(tuple(endsubstring)) or \ + not period.endswith(tuple(endsubstring)): + return "Reconcile parameters format not \ + specified appropriately!!" + regex = re.compile(r'((?P\d+?)h)?((?P\d+?)m)?((?P\d+?)s)?((?P\d+?)ms)?((?P\d+?)us)?((?P\d+?)ns)?') + interval_re = regex.match(interval) + period_re = regex.match(period) + period_dict = dict() + interval_dict = dict() + for key, value in period_re.groupdict().items(): + if value: + period_dict[key] = int(value) + for key, value in interval_re.groupdict().items(): + if value: + interval_dict[key] = int(value) + inter = timedelta(**interval_dict) + peri = timedelta(**period_dict) + if inter.seconds >= peri.seconds: + return int(inter/peri) + else: + return "The reconcile-interval should be greater than or "+\ + "equal to reconcile-period!!" + except Exception as e: + return "Reconcile parameters format not specified appropriately!!" + + # Calculates the minutes, days and seconds from the execution time + def days_hours_minutes_seconds(self, runtime): + minutes = (runtime.seconds // 60) % 60 + r_seconds = runtime.seconds % 60 + return runtime.days, runtime.seconds // 3600, minutes, r_seconds + + # Computes the execution time taken for the playbook to complete + def execution_time(self, end_time): + runtime = end_time - self.start_time + return "Playbook run took %s days, %s hours, %s minutes, %s seconds" % (self.days_hours_minutes_seconds(runtime)) + + # Triggered when the playbook execution is completed + def v2_playbook_on_stats(self, stats): + self.playbook_on_stats(stats) + return + + # Triggered when the playbook execution is completed + # This function updates the CR object with the tasks + # status and reconcile status + def playbook_on_stats(self, stats): + end_time = datetime.utcnow() + summary_fields = [ + "ok", "failures", "dark", "ignored", + "rescued", "skipped", "changed" + ] + for field in summary_fields: + stat = stats.__dict__[field] + status = dict() + if 'localhost' in stat.keys(): + del stat['localhost'] + for key, value in stat.items(): + if 'kubernetes.io/hostname' in self.host_vars[key].keys(): + status[self.host_vars[key]['kubernetes.io/hostname']] = \ + value + else: + status[key] = value + if field == "dark": + self.ansible_summary["unreachable"] = status + else: + self.ansible_summary[field] = status + # Gets the reconcile status for the current execution + reconcile_status = self.update_reconcile_status() + cr_status = dict() + self.ansible_summary["completion_timestamp"] = end_time + self.ansible_summary["execution_time"] = self.execution_time(end_time) + cr_status['ansibleSummary'] = self.ansible_summary + cr_obj = self.get_host_config_cr() + # If the current status has not executed on some hosts + # updates those details from the with previous iterations status + if 'hostConfigStatus' in cr_obj['status'].keys(): + status = cr_obj['status']['hostConfigStatus'] + for key, value in status.items(): + if key not in self.host_config_status and key != "localhost": + self.host_config_status[key] = value + cr_obj['status']['hostConfigStatus'] = self.host_config_status + cr_status['reconcileStatus'] = reconcile_status + cr_obj['status'].update(cr_status) + self._display.display("Updating CR Status with below object!!") + self._display.display(str(cr_status)) + resp = self.custom_api_instance.\ + replace_namespaced_custom_object_status( + group="hostconfig.airshipit.org", + version="v1alpha1", + plural="hostconfigs", + name=self.hostConfigName, + namespace=self.namespace, + body=cr_obj) + self._display.display("Response from KubeAPI server after "+\ + "sending status update request") + self._display.display(str(resp)) + return + + # Returns the HostConfig CR object + # based on the CR object name and namespace + def get_host_config_cr(self): + return self.custom_api_instance.\ + get_namespaced_custom_object( + group="hostconfig.airshipit.org", + version="v1alpha1", + namespace=self.namespace, + plural="hostconfigs", + name=self.hostConfigName) diff --git a/airship-host-config/plugins/filter/hostconfig_host_groups.py b/airship-host-config/plugins/filter/hostconfig_host_groups.py index 04ca5bc..a69bc09 100644 --- a/airship-host-config/plugins/filter/hostconfig_host_groups.py +++ b/airship-host-config/plugins/filter/hostconfig_host_groups.py @@ -1,57 +1,59 @@ #!/usr/bin/python3 - + from __future__ import (absolute_import, division, print_function) __metaclass__ = type +import ast import itertools import os -# This plugin calculates the list of list of hosts that need to be executed in -# sequence as given by the host_groups variable. The AND and OR conditions on the -# host_groups variable is calculated based on the match_host_groups variable -# This returns the list of list of hosts that the ansible should execute the playbook on +from kubernetes import client, config +from kubernetes.client.rest import ApiException + +# This plugin calculates the list of list of hosts that need to be executed in +# sequence as given by the host_groups variable. +# The AND and OR conditions on the host_groups variable is calculated +# based on the match_host_groups variable +# This returns the list of list of hosts that +# the ansible should execute the playbook on # Returns: [[192.168.1.12, 192.168.1.11], [192.168.1.14], [192.168.1.5]] + +# Returns list of keys and values defined in host_groups +# of the CR object def host_groups_get_keys(host_groups): keys = list() values = list() for hg in host_groups: keys.append(hg['name']) values.append(hg['values']) - print(keys) - print(values) return keys, values + +# Performs a permutation and combination among all the +# host_groups specified in the CR object def host_groups_combinations(host_groups): keys, values = host_groups_get_keys(host_groups) for instance in itertools.product(*values): yield dict(zip(keys, instance)) -def removeSuccessHosts(hostGroups, hostConfigName): - filename = '/opt/ansible/data/hostconfig/'+hostConfigName+'/success_hosts' - print(filename) - if os.path.isfile(filename): - hosts = list() - with open(filename) as f: - hosts = [line.rstrip() for line in f] - print(hosts) - for host in hosts: - for hostGroup in hostGroups: - if host in hostGroup: - hostGroup.remove(host) - print(hostGroups) - return hostGroups -def hostconfig_host_groups(host_groups, groups, hostConfigName, match_host_groups, reexecute): +# Determines the hosts on which the execution has to happen +# based on the host_groups defined in the CR object +def hostconfig_host_groups( + host_groups, groups, match_host_groups + ): host_groups_list = list() host_group_list = list() if type(host_groups) != list: return '' + # Performs an AND operation to select the hosts + # which match all of the host_group labels specified if match_host_groups: hgs_list = list() for host_group in host_groups_combinations(host_groups): hg = list() - for k,v in host_group.items(): + for k, v in host_group.items(): hg.append(k+'_'+v) hgs_list.append(hg) for hgs in hgs_list: @@ -59,6 +61,8 @@ def hostconfig_host_groups(host_groups, groups, hostConfigName, match_host_group for i in range(1, len(hgs)): host_group = list(set(host_group) & set(groups[hgs[i]])) host_groups_list.append(host_group) + # Performs an OR operation to select the hosts which match + # any one of the host_group labels specified else: for host_group in host_groups: for value in host_group["values"]: @@ -69,13 +73,15 @@ def hostconfig_host_groups(host_groups, groups, hostConfigName, match_host_group hg = groups[key+'_'+value] host_group_list = hg.copy() else: - hg = list((set(groups[key+'_'+value])) - (set(host_group_list) & set(groups[key+'_'+value]))) + hg = list( + (set(groups[key+'_'+value])) + - (set(host_group_list) & + set(groups[key+'_'+value])) + ) host_group_list.extend(hg) host_groups_list.append(hg) else: return "Invalid Host Groups "+key+" and "+value - if not reexecute: - return str(removeSuccessHosts(host_groups_list, hostConfigName)) return str(host_groups_list) diff --git a/airship-host-config/plugins/filter/hostconfig_host_groups_to_list.py b/airship-host-config/plugins/filter/hostconfig_host_groups_to_list.py index 221647b..8d7acea 100644 --- a/airship-host-config/plugins/filter/hostconfig_host_groups_to_list.py +++ b/airship-host-config/plugins/filter/hostconfig_host_groups_to_list.py @@ -1,5 +1,5 @@ #!/usr/bin/python3 - + from __future__ import (absolute_import, division, print_function) __metaclass__ = type @@ -7,6 +7,7 @@ __metaclass__ = type # that is accepted by the ansible playbook for execution # Returns: [192.168.1.12, 192.168.1.11, 192.168.1.14, 192.168.1.5] + def hostconfig_host_groups_to_list(hostconfig_host_groups): host_groups_list = list() if type(hostconfig_host_groups) != list: @@ -17,7 +18,8 @@ def hostconfig_host_groups_to_list(hostconfig_host_groups): class FilterModule(object): - ''' Fake test plugin for ansible-operator ''' + ''' Plugin to convert list of list to list of \ + strings for ansible-operator ''' def filters(self): return { diff --git a/airship-host-config/plugins/filter/hostconfig_hosts_parallel.py b/airship-host-config/plugins/filter/hostconfig_hosts_parallel.py index 161e22f..7b3a9d3 100644 --- a/airship-host-config/plugins/filter/hostconfig_hosts_parallel.py +++ b/airship-host-config/plugins/filter/hostconfig_hosts_parallel.py @@ -3,40 +3,44 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type -# Futher divides the host_config_serial variable into a new list -# so that for each iteration there will be not more than the +# This plugin futher divides the host_config_serial variable into a new list +# so that for each iteration there will be not more than the # max_hosts_parallel(int variable) number of hosts executing # If we have 3 masters and 5 worker and labels sent are masters and workers # and the max_hosts_parallel is 2 # Returns: [2, 2, 2, 2] if sequential is false # Returns: [2, 1, 2, 2, 1] if the sequential is true -def hostconfig_max_hosts_parallel(max_hosts_parallel, hostconfig_host_groups, sequential=False): + +def hostconfig_max_hosts_parallel( + max_hosts_parallel, hostconfig_host_groups, sequential=False): parallel_list = list() - if type(max_hosts_parallel) != int and type(hostconfig_host_groups) != list and (sequential) != bool: + if type(max_hosts_parallel) != int and \ + type(hostconfig_host_groups) != list and (sequential) != bool: return '' if sequential: for hg in hostconfig_host_groups: length = len(hg) - parallel_list += int(length/max_hosts_parallel) * [max_hosts_parallel] - if length%max_hosts_parallel != 0: - parallel_list.append(length%max_hosts_parallel) + parallel_list += (int(length/max_hosts_parallel) + * [max_hosts_parallel]) + if length % max_hosts_parallel != 0: + parallel_list.append(length % max_hosts_parallel) else: hgs = list() for hg in hostconfig_host_groups: hgs.extend(hg) length = len(hgs) parallel_list += int(length/max_hosts_parallel) * [max_hosts_parallel] - if length%max_hosts_parallel != 0: - parallel_list.append(length%max_hosts_parallel) + if length % max_hosts_parallel != 0: + parallel_list.append(length % max_hosts_parallel) return str(parallel_list) class FilterModule(object): - ''' HostConfig Max Hosts in Parallel plugin for ansible-operator to calucate the ansible serial variable ''' + ''' HostConfig Max Hosts in Parallel plugin for ansible-operator to \ + calucate the ansible serial variable ''' def filters(self): return { 'hostconfig_max_hosts_parallel': hostconfig_max_hosts_parallel } - diff --git a/airship-host-config/plugins/filter/hostconfig_sequential.py b/airship-host-config/plugins/filter/hostconfig_sequential.py index e9af788..2eac704 100644 --- a/airship-host-config/plugins/filter/hostconfig_sequential.py +++ b/airship-host-config/plugins/filter/hostconfig_sequential.py @@ -7,6 +7,7 @@ __metaclass__ = type # Interested Groups are defined using the host_groups # Returns a list of integers [2, 1, 3] based on the host_groups variables + def hostconfig_sequential(hostconfig_host_groups, groups): seq_list = list() if type(hostconfig_host_groups) != list: diff --git a/airship-host-config/requirements.yml b/airship-host-config/requirements.yml index d2af8e2..8f202e1 100644 --- a/airship-host-config/requirements.yml +++ b/airship-host-config/requirements.yml @@ -1,3 +1,4 @@ +# Installing kubernetes and operator_sdk libraries collections: - community.kubernetes - operator_sdk.util diff --git a/airship-host-config/roles/kubeadm/tasks/main.yml b/airship-host-config/roles/kubeadm/tasks/main.yml new file mode 100644 index 0000000..f8b5c98 --- /dev/null +++ b/airship-host-config/roles/kubeadm/tasks/main.yml @@ -0,0 +1,15 @@ +--- +# To execute kubeadm commands on the kubernetes nodes +# List of commands can be specified +- name: Execute kubeadm command cert expirataion + shell: "/usr/bin/kubeadm {{ kubeadm_item.command }}" + with_items: "{{ config.kubeadm }}" + when: config.kubeadm is defined + loop_control: + loop_var: kubeadm_item + become: yes + register: kubeadm_output + +- name: kubeadm output + debug: msg={{ kubeadm_output }} + when: kubeadm_output is defined diff --git a/airship-host-config/roles/kubeadm_check_cert_expiration/tasks/main.yml b/airship-host-config/roles/kubeadm_check_cert_expiration/tasks/main.yml new file mode 100644 index 0000000..06e69c5 --- /dev/null +++ b/airship-host-config/roles/kubeadm_check_cert_expiration/tasks/main.yml @@ -0,0 +1,26 @@ +--- +# To check the kubernetes components certificte expiration details +# Will also annotate the node with the expiration details +- name: Execute kubeadm command cert expirataion + shell: > + kubeadm alpha certs check-expiration | tail -n +4 | sed -r "/^\s*$/d"|grep -v "CERTIFICATE" | awk '{printf("{ %s: %s %s %s %s %s },", $1, $2, $3, $4, $5, $6)}' | sed "s/.$//" + when: config.kubeadm_check_cert_expiration is defined and config.kubeadm_check_cert_expiration is true + become: yes + register: kubeadm_output + +- name: kubeadm output + debug: msg={{ kubeadm_output }} + when: kubeadm_output is defined + +- name: Annotate kubernetes nodes + delegate_to: localhost + k8s_raw: + state: present + definition: + apiVersion: v1 + kind: Node + metadata: + name: "{{ lookup('vars', 'kubernetes.io/hostname') }}" + annotations: + cert-expiration: "{{ kubeadm_output.stdout }}" + when: kubeadm_output.stdout is defined diff --git a/airship-host-config/roles/setvariables/tasks/main.yml b/airship-host-config/roles/setvariables/tasks/main.yml index beecf7c..f949b5f 100644 --- a/airship-host-config/roles/setvariables/tasks/main.yml +++ b/airship-host-config/roles/setvariables/tasks/main.yml @@ -1,17 +1,23 @@ --- -# The below blocak of code helps in intializing the hosts, serial variables +# The below block of code helps in initializing the hosts, serial variables # that would be used by the ansible playbook to control sequential or parallel execution - name: Host Groups block: - - set_fact: - reexecute: false - when: reexecute is undefined - set_fact: match_host_groups: false when: match_host_groups is undefined - set_fact: sequential: false when: sequential is undefined + - set_fact: + stop_on_failure: false + when: stop_on_failure is undefined + - set_fact: + max_failure_percentage: 0 + when: max_failure_percentage is undefined + - debug: + msg: "{{ config }}" + when: config is defined # This hostconfig_host_groups custom filter plugin helps in computing the AND or OR # operation on the host_groups labels passed through the CR object. # The AND and OR operation is controlled using the match_host_groups variable. @@ -19,7 +25,7 @@ # every iteration. # Returns: [[192.168.1.5, 192.168.1.3], [192.168.1.4]] - set_fact: - hostconfig_host_groups: "{{ host_groups|hostconfig_host_groups(groups, meta.name, match_host_groups, reexecute) }}" + hostconfig_host_groups: "{{ host_groups|hostconfig_host_groups(groups, match_host_groups) }}" - debug: msg: "Host Groups Variable {{ hostconfig_host_groups }}" # The hostconfig_serial custom filter plugin helps in calculating the list of hosts @@ -59,16 +65,3 @@ - debug: msg: "{{ hostconfig_serial_variable }}" when: host_groups is undefined and max_hosts_parallel is defined -- name: Failure Testing - block: - # This block of max_failure_percentage helps in intaializing default value - # to the max_failure_percentage variable so that the below play would be selected - # appropriately - - set_fact: - max_failure_percentage: "{{ max_failure_percentage }}" - when: max_failure_percentage is defined - # Please note we are just setting some default value to the max_failure_percentage - # so that we can check the conditions below - - set_fact: - max_failure_percentage: 100 - when: max_failure_percentage is undefined diff --git a/airship-host-config/roles/shell/tasks/main.yml b/airship-host-config/roles/shell/tasks/main.yml new file mode 100644 index 0000000..b167c78 --- /dev/null +++ b/airship-host-config/roles/shell/tasks/main.yml @@ -0,0 +1,13 @@ +--- +# To execute shell commands on the kubernetes nodes +# List of commands can be specified +- name: Execute shell command on nodes + shell: "{{ shell_item.command }}" + with_items: "{{ config.shell }}" + loop_control: + loop_var: shell_item + register: shell_output + +- name: shell output + debug: msg={{ shell_output }} + when: shell_output is defined diff --git a/airship-host-config/roles/sysctl/tasks/main.yml b/airship-host-config/roles/sysctl/tasks/main.yml index 918efc6..9e0f610 100644 --- a/airship-host-config/roles/sysctl/tasks/main.yml +++ b/airship-host-config/roles/sysctl/tasks/main.yml @@ -1,4 +1,6 @@ --- +# Configures the array of sysctl configuration provided in the CR +# object on the corresponding kubernetes node selected. - name: sysctl configuration sysctl: name: "{{ item.name }}" diff --git a/airship-host-config/roles/ulimit/tasks/main.yml b/airship-host-config/roles/ulimit/tasks/main.yml index e4aed88..e34472b 100644 --- a/airship-host-config/roles/ulimit/tasks/main.yml +++ b/airship-host-config/roles/ulimit/tasks/main.yml @@ -1,4 +1,6 @@ --- +# Configures ulimit on the selected kubernetes nodes +# Accepts a list of ulimit configuration - name: ulimit configuration pam_limits: domain: "{{ item.user }}" diff --git a/airship-host-config/setup.sh b/airship-host-config/setup.sh deleted file mode 100755 index f87766a..0000000 --- a/airship-host-config/setup.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -RELEASE_VERSION=v0.8.0 -AIRSHIP_PATH=airship-host-config/airship-host-config -IMAGE_NAME=airship-host-config - -install_operator_sdk(){ - echo "Installing Operator-SDK to build image" - curl -OJL https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu - chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu - sudo mv operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/operator-sdk -} - -build_host_config_image(){ - echo "Building Airship host-config Ansible operator Image" - cd $HOME/$AIRSHIP_PATH - operator-sdk build $IMAGE_NAME -} - -get_worker_ips(){ - echo >&2 "Getting other master and worker node IPs to copy Airship host-config Ansible Operator Image" - IP_ADDR=`ifconfig enp0s8 | grep Mask | awk '{print $2}'| cut -f2 -d:` - worker_node_ips=`kubectl get nodes -o wide | grep -v $IP_ADDR | awk '{print $6}' | sed -e '1d'` - echo $worker_node_ips -} - -save_and_load_docker_image(){ - cd $HOME/$AIRSHIP_PATH - echo "Saving Airship host-config Ansible Operator Image so that it would be copied to other worker nodes" - docker save $IMAGE_NAME -o $IMAGE_NAME - worker_node_ips=$(get_worker_ips) - echo "Copying Image to following worker Nodes" - echo $worker_node_ips - touch $HOME/hello - for i in $worker_node_ips - do - sshpass -p "vagrant" scp -o StrictHostKeyChecking=no $IMAGE_NAME vagrant@$i:~/. - sshpass -p "vagrant" ssh vagrant@$i docker load -i $IMAGE_NAME - sshpass -p "vagrant" ssh vagrant@$i touch hello - done -} - -get_username_password(){ - if [ -z "$1" ]; then USERNAME="vagrant"; else USERNAME=$1; fi - if [ -z "$2" ]; then PASSWORD="vagrant"; else PASSWORD=$2; fi - echo $USERNAME $PASSWORD -} - -deploy_airship_ansible_operator(){ - read USERNAME PASSWORD < <(get_username_password $1 $2) - echo "Setting up Airship host-config Ansible operator" - echo "Using Username: $USERNAME and Password: $PASSWORD of K8 nodes for host-config pod setup" - sed -i "s/AIRSHIP_HOSTCONFIG_IMAGE/$IMAGE_NAME/g" $HOME/$AIRSHIP_PATH/deploy/operator.yaml - sed -i "s/PULL_POLICY/IfNotPresent/g" $HOME/$AIRSHIP_PATH/deploy/operator.yaml - sed -i "s/USERNAME/$USERNAME/g" $HOME/$AIRSHIP_PATH/deploy/operator.yaml - sed -i "s/PASSWORD/$PASSWORD/g" $HOME/$AIRSHIP_PATH/deploy/operator.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/role.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/service_account.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/role_binding.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/cluster_role_binding.yaml - kubectl apply -f $HOME/$AIRSHIP_PATH/deploy/operator.yaml -} - -configure_github_host_config_setup(){ - install_operator_sdk - build_host_config_image - save_and_load_docker_image - deploy_airship_ansible_operator $1 $2 -} - -configure_github_host_config_setup $1 $2 diff --git a/airship-host-config/watches.yaml b/airship-host-config/watches.yaml index c0ff4ea..4e954b5 100644 --- a/airship-host-config/watches.yaml +++ b/airship-host-config/watches.yaml @@ -2,7 +2,4 @@ - version: v1alpha1 group: hostconfig.airshipit.org kind: HostConfig - playbook: playbooks/create_playbook.yaml - finalizer: - name: finalizer.hostconfig.airshipit.org - playbook: playbooks/delete_playbook.yaml + playbook: playbooks/create_playbook.yaml # Main playbook that gets executed whenever a new HostConfig CR object is created or updated diff --git a/demo_examples/example_host_groups.yaml b/demo_examples/example_host_groups.yaml new file mode 100644 index 0000000..9b1d11a --- /dev/null +++ b/demo_examples/example_host_groups.yaml @@ -0,0 +1,18 @@ +# This example executes the shell and kubeadm commands +# on all the nodes labelled as master nodes in the +# kubernetes cluster + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + name: example1 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + config: + shell: + - command: "date;hostname" + kubeadm: + - command: "alpha certs check-expiration" diff --git a/demo_examples/example_match_host_groups.yaml b/demo_examples/example_match_host_groups.yaml new file mode 100644 index 0000000..1aa1ad9 --- /dev/null +++ b/demo_examples/example_match_host_groups.yaml @@ -0,0 +1,29 @@ +# This example executes the shell command on the nodes +# which match the below conditions. Please note the execution +# on all the nodes happen in parallel as "sequential is false" +# +# Only one iteration: Nodes matching labels: +# 1. "us-east-1a" and "master" +# 2. "us-east-1a" and "worker" +# 3. "us-east-1b" and "master" +# 4. "us-east-1b" and "worker" + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + name: example3 +spec: + host_groups: + - name: "topology.kubernetes.io/zone" + values: + - "us-east-1a" + - "us-east-1b" + - name: "kubernetes.io/role" + values: + - "master" + - "worker" + sequential: false + match_host_groups: true + config: + shell: + - command: "date;hostname" diff --git a/demo_examples/example_max_percentage.yaml b/demo_examples/example_max_percentage.yaml new file mode 100644 index 0000000..ce85aad --- /dev/null +++ b/demo_examples/example_max_percentage.yaml @@ -0,0 +1,21 @@ +# This HostConfig CR object executes the shell and kubeadm +# commands on the master nodes in the cluster. +# And execution stops at the task for all nodes +# when failed nodes exceed 30%. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + name: example5 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + stop_on_failure: false + max_failure_percentage: 30 + config: + shell: + - command: "date;hostname" + kubeadm: + - command: "alpha certs check-expiration" diff --git a/airship-host-config/demo_examples/example_parallel.yaml b/demo_examples/example_parallel.yaml similarity index 50% rename from airship-host-config/demo_examples/example_parallel.yaml rename to demo_examples/example_parallel.yaml index 151b5b2..e4550eb 100644 --- a/airship-host-config/demo_examples/example_parallel.yaml +++ b/demo_examples/example_parallel.yaml @@ -1,12 +1,18 @@ +# This HostConfig CR object when created executes +# the shell command on the master and worker nodes +# scheduling not more that 2 nodes per iteration. + apiVersion: hostconfig.airshipit.org/v1alpha1 kind: HostConfig metadata: name: example7 spec: - # Add fields here host_groups: - name: "kubernetes.io/role" values: - "master" - "worker" max_hosts_parallel: 2 + config: + shell: + - command: "date;hostname;sleep 5" diff --git a/demo_examples/example_reconcile.yaml b/demo_examples/example_reconcile.yaml new file mode 100644 index 0000000..60e7859 --- /dev/null +++ b/demo_examples/example_reconcile.yaml @@ -0,0 +1,20 @@ +# This example CR when created executes the shell and +# kubeadm commands on the nodes labelled as master for +# every 30s. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + annotations: + ansible.operator-sdk/reconcile-period: "30s" + name: example9 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + config: + shell: + - command: "date;hostname" + kubeadm: + - command: "alpha certs check-expiration" diff --git a/demo_examples/example_reconcile_interval.yaml b/demo_examples/example_reconcile_interval.yaml new file mode 100644 index 0000000..ebc4d45 --- /dev/null +++ b/demo_examples/example_reconcile_interval.yaml @@ -0,0 +1,19 @@ +# This HostConfig CR executes the kubeadm command on the +# master nodes for every 30s for an interval of 2m40s. +# This covers 5 iterations. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + annotations: + ansible.operator-sdk/reconcile-period: "30s" + ansible.operator-sdk/reconcile-interval: "2m40s" + name: example11 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + config: + kubeadm: + - command: "alpha certs check-expiration" diff --git a/demo_examples/example_reconcile_iterations.yaml b/demo_examples/example_reconcile_iterations.yaml new file mode 100644 index 0000000..5e4abf3 --- /dev/null +++ b/demo_examples/example_reconcile_iterations.yaml @@ -0,0 +1,21 @@ +# This CR executes the shell and kubeadm commands on the +# master nodes for every 30s. The execution happens for +# 3 times. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + annotations: + ansible.operator-sdk/reconcile-period: "30s" + ansible.operator-sdk/reconcile-iterations: "3" + name: example10 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + config: + shell: + - command: "date;hostname" + kubeadm: + - command: "alpha certs check-expiration" diff --git a/airship-host-config/demo_examples/example_sequential.yaml b/demo_examples/example_sequential.yaml similarity index 50% rename from airship-host-config/demo_examples/example_sequential.yaml rename to demo_examples/example_sequential.yaml index de5ca19..2580bc4 100644 --- a/airship-host-config/demo_examples/example_sequential.yaml +++ b/demo_examples/example_sequential.yaml @@ -1,12 +1,18 @@ +# In this example the shell command is executed +# on all the master nodes first and then on all +# the worker nodes in the second iteration. + apiVersion: hostconfig.airshipit.org/v1alpha1 kind: HostConfig metadata: name: example2 spec: - # Add fields here host_groups: - name: "kubernetes.io/role" values: - "master" - "worker" sequential: true + config: + shell: + - command: "date;hostname;sleep 5" diff --git a/demo_examples/example_sequential_match_host_groups.yaml b/demo_examples/example_sequential_match_host_groups.yaml new file mode 100644 index 0000000..d28d690 --- /dev/null +++ b/demo_examples/example_sequential_match_host_groups.yaml @@ -0,0 +1,32 @@ +# This example HostConfig CR when created executes +# the shell command on the nodes which match the +# below labels in a sequence. +# +# Iteration 1: nodes with labels "us-east-1a" and "master" nodes +# Iteration 2: nodes with labels "us-east-1a" and "worker" nodes +# Iteration 3: nodes with labels "us-east-1b" and "master" nodes +# Iteration 4: nodes with labels "us-east-1b" and "worker" nodes +# +# Please note that the nodes which have already executed in previous +# iteration will not be scheduled again in the next iteration even +# if the labels match. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + name: example4 +spec: + host_groups: + - name: "topology.kubernetes.io/zone" + values: + - "us-east-1a" + - "us-east-1b" + - name: "kubernetes.io/role" + values: + - "master" + - "worker" + sequential: true + match_host_groups: true + config: + shell: + - command: "date;hostname;sleep 5" diff --git a/demo_examples/example_stop_on_failure.yaml b/demo_examples/example_stop_on_failure.yaml new file mode 100644 index 0000000..2f42602 --- /dev/null +++ b/demo_examples/example_stop_on_failure.yaml @@ -0,0 +1,20 @@ +# This CR executes the shell and kubeadm commands +# on the master nodes and stops execution on all the +# nodes whenever a master node fails at any task +# as part of the execution. + +apiVersion: hostconfig.airshipit.org/v1alpha1 +kind: HostConfig +metadata: + name: example6 +spec: + host_groups: + - name: "kubernetes.io/role" + values: + - "master" + stop_on_failure: true + config: + shell: + - command: "date;hostname" + kubeadm: + - command: "alpha certs check-expiration" diff --git a/airship-host-config/demo_examples/example_sysctl_ulimit.yaml b/demo_examples/example_sysctl_ulimit.yaml similarity index 74% rename from airship-host-config/demo_examples/example_sysctl_ulimit.yaml rename to demo_examples/example_sysctl_ulimit.yaml index d8f046d..a632e8d 100644 --- a/airship-host-config/demo_examples/example_sysctl_ulimit.yaml +++ b/demo_examples/example_sysctl_ulimit.yaml @@ -1,15 +1,15 @@ +# This CR when executed configures the passed sysctl and ulimit +# configuration on the kubernetes master nodes. + apiVersion: hostconfig.airshipit.org/v1alpha1 kind: HostConfig metadata: name: example8 spec: - # Add fields here host_groups: - name: "kubernetes.io/role" values: - "master" - sequential: false - reexecute: false config: sysctl: - name: "net.ipv6.route.gc_interval" @@ -17,7 +17,7 @@ spec: - name: "net.netfilter.nf_conntrack_frag6_timeout" value: "120" ulimit: - - user: "sirisha" + - user: "vagrant" type: "hard" item: "cpu" value: "unlimited" diff --git a/docs/Node_resiliency.png b/docs/Node_resiliency.png new file mode 100644 index 0000000000000000000000000000000000000000..a32d8be844b70cc3401c3548d78cc717743bbaad GIT binary patch literal 364342 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

?Fjn@ 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⋙e&;6Yn8QT>25I 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 +* Supports host selection with AND and OR operations of the labels mentioned +in the host-groups of the CR object +* Reconcile on failed nodes, based on reconcile period - feature available +from ansible-operator +* Current support is available to perform `sysctl` and `ulimit` operations +on the kubernetes nodes. Also any shell command that needs to be executed +on the nodes. +* Display the status of each Hostconfig CR object as part of the +`kubectl describe hostconfig ` +* We have also added an anisble role to execute the +"kubeadm alpha cert check-expiration" command and annotate the nodes +with expiration detail. ## Architecture ![](Deployment_Architecture.png) -Hostconfig operator will be running as a kubernetes deployment on the target kubernetes cluster. +Hostconfig operator will be running as a kubernetes deployment on the target +kubernetes cluster. -This repository also have vagrants scripts to build kubernetes cluster on the Vagrant VMs and has to deploy and configure the hostconfig-operator pod on the K8 setup. +This repository also have vagrants scripts to build kubernetes cluster on the +Vagrant VMs and has to deploy and configure the hostconfig-operator pod +on the K8 setup. ## Deployment and Host Configuration Flow @@ -47,7 +69,9 @@ Using operator pod to perform host configuration on kubernetes nodes **Pre-requisite:** -1. The Kubernetes nodes should be labelled with any one of the below label to execute based on host-groups, if not labelled by default executes on all the nodes as no selection happens. +1. The Kubernetes nodes should be labelled with any one of the below label +to execute based on host-groups, if not labelled by default executes on +all the nodes as no selection happens. Valid labels: * [`topology.kubernetes.io/region`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesiozone) * [`topology.kubernetes.io/zone`](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesioregion) @@ -58,34 +82,41 @@ Using operator pod to perform host configuration on kubernetes nodes 2. **Operator pod connecting to Kubernetes Nodes:** - The kubernetes nodes should be annotated with secret name having the username and private key as part of the contents. + The kubernetes nodes should be annotated with secret name having + the username and private key as part of the contents. -git clone the hostconfig repository + git clone the hostconfig repository -`git clone https://github.com/SirishaGopigiri/airship-host-config.git` + `git clone https://opendev.org/airship/hostconfig-operator.git` -Move to airship-host-config directory + Move to airship-host-config directory -`cd airship-host-config/airship-host-config` + `cd hostconfig-operator/airship-host-config` -Create a HostConfig CRD + Create a HostConfig CRD -`kubectl create -f deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml` + `kubectl create -f deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml` -Create hostconfig role, service account, role-binding and cluster-role-binding which is used to deploy and manage the operations done using the hostconfig operator pod + Create hostconfig role, service account, role-binding and + cluster-role-binding which is used to deploy and manage the operations done + using the hostconfig operator pod -`kubectl create -f deploy/role.yaml` -`kubectl create -f deploy/service_account.yaml` -`kubectl create -f deploy/role_binding.yaml` -`kubectl create -f deploy/cluster_role_binding.yaml` + `kubectl create -f deploy/role.yaml` + `kubectl create -f deploy/service_account.yaml` + `kubectl create -f deploy/role_binding.yaml` + `kubectl create -f deploy/cluster_role_binding.yaml` -Now deploy the hostconfig operator pod + Now deploy the hostconfig operator pod -`kubectl create -f deploy/operator.yaml` + `kubectl create -f deploy/operator.yaml` -Once the hostconfig operator pod is deployed, we can create the desired HostConfig CR with the required configuration. And this CR can be passed to the operator pod which performs the required operation. + Once the hostconfig operator pod is deployed, we can create the desired + HostConfig CR with the required configuration. And this CR is passed to the + operator pod which performs the required operation. -Some example CRs are available in the demo_examples directory. + Some example CRs are available in the demo_examples directory. + + Please refer to README.md file for more detailed steps. ## References diff --git a/docs/Resiliency.md b/docs/Resiliency.md new file mode 100644 index 0000000..8b168b3 --- /dev/null +++ b/docs/Resiliency.md @@ -0,0 +1,78 @@ +## HostConfig-Operator tested with Node Resiliency + +Tested hostconfig-operator in a HA mode and also when the node +goes down on which the leader pod is launched. Here are the +scenarios tested and configuration used + +### Topology and Configuration Details + +Launched hostconfig-operator with 3 replica-sets on a +kubernetes cluster having 3 master and 5 worker nodes. +The deployment has nodeantiaffinity rule and tolerations +so that each pod is launched on a different master node. +So 3 master have one replica of the hostconfig-operator pod +running on them. + +Please refer to operator.yaml file for deployment details. + +Once all the pods comes to running state, we can check +the pod logs to see which pod has been elected as leader pod. + +### Scenarios tested for Node Resiliency + +Once the pods are up and running and the leader pod is elected, +executed a sample CR object(demo_examples/example_host_groups.yaml). +This CR object will be executed by the leader pod. + +After the above CR has executed successfully, simulated some +failure scenario on couple of nodes and executed a new CR object. +This CR object keeps failing and will be trying to reconcile until +successful by the hostconfig-operator pod. + +Now drained the kubernetes node on which the leader pod is launched +and simultaneously executed a new CR object just before draining the node. +Once the node gets drained and the pod is deleted new pod is +elected as leader. The third replica pod which tries to come up +will be in pending state as there will be no more master nodes +available to launch the new pod. + +The new leader which has been elected as leader reads all the HostConfig CR +objects present in the cluster and tries to execute each CR sequentially. +At the same time if any CR fails to execute the pod tries reconcile the CR +until it is successful. + +#### Scenarios + +1. Launch a HA setup with 3 pods running on different masters. +Create a new CR and validate the execution by the leader pod. +Check the status of the hc (kubectl get hc example1 -o json). +Now delete the leader node(cordoned). +Behaviour: CR is executed again by the new HostConfig Leader pod. + +2. Launch a HA setup, create a CR and when CR has started the +execution delete the leader node(cordoned). And check if the new leader +is again executing the CR. +Behavior :The new pod should re-execute the CR again from starting and stop +when all nodes executed successfully. + +3. Launch a HA setup, apply a successful CR and when the CR is completed. +Apply a new CR i.e. sysctl-ulimit. Such that the second CR works for few nodes +successfully and fails for the remaining nodes. As the pod keeps trying to +execute on all the nodes, delete the leader pod and uncordon the node. +Behavior: The pod gets each CR object and re-executes again until they +execute successfully. And the second CR which was failing will also gets +executed again and the new pod re-attempts to run on that CR until successful. + +4. When number of replicas of hostconfig-operator are more than number +of master nodes pods should be in pending state as it is one pod per node. +Behavior: Pod is expected to be in pending state waiting for the node +to be available. + +5. Multiple CR are applied continuously. +Behavior: Tested with 20 HC and are applied sequentially. + +Video demonstrating the node resiliency behaviour of HostConfig-Operator Pod: +It demonstrates all the above scenarios consolidated. + +[![Alt text](Node_resiliency.png) +](https://drive.google.com/file/d/1lwA_Zqrax0ECc0K2b2BKTj3eCMYVmbqJ/view?usp=sharing) diff --git a/kubernetes/README.md b/kubernetes/README.md deleted file mode 100644 index 95818db..0000000 --- a/kubernetes/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Kubernetes cluster -A vagrant script for setting up a Kubernetes cluster using Kubeadm - -## Pre-requisites - - * **[Vagrant 2.1.4+](https://www.vagrantup.com)** - * **[Virtualbox 5.2.18+](https://www.virtualbox.org)** - -## How to Run - -Git clone the repo on the host machine which has vagrant and virtual box installed - -``` -git clone https://github.com/SirishaGopigiri/airship-host-config.git -``` - -Navigate to the kubernetes folder - -``` -cd airship-host-config/kubernetes/ -``` - -Execute the following vagrant command to start a new Kubernetes cluster, this will start three master and five nodes: - -``` -vagrant up -``` - -You can also start individual machines by vagrant up k8s-head, vagrant up k8s-node-1 and vagrant up k8s-node-2 - -If you would need more master nodes, you can edit the servers array in the Vagrantfile. Please change the name, and IP address for eth1. -``` -servers = [ - { - :name => "k8s-master-1", - :type => "master", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.10", - :mem => "2048", - :cpu => "2" - } -] -``` -Also update the haproxy.cfg file to add more master servers. - -``` - balance roundrobin - server k8s-api-1 192.168.205.10:6443 check - server k8s-api-2 192.168.205.11:6443 check - server k8s-api-3 192.168.205.12:6443 check - server k8s-api-4 check -``` - - -If more than five nodes are required, you can edit the servers array in the Vagrantfile. Please change the name, and IP address for eth1. - -``` -servers = [ - { - :name => "k8s-node-3", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.14", - :mem => "2048", - :cpu => "2" - } -] - ``` - -As you can see above, you can also configure IP address, memory and CPU in the servers array. - -## Clean-up - -Execute the following command to remove the virtual machines created for the Kubernetes cluster. -``` -vagrant destroy -f -``` - -You can destroy individual machines by vagrant destroy k8s-node-1 -f diff --git a/kubernetes/Vagrantfile b/kubernetes/Vagrantfile deleted file mode 100644 index 7129eb4..0000000 --- a/kubernetes/Vagrantfile +++ /dev/null @@ -1,220 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -servers = [ - { - :name => "k8s-lbhaproxy", - :type => "lbhaproxy", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.13", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-master-1", - :type => "master", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.10", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-master-2", - :type => "master-join", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.11", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-master-3", - :type => "master-join", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.12", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-node-1", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.14", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-node-2", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.15", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-node-3", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.16", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-node-4", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.17", - :mem => "2048", - :cpu => "2" - }, - { - :name => "k8s-node-5", - :type => "node", - :box => "ubuntu/xenial64", - :box_version => "20180831.0.0", - :eth1 => "192.168.205.18", - :mem => "2048", - :cpu => "2" - } -] - -# This script to install k8s using kubeadm will get executed after a box is provisioned -$configureBox = <<-SCRIPT - - # install docker v17.03 - # reason for not using docker provision is that it always installs latest version of the docker, but kubeadm requires 17.03 or older - apt-get update - apt-get install -y apt-transport-https ca-certificates curl software-properties-common - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - - add-apt-repository "deb https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" - apt-get update && apt-get install -y docker-ce=$(apt-cache madison docker-ce | grep 17.03 | head -1 | awk '{print $3}') - - # run docker commands as vagrant user (sudo not required) - usermod -aG docker vagrant - - # install kubeadm - apt-get install -y apt-transport-https curl - curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - - cat </etc/apt/sources.list.d/kubernetes.list - deb http://apt.kubernetes.io/ kubernetes-xenial main -EOF - apt-get update - apt-get install -y kubelet kubeadm kubectl - apt-mark hold kubelet kubeadm kubectl - - # kubelet requires swap off - swapoff -a - - # keep swap off after reboot - sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab - - # ip of this box - IP_ADDR=`ifconfig enp0s8 | grep Mask | awk '{print $2}'| cut -f2 -d:` - # set node-ip - sudo wget https://raw.githubusercontent.com/SirishaGopigiri/airship-host-config/master/kubernetes/config/kubelet -O /etc/default/kubelet - sudo sed -i "/^[^#]*KUBELET_EXTRA_ARGS=/c\KUBELET_EXTRA_ARGS=--node-ip=$IP_ADDR" /etc/default/kubelet - sudo systemctl restart kubelet - sudo --user=vagrant touch /home/vagrant/.Xauthority - - # required for setting up password less ssh between guest VMs - sudo sed -i "/^[^#]*PasswordAuthentication[[:space:]]no/c\PasswordAuthentication yes" /etc/ssh/sshd_config - sudo service sshd restart - - -SCRIPT - -$configureMaster = <<-SCRIPT - echo -e "\nThis is master:\n" - # ip of this box - IP_ADDR=`ifconfig enp0s8 | grep Mask | awk '{print $2}'| cut -f2 -d:` - - # install k8s master - HOST_NAME=$(hostname -s) - kubeadm init --apiserver-advertise-address=$IP_ADDR --apiserver-cert-extra-sans=$IP_ADDR --node-name $HOST_NAME --pod-network-cidr=172.16.0.0/16 --control-plane-endpoint "192.168.205.13:443" --upload-certs - - #copying credentials to regular user - vagrant - sudo --user=vagrant mkdir -p /home/vagrant/.kube - cp -i /etc/kubernetes/admin.conf /home/vagrant/.kube/config - chown $(id -u vagrant):$(id -g vagrant) /home/vagrant/.kube/config - - # install Calico pod network addon - export KUBECONFIG=/etc/kubernetes/admin.conf - kubectl apply -f https://raw.githubusercontent.com/SirishaGopigiri/airship-host-config/master/kubernetes/calico/calico.yaml - - kubeadm init phase upload-certs --upload-certs > /etc/upload_cert - kubeadm token create --print-join-command >> /etc/kubeadm_join_cmd.sh - chmod +x /etc/kubeadm_join_cmd.sh - - cat /etc/kubeadm_join_cmd.sh > /etc/kubeadm_join_master.sh - CERT=`tail -1 /etc/upload_cert` - sed -i '$ s/$/ --control-plane --certificate-key '"$CERT"'/' /etc/kubeadm_join_master.sh - - #Install sshpass for futher docker image copy - apt-get install -y sshpass - -SCRIPT - -$configureMasterJoin = <<-SCRIPT - echo -e "\nThis is Master with Join Commadn:\n" - apt-get install -y sshpass - sshpass -p "vagrant" scp -o StrictHostKeyChecking=no vagrant@192.168.205.10:/etc/kubeadm_join_master.sh . - IP_ADDR=`ifconfig enp0s8 | grep Mask | awk '{print $2}'| cut -f2 -d:` - - sed -i '$ s/$/ --apiserver-advertise-address '"$IP_ADDR"'/' kubeadm_join_master.sh - sh ./kubeadm_join_master.sh -SCRIPT - -$configureNode = <<-SCRIPT - echo -e "\nThis is worker:\n" - apt-get install -y sshpass - sshpass -p "vagrant" scp -o StrictHostKeyChecking=no vagrant@192.168.205.10:/etc/kubeadm_join_cmd.sh . - sh ./kubeadm_join_cmd.sh -SCRIPT - -Vagrant.configure("2") do |config| - - servers.each do |opts| - config.vm.define opts[:name] do |config| - - config.vm.box = opts[:box] - config.vm.box_version = opts[:box_version] - config.vm.hostname = opts[:name] - config.vm.network :private_network, ip: opts[:eth1] - config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", disabled: true - config.vm.network :forwarded_port, guest: 22, host: 2200, auto_correct: true - config.vm.provider "virtualbox" do |v| - - v.name = opts[:name] - v.customize ["modifyvm", :id, "--groups", "/Ballerina Development"] - v.customize ["modifyvm", :id, "--memory", opts[:mem]] - v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] - - end - - - if opts[:type] == "master" - config.vm.provision "shell", inline: $configureBox - config.vm.provision "shell", inline: $configureMaster - config.vm.provision "file", source: "../airship-host-config", destination: "/home/vagrant/airship-host-config/airship-host-config" - elsif opts[:type] == "lbhaproxy" - config.vm.provision "shell", :path => "haproxy.sh" - elsif opts[:type] == "master-join" - config.vm.provision "shell", inline: $configureBox - config.vm.provision "shell", inline: $configureMasterJoin - else - config.vm.provision "shell", inline: $configureBox - config.vm.provision "shell", inline: $configureNode - end - - end - - end - -end diff --git a/kubernetes/calico/calico.yaml b/kubernetes/calico/calico.yaml deleted file mode 100644 index 9073135..0000000 --- a/kubernetes/calico/calico.yaml +++ /dev/null @@ -1,839 +0,0 @@ ---- -# Source: calico/templates/calico-config.yaml -# This ConfigMap is used to configure a self-hosted Calico installation. -kind: ConfigMap -apiVersion: v1 -metadata: - name: calico-config - namespace: kube-system -data: - # Typha is disabled. - typha_service_name: "none" - # Configure the backend to use. - calico_backend: "bird" - # Configure the MTU to use for workload interfaces and the - # tunnels. For IPIP, set to your network MTU - 20; for VXLAN - # set to your network MTU - 50. - veth_mtu: "1440" - - # The CNI network configuration to install on each node. The special - # values in this config will be automatically populated. - cni_network_config: |- - { - "name": "k8s-pod-network", - "cniVersion": "0.3.1", - "plugins": [ - { - "type": "calico", - "log_level": "info", - "datastore_type": "kubernetes", - "nodename": "__KUBERNETES_NODE_NAME__", - "mtu": __CNI_MTU__, - "ipam": { - "type": "calico-ipam" - }, - "policy": { - "type": "k8s" - }, - "kubernetes": { - "kubeconfig": "__KUBECONFIG_FILEPATH__" - } - }, - { - "type": "portmap", - "snat": true, - "capabilities": {"portMappings": true} - }, - { - "type": "bandwidth", - "capabilities": {"bandwidth": true} - } - ] - } - ---- -# Source: calico/templates/kdd-crds.yaml - -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: bgpconfigurations.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: BGPConfiguration - plural: bgpconfigurations - singular: bgpconfiguration - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: bgppeers.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: BGPPeer - plural: bgppeers - singular: bgppeer - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: blockaffinities.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: BlockAffinity - plural: blockaffinities - singular: blockaffinity - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: clusterinformations.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: ClusterInformation - plural: clusterinformations - singular: clusterinformation - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: felixconfigurations.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: FelixConfiguration - plural: felixconfigurations - singular: felixconfiguration - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: globalnetworkpolicies.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: GlobalNetworkPolicy - plural: globalnetworkpolicies - singular: globalnetworkpolicy - shortNames: - - gnp - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: globalnetworksets.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: GlobalNetworkSet - plural: globalnetworksets - singular: globalnetworkset - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: hostendpoints.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: HostEndpoint - plural: hostendpoints - singular: hostendpoint - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: ipamblocks.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: IPAMBlock - plural: ipamblocks - singular: ipamblock - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: ipamconfigs.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: IPAMConfig - plural: ipamconfigs - singular: ipamconfig - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: ipamhandles.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: IPAMHandle - plural: ipamhandles - singular: ipamhandle - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: ippools.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: IPPool - plural: ippools - singular: ippool - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: kubecontrollersconfigurations.crd.projectcalico.org -spec: - scope: Cluster - group: crd.projectcalico.org - version: v1 - names: - kind: KubeControllersConfiguration - plural: kubecontrollersconfigurations - singular: kubecontrollersconfiguration ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: networkpolicies.crd.projectcalico.org -spec: - scope: Namespaced - group: crd.projectcalico.org - version: v1 - names: - kind: NetworkPolicy - plural: networkpolicies - singular: networkpolicy - ---- -apiVersion: apiextensions.k8s.io/v1beta1 -kind: CustomResourceDefinition -metadata: - name: networksets.crd.projectcalico.org -spec: - scope: Namespaced - group: crd.projectcalico.org - version: v1 - names: - kind: NetworkSet - plural: networksets - singular: networkset - ---- ---- -# Source: calico/templates/rbac.yaml - -# Include a clusterrole for the kube-controllers component, -# and bind it to the calico-kube-controllers serviceaccount. -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: calico-kube-controllers -rules: - # Nodes are watched to monitor for deletions. - - apiGroups: [""] - resources: - - nodes - verbs: - - watch - - list - - get - # Pods are queried to check for existence. - - apiGroups: [""] - resources: - - pods - verbs: - - get - # IPAM resources are manipulated when nodes are deleted. - - apiGroups: ["crd.projectcalico.org"] - resources: - - ippools - verbs: - - list - - apiGroups: ["crd.projectcalico.org"] - resources: - - blockaffinities - - ipamblocks - - ipamhandles - verbs: - - get - - list - - create - - update - - delete - # kube-controllers manages hostendpoints. - - apiGroups: ["crd.projectcalico.org"] - resources: - - hostendpoints - verbs: - - get - - list - - create - - update - - delete - # Needs access to update clusterinformations. - - apiGroups: ["crd.projectcalico.org"] - resources: - - clusterinformations - verbs: - - get - - create - - update - # KubeControllersConfiguration is where it gets its config - - apiGroups: ["crd.projectcalico.org"] - resources: - - kubecontrollersconfigurations - verbs: - # read its own config - - get - # create a default if none exists - - create - # update status - - update - # watch for changes - - watch ---- -kind: ClusterRoleBinding -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: calico-kube-controllers -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: calico-kube-controllers -subjects: -- kind: ServiceAccount - name: calico-kube-controllers - namespace: kube-system ---- -# Include a clusterrole for the calico-node DaemonSet, -# and bind it to the calico-node serviceaccount. -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: calico-node -rules: - # The CNI plugin needs to get pods, nodes, and namespaces. - - apiGroups: [""] - resources: - - pods - - nodes - - namespaces - verbs: - - get - - apiGroups: [""] - resources: - - endpoints - - services - verbs: - # Used to discover service IPs for advertisement. - - watch - - list - # Used to discover Typhas. - - get - # Pod CIDR auto-detection on kubeadm needs access to config maps. - - apiGroups: [""] - resources: - - configmaps - verbs: - - get - - apiGroups: [""] - resources: - - nodes/status - verbs: - # Needed for clearing NodeNetworkUnavailable flag. - - patch - # Calico stores some configuration information in node annotations. - - update - # Watch for changes to Kubernetes NetworkPolicies. - - apiGroups: ["networking.k8s.io"] - resources: - - networkpolicies - verbs: - - watch - - list - # Used by Calico for policy information. - - apiGroups: [""] - resources: - - pods - - namespaces - - serviceaccounts - verbs: - - list - - watch - # The CNI plugin patches pods/status. - - apiGroups: [""] - resources: - - pods/status - verbs: - - patch - # Calico monitors various CRDs for config. - - apiGroups: ["crd.projectcalico.org"] - resources: - - globalfelixconfigs - - felixconfigurations - - bgppeers - - globalbgpconfigs - - bgpconfigurations - - ippools - - ipamblocks - - globalnetworkpolicies - - globalnetworksets - - networkpolicies - - networksets - - clusterinformations - - hostendpoints - - blockaffinities - verbs: - - get - - list - - watch - # Calico must create and update some CRDs on startup. - - apiGroups: ["crd.projectcalico.org"] - resources: - - ippools - - felixconfigurations - - clusterinformations - verbs: - - create - - update - # Calico stores some configuration information on the node. - - apiGroups: [""] - resources: - - nodes - verbs: - - get - - list - - watch - # These permissions are only requried for upgrade from v2.6, and can - # be removed after upgrade or on fresh installations. - - apiGroups: ["crd.projectcalico.org"] - resources: - - bgpconfigurations - - bgppeers - verbs: - - create - - update - # These permissions are required for Calico CNI to perform IPAM allocations. - - apiGroups: ["crd.projectcalico.org"] - resources: - - blockaffinities - - ipamblocks - - ipamhandles - verbs: - - get - - list - - create - - update - - delete - - apiGroups: ["crd.projectcalico.org"] - resources: - - ipamconfigs - verbs: - - get - # Block affinities must also be watchable by confd for route aggregation. - - apiGroups: ["crd.projectcalico.org"] - resources: - - blockaffinities - verbs: - - watch - # The Calico IPAM migration needs to get daemonsets. These permissions can be - # removed if not upgrading from an installation using host-local IPAM. - - apiGroups: ["apps"] - resources: - - daemonsets - verbs: - - get - ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: calico-node -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: calico-node -subjects: -- kind: ServiceAccount - name: calico-node - namespace: kube-system - ---- -# Source: calico/templates/calico-node.yaml -# This manifest installs the calico-node container, as well -# as the CNI plugins and network config on -# each master and worker node in a Kubernetes cluster. -kind: DaemonSet -apiVersion: apps/v1 -metadata: - name: calico-node - namespace: kube-system - labels: - k8s-app: calico-node -spec: - selector: - matchLabels: - k8s-app: calico-node - updateStrategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 1 - template: - metadata: - labels: - k8s-app: calico-node - annotations: - # This, along with the CriticalAddonsOnly toleration below, - # marks the pod as a critical add-on, ensuring it gets - # priority scheduling and that its resources are reserved - # if it ever gets evicted. - scheduler.alpha.kubernetes.io/critical-pod: '' - spec: - nodeSelector: - kubernetes.io/os: linux - hostNetwork: true - tolerations: - # Make sure calico-node gets scheduled on all nodes. - - effect: NoSchedule - operator: Exists - # Mark the pod as a critical add-on for rescheduling. - - key: CriticalAddonsOnly - operator: Exists - - effect: NoExecute - operator: Exists - serviceAccountName: calico-node - # Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force - # deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods. - terminationGracePeriodSeconds: 0 - priorityClassName: system-node-critical - initContainers: - # This container performs upgrade from host-local IPAM to calico-ipam. - # It can be deleted if this is a fresh installation, or if you have already - # upgraded to use calico-ipam. - - name: upgrade-ipam - image: calico/cni:v3.14.0 - command: ["/opt/cni/bin/calico-ipam", "-upgrade"] - env: - - name: KUBERNETES_NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: CALICO_NETWORKING_BACKEND - valueFrom: - configMapKeyRef: - name: calico-config - key: calico_backend - volumeMounts: - - mountPath: /var/lib/cni/networks - name: host-local-net-dir - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - securityContext: - privileged: true - # This container installs the CNI binaries - # and CNI network config file on each node. - - name: install-cni - image: calico/cni:v3.14.0 - command: ["/install-cni.sh"] - env: - # Name of the CNI config file to create. - - name: CNI_CONF_NAME - value: "10-calico.conflist" - # The CNI network config to install on each node. - - name: CNI_NETWORK_CONFIG - valueFrom: - configMapKeyRef: - name: calico-config - key: cni_network_config - # Set the hostname based on the k8s node name. - - name: KUBERNETES_NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - # CNI MTU Config variable - - name: CNI_MTU - valueFrom: - configMapKeyRef: - name: calico-config - key: veth_mtu - # Prevents the container from sleeping forever. - - name: SLEEP - value: "false" - volumeMounts: - - mountPath: /host/opt/cni/bin - name: cni-bin-dir - - mountPath: /host/etc/cni/net.d - name: cni-net-dir - securityContext: - privileged: true - # Adds a Flex Volume Driver that creates a per-pod Unix Domain Socket to allow Dikastes - # to communicate with Felix over the Policy Sync API. - - name: flexvol-driver - image: calico/pod2daemon-flexvol:v3.14.0 - volumeMounts: - - name: flexvol-driver-host - mountPath: /host/driver - securityContext: - privileged: true - containers: - # Runs calico-node container on each Kubernetes node. This - # container programs network policy and routes on each - # host. - - name: calico-node - image: calico/node:v3.14.0 - env: - # Use Kubernetes API as the backing datastore. - - name: DATASTORE_TYPE - value: "kubernetes" - # Wait for the datastore. - - name: WAIT_FOR_DATASTORE - value: "true" - # Set based on the k8s node name. - - name: NODENAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - # Choose the backend to use. - - name: CALICO_NETWORKING_BACKEND - valueFrom: - configMapKeyRef: - name: calico-config - key: calico_backend - # Cluster type to identify the deployment type - - name: CLUSTER_TYPE - value: "k8s,bgp" - # Auto-detect the BGP IP address. - - name: IP - value: "autodetect" - # Enable IPIP - - name: CALICO_IPV4POOL_IPIP - value: "Always" - # Set MTU for tunnel device used if ipip is enabled - - name: FELIX_IPINIPMTU - valueFrom: - configMapKeyRef: - name: calico-config - key: veth_mtu - # Set MTU for the VXLAN tunnel device. - - name: FELIX_VXLANMTU - valueFrom: - configMapKeyRef: - name: calico-config - key: veth_mtu - # The default IPv4 pool to create on startup if none exists. Pod IPs will be - # chosen from this range. Changing this value after installation will have - # no effect. This should fall within `--cluster-cidr`. - # - name: CALICO_IPV4POOL_CIDR - # value: "192.168.0.0/16" - # Disable file logging so `kubectl logs` works. - - name: CALICO_DISABLE_FILE_LOGGING - value: "true" - # Set Felix endpoint to host default action to ACCEPT. - - name: FELIX_DEFAULTENDPOINTTOHOSTACTION - value: "ACCEPT" - # Disable IPv6 on Kubernetes. - - name: FELIX_IPV6SUPPORT - value: "false" - # Set Felix logging to "info" - - name: FELIX_LOGSEVERITYSCREEN - value: "info" - - name: FELIX_HEALTHENABLED - value: "true" - securityContext: - privileged: true - resources: - requests: - cpu: 250m - livenessProbe: - exec: - command: - - /bin/calico-node - - -felix-live - - -bird-live - periodSeconds: 10 - initialDelaySeconds: 10 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/calico-node - - -felix-ready - - -bird-ready - periodSeconds: 10 - volumeMounts: - - mountPath: /lib/modules - name: lib-modules - readOnly: true - - mountPath: /run/xtables.lock - name: xtables-lock - readOnly: false - - mountPath: /var/run/calico - name: var-run-calico - readOnly: false - - mountPath: /var/lib/calico - name: var-lib-calico - readOnly: false - - name: policysync - mountPath: /var/run/nodeagent - volumes: - # Used by calico-node. - - name: lib-modules - hostPath: - path: /lib/modules - - name: var-run-calico - hostPath: - path: /var/run/calico - - name: var-lib-calico - hostPath: - path: /var/lib/calico - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate - # Used to install CNI. - - name: cni-bin-dir - hostPath: - path: /opt/cni/bin - - name: cni-net-dir - hostPath: - path: /etc/cni/net.d - # Mount in the directory for host-local IPAM allocations. This is - # used when upgrading from host-local to calico-ipam, and can be removed - # if not using the upgrade-ipam init container. - - name: host-local-net-dir - hostPath: - path: /var/lib/cni/networks - # Used to create per-pod Unix Domain Sockets - - name: policysync - hostPath: - type: DirectoryOrCreate - path: /var/run/nodeagent - # Used to install Flex Volume Driver - - name: flexvol-driver-host - hostPath: - type: DirectoryOrCreate - path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/nodeagent~uds ---- - -apiVersion: v1 -kind: ServiceAccount -metadata: - name: calico-node - namespace: kube-system - ---- -# Source: calico/templates/calico-kube-controllers.yaml -# See https://github.com/projectcalico/kube-controllers -apiVersion: apps/v1 -kind: Deployment -metadata: - name: calico-kube-controllers - namespace: kube-system - labels: - k8s-app: calico-kube-controllers -spec: - # The controllers can only have a single active instance. - replicas: 1 - selector: - matchLabels: - k8s-app: calico-kube-controllers - strategy: - type: Recreate - template: - metadata: - name: calico-kube-controllers - namespace: kube-system - labels: - k8s-app: calico-kube-controllers - annotations: - scheduler.alpha.kubernetes.io/critical-pod: '' - spec: - nodeSelector: - kubernetes.io/os: linux - tolerations: - # Mark the pod as a critical add-on for rescheduling. - - key: CriticalAddonsOnly - operator: Exists - - key: node-role.kubernetes.io/master - effect: NoSchedule - serviceAccountName: calico-kube-controllers - priorityClassName: system-cluster-critical - containers: - - name: calico-kube-controllers - image: calico/kube-controllers:v3.14.0 - env: - # Choose which controllers to run. - - name: ENABLED_CONTROLLERS - value: node - - name: DATASTORE_TYPE - value: kubernetes - readinessProbe: - exec: - command: - - /usr/bin/check-status - - -r - ---- - -apiVersion: v1 -kind: ServiceAccount -metadata: - name: calico-kube-controllers - namespace: kube-system - ---- -# Source: calico/templates/calico-etcd-secrets.yaml - ---- -# Source: calico/templates/calico-typha.yaml - ---- -# Source: calico/templates/configure-canal.yaml - - diff --git a/kubernetes/config/kubelet b/kubernetes/config/kubelet deleted file mode 100644 index b6c7084..0000000 --- a/kubernetes/config/kubelet +++ /dev/null @@ -1 +0,0 @@ -KUBELET_EXTRA_ARGS= diff --git a/kubernetes/haproxy.sh b/kubernetes/haproxy.sh deleted file mode 100644 index 71587ce..0000000 --- a/kubernetes/haproxy.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash - -if [ ! -f /etc/haproxy/haproxy.cfg ]; then - - # Install haproxy - sudo sed -i "/^[^#]*PasswordAuthentication[[:space:]]no/c\PasswordAuthentication yes" /etc/ssh/sshd_config - sudo service sshd restart - /usr/bin/apt-get -y install haproxy - cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.orig - - # Configure haproxy - cat > /etc/default/haproxy < /etc/haproxy/haproxy.cfg < "{{ logs_dir }}/pod-logs/{{ kctl_context }}/${NAMESPACE}/${POD}/${CONTAINER}.txt" + kubectl logs --previous ${POD} -n ${NAMESPACE} -c ${CONTAINER} > "{{ logs_dir }}/pod-logs/{{ kctl_context }}/failed-pods/${NAMESPACE}/${POD}/${CONTAINER}.txt" + done + } + export -f get_pod_logs + kubectl config use-context {{ kctl_context | default("kind-hostconfig") }} + get_namespaces | \ + xargs -r -n 1 -P ${PARALLELISM_FACTOR} -I {} bash -c 'get_pods "$@"' _ {} | \ + xargs -r -n 2 -P ${PARALLELISM_FACTOR} -I {} bash -c 'get_pod_logs "$@"' _ {} + args: + executable: /bin/bash + ignore_errors: True + +- name: "Downloads pod logs to executor" + synchronize: + src: "{{ logs_dir }}/pod-logs" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: True diff --git a/roles/airship-gather-runtime-logs/tasks/main.yaml b/roles/airship-gather-runtime-logs/tasks/main.yaml new file mode 100644 index 0000000..c13e33d --- /dev/null +++ b/roles/airship-gather-runtime-logs/tasks/main.yaml @@ -0,0 +1,45 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: populate service facts + service_facts: + +- name: set runtime logs dir + set_fact: + runtime_logs_dir: "{{ logs_dir }}/runtime" + +- name: ensure directory for runtime logs exists + file: + state: directory + path: "{{ runtime_logs_dir }}" + +- name: dump docker logs + shell: |- + journalctl --unit "docker" --no-pager > "{{ runtime_logs_dir }}/docker.log" + when: ansible_facts.services['docker.service'] is defined + args: + executable: /bin/bash + become: yes + +- name: dump containerd logs + shell: |- + journalctl --unit "containerd" --no-pager > "{{ runtime_logs_dir }}/containerd.log" + when: ansible_facts.services['containerd.service'] is defined + args: + executable: /bin/bash + become: yes + +- name: "Downloads logs to executor" + synchronize: + src: "{{ runtime_logs_dir }}" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull diff --git a/roles/docker-install/defaults/main.yaml b/roles/docker-install/defaults/main.yaml new file mode 100644 index 0000000..623143c --- /dev/null +++ b/roles/docker-install/defaults/main.yaml @@ -0,0 +1,28 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +docker_config_path: "/etc/docker" + +docker_config_log_driver: "journald" +docker_config_log_opts: {} + +docker_config: | + { + "log-driver": "{{ docker_config_log_driver }}", + "log-opts": {{ docker_config_log_opts | to_json }} + } + +proxy: + enabled: false + http: + https: + noproxy: diff --git a/roles/docker-install/tasks/main.yaml b/roles/docker-install/tasks/main.yaml new file mode 100644 index 0000000..00963b9 --- /dev/null +++ b/roles/docker-install/tasks/main.yaml @@ -0,0 +1,80 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +- name: Ensuring docker and support packages are present + become: yes + package: + name: + - docker.io + - runc + update_cache: yes + state: present + +- name: Ensure docker group exists + group: + name: docker + state: present + +- name: Add user "{{ ansible_user }}" to docker group + become: yes + user: + name: "{{ ansible_user }}" + groups: + - docker + append: yes + +- name: Reset ssh connection to add docker group to user + meta: reset_connection + ignore_errors: true + +- block: + - name: Create docker directory + file: + path: /etc/systemd/system/docker.service.d/ + state: directory + mode: '0755' + + - name: Configure proxy for docker if enabled + template: + src: http-proxy-conf.j2 + dest: /etc/systemd/system/docker.service.d/http-proxy.conf + when: proxy.enabled|bool == true + become: yes + +- name: Create docker directory + file: + path: "{{ docker_config_path }}" + state: directory + mode: '0755' + become: yes + +- name: Save docker daemon configuration + copy: + content: "{{ docker_config | to_nice_json }}" + dest: "{{ docker_config_path }}/daemon.json" + become: yes + +- name: Start docker + become: yes + systemd: + name: docker + state: restarted + daemon_reload: yes + enabled: true + +- name: Change group ownership on docker sock + become: yes + file: + path: /var/run/docker.sock + group: docker + diff --git a/roles/docker-install/templates/http-proxy-conf.j2 b/roles/docker-install/templates/http-proxy-conf.j2 new file mode 100644 index 0000000..90d8e1d --- /dev/null +++ b/roles/docker-install/templates/http-proxy-conf.j2 @@ -0,0 +1,4 @@ +[Service] +Environment="HTTP_PROXY={{ proxy.http }}" +Environment="HTTPS_PROXY={{ proxy.https }}" +Environment="NO_PROXY={{ proxy.noproxy }}" diff --git a/roles/docker-install/tests/main.yml b/roles/docker-install/tests/main.yml new file mode 100644 index 0000000..70b7a4b --- /dev/null +++ b/roles/docker-install/tests/main.yml @@ -0,0 +1,25 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: install docker + include_role: + name: docker-install + +- name: check if docker is installed + shell: "docker version" + register: docker_version + +- name: verify docker is installed + assert: + that: + - docker_version.rc == 0 + diff --git a/roles/gather-system-logs/tasks/main.yaml b/roles/gather-system-logs/tasks/main.yaml new file mode 100644 index 0000000..5c846ad --- /dev/null +++ b/roles/gather-system-logs/tasks/main.yaml @@ -0,0 +1,41 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "creating directory for system status" + file: + path: "{{ logs_dir }}/system" + state: directory + +- name: "Get logs for each host" + become: yes + shell: |- + set -x + systemd-cgls --full --all --no-pager > {{ logs_dir }}/system/systemd-cgls.txt + ip addr > {{ logs_dir }}/system/ip-addr.txt + ip route > {{ logs_dir }}/system/ip-route.txt + lsblk > {{ logs_dir }}/system/lsblk.txt + mount > {{ logs_dir }}/system/mount.txt + docker images > {{ logs_dir }}/system/docker-images.txt + ps aux --sort=-%mem > {{ logs_dir }}/system/ps.txt + netstat -plantu > {{ logs_dir }}/system/netstat.txt + iptables -vxnL > {{ logs_dir }}/system/iptables_filter.txt + iptables -t nat -vxnL > {{ logs_dir }}/system/iptables_nat.txt + args: + executable: /bin/bash + ignore_errors: True + +- name: "Downloads logs to executor" + synchronize: + src: "{{ logs_dir }}/system" + dest: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}" + mode: pull + ignore_errors: True diff --git a/roles/hostconfig-run-script/tasks/main.yaml b/roles/hostconfig-run-script/tasks/main.yaml new file mode 100644 index 0000000..9daccbf --- /dev/null +++ b/roles/hostconfig-run-script/tasks/main.yaml @@ -0,0 +1,21 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +- name: "Run script {{ gate_script_path }}" + shell: | + set -xe; + {{ gate_script_path }} + args: + chdir: "{{ zuul.project.src_dir }}" + environment: + remote_work_dir: "{{ ansible_user_dir }}/{{ zuul.project.src_dir }}" + zuul_site_mirror_fqdn: "{{ zuul_site_mirror_fqdn }}" diff --git a/tools/deployment/00_install_kind.sh b/tools/deployment/00_install_kind.sh new file mode 100755 index 0000000..76b2bb2 --- /dev/null +++ b/tools/deployment/00_install_kind.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This downloads kind, puts it in a temp directory, and prints the directory +set -e + +KIND_VERSION="v0.8.1" + +echo "Installing Kind Version $KIND_VERSION" +: ${KIND_URL:="https://kind.sigs.k8s.io/dl/$KIND_VERSION/kind-$(uname)-amd64"} +TMP=$(mktemp -d) +KIND="${TMP}/kind" + +wget -O ${KIND} ${KIND_URL} +chmod +x ${KIND} +sudo cp ${KIND} /usr/local/bin diff --git a/tools/deployment/01_install_kubectl.sh b/tools/deployment/01_install_kubectl.sh new file mode 100755 index 0000000..b5b8cf4 --- /dev/null +++ b/tools/deployment/01_install_kubectl.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +: ${KUBE_VERSION:="v1.17.4"} + +# Install kubectl +URL="https://storage.googleapis.com" +sudo wget -O /usr/local/bin/kubectl \ + "${URL}"/kubernetes-release/release/"${KUBE_VERSION}"/bin/linux/amd64/kubectl + +sudo chmod +x /usr/local/bin/kubectl diff --git a/tools/deployment/02_install_operator_sdk.sh b/tools/deployment/02_install_operator_sdk.sh new file mode 100755 index 0000000..3f6e4a3 --- /dev/null +++ b/tools/deployment/02_install_operator_sdk.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +RELEASE_VERSION=v0.8.0 + +echo "Installing Operator-SDK to build image" + +wget -O operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu +chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu +sudo mv operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/operator-sdk diff --git a/tools/deployment/10_create_hostconfig_cluster.sh b/tools/deployment/10_create_hostconfig_cluster.sh new file mode 100755 index 0000000..76cbf12 --- /dev/null +++ b/tools/deployment/10_create_hostconfig_cluster.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +#Default wait timeout is 3600 seconds +export TIMEOUT=${TIMEOUT:-3600} +REMOTE_WORK_DIR=/tmp + +echo "Create Kind Cluster" +cat < ${REMOTE_WORK_DIR}/kind-hostconfig.yaml +kind: Cluster +apiVersion: kind.sigs.k8s.io/v1alpha3 +nodes: + - role: control-plane + - role: control-plane + - role: control-plane + - role: worker + - role: worker +EOF + +kind create cluster --config ${REMOTE_WORK_DIR}/kind-hostconfig.yaml --name hostconfig -v 2 + +#Wait till HostConfig Cluster is ready +end=$(($(date +%s) + $TIMEOUT)) +echo "Waiting $TIMEOUT seconds for HostConfig Cluster to be ready." + +hosts=(`kubectl get nodes -o wide | awk '{print $1}' | sed -e '1d'`) + +for i in "${!hosts[@]}" +do + while true; do + if (kubectl --request-timeout 20s get nodes ${hosts[i]} -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep -q True) ; then + echo -e "\nHostConfig Cluster Nodes are ready." + kubectl --request-timeout 20s get nodes + break + else + now=$(date +%s) + if [ $now -gt $end ]; then + echo -e "\nHostConfig Cluster Nodes were not ready before TIMEOUT." + exit 1 + fi + fi + echo -n . + sleep 15 + done +done diff --git a/tools/deployment/20_configure_ssh_on_nodes.sh b/tools/deployment/20_configure_ssh_on_nodes.sh new file mode 100755 index 0000000..63a8464 --- /dev/null +++ b/tools/deployment/20_configure_ssh_on_nodes.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +hosts=(`kubectl get nodes -o wide | awk '{print $1}' | sed -e '1d'`) +hosts_ips=(`kubectl get nodes -o wide | awk '{print $6}' | sed -e '1d'`) + +export USERNAME=${USERNAME:-"hostconfig"} +export PASSWORD=${PASSWORD:-"hostconfig"} + +# Installing openssl, sshpass and jq modules +sudo apt-get install -y openssl sshpass jq +ENCRYPTED_PASSWORD=`openssl passwd -crypt $PASSWORD` + +# Configuring SSH on Kubernetes nodes +for i in "${!hosts[@]}" +do + sudo docker exec ${hosts[i]} apt-get update + sudo docker exec ${hosts[i]} apt-get install -y sudo openssh-server + sudo docker exec ${hosts[i]} service sshd start + sudo docker exec ${hosts[i]} useradd -m -p $ENCRYPTED_PASSWORD -s /bin/bash $USERNAME + sudo docker exec ${hosts[i]} bash -c "echo '$USERNAME ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/hostconfig" + printf 'Working on host %s with Indexs and having IP %s\n' "${hosts[i]}" "$i" "${hosts_ips[i]}" + ssh-keygen -q -t rsa -N '' -f ${hosts[i]} + sshpass -p $PASSWORD ssh-copy-id -o StrictHostKeyChecking=no -i ${hosts[i]} $USERNAME@${hosts_ips[i]} + kubectl create secret generic ${hosts[i]} --from-literal=username=$USERNAME --from-file=ssh_private_key=${hosts[i]} + kubectl annotate node ${hosts[i]} secret=${hosts[i]} +done diff --git a/tools/deployment/30_create_labels.sh b/tools/deployment/30_create_labels.sh new file mode 100755 index 0000000..837c7fb --- /dev/null +++ b/tools/deployment/30_create_labels.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +# Labeling kubernetes nodes with role +kubectl label node hostconfig-control-plane kubernetes.io/role=master +kubectl label node hostconfig-control-plane2 kubernetes.io/role=master +kubectl label node hostconfig-control-plane3 kubernetes.io/role=master +kubectl label node hostconfig-worker kubernetes.io/role=worker +kubectl label node hostconfig-worker2 kubernetes.io/role=worker + +# Labeling kubernetes nodes with region +kubectl label node hostconfig-control-plane topology.kubernetes.io/region=us-east +kubectl label node hostconfig-control-plane2 topology.kubernetes.io/region=us-west +kubectl label node hostconfig-control-plane3 topology.kubernetes.io/region=us-east +kubectl label node hostconfig-worker topology.kubernetes.io/region=us-east +kubectl label node hostconfig-worker2 topology.kubernetes.io/region=us-west + +# Labeling kubernetes nodes with zone +kubectl label node hostconfig-control-plane topology.kubernetes.io/zone=us-east-1a +kubectl label node hostconfig-control-plane2 topology.kubernetes.io/zone=us-west-1a +kubectl label node hostconfig-control-plane3 topology.kubernetes.io/zone=us-east-1b +kubectl label node hostconfig-worker topology.kubernetes.io/zone=us-east-1a +kubectl label node hostconfig-worker2 topology.kubernetes.io/zone=us-west-1a diff --git a/tools/deployment/40_deploy_hostconfig_operator.sh b/tools/deployment/40_deploy_hostconfig_operator.sh new file mode 100755 index 0000000..164b8d6 --- /dev/null +++ b/tools/deployment/40_deploy_hostconfig_operator.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +export HOSTCONFIG_WS=${HOSTCONFIG_WS:-$PWD} +export HOSTCONFIG=${HOSTCONFIG:-"$HOSTCONFIG_WS/airship-host-config"} +export IMAGE_NAME=${IMAGE_NAME:-"airship-hostconfig:local"} + +# Building hostconfig image +cd $HOSTCONFIG +operator-sdk build $IMAGE_NAME + +# Copying hostconfig image to nodes +kind load docker-image $IMAGE_NAME --name hostconfig + +# Deploying HostConfig Operator Pod +cd $HOSTCONFIG_WS +sed -i "s/AIRSHIP_HOSTCONFIG_IMAGE/$IMAGE_NAME/g" $HOSTCONFIG/deploy/operator.yaml +sed -i "s/PULL_POLICY/IfNotPresent/g" $HOSTCONFIG/deploy/operator.yaml + +kubectl apply -f $HOSTCONFIG/deploy/crds/hostconfig.airshipit.org_hostconfigs_crd.yaml +kubectl apply -f $HOSTCONFIG/deploy/role.yaml +kubectl apply -f $HOSTCONFIG/deploy/service_account.yaml +kubectl apply -f $HOSTCONFIG/deploy/role_binding.yaml +kubectl apply -f $HOSTCONFIG/deploy/cluster_role_binding.yaml +kubectl apply -f $HOSTCONFIG/deploy/operator.yaml + +kubectl wait --for=condition=available deploy --all --timeout=1000s -A + +kubectl get pods -o wide + +kubectl get pods -A + +kubectl get nodes -o wide --show-labels diff --git a/tools/deployment/50_test_hostconfig_cr.sh b/tools/deployment/50_test_hostconfig_cr.sh new file mode 100755 index 0000000..4977867 --- /dev/null +++ b/tools/deployment/50_test_hostconfig_cr.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env bash + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -xe + +export TIMEOUT=${TIMEOUT:-3600} +export AIRSHIP_HOSTCONFIG=${AIRSHIP_HOSTCONFIG:-$PWD} + +check_status(){ + hostconfig=$1 + end=$(($(date +%s) + $TIMEOUT)) + while true; do + # Getting the failed and unreachable nodes status + failures=$(kubectl get hostconfig $hostconfig -o jsonpath='{.status.ansibleSummary.failures}') + unreachable=$(kubectl get hostconfig $hostconfig -o jsonpath='{.status.ansibleSummary.unreachable}') + if [[ $failures == "map[]" && $unreachable == "map[]" ]]; then + kubectl get hostconfig $hostconfig -o json + hosts=$2 + ok=$(kubectl get hostconfig $hostconfig -o json | jq '.status.ansibleSummary.ok | keys') + hostNames=$(kubectl get hostconfig $hostconfig -o json | jq '.status.hostConfigStatus | keys') + ok_array=${ok[@]} + hostNames_array=${hostNames[@]} + # Checking if all hosts has executed + if [ "$hosts" == "$ok_array" ] && [ "$hosts" == "$hostNames_array" ]; then + if $3; then + # Checking if the execution has happened in sequence + # based on the date command executed on the nodes at the time of execution + # Please refer to the demo_examples sample CRs for the configuration + loop=$4 + shift 4 + pre_hosts_date="" + for ((i=0;i