k8s-sig-cluster-lifecycleawskubesprayhigh-availabilityansiblekubernetes-clustergcekubernetesbare-metal
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.9 KiB
123 lines
4.9 KiB
---
|
|
- hosts: all
|
|
become: true
|
|
gather_facts: no
|
|
|
|
vars:
|
|
docker_bin_dir: /usr/bin
|
|
bin_dir: /usr/local/bin
|
|
system_namespace: kube-system
|
|
ansible_ssh_pipelining: true
|
|
etcd_cert_dir: /etc/ssl/etcd/ssl
|
|
commands:
|
|
- name: timedate_info
|
|
cmd: timedatectl status
|
|
- name: kernel_info
|
|
cmd: uname -r
|
|
- name: docker_info
|
|
cmd: "{{ docker_bin_dir }}/docker info"
|
|
- name: ip_info
|
|
cmd: ip -4 -o a
|
|
- name: route_info
|
|
cmd: ip ro
|
|
- name: proc_info
|
|
cmd: ps auxf | grep -v ]$
|
|
- name: systemctl_failed_info
|
|
cmd: systemctl --state=failed --no-pager
|
|
- name: k8s_info
|
|
cmd: kubectl get all --all-namespaces -o wide
|
|
- name: errors_info
|
|
cmd: journalctl -p err --no-pager
|
|
- name: etcd_info
|
|
cmd: etcdctl --peers={{ etcd_access_addresses | default("http://127.0.0.1:2379") }} cluster-health
|
|
- name: calico_info
|
|
cmd: "{{bin_dir}}/calicoctl node status"
|
|
- name: calico_workload_info
|
|
cmd: "{{bin_dir}}/calicoctl get workloadEndpoint -o wide"
|
|
- name: calico_pool_info
|
|
cmd: "{{bin_dir}}/calicoctl get ippool -o wide"
|
|
- name: weave_info
|
|
cmd: weave report
|
|
- name: weave_logs
|
|
cmd: "{{ docker_bin_dir }}/docker logs weave"
|
|
- name: kube_describe_all
|
|
cmd: kubectl describe all --all-namespaces
|
|
- name: kube_describe_nodes
|
|
cmd: kubectl describe nodes
|
|
- name: kubelet_logs
|
|
cmd: journalctl -u kubelet --no-pager
|
|
- name: kubedns_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kubedns -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}} kubedns; done"
|
|
- name: apiserver_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kube-apiserver -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}}; done"
|
|
- name: controller_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kube-controller -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}}; done"
|
|
- name: scheduler_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kube-scheduler -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}}; done"
|
|
- name: proxy_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kube-proxy -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}}; done"
|
|
- name: nginx_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=kube-nginx -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}}; done"
|
|
- name: flannel_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l app=flannel -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}} flannel-container; done"
|
|
- name: canal_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=canal-node -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}} flannel; done"
|
|
- name: calico_policy_logs
|
|
cmd: "for i in `kubectl get pods --all-namespaces -l k8s-app=calico-policy -o jsonpath={.items..metadata.name}`;
|
|
do kubectl logs ${i} --namespace {{system_namespace}} calico-policy-controller; done"
|
|
|
|
logs:
|
|
- /var/log/syslog
|
|
- /var/log/daemon.log
|
|
- /var/log/kern.log
|
|
- /var/log/dpkg.log
|
|
- /var/log/apt/history.log
|
|
- /var/log/yum.log
|
|
- /var/log/calico/bird/current
|
|
- /var/log/calico/bird6/current
|
|
- /var/log/calico/felix/current
|
|
- /var/log/calico/confd/current
|
|
|
|
environment:
|
|
ETCDCTL_CERT_FILE: "{{ etcd_cert_dir }}/node-{{ inventory_hostname }}.pem"
|
|
ETCDCTL_KEY_FILE: "{{ etcd_cert_dir }}/node-{{ inventory_hostname }}-key.pem"
|
|
|
|
tasks:
|
|
- set_fact:
|
|
etcd_access_addresses: |-
|
|
{% for item in groups['etcd'] -%}
|
|
https://{{ item }}:2379{% if not loop.last %},{% endif %}
|
|
{%- endfor %}
|
|
when: "'etcd' in groups"
|
|
|
|
- name: Storing commands output
|
|
shell: "{{ item.cmd }} 2>&1 | tee {{ item.name }}"
|
|
failed_when: false
|
|
with_items: "{{commands}}"
|
|
no_log: True
|
|
|
|
- name: Fetch results
|
|
fetch: src={{ item.name }} dest=/tmp/collect-info/commands
|
|
with_items: "{{commands}}"
|
|
failed_when: false
|
|
|
|
- name: Fetch logs
|
|
fetch: src={{ item }} dest=/tmp/collect-info/logs
|
|
with_items: "{{logs}}"
|
|
|
|
- name: Pack results and logs
|
|
local_action: raw GZIP=-9 tar --remove-files -cvzf {{dir|default(".")}}/logs.tar.gz -C /tmp collect-info
|
|
run_once: true
|
|
|
|
- name: Clean up collected command outputs
|
|
file: path={{ item.name }} state=absent
|
|
with_items: "{{commands}}"
|
|
|