Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luckylittle/ocp46_etcd_restore
Ansible role to perform OpenShift 4.6 ETCD restore
https://github.com/luckylittle/ocp46_etcd_restore
etcd ocp4 openshift openshift46 restore
Last synced: 22 days ago
JSON representation
Ansible role to perform OpenShift 4.6 ETCD restore
- Host: GitHub
- URL: https://github.com/luckylittle/ocp46_etcd_restore
- Owner: luckylittle
- License: mit
- Created: 2020-12-15T22:18:01.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-10-12T06:49:54.000Z (over 2 years ago)
- Last Synced: 2024-11-11T21:28:53.420Z (3 months ago)
- Topics: etcd, ocp4, openshift, openshift46, restore
- Homepage: https://redhat.com
- Size: 6.84 KB
- Stars: 0
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
ocp46_etcd_restore
=========OCP ETCD Restore role performs a ETCD cluster data restore in an OpenShift 4.6 environment from a previous backup.
Prerequisites
--------------- Installed `oc` command-line tool for OCP v`4.6` on the client machine
- Logged in via `oc` command-line tool to your v`4.6` cluster on the client machineRole Variables
--------------As is generally known, Ansible variables could be defined in different files. The following subsections include default variables and required variables which have to be defined in order to perform an ETCD cluster data backup.
### Required Vars
The following required variables have to be defined when role is triggered.
|Variable|Comment|Type|
|---|---|---|
|`backup_src`|ETCD backup folder in client instance which contains files created by `ocp46_etcd_backup` Ansible role|String|Example Inventory
-----------------```ini
[masters]
master0 ansible_host=10.0.0.1
master1 ansible_host=10.0.0.2
master2 ansible_host=10.0.0.3[recovery]
master3 ansible_host=10.0.0.4[localhost]
localhost ansible_host=localhost ansible_connection=local[ocp:children]
masters
recovery[ocp:vars]
ansible_user=core
http_proxy=""
https_proxy=""
```Example Playbook
----------------Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:
```yaml
##
# Example:
# $ ansible-playbook -i inventory ocp46-restore-etcd.yml
# $ ansible-playbook -i inventory ocp46-restore-etcd.yml --extra-vars="backup_src=/tmp/etcd_backup"
##
- hosts: masters
gather_facts: False
become: True
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
tasks:
- name: Move the existing etcd pod file out of the kubelet manifest directory
shell: mv /etc/kubernetes/manifests/etcd-pod.yaml /tmp
ignore_errors: True- name: Move the existing Kubernetes API server pod file out of the kubelet manifest directory
shell: mv /etc/kubernetes/manifests/kube-apiserver-pod.yaml /tmp
ignore_errors: True- name: Move the etcd data directory to a different location
shell: mv /var/lib/etcd/ /tmp
ignore_errors: True- hosts: recovery
gather_facts: False
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
tasks:
- name: Perform ETCD 4.6 Restore
import_role:
name: ocp46_etcd_restore
vars:
backup_src: "~/Downloads/etcd_backup"- hosts: recovery
gather_facts: False
become: True
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
tasks:
- name: Restart the kubelet service on a recovery host
service:
name: kubelet.service
state: restarted- pause:
seconds: 30- hosts: masters
gather_facts: False
become: True
serial: 1
environment:
http_proxy: "{{ http_proxy }}"
https_proxy: "{{ https_proxy }}"
tasks:
- name: Restart the kubelet service on all master hosts
service:
name: kubelet.service
state: restarted- hosts: localhost
gather_facts: False
become: False
tasks:
- name: Force etcd redeployment
shell: >
oc patch etcd cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge- name: Verify all nodes are updated to the latest revision
shell: >
oc get etcd -o=jsonpath='{range .items[0].status.conditions[?(@.type=="NodeInstallerProgressing")]}{.reason}{"\n"}{.message}{"\n"}'
register: verify_lates_rev- name: Review the output of `AllNodesAtLatestRevision`
debug:
msg: "{{ verify_lates_rev.stdout }}"- pause:
seconds: 30- name: Update the `kubeapiserver`
shell: >
oc patch kubeapiserver cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge- name: Update the `kubecontrollermanager`
shell: >
oc patch kubecontrollermanager cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge- name: Update the `kubescheduler`
shell: >
oc patch kubescheduler cluster -p='{"spec": {"forceRedeploymentReason": "recovery-'"$( date --rfc-3339=ns )"'"}}' --type=merge- name: Verify that all master hosts have started and joined the cluster
shell: >
oc get pods -n openshift-etcd | grep etcd
register: etcd_cluster_pods- name: Review the output of etcd pods
debug:
msg: "{{ etcd_cluster_pods.stdout }}"
```License
-------MIT
Author Information
------------------- Lucian Maly [@Red Hat](https://github.com/redhatofficial)