diff --git a/cluster.yml b/cluster.yml index ce169a1615d4839f4a860d57c446784c4e30646e..553261063791aaaa044666fff3350c028488ba04 100644 --- a/cluster.yml +++ b/cluster.yml @@ -28,7 +28,7 @@ roles: - { role: kubernetes/preinstall, tags: preinstall } - { role: docker, tags: docker } - - { role: rkt, tags: rkt } + - { role: rkt, tags: rkt, when: "'rkt' in [ etcd_deployment_type, kubelet_deployment_type ]" } - hosts: etcd:!k8s-cluster any_errors_fatal: true diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml index a3598e9db30f1367a1f3e3de7bbfa51f95c125b3..04e20922eeddc8060f3dd302edf2ca10899c769e 100644 --- a/inventory/group_vars/all.yml +++ b/inventory/group_vars/all.yml @@ -199,5 +199,5 @@ kpm_packages: [] # - name: kube-system/grafana rkt_version: 1.21.0 -etcd_deployment_type: rkt +etcd_deployment_type: docker kubelet_deployment_type: docker diff --git a/roles/etcd/tasks/install.yml b/roles/etcd/tasks/install_docker.yml similarity index 74% rename from roles/etcd/tasks/install.yml rename to roles/etcd/tasks/install_docker.yml index 0ed3f41542507baed6091c6d261aa5dd794f5352..f87caeb4c2fb306ac1cc89d0e092d72b9f112358 100644 --- a/roles/etcd/tasks/install.yml +++ b/roles/etcd/tasks/install_docker.yml @@ -1,17 +1,6 @@ --- -- name: Install | Copy etcd binary from downloaddir - command: rsync -piu "{{ etcd_bin_dir }}/etcd" "{{ bin_dir }}/etcd" - when: etcd_deployment_type == "host" - register: etcd_copy - changed_when: false - -- name: Install | Copy etcdctl binary from downloaddir - command: rsync -piu "{{ etcd_bin_dir }}/etcdctl" "{{ bin_dir }}/etcdctl" - when: etcd_deployment_type == "host" - changed_when: false - #Plan A: no docker-py deps -- name: Install | Copy etcdctl binary from container +- name: Install | Copy etcdctl binary from docker container command: sh -c "{{ docker_bin_dir }}/docker rm -f etcdctl-binarycopy; {{ docker_bin_dir }}/docker create --name etcdctl-binarycopy {{ etcd_image_repo }}:{{ etcd_image_tag }} && {{ docker_bin_dir }}/docker cp etcdctl-binarycopy:{{ etcd_container_bin_dir }}etcdctl {{ bin_dir }}/etcdctl && diff --git a/roles/etcd/tasks/install_host.yml b/roles/etcd/tasks/install_host.yml new file mode 100644 index 0000000000000000000000000000000000000000..6f588a2f04efe1d5f05f0563d00b908e1fe3446f --- /dev/null +++ b/roles/etcd/tasks/install_host.yml @@ -0,0 +1,9 @@ +--- +- name: Install | Copy etcd binary from downloaddir + command: rsync -piu "{{ etcd_bin_dir }}/etcd" "{{ bin_dir }}/etcd" + register: etcd_copy + changed_when: false + +- name: Install | Copy etcdctl binary from downloaddir + command: rsync -piu "{{ etcd_bin_dir }}/etcdctl" "{{ bin_dir }}/etcdctl" + changed_when: false diff --git a/roles/etcd/tasks/install_rkt.yml b/roles/etcd/tasks/install_rkt.yml new file mode 100644 index 0000000000000000000000000000000000000000..85f8753838cd8518b9b1af773db36829b549ea43 --- /dev/null +++ b/roles/etcd/tasks/install_rkt.yml @@ -0,0 +1,26 @@ +--- +- name: Trust etcd container + command: >- + /usr/bin/rkt trust + --skip-fingerprint-review + --root + https://quay.io/aci-signing-key + register: etcd_rkt_trust_result + until: etcd_rkt_trust_result.rc == 0 + retries: 4 + delay: "{{ retry_stagger | random + 3 }}" + changed_when: false + +- name: Install | Copy etcdctl binary from rkt container + command: >- + /usr/bin/rkt run + --volume=bin-dir,kind=host,source={{ bin_dir}},readOnly=false + --mount=volume=bin-dir,target=/host/bin + {{ etcd_image_repo }}:{{ etcd_image_tag }} + --name=etcdctl-binarycopy + --exec=/bin/cp -- {{ etcd_container_bin_dir }}/etcdctl /host/bin/etcdctl + register: etcd_task_result + until: etcd_task_result.rc == 0 + retries: 4 + delay: "{{ retry_stagger | random + 3 }}" + changed_when: false diff --git a/roles/etcd/tasks/main.yml b/roles/etcd/tasks/main.yml index d6320619c9b95f5e944904af1c86c675b1a14a17..cdd634517b0979f44ba0db1ce3969d6271407ac2 100644 --- a/roles/etcd/tasks/main.yml +++ b/roles/etcd/tasks/main.yml @@ -5,7 +5,7 @@ tags: [etcd-secrets, facts] - include: gen_certs.yml tags: etcd-secrets -- include: install.yml +- include: "install_{{ etcd_deployment_type }}.yml" when: is_etcd_master tags: upgrade - include: set_cluster_health.yml diff --git a/roles/etcd/templates/etcd-rkt.service.j2 b/roles/etcd/templates/etcd-rkt.service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..002f6dbe6444e7ae8e67b2b6d9aaf8d8372c80f9 --- /dev/null +++ b/roles/etcd/templates/etcd-rkt.service.j2 @@ -0,0 +1,29 @@ +[Unit] +Description=etcd rkt wrapper +Documentation=https://github.com/coreos/etcd +Wants=network.target + +[Service] +Restart=on-failure +RestartSec=10s +TimeoutStartSec=0 +LimitNOFILE=40000 + +ExecStart={{ rkt_bin_dir | default("/usr/bin") }}/rkt run \ +--uuid-file-save=/var/run/etcd.uuid \ +--volume=etc-ssl-certs,kind=host,source=/etc/ssl/certs,readOnly=true \ +--mount=volume=etc-ssl-certs,target=/etc/ssl/certs \ +--volume=etcd-cert-dir,kind=host,source={{ etcd_cert_dir }},readOnly=true \ +--mount=volume=etcd-cert-dir,target={{ etcd_cert_dir }} \ +--volume=var-lib-etcd,kind=host,source=/var/lib/etcd,readOnly=false \ +--mount=volume=var-lib-etcd,target=/var/lib/etcd \ +--set-env-file=/etc/etcd.env \ +--stage1-from-dir=stage1-fly.aci \ +{{ etcd_image_repo }}:{{ etcd_image_tag }} \ +--name={{ etcd_member_name | default("etcd") }} + +ExecStartPre=-/usr/bin/rkt rm --uuid-file=/var/run/etcd.uuid +ExecStop=-/usr/bin/rkt stop --uuid-file=/var/run/etcd.uuid + +[Install] +WantedBy=multi-user.target diff --git a/roles/rkt/tasks/install.yml b/roles/rkt/tasks/install.yml index 0317c7a7e7e559c089f965a62a497b4e02cd3e5a..41823bf54b4971a50926261f9872a86a1c8fe816 100644 --- a/roles/rkt/tasks/install.yml +++ b/roles/rkt/tasks/install.yml @@ -14,12 +14,6 @@ skip: true tags: facts -#- name: download rkt pkg -# get_url: -# url: "{{ rkt_download_url }}/{{rkt_pkg_name}}" -# dest: "{{ local_release_dir }}" -# when: (ansible_os_family != "CoreOS") and "rkt" in [ etcd_deployment_type, kubelet_deployment_type ] - - name: install rkt pkg on ubuntu apt: deb: "{{ rkt_download_url }}/{{ rkt_pkg_name }}" @@ -28,9 +22,9 @@ until: rkt_task_result|success retries: 4 delay: "{{ retry_stagger | random + 3 }}" - when: ansible_os_family == "Debian" and "rkt" in [ etcd_deployment_type, kubelet_deployment_type ] + when: ansible_os_family == "Debian" -- name: "install rkt pkg on centos" +- name: install rkt pkg on centos yum: pkg: "{{ rkt_download_url }}/{{ rkt_pkg_name }}" state: present @@ -38,4 +32,4 @@ until: rkt_task_result|success retries: 4 delay: "{{ retry_stagger | random + 3 }}" - when: ansible_os_family == "RedHat" and "rkt" in [ etcd_deployment_type, kubelet_deployment_type ] + when: ansible_os_family == "RedHat"