Browse Source
containerd support (#4664)
containerd support (#4664)
* Add limited containerd support Containerd support for Ubuntu + Calico * Added CRI-O support for ubuntu * containerd support. * Reset containerd support. * fix lint. * implemented feedback * Change task name cri xx instead of cri-o in reset task and timeout condition. * set crictl to fixed version * Use docker-ce's container.io package for containerd. * Add check containerd is installable or not. * Avoid stop docker when use containerd and optimize retry for reset. * Add config.toml. * Fixed containerd for kubelet.env. * Merge PR #4629 * Remove unused ubuntu variable for containerd * Polish code for containerd and cri-o * Refactoring cri socket configuration. * Configurable conmon. * Remove unused crictl/runc download * Now crictl and runc is downloaded by common crictl.yml. * fixed yamllint error * Fixed brokenfiles by conflict. * Remove commented line in config.toml * Remove readded v1.12.x version * Fixed broken set_docker_image_facts * Fix yamllint errors. * Remove unused apt source * Fix crictl could not be installed * Add containerd config from skolekonov's PR #4601pull/4936/head
committed by
Kubernetes Prow Robot
37 changed files with 610 additions and 214 deletions
Split View
Diff Options
-
2inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml
-
12roles/container-engine/containerd/defaults/main.yml
-
24roles/container-engine/containerd/handlers/main.yml
-
26roles/container-engine/containerd/tasks/crictl.yml
-
50roles/container-engine/containerd/tasks/main.yml
-
40roles/container-engine/containerd/templates/config.toml.j2
-
4roles/container-engine/containerd/templates/crictl.yaml.j2
-
6roles/container-engine/cri-o/tasks/main.yaml
-
4roles/container-engine/cri-o/templates/crio.conf.j2
-
1roles/container-engine/cri-o/vars/clearlinux.yml
-
1roles/container-engine/cri-o/vars/fedora.yml
-
3roles/container-engine/cri-o/vars/redhat.yml
-
6roles/container-engine/cri-o/vars/ubuntu.yml
-
14roles/container-engine/meta/main.yml
-
36roles/download/defaults/main.yml
-
236roles/download/tasks/download_container.yml
-
42roles/download/tasks/download_prep.yml
-
19roles/download/tasks/main.yml
-
54roles/download/tasks/set_docker_image_facts.yml
-
12roles/download/templates/kubeadm-images.yaml.j2
-
6roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha2.j2
-
6roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1alpha3.j2
-
6roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta1.j2
-
6roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2
-
6roles/kubernetes/master/templates/kubeadm-config.v1alpha3.yaml.j2
-
6roles/kubernetes/master/templates/kubeadm-config.v1beta1.yaml.j2
-
6roles/kubernetes/master/templates/kubeadm-controlplane.v1beta1.yaml.j2
-
13roles/kubernetes/node/tasks/facts.yml
-
21roles/kubernetes/node/tasks/pre_upgrade.yml
-
4roles/kubernetes/node/templates/kubelet.env.j2
-
4roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
-
4roles/kubespray-defaults/defaults/main.yaml
-
12roles/network_plugin/calico/rr/tasks/main.yml
-
27roles/network_plugin/calico/rr/templates/calico-rr-containerd.service.j2
-
0roles/network_plugin/calico/rr/templates/calico-rr-docker.service.j2
-
22roles/network_plugin/cilium/templates/cilium-ds.yml.j2
-
83roles/reset/tasks/main.yml
@ -0,0 +1,12 @@ |
|||
--- |
|||
kubelet_cgroup_driver: systemd |
|||
|
|||
containerd_config: |
|||
grpc: |
|||
max_recv_message_size: 16777216 |
|||
max_send_message_size: 16777216 |
|||
debug: |
|||
level: "" |
|||
registries: |
|||
"docker.io": "https://registry-1.docker.io" |
|||
max_container_log_line_size: -1 |
@ -0,0 +1,24 @@ |
|||
--- |
|||
- name: restart containerd |
|||
command: /bin/true |
|||
notify: |
|||
- Containerd | reload containerd |
|||
- Containerd | pause while containerd restarts |
|||
- Containerd | wait for containerd |
|||
|
|||
- name: Containerd | reload containerd |
|||
service: |
|||
name: containerd |
|||
state: restarted |
|||
|
|||
- name: Containerd | pause while containerd restarts |
|||
pause: |
|||
seconds: 5 |
|||
prompt: "Waiting for containerd restart" |
|||
|
|||
- name: Containerd | wait for containerd |
|||
command: "{{ containerd_bin_dir }}/ctr images ls -q" |
|||
register: containerd_ready |
|||
retries: 10 |
|||
delay: 5 |
|||
until: containerd_ready.rc == 0 |
@ -0,0 +1,26 @@ |
|||
--- |
|||
- name: crictl | Download crictl |
|||
include_tasks: "roles/download/tasks/download_file.yml" |
|||
vars: |
|||
download: "{{ download_defaults | combine(downloads.crictl) }}" |
|||
|
|||
- name: Install crictl config |
|||
template: |
|||
src: ../templates/crictl.yaml.j2 |
|||
dest: /etc/crictl.yaml |
|||
owner: bin |
|||
mode: 0644 |
|||
|
|||
- name: Copy crictl binary from download dir |
|||
synchronize: |
|||
src: "{{ local_release_dir }}/crictl" |
|||
dest: "{{ bin_dir }}/crictl" |
|||
compress: no |
|||
perms: yes |
|||
owner: no |
|||
group: no |
|||
delegate_to: "{{ inventory_hostname }}" |
|||
|
|||
- name: Install crictl completion |
|||
shell: /usr/local/bin/crictl completion >/etc/bash_completion.d/crictl |
|||
ignore_errors: True |
@ -0,0 +1,50 @@ |
|||
--- |
|||
- name: Fail containerd setup if distribution is not supported |
|||
fail: |
|||
msg: "{{ ansible_distribution }} is not supported by containerd." |
|||
when: |
|||
- not ansible_distribution in ["CentOS","RedHat", "Ubuntu", "Debian"] |
|||
|
|||
- name: Install Docker |
|||
include_role: |
|||
name: container-engine/docker |
|||
|
|||
- name: Install config.toml |
|||
template: |
|||
src: config.toml.j2 |
|||
dest: /etc/containerd/config.toml |
|||
owner: bin |
|||
mode: 0644 |
|||
|
|||
- name: Stop and disabled Docker |
|||
systemd: |
|||
name: docker |
|||
state: stopped |
|||
enabled: no |
|||
|
|||
- name: Restart containerd |
|||
systemd: |
|||
name: containerd |
|||
state: restarted |
|||
|
|||
- name: Install crictl config |
|||
template: |
|||
src: crictl.yaml.j2 |
|||
dest: /etc/crictl.yaml |
|||
owner: bin |
|||
mode: 0644 |
|||
|
|||
- name: Install crictl completion |
|||
shell: /usr/local/bin/crictl completion >/etc/bash_completion.d/crictl |
|||
ignore_errors: True |
|||
when: ansible_distribution in ["CentOS","RedHat", "Ubuntu", "Debian"] |
|||
|
|||
- name: Enable containerd |
|||
systemd: |
|||
name: containerd.service |
|||
state: started |
|||
enabled: yes |
|||
daemon-reload: yes |
|||
|
|||
- name: flush handlers so we can wait for containerd to come up |
|||
meta: flush_handlers |
@ -0,0 +1,40 @@ |
|||
# Kubernetes doesn't use containerd restart manager. |
|||
disabled_plugins = ["restart"] |
|||
|
|||
[debug] |
|||
level = "{{ containerd_config.debug.level | default("") }}" |
|||
|
|||
{% if 'grpc' in containerd_config %} |
|||
[grpc] |
|||
{% for param, value in containerd_config.grpc.items() %} |
|||
{{ param }} = {{ value }} |
|||
{% endfor %} |
|||
{% endif %} |
|||
|
|||
[plugins.linux] |
|||
shim = "/usr/bin/containerd-shim" |
|||
runtime = "/usr/sbin/runc" |
|||
|
|||
[plugins.cri] |
|||
stream_server_address = "127.0.0.1" |
|||
max_container_log_line_size = {{ containerd_config.max_container_log_line_size }} |
|||
sandbox_image = "{{ pod_infra_image_repo }}:{{ pod_infra_image_tag }}" |
|||
|
|||
[plugins.cri.cni] |
|||
bin_dir = "/opt/cni/bin" |
|||
conf_dir = "/etc/cni/net.d" |
|||
conf_template = "" |
|||
|
|||
[plugins.cri.containerd.untrusted_workload_runtime] |
|||
runtime_type = "" |
|||
runtime_engine = "" |
|||
runtime_root = "" |
|||
|
|||
{% if 'registries' in containerd_config %} |
|||
[plugins.cri.registry] |
|||
[plugins.cri.registry.mirrors] |
|||
{% for registry, addr in containerd_config.registries.items() %} |
|||
[plugins.cri.registry.mirrors."{{ registry }}"] |
|||
endpoint = ["{{ addr }}"] |
|||
{% endfor %} |
|||
{% endif %} |
@ -0,0 +1,4 @@ |
|||
runtime-endpoint: unix://{{ cri_socket }} |
|||
image-endpoint: unix://{{ cri_socket }} |
|||
timeout: 30 |
|||
debug: false |
@ -0,0 +1,6 @@ |
|||
--- |
|||
crio_packages: |
|||
- "cri-o-{{ kube_version | regex_replace('^v(?P<major>\\d+).(?P<minor>\\d+).(?P<patch>\\d+)$', '\\g<major>.\\g<minor>') }}" |
|||
|
|||
crio_service: crio |
|||
crio_conmon: /usr/lib/crio/bin/conmon |
@ -1,129 +1,137 @@ |
|||
--- |
|||
- block: |
|||
- name: download_container | Set a few facts |
|||
import_tasks: set_container_facts.yml |
|||
run_once: "{{ download_run_once }}" |
|||
tags: |
|||
- name: container_download | Make download decision if pull is required by tag or sha256 |
|||
include_tasks: set_docker_image_facts.yml |
|||
when: |
|||
- download.enabled |
|||
- download.container |
|||
tags: |
|||
- facts |
|||
|
|||
- name: download_container | Determine if image is in cache |
|||
stat: |
|||
path: "{{ image_path_cached }}" |
|||
delegate_to: localhost |
|||
delegate_facts: no |
|||
register: cache_image |
|||
changed_when: false |
|||
become: false |
|||
when: |
|||
- download_force_cache |
|||
- block: |
|||
- name: download_container | Set a few facts |
|||
import_tasks: set_container_facts.yml |
|||
run_once: "{{ download_run_once }}" |
|||
tags: |
|||
- facts |
|||
|
|||
- name: download_container | Determine if image is in cache |
|||
stat: |
|||
path: "{{ image_path_cached }}" |
|||
delegate_to: localhost |
|||
delegate_facts: no |
|||
register: cache_image |
|||
changed_when: false |
|||
become: false |
|||
when: |
|||
- download_force_cache |
|||
|
|||
- name: download_container | Set fact indicating if image is in cache |
|||
set_fact: |
|||
image_is_cached: "{{ cache_image.stat.exists | default(false) }}" |
|||
tags: |
|||
- facts |
|||
when: |
|||
- download_force_cache |
|||
- name: download_container | Set fact indicating if image is in cache |
|||
set_fact: |
|||
image_is_cached: "{{ cache_image.stat.exists | default(false) }}" |
|||
tags: |
|||
- facts |
|||
when: |
|||
- download_force_cache |
|||
|
|||
- name: download_container | Upload image to node if it is cached |
|||
synchronize: |
|||
src: "{{ image_path_cached }}" |
|||
dest: "{{ image_path_final }}" |
|||
use_ssh_args: "{{ has_bastion | default(false) }}" |
|||
mode: push |
|||
delegate_facts: no |
|||
register: upload_image |
|||
failed_when: not upload_image |
|||
run_once: "{{ download_run_once }}" |
|||
until: upload_image is succeeded |
|||
retries: 4 |
|||
delay: "{{ retry_stagger | random + 3 }}" |
|||
when: |
|||
- download_force_cache |
|||
- image_is_cached |
|||
- not download_localhost |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
- name: download_container | Upload image to node if it is cached |
|||
synchronize: |
|||
src: "{{ image_path_cached }}" |
|||
dest: "{{ image_path_final }}" |
|||
use_ssh_args: "{{ has_bastion | default(false) }}" |
|||
mode: push |
|||
delegate_facts: no |
|||
register: upload_image |
|||
failed_when: not upload_image |
|||
run_once: "{{ download_run_once }}" |
|||
until: upload_image is succeeded |
|||
retries: 4 |
|||
delay: "{{ retry_stagger | random + 3 }}" |
|||
when: |
|||
- download_force_cache |
|||
- image_is_cached |
|||
- not download_localhost |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: download_container | Load image into docker |
|||
shell: "{{ docker_bin_dir }}/docker load < {{ image_path_cached if download_localhost else image_path_final }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
run_once: "{{ download_run_once }}" |
|||
register: container_load_status |
|||
failed_when: container_load_status | failed |
|||
become: "{{ user_can_become_root | default(false) or not (download_run_once and download_localhost) }}" |
|||
when: |
|||
- download_force_cache |
|||
- image_is_cached |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
- name: download_container | Load image into docker |
|||
shell: "{{ docker_bin_dir }}/docker load < {{ image_path_cached if download_localhost else image_path_final }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
run_once: "{{ download_run_once }}" |
|||
register: container_load_status |
|||
failed_when: container_load_status | failed |
|||
become: "{{ user_can_become_root | default(false) or not (download_run_once and download_localhost) }}" |
|||
when: |
|||
- download_force_cache |
|||
- image_is_cached |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: download_container | Prepare container download |
|||
import_tasks: check_pull_required.yml |
|||
run_once: "{{ download_run_once }}" |
|||
when: |
|||
- not download_always_pull |
|||
- name: download_container | Prepare container download |
|||
import_tasks: check_pull_required.yml |
|||
run_once: "{{ download_run_once }}" |
|||
when: |
|||
- not download_always_pull |
|||
|
|||
- debug: |
|||
msg: "XXX Pull required is: {{ pull_required }}" |
|||
- debug: |
|||
msg: "XXX Pull required is: {{ pull_required }}" |
|||
|
|||
# NOTE: Pre-loading docker images will not prevent 'docker pull' from re-downloading the layers in that image |
|||
# if a pull is forced. This is a known issue with docker. See https://github.com/moby/moby/issues/23684 |
|||
- name: download_container | Download image if required |
|||
command: "{{ docker_bin_dir }}/docker pull {{ image_reponame }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
delegate_facts: yes |
|||
run_once: "{{ download_run_once }}" |
|||
register: pull_task_result |
|||
until: pull_task_result is succeeded |
|||
delay: "{{ retry_stagger | random + 3 }}" |
|||
retries: 4 |
|||
become: "{{ user_can_become_root | default(false) or not download_localhost }}" |
|||
when: |
|||
- pull_required | default(download_always_pull) |
|||
# NOTE: Pre-loading docker images will not prevent 'docker pull' from re-downloading the layers in that image |
|||
# if a pull is forced. This is a known issue with docker. See https://github.com/moby/moby/issues/23684 |
|||
- name: download_container | Download image if required |
|||
command: "{{ image_pull_command }} {{ image_reponame }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
delegate_facts: yes |
|||
run_once: "{{ download_run_once }}" |
|||
register: pull_task_result |
|||
until: pull_task_result is succeeded |
|||
delay: "{{ retry_stagger | random + 3 }}" |
|||
retries: 4 |
|||
become: "{{ user_can_become_root | default(false) or not download_localhost }}" |
|||
when: |
|||
- pull_required | default(download_always_pull) |
|||
|
|||
# NOTE: image_changed is only valid if a pull is was needed or forced. |
|||
- name: download_container | Check if image changed |
|||
set_fact: |
|||
image_changed: "{{ true if pull_task_result.stdout is defined and not 'up to date' in pull_task_result.stdout else false }}" |
|||
run_once: true |
|||
when: |
|||
- download_force_cache |
|||
tags: |
|||
- facts |
|||
# NOTE: image_changed is only valid if a pull is was needed or forced. |
|||
- name: download_container | Check if image changed |
|||
set_fact: |
|||
image_changed: "{{ true if pull_task_result.stdout is defined and not 'up to date' in pull_task_result.stdout else false }}" |
|||
run_once: true |
|||
when: |
|||
- download_force_cache |
|||
tags: |
|||
- facts |
|||
|
|||
- name: download_container | Save and compress image |
|||
shell: "{{ docker_bin_dir }}/docker save {{ image_reponame }} | gzip -{{ download_compress }} > {{ image_path_cached if download_localhost else image_path_final }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
delegate_facts: no |
|||
register: container_save_status |
|||
failed_when: container_save_status.stderr |
|||
run_once: true |
|||
become: "{{ user_can_become_root | default(false) or not download_localhost }}" |
|||
when: |
|||
- download_force_cache |
|||
- not image_is_cached or (image_changed | default(true)) |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
- name: download_container | Save and compress image |
|||
shell: "{{ docker_bin_dir }}/docker save {{ image_reponame }} | gzip -{{ download_compress }} > {{ image_path_cached if download_localhost else image_path_final }}" |
|||
delegate_to: "{{ download_delegate if download_run_once or inventory_hostname }}" |
|||
delegate_facts: no |
|||
register: container_save_status |
|||
failed_when: container_save_status.stderr |
|||
run_once: true |
|||
become: "{{ user_can_become_root | default(false) or not download_localhost }}" |
|||
when: |
|||
- download_force_cache |
|||
- not image_is_cached or (image_changed | default(true)) |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: download_container | Copy image to ansible host cache |
|||
synchronize: |
|||
src: "{{ image_path_final }}" |
|||
dest: "{{ image_path_cached }}" |
|||
use_ssh_args: "{{ has_bastion | default(false) }}" |
|||
mode: pull |
|||
delegate_facts: no |
|||
run_once: true |
|||
when: |
|||
- download_force_cache |
|||
- not download_localhost |
|||
- not image_is_cached or (image_changed | default(true)) |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
- name: download_container | Copy image to ansible host cache |
|||
synchronize: |
|||
src: "{{ image_path_final }}" |
|||
dest: "{{ image_path_cached }}" |
|||
use_ssh_args: "{{ has_bastion | default(false) }}" |
|||
mode: pull |
|||
delegate_facts: no |
|||
run_once: true |
|||
when: |
|||
- download_force_cache |
|||
- not download_localhost |
|||
- not image_is_cached or (image_changed | default(true)) |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: download_container | Remove container image from cache |
|||
file: |
|||
state: absent |
|||
path: "{{ image_path_final }}" |
|||
when: |
|||
- not download_keep_remote_cache |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
- name: download_container | Remove container image from cache |
|||
file: |
|||
state: absent |
|||
path: "{{ image_path_final }}" |
|||
when: |
|||
- not download_keep_remote_cache |
|||
- ansible_os_family not in ["CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
tags: |
|||
- download |
|||
- download |
@ -0,0 +1,42 @@ |
|||
--- |
|||
# Use the same format for Containerd images as for Docker images |
|||
# ctr doesn't have inspect command |
|||
|
|||
- name: Set image info command for containerd |
|||
set_fact: |
|||
image_info_command: "{{ containerd_bin_dir }}/ctr images ls | tail -n +2 | awk -F '[ :]+' '{print $1\":\"$2\",\"$1\":\"$4\"@\"$5}' | tr '\n' ','" |
|||
when: container_manager == 'containerd' |
|||
|
|||
- name: Register docker images info |
|||
shell: "{{ image_info_command }}" |
|||
no_log: true |
|||
register: docker_images |
|||
failed_when: false |
|||
changed_when: false |
|||
check_mode: no |
|||
when: download_container |
|||
|
|||
- name: container_download | Create dest directory for saved/loaded container images |
|||
file: |
|||
path: "{{ local_release_dir }}/containers" |
|||
state: directory |
|||
recurse: yes |
|||
mode: 0755 |
|||
owner: "{{ ansible_ssh_user|default(ansible_user_id) }}" |
|||
when: download_container |
|||
|
|||
- name: container_download | create local directory for saved/loaded container images |
|||
file: |
|||
path: "{{ local_release_dir }}/containers" |
|||
state: directory |
|||
recurse: yes |
|||
delegate_to: localhost |
|||
delegate_facts: false |
|||
become: false |
|||
run_once: true |
|||
when: |
|||
- download_run_once |
|||
- download_delegate == 'localhost' |
|||
- download_container |
|||
tags: |
|||
- localhost |
@ -0,0 +1,54 @@ |
|||
--- |
|||
- name: Set if containers should be pulled by digest |
|||
set_fact: |
|||
pull_by_digest: >- |
|||
{%- if download.sha256 is defined and download.sha256 -%}true{%- else -%}false{%- endif -%} |
|||
|
|||
- name: Set pull_args |
|||
set_fact: |
|||
pull_args: >- |
|||
{%- if pull_by_digest %}{{ download.repo }}@sha256:{{ download.sha256 }}{%- else -%}{{ download.repo }}:{{ download.tag }}{%- endif -%} |
|||
|
|||
- name: Set image pull command for containerd |
|||
set_fact: |
|||
image_pull_command: "{{ bin_dir }}/crictl pull" |
|||
when: container_manager in ['crio' ,'containerd'] |
|||
|
|||
- name: Register docker images info |
|||
shell: "{{ image_info_command }}" |
|||
no_log: true |
|||
register: docker_images |
|||
failed_when: false |
|||
changed_when: false |
|||
check_mode: no |
|||
when: |
|||
- not download_always_pull |
|||
- group_names | intersect(download.groups) | length |
|||
|
|||
- name: Set if pull is required per container |
|||
set_fact: |
|||
pull_required: >- |
|||
{%- if pull_args in docker_images.stdout.split(',') %}false{%- else -%}true{%- endif -%} |
|||
when: |
|||
- not download_always_pull |
|||
- group_names | intersect(download.groups) | length |
|||
|
|||
- name: Does any host require container pull? |
|||
vars: |
|||
hosts_pull_required: "{{ hostvars.values() | map(attribute='pull_required') | select('defined') | list }}" |
|||
set_fact: |
|||
any_pull_required: "{{ True in hosts_pull_required }}" |
|||
run_once: true |
|||
changed_when: false |
|||
when: not download_always_pull |
|||
|
|||
- name: Check the local digest sha256 corresponds to the given image tag |
|||
assert: |
|||
that: "{{ download.repo }}:{{ download.tag }} in docker_images.stdout.split(',')" |
|||
when: |
|||
- group_names | intersect(download.groups) | length |
|||
- not download_always_pull |
|||
- not pull_required |
|||
- pull_by_digest |
|||
tags: |
|||
- asserts |
@ -0,0 +1,27 @@ |
|||
[Unit] |
|||
Description=calico-rr |
|||
After=containerd.service |
|||
Requires=containerd.service |
|||
|
|||
[Service] |
|||
EnvironmentFile=/etc/calico/calico-rr.env |
|||
ExecStartPre=-{{ containerd_bin_dir }}/ctr t delete -f calico-rr |
|||
ExecStart={{ containerd_bin_dir }}/ctr run --net-host --privileged \ |
|||
--env IP=${IP} \ |
|||
--env IP6=${IP6} \ |
|||
--env ETCD_ENDPOINTS=${ETCD_ENDPOINTS} \ |
|||
--env ETCD_CA_CERT_FILE=${ETCD_CA_CERT_FILE} \ |
|||
--env ETCD_CERT_FILE=${ETCD_CERT_FILE} \ |
|||
--env ETCD_KEY_FILE=${ETCD_KEY_FILE} \ |
|||
--mount type=bind,src=/var/log/calico-rr,dst=/var/log/calico,options=rbind:rw \ |
|||
--mount type=bind,src={{ calico_cert_dir }},dst={{ calico_cert_dir }},options=rbind:ro \ |
|||
{{ calico_rr_image_repo }}:{{ calico_rr_image_tag }} \ |
|||
calico-rr |
|||
|
|||
Restart=always |
|||
RestartSec=10s |
|||
|
|||
ExecStop=-{{ containerd_bin_dir }}/ctr c rm calico-rr |
|||
|
|||
[Install] |
|||
WantedBy=multi-user.target |
Write
Preview
Loading…
Cancel
Save