diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 0000000..2cd8c9f --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,4 @@ +skip_list: + - 'yaml' + - 'risky-shell-pipe' + - 'role-name' diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..96b4938 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms +--- +github: geerlingguy +patreon: geerlingguy diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..c7ff127 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,56 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 90 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 30 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - pinned + - security + - planned + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: false + +# Label to use when marking as stale +staleLabel: stale + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +pulls: + markComment: |- + This pull request has been marked 'stale' due to lack of recent activity. If there is no further activity, the PR will be closed in another 30 days. Thank you for your contribution! + + Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark pull requests as stale. + + unmarkComment: >- + This pull request is no longer marked for closure. + + closeComment: >- + This pull request has been closed due to inactivity. If you feel this is in error, please reopen the pull request or file a new PR with the relevant details. + +issues: + markComment: |- + This issue has been marked 'stale' due to lack of recent activity. If there is no further activity, the issue will be closed in another 30 days. Thank you for your contribution! + + Please read [this blog post](https://www.jeffgeerling.com/blog/2020/enabling-stale-issue-bot-on-my-github-repositories) to see the reasons why I mark issues as stale. + + unmarkComment: >- + This issue is no longer marked for closure. + + closeComment: >- + This issue has been closed due to inactivity. If you feel this is in error, please reopen the issue or file a new issue with the relevant details. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4f05d17 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,76 @@ +--- +name: CI +'on': + pull_request: + push: + branches: + - master + schedule: + - cron: "0 4 * * 3" + +defaults: + run: + working-directory: 'geerlingguy.kubernetes' + +jobs: + + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - name: Check out the codebase. + uses: actions/checkout@v2 + with: + path: 'geerlingguy.kubernetes' + + - name: Set up Python 3. + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Install test dependencies. + run: pip3 install yamllint + + - name: Lint code. + run: | + yamllint . + + molecule: + name: Molecule + runs-on: ubuntu-latest + strategy: + matrix: + include: + - distro: centos8 + playbook: converge.yml + - distro: centos7 + playbook: converge.yml + - distro: ubuntu1804 + playbook: converge.yml + - distro: debian10 + playbook: converge.yml + + - distro: debian10 + playbook: calico.yml + + steps: + - name: Check out the codebase. + uses: actions/checkout@v2 + with: + path: 'geerlingguy.kubernetes' + + - name: Set up Python 3. + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Install test dependencies. + run: pip3 install ansible molecule[docker] docker + + - name: Run Molecule tests. + run: molecule test + env: + PY_COLORS: '1' + ANSIBLE_FORCE_COLOR: '1' + MOLECULE_DISTRO: ${{ matrix.distro }} + MOLECULE_PLAYBOOK: ${{ matrix.playbook }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..df3f1f0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,38 @@ +--- +# This workflow requires a GALAXY_API_KEY secret present in the GitHub +# repository or organization. +# +# See: https://github.com/marketplace/actions/publish-ansible-role-to-galaxy +# See: https://github.com/ansible/galaxy/issues/46 + +name: Release +'on': + push: + tags: + - '*' + +defaults: + run: + working-directory: 'geerlingguy.kubernetes' + +jobs: + + release: + name: Release + runs-on: ubuntu-latest + steps: + - name: Check out the codebase. + uses: actions/checkout@v2 + with: + path: 'geerlingguy.kubernetes' + + - name: Set up Python 3. + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Install Ansible. + run: pip3 install ansible-base + + - name: Trigger a new import on Galaxy. + run: ansible-galaxy role import --api-key ${{ secrets.GALAXY_API_KEY }} $(echo ${{ github.repository }} | cut -d/ -f1) $(echo ${{ github.repository }} | cut -d/ -f2) diff --git a/.gitignore b/.gitignore index f56f5b5..8840c8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.retry */__pycache__ *.pyc +.cache + diff --git a/.travis.yml b/.travis.yml index e408915..61c6b8e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,13 +6,21 @@ env: global: - ROLE_NAME: kubernetes matrix: + - MOLECULE_DISTRO: centos8 - MOLECULE_DISTRO: centos7 - MOLECULE_DISTRO: ubuntu1804 - - MOLECULE_DISTRO: debian9 + - MOLECULE_DISTRO: debian10 + + - MOLECULE_DISTRO: debian10 + MOLECULE_PLAYBOOK: playbook-calico.yml + +before_install: + # Upgrade Docker to work with docker-py. + - curl https://gist.githubusercontent.com/geerlingguy/ce883ad4aec6a5f1187ef93bd338511e/raw/36612d28981d92863f839c5aefe5b7dd7193d6c6/travis-ci-docker-upgrade.sh | sudo bash install: # Install test dependencies. - - pip install molecule docker + - pip install molecule[docker] yamllint ansible-lint docker before_script: # Use actual Ansible Galaxy role name for the project directory. diff --git a/molecule/default/yaml-lint.yml b/.yamllint similarity index 61% rename from molecule/default/yaml-lint.yml rename to .yamllint index c9aab08..3a49cd8 100644 --- a/molecule/default/yaml-lint.yml +++ b/.yamllint @@ -1,6 +1,11 @@ --- extends: default + rules: line-length: max: 150 level: warning + +ignore: | + .github/stale.yml + .travis.yml diff --git a/README.md b/README.md index c6d1c5f..4d540c4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Ansible Role: Kubernetes -[![Build Status](https://travis-ci.org/geerlingguy/ansible-role-kubernetes.svg?branch=master)](https://travis-ci.org/geerlingguy/ansible-role-kubernetes) +[![CI](https://github.com/geerlingguy/ansible-role-kubernetes/workflows/CI/badge.svg?event=push)](https://github.com/geerlingguy/ansible-role-kubernetes/actions?query=workflow%3ACI) An Ansible Role that installs [Kubernetes](https://kubernetes.io) on Linux. @@ -24,8 +24,8 @@ Available variables are listed below, along with default values (see `defaults/m Kubernetes packages to be installed on the server. You can either provide a list of package names, or set `name` and `state` to have more control over whether the package is `present`, `absent`, `latest`, etc. - kubernetes_version: '1.13' - kubernetes_version_rhel_package: '1.13.1' + kubernetes_version: '1.17' + kubernetes_version_rhel_package: '1.17.2' The minor version of Kubernetes to install. The plain `kubernetes_version` is used to pin an apt package version on Debian, and as the Kubernetes version passed into the `kubeadm init` command (see `kubernetes_version_kubeadm`). The `kubernetes_version_rhel_package` variable must be a specific Kubernetes release, and is used to pin the version on Red Hat / CentOS servers. @@ -42,6 +42,10 @@ Extra args to pass to `kubelet` during startup. E.g. to allow `kubelet` to start Extra args to pass to `kubeadm init` during K8s control plane initialization. E.g. to specify extra Subject Alternative Names for API server certificate, set this to: `"--apiserver-cert-extra-sans my-custom.host"` + kubernetes_join_command_extra_opts: "" + +Extra args to pass to the generated `kubeadm join` command during K8s node initialization. E.g. to ignore certain preflight errors like swap being enabled, set this to: `--ignore-preflight-errors=Swap` + kubernetes_allow_pods_on_master: true Whether to remove the taint that denies pods from being deployed to the Kubernetes master. If you have a single-node cluster, this should definitely be `True`. Otherwise, set to `False` if you want a dedicated Kubernetes master which doesn't run any other pods. @@ -51,12 +55,26 @@ Whether to remove the taint that denies pods from being deployed to the Kubernet Whether to enable the Kubernetes web dashboard UI (only accessible on the master itself, or proxied), and the file containing the web dashboard UI manifest. - kubernetes_pod_network_cidr: '10.244.0.0/16' + kubernetes_pod_network: + # Flannel CNI. + cni: 'flannel' + cidr: '10.244.0.0/16' + # + # Calico CNI. + # cni: 'calico' + # cidr: '192.168.0.0/16' + # + # Weave CNI. + # cni: 'weave' + # cidr: '192.168.0.0/16' + +This role currently supports `flannel` (default), `calico` or `weave` for cluster pod networking. Choose only one for your cluster; converting between them is not done automatically and could result in broken networking; if you need to switch from one to another, it should be done outside of this role. + kubernetes_apiserver_advertise_address: '' kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}' kubernetes_ignore_preflight_errors: 'all' -Options passed to `kubeadm init` when initializing the Kubernetes master. The `apiserver_advertise_address` defaults to `ansible_default_ipv4.address` if it's left empty. +Options passed to `kubeadm init` when initializing the Kubernetes master. The `kubernetes_apiserver_advertise_address` defaults to `ansible_default_ipv4.address` if it's left empty. kubernetes_apt_release_channel: main kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}" @@ -65,8 +83,12 @@ Options passed to `kubeadm init` when initializing the Kubernetes master. The `a Apt repository options for Kubernetes installation. kubernetes_yum_arch: x86_64 + kubernetes_yum_base_url: "https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }}" + kubernetes_yum_gpg_key: + - https://packages.cloud.google.com/yum/doc/yum-key.gpg + - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg -Yum repository options for Kubernetes installation. +Yum repository options for Kubernetes installation. You can change `kubernete_yum_gpg_key` to a different url if you are behind a firewall or provide a trustworthy mirror. Usually in combination with changing `kubernetes_yum_base_url` as well. kubernetes_flannel_manifest_file_rbac: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml @@ -85,7 +107,7 @@ None. - hosts: all vars: - kubernetes_allow_pods_on_master: True + kubernetes_allow_pods_on_master: true roles: - geerlingguy.docker @@ -112,7 +134,7 @@ Playbook: - hosts: all vars: - kubernetes_allow_pods_on_master: True + kubernetes_allow_pods_on_master: true roles: - geerlingguy.docker diff --git a/defaults/main.yml b/defaults/main.yml index 5745080..67816a9 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,19 +9,27 @@ kubernetes_packages: - name: kubernetes-cni state: present -kubernetes_version: '1.13' -kubernetes_version_rhel_package: '1.13.1' +kubernetes_version: '1.19' +kubernetes_version_rhel_package: '1.19.0' kubernetes_role: master kubernetes_kubelet_extra_args: "" kubernetes_kubeadm_init_extra_opts: "" +kubernetes_join_command_extra_opts: "" kubernetes_allow_pods_on_master: true kubernetes_enable_web_ui: true -kubernetes_web_ui_manifest_file: https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml +kubernetes_web_ui_manifest_file: https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml + +kubernetes_pod_network: + # Flannel CNI. + cni: 'flannel' + cidr: '10.244.0.0/16' + # Calico CNI. + # cni: 'calico' + # cidr: '192.168.0.0/16' -kubernetes_pod_network_cidr: '10.244.0.0/16' kubernetes_apiserver_advertise_address: '' kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}' kubernetes_ignore_preflight_errors: 'all' @@ -31,8 +39,15 @@ kubernetes_apt_release_channel: main kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}" kubernetes_apt_ignore_key_error: false -kubernetes_yum_arch: x86_64 +kubernetes_yum_arch: '$basearch' +kubernetes_yum_base_url: "https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }}" +kubernetes_yum_gpg_key: + - https://packages.cloud.google.com/yum/doc/yum-key.gpg + - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg # Flannel config files. kubernetes_flannel_manifest_file_rbac: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml + +# Calico config files +kubernetes_calico_manifest_file: https://docs.projectcalico.org/v3.10/manifests/calico.yaml diff --git a/meta/main.yml b/meta/main.yml index 992eac3..f7a195c 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -2,6 +2,7 @@ dependencies: [] galaxy_info: + role_name: kubernetes author: geerlingguy description: Kubernetes for Linux. company: "Midwestern Mac, LLC" @@ -11,13 +12,16 @@ galaxy_info: - name: EL versions: - 7 + - 8 - name: Debian versions: - stretch + - buster - name: Ubuntu versions: - xenial - bionic + - focal galaxy_tags: - system - containers diff --git a/molecule/default/playbook.yml b/molecule/default/calico.yml similarity index 80% rename from molecule/default/playbook.yml rename to molecule/default/calico.yml index 19ae391..2e2258e 100644 --- a/molecule/default/playbook.yml +++ b/molecule/default/calico.yml @@ -4,8 +4,12 @@ become: true vars: + kubernetes_pod_network: + cni: 'calico' + cidr: '192.168.0.0/16' + # Allow swap in test environments (hard to control in some Docker envs). - kubernetes_kubelet_extra_args: "--fail-swap-on=false" + kubernetes_kubelet_extra_args: "--fail-swap-on=false --cgroup-driver=cgroupfs" docker_install_compose: false pre_tasks: @@ -24,11 +28,6 @@ - name: Gather facts. action: setup - - name: Use cgroupfs cgroup driver instead of systemd (RedHat). - set_fact: - kubernetes_kubelet_extra_args: '"--fail-swap-on=false --cgroup-driver=cgroupfs"' - when: ansible_os_family == 'RedHat' - roles: - role: geerlingguy.docker - role: geerlingguy.kubernetes diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml new file mode 100644 index 0000000..f93c7d7 --- /dev/null +++ b/molecule/default/converge.yml @@ -0,0 +1,46 @@ +--- +- name: Converge + hosts: all + become: true + + vars: + # Allow swap in test environments (hard to control in some Docker envs). + kubernetes_kubelet_extra_args: "--fail-swap-on=false --cgroup-driver=cgroupfs" + docker_install_compose: false + + pre_tasks: + - name: Update apt cache. + apt: update_cache=true cache_valid_time=600 + when: ansible_os_family == 'Debian' + + - name: Ensure test dependencies are installed (RedHat). + package: name=iproute state=present + when: ansible_os_family == 'RedHat' + + - name: Ensure test dependencies are installed (Debian). + package: name=iproute2 state=present + when: ansible_os_family == 'Debian' + + - name: Gather facts. + action: setup + + roles: + - role: geerlingguy.docker + - role: geerlingguy.kubernetes + + post_tasks: + - name: Get cluster info. + command: kubectl cluster-info + changed_when: false + register: kubernetes_info + + - name: Print cluster info. + debug: var=kubernetes_info.stdout + + - name: Get all running pods. + command: kubectl get pods --all-namespaces + changed_when: false + register: kubernetes_pods + + - name: Print list of running pods. + debug: var=kubernetes_pods.stdout diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index b6989c4..46f4cc6 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -3,10 +3,6 @@ dependency: name: galaxy driver: name: docker -lint: - name: yamllint - options: - config-file: molecule/default/yaml-lint.yml platforms: - name: instance image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest" @@ -18,13 +14,5 @@ platforms: pre_build_image: true provisioner: name: ansible - lint: - name: ansible-lint playbooks: - converge: ${MOLECULE_PLAYBOOK:-playbook.yml} -scenario: - name: default -verifier: - name: testinfra - lint: - name: flake8 + converge: ${MOLECULE_PLAYBOOK:-converge.yml} diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py deleted file mode 100644 index eedd64a..0000000 --- a/molecule/default/tests/test_default.py +++ /dev/null @@ -1,14 +0,0 @@ -import os - -import testinfra.utils.ansible_runner - -testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( - os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') - - -def test_hosts_file(host): - f = host.file('/etc/hosts') - - assert f.exists - assert f.user == 'root' - assert f.group == 'root' diff --git a/tasks/kubelet-setup.yml b/tasks/kubelet-setup.yml index 939046e..be6f57e 100644 --- a/tasks/kubelet-setup.yml +++ b/tasks/kubelet-setup.yml @@ -15,7 +15,7 @@ set_fact: kubelet_args_path: '/etc/systemd/system/kubelet.service.d/10-kubeadm.conf' kubelet_args_line: "{{ 'Environment=\"KUBELET_EXTRA_ARGS=' + kubernetes_kubelet_extra_args + '\"' }}" - kubelet_args_regexp: '^Environment=' + kubelet_args_regexp: '^Environment="KUBELET_EXTRA_ARGS=' when: not kubelet_environment_file.stat.exists - name: Configure KUBELET_EXTRA_ARGS. @@ -24,6 +24,7 @@ line: '{{ kubelet_args_line }}' regexp: '{{ kubelet_args_regexp }}' state: present + mode: 0644 register: kubelet_config_file - name: Reload systemd unit if args were changed. diff --git a/tasks/main.yml b/tasks/main.yml index fe6d999..1227585 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -18,6 +18,8 @@ notify: restart kubelet with_items: "{{ kubernetes_packages }}" +- include_tasks: sysctl-setup.yml + - include_tasks: kubelet-setup.yml - name: Ensure kubelet is started and enabled at boot. @@ -44,7 +46,9 @@ - name: Set the kubeadm join command globally. set_fact: - kubernetes_join_command: "{{ kubernetes_join_command_result.stdout }}" + kubernetes_join_command: > + {{ kubernetes_join_command_result.stdout }} + {{ kubernetes_join_command_extra_opts }} when: kubernetes_join_command_result.stdout is defined delegate_to: "{{ item }}" delegate_facts: true diff --git a/tasks/master-setup.yml b/tasks/master-setup.yml index 7db6767..80aa346 100644 --- a/tasks/master-setup.yml +++ b/tasks/master-setup.yml @@ -2,14 +2,12 @@ - name: Initialize Kubernetes master with kubeadm init. command: > kubeadm init - --pod-network-cidr={{ kubernetes_pod_network_cidr }} - --apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address) }} + --pod-network-cidr={{ kubernetes_pod_network.cidr }} + --apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }} --kubernetes-version {{ kubernetes_version_kubeadm }} --ignore-preflight-errors={{ kubernetes_ignore_preflight_errors }} {{ kubernetes_kubeadm_init_extra_opts }} - register: kubeadmin_init - failed_when: false when: not kubernetes_init_stat.stat.exists - name: Print the init output to screen. @@ -22,12 +20,14 @@ file: path: ~/.kube state: directory + mode: 0755 - name: Symlink the kubectl admin.conf to ~/.kube/conf. file: src: /etc/kubernetes/admin.conf dest: ~/.kube/config state: link + mode: 0644 - name: Configure Flannel networking. command: "{{ item }}" @@ -36,13 +36,36 @@ - kubectl apply -f {{ kubernetes_flannel_manifest_file }} register: flannel_result changed_when: "'created' in flannel_result.stdout" + when: kubernetes_pod_network.cni == 'flannel' + +- name: Configure Calico networking. + command: "{{ item }}" + with_items: + - kubectl apply -f {{ kubernetes_calico_manifest_file }} + register: calico_result + changed_when: "'created' in calico_result.stdout" + when: kubernetes_pod_network.cni == 'calico' + +- name: Get Kubernetes version for Weave installation. + shell: kubectl version | base64 | tr -d '\n' + changed_when: false + register: kubectl_version + when: kubernetes_pod_network.cni == 'weave' + +- name: Configure Weave networking. + command: "{{ item }}" + with_items: + - "kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version={{ kubectl_version.stdout_lines[0] }}" + register: weave_result + changed_when: "'created' in weave_result.stdout" + when: kubernetes_pod_network.cni == 'weave' # TODO: Check if taint exists with something like `kubectl describe nodes` # instead of using kubernetes_init_stat.stat.exists check. - name: Allow pods on master node (if configured). command: "kubectl taint nodes --all node-role.kubernetes.io/master-" when: - - kubernetes_allow_pods_on_master + - kubernetes_allow_pods_on_master | bool - not kubernetes_init_stat.stat.exists - name: Check if Kubernetes Dashboard UI service already exists. @@ -50,10 +73,10 @@ changed_when: false failed_when: false register: kubernetes_dashboard_service - when: kubernetes_enable_web_ui + when: kubernetes_enable_web_ui | bool - name: Enable the Kubernetes Web Dashboard UI (if configured). command: "kubectl create -f {{ kubernetes_web_ui_manifest_file }}" when: - - kubernetes_enable_web_ui - - kubernetes_dashboard_service is failed + - kubernetes_enable_web_ui | bool + - kubernetes_dashboard_service.rc != 0 diff --git a/tasks/setup-Debian.yml b/tasks/setup-Debian.yml index 2d07fa5..4a83a58 100644 --- a/tasks/setup-Debian.yml +++ b/tasks/setup-Debian.yml @@ -23,3 +23,4 @@ template: src: apt-preferences-kubernetes.j2 dest: /etc/apt/preferences.d/kubernetes + mode: 0644 diff --git a/tasks/setup-RedHat.yml b/tasks/setup-RedHat.yml index 83335d9..99a7098 100644 --- a/tasks/setup-RedHat.yml +++ b/tasks/setup-RedHat.yml @@ -6,19 +6,15 @@ enabled: true gpgcheck: true repo_gpgcheck: true - baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }} - gpgkey: - - https://packages.cloud.google.com/yum/doc/yum-key.gpg - - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg + baseurl: "{{ kubernetes_yum_base_url }}" + gpgkey: "{{ kubernetes_yum_gpg_key }}" - name: Add Kubernetes GPG keys. rpm_key: key: "{{ item }}" state: present register: kubernetes_rpm_key - with_items: - - https://packages.cloud.google.com/yum/doc/yum-key.gpg - - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg + with_items: "{{ kubernetes_yum_gpg_key }}" - name: Make cache if Kubernetes GPG key changed. command: "yum -q makecache -y --disablerepo='*' --enablerepo='kubernetes'" diff --git a/tasks/sysctl-setup.yml b/tasks/sysctl-setup.yml new file mode 100644 index 0000000..174ebca --- /dev/null +++ b/tasks/sysctl-setup.yml @@ -0,0 +1,21 @@ +--- +- name: Ensure procps is installed. + package: + name: "{{ procps_package }}" + state: present + when: > + ansible_distribution != 'Debian' + or ansible_distribution_major_version | int < 10 + +# See: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#letting-iptables-see-bridged-traffic +- name: Let iptables see bridged traffic. + sysctl: + name: "{{ item }}" + value: '1' + state: present + loop: + - net.bridge.bridge-nf-call-iptables + - net.bridge.bridge-nf-call-ip6tables + when: > + ansible_distribution != 'Debian' + or ansible_distribution_major_version | int < 10 diff --git a/vars/Debian.yml b/vars/Debian.yml index 67f5eae..8b8d1a2 100644 --- a/vars/Debian.yml +++ b/vars/Debian.yml @@ -1,2 +1,3 @@ --- +procps_package: procps kubelet_environment_file_path: /etc/default/kubelet diff --git a/vars/RedHat.yml b/vars/RedHat.yml index db8b7ac..e156651 100644 --- a/vars/RedHat.yml +++ b/vars/RedHat.yml @@ -1,4 +1,5 @@ --- +procps_package: procps-ng kubelet_environment_file_path: /etc/sysconfig/kubelet kubernetes_packages: - name: kubelet-{{ kubernetes_version_rhel_package }}-0