Merge pull request #1 from geerlingguy/master

rebase
This commit is contained in:
Marc Bihlmaier 2021-03-25 14:42:04 +01:00 committed by GitHub
commit 55f43bfae0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 366 additions and 65 deletions

4
.ansible-lint Normal file
View File

@ -0,0 +1,4 @@
skip_list:
- 'yaml'
- 'risky-shell-pipe'
- 'role-name'

4
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,4 @@
# These are supported funding model platforms
---
github: geerlingguy
patreon: geerlingguy

56
.github/stale.yml vendored Normal file
View File

@ -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.

76
.github/workflows/ci.yml vendored Normal file
View File

@ -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 }}

38
.github/workflows/release.yml vendored Normal file
View File

@ -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)

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
*.retry *.retry
*/__pycache__ */__pycache__
*.pyc *.pyc
.cache

View File

@ -6,13 +6,21 @@ env:
global: global:
- ROLE_NAME: kubernetes - ROLE_NAME: kubernetes
matrix: matrix:
- MOLECULE_DISTRO: centos8
- MOLECULE_DISTRO: centos7 - MOLECULE_DISTRO: centos7
- MOLECULE_DISTRO: ubuntu1804 - 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:
# Install test dependencies. # Install test dependencies.
- pip install molecule docker - pip install molecule[docker] yamllint ansible-lint docker
before_script: before_script:
# Use actual Ansible Galaxy role name for the project directory. # Use actual Ansible Galaxy role name for the project directory.

View File

@ -1,6 +1,11 @@
--- ---
extends: default extends: default
rules: rules:
line-length: line-length:
max: 150 max: 150
level: warning level: warning
ignore: |
.github/stale.yml
.travis.yml

View File

@ -1,6 +1,6 @@
# Ansible Role: Kubernetes # 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. 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 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: '1.17'
kubernetes_version_rhel_package: '1.13.1' 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. 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"` 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 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. 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. 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_apiserver_advertise_address: ''
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}' kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
kubernetes_ignore_preflight_errors: 'all' 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_release_channel: main
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}" 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. Apt repository options for Kubernetes installation.
kubernetes_yum_arch: x86_64 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_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 kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
@ -85,7 +107,7 @@ None.
- hosts: all - hosts: all
vars: vars:
kubernetes_allow_pods_on_master: True kubernetes_allow_pods_on_master: true
roles: roles:
- geerlingguy.docker - geerlingguy.docker
@ -112,7 +134,7 @@ Playbook:
- hosts: all - hosts: all
vars: vars:
kubernetes_allow_pods_on_master: True kubernetes_allow_pods_on_master: true
roles: roles:
- geerlingguy.docker - geerlingguy.docker

View File

@ -9,19 +9,27 @@ kubernetes_packages:
- name: kubernetes-cni - name: kubernetes-cni
state: present state: present
kubernetes_version: '1.13' kubernetes_version: '1.19'
kubernetes_version_rhel_package: '1.13.1' kubernetes_version_rhel_package: '1.19.0'
kubernetes_role: master kubernetes_role: master
kubernetes_kubelet_extra_args: "" kubernetes_kubelet_extra_args: ""
kubernetes_kubeadm_init_extra_opts: "" kubernetes_kubeadm_init_extra_opts: ""
kubernetes_join_command_extra_opts: ""
kubernetes_allow_pods_on_master: true kubernetes_allow_pods_on_master: true
kubernetes_enable_web_ui: 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_apiserver_advertise_address: ''
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}' kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
kubernetes_ignore_preflight_errors: 'all' 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_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
kubernetes_apt_ignore_key_error: false 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. # 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_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 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

View File

@ -2,6 +2,7 @@
dependencies: [] dependencies: []
galaxy_info: galaxy_info:
role_name: kubernetes
author: geerlingguy author: geerlingguy
description: Kubernetes for Linux. description: Kubernetes for Linux.
company: "Midwestern Mac, LLC" company: "Midwestern Mac, LLC"
@ -11,13 +12,16 @@ galaxy_info:
- name: EL - name: EL
versions: versions:
- 7 - 7
- 8
- name: Debian - name: Debian
versions: versions:
- stretch - stretch
- buster
- name: Ubuntu - name: Ubuntu
versions: versions:
- xenial - xenial
- bionic - bionic
- focal
galaxy_tags: galaxy_tags:
- system - system
- containers - containers

View File

@ -4,8 +4,12 @@
become: true become: true
vars: vars:
kubernetes_pod_network:
cni: 'calico'
cidr: '192.168.0.0/16'
# Allow swap in test environments (hard to control in some Docker envs). # 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 docker_install_compose: false
pre_tasks: pre_tasks:
@ -24,11 +28,6 @@
- name: Gather facts. - name: Gather facts.
action: setup 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: roles:
- role: geerlingguy.docker - role: geerlingguy.docker
- role: geerlingguy.kubernetes - role: geerlingguy.kubernetes

View File

@ -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

View File

@ -3,10 +3,6 @@ dependency:
name: galaxy name: galaxy
driver: driver:
name: docker name: docker
lint:
name: yamllint
options:
config-file: molecule/default/yaml-lint.yml
platforms: platforms:
- name: instance - name: instance
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest" image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
@ -18,13 +14,5 @@ platforms:
pre_build_image: true pre_build_image: true
provisioner: provisioner:
name: ansible name: ansible
lint:
name: ansible-lint
playbooks: playbooks:
converge: ${MOLECULE_PLAYBOOK:-playbook.yml} converge: ${MOLECULE_PLAYBOOK:-converge.yml}
scenario:
name: default
verifier:
name: testinfra
lint:
name: flake8

View File

@ -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'

View File

@ -15,7 +15,7 @@
set_fact: set_fact:
kubelet_args_path: '/etc/systemd/system/kubelet.service.d/10-kubeadm.conf' 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_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 when: not kubelet_environment_file.stat.exists
- name: Configure KUBELET_EXTRA_ARGS. - name: Configure KUBELET_EXTRA_ARGS.
@ -24,6 +24,7 @@
line: '{{ kubelet_args_line }}' line: '{{ kubelet_args_line }}'
regexp: '{{ kubelet_args_regexp }}' regexp: '{{ kubelet_args_regexp }}'
state: present state: present
mode: 0644
register: kubelet_config_file register: kubelet_config_file
- name: Reload systemd unit if args were changed. - name: Reload systemd unit if args were changed.

View File

@ -18,6 +18,8 @@
notify: restart kubelet notify: restart kubelet
with_items: "{{ kubernetes_packages }}" with_items: "{{ kubernetes_packages }}"
- include_tasks: sysctl-setup.yml
- include_tasks: kubelet-setup.yml - include_tasks: kubelet-setup.yml
- name: Ensure kubelet is started and enabled at boot. - name: Ensure kubelet is started and enabled at boot.
@ -44,7 +46,9 @@
- name: Set the kubeadm join command globally. - name: Set the kubeadm join command globally.
set_fact: 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 when: kubernetes_join_command_result.stdout is defined
delegate_to: "{{ item }}" delegate_to: "{{ item }}"
delegate_facts: true delegate_facts: true

View File

@ -2,14 +2,12 @@
- name: Initialize Kubernetes master with kubeadm init. - name: Initialize Kubernetes master with kubeadm init.
command: > command: >
kubeadm init kubeadm init
--pod-network-cidr={{ kubernetes_pod_network_cidr }} --pod-network-cidr={{ kubernetes_pod_network.cidr }}
--apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address) }} --apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}
--kubernetes-version {{ kubernetes_version_kubeadm }} --kubernetes-version {{ kubernetes_version_kubeadm }}
--ignore-preflight-errors={{ kubernetes_ignore_preflight_errors }} --ignore-preflight-errors={{ kubernetes_ignore_preflight_errors }}
{{ kubernetes_kubeadm_init_extra_opts }} {{ kubernetes_kubeadm_init_extra_opts }}
register: kubeadmin_init register: kubeadmin_init
failed_when: false
when: not kubernetes_init_stat.stat.exists when: not kubernetes_init_stat.stat.exists
- name: Print the init output to screen. - name: Print the init output to screen.
@ -22,12 +20,14 @@
file: file:
path: ~/.kube path: ~/.kube
state: directory state: directory
mode: 0755
- name: Symlink the kubectl admin.conf to ~/.kube/conf. - name: Symlink the kubectl admin.conf to ~/.kube/conf.
file: file:
src: /etc/kubernetes/admin.conf src: /etc/kubernetes/admin.conf
dest: ~/.kube/config dest: ~/.kube/config
state: link state: link
mode: 0644
- name: Configure Flannel networking. - name: Configure Flannel networking.
command: "{{ item }}" command: "{{ item }}"
@ -36,13 +36,36 @@
- kubectl apply -f {{ kubernetes_flannel_manifest_file }} - kubectl apply -f {{ kubernetes_flannel_manifest_file }}
register: flannel_result register: flannel_result
changed_when: "'created' in flannel_result.stdout" 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` # TODO: Check if taint exists with something like `kubectl describe nodes`
# instead of using kubernetes_init_stat.stat.exists check. # instead of using kubernetes_init_stat.stat.exists check.
- name: Allow pods on master node (if configured). - name: Allow pods on master node (if configured).
command: "kubectl taint nodes --all node-role.kubernetes.io/master-" command: "kubectl taint nodes --all node-role.kubernetes.io/master-"
when: when:
- kubernetes_allow_pods_on_master - kubernetes_allow_pods_on_master | bool
- not kubernetes_init_stat.stat.exists - not kubernetes_init_stat.stat.exists
- name: Check if Kubernetes Dashboard UI service already exists. - name: Check if Kubernetes Dashboard UI service already exists.
@ -50,10 +73,10 @@
changed_when: false changed_when: false
failed_when: false failed_when: false
register: kubernetes_dashboard_service register: kubernetes_dashboard_service
when: kubernetes_enable_web_ui when: kubernetes_enable_web_ui | bool
- name: Enable the Kubernetes Web Dashboard UI (if configured). - name: Enable the Kubernetes Web Dashboard UI (if configured).
command: "kubectl create -f {{ kubernetes_web_ui_manifest_file }}" command: "kubectl create -f {{ kubernetes_web_ui_manifest_file }}"
when: when:
- kubernetes_enable_web_ui - kubernetes_enable_web_ui | bool
- kubernetes_dashboard_service is failed - kubernetes_dashboard_service.rc != 0

View File

@ -23,3 +23,4 @@
template: template:
src: apt-preferences-kubernetes.j2 src: apt-preferences-kubernetes.j2
dest: /etc/apt/preferences.d/kubernetes dest: /etc/apt/preferences.d/kubernetes
mode: 0644

View File

@ -6,19 +6,15 @@
enabled: true enabled: true
gpgcheck: true gpgcheck: true
repo_gpgcheck: true repo_gpgcheck: true
baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }} baseurl: "{{ kubernetes_yum_base_url }}"
gpgkey: gpgkey: "{{ 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
- name: Add Kubernetes GPG keys. - name: Add Kubernetes GPG keys.
rpm_key: rpm_key:
key: "{{ item }}" key: "{{ item }}"
state: present state: present
register: kubernetes_rpm_key register: kubernetes_rpm_key
with_items: with_items: "{{ 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
- name: Make cache if Kubernetes GPG key changed. - name: Make cache if Kubernetes GPG key changed.
command: "yum -q makecache -y --disablerepo='*' --enablerepo='kubernetes'" command: "yum -q makecache -y --disablerepo='*' --enablerepo='kubernetes'"

21
tasks/sysctl-setup.yml Normal file
View File

@ -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

View File

@ -1,2 +1,3 @@
--- ---
procps_package: procps
kubelet_environment_file_path: /etc/default/kubelet kubelet_environment_file_path: /etc/default/kubelet

View File

@ -1,4 +1,5 @@
--- ---
procps_package: procps-ng
kubelet_environment_file_path: /etc/sysconfig/kubelet kubelet_environment_file_path: /etc/sysconfig/kubelet
kubernetes_packages: kubernetes_packages:
- name: kubelet-{{ kubernetes_version_rhel_package }}-0 - name: kubelet-{{ kubernetes_version_rhel_package }}-0