Skip to content

Commit d47b792

Browse files
authored
Merge branch 'master' into fail-when-init-failed
2 parents 6d47a11 + 9fde307 commit d47b792

15 files changed

+185
-52
lines changed

.ansible-lint

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
skip_list:
2+
- '306'
3+
- '405'

.github/FUNDING.yml

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# These are supported funding model platforms
2+
---
3+
github: geerlingguy
4+
patreon: geerlingguy

.github/stale.yml

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Configuration for probot-stale - https://github.com/probot/stale
2+
3+
# Number of days of inactivity before an Issue or Pull Request becomes stale
4+
daysUntilStale: 90
5+
6+
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
7+
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
8+
daysUntilClose: 30
9+
10+
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
11+
onlyLabels: []
12+
13+
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
14+
exemptLabels:
15+
- pinned
16+
- security
17+
- planned
18+
19+
# Set to true to ignore issues in a project (defaults to false)
20+
exemptProjects: false
21+
22+
# Set to true to ignore issues in a milestone (defaults to false)
23+
exemptMilestones: false
24+
25+
# Set to true to ignore issues with an assignee (defaults to false)
26+
exemptAssignees: false
27+
28+
# Label to use when marking as stale
29+
staleLabel: stale
30+
31+
# Limit the number of actions per hour, from 1-30. Default is 30
32+
limitPerRun: 30
33+
34+
pulls:
35+
markComment: |-
36+
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!
37+
38+
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.
39+
40+
unmarkComment: >-
41+
This pull request is no longer marked for closure.
42+
43+
closeComment: >-
44+
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.
45+
46+
issues:
47+
markComment: |-
48+
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!
49+
50+
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.
51+
52+
unmarkComment: >-
53+
This issue is no longer marked for closure.
54+
55+
closeComment: >-
56+
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.

.travis.yml

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ env:
66
global:
77
- ROLE_NAME: kubernetes
88
matrix:
9+
- MOLECULE_DISTRO: centos8
910
- MOLECULE_DISTRO: centos7
1011
- MOLECULE_DISTRO: ubuntu1804
11-
- MOLECULE_DISTRO: debian9
12+
- MOLECULE_DISTRO: debian10
13+
14+
- MOLECULE_DISTRO: debian10
15+
MOLECULE_PLAYBOOK: playbook-calico.yml
1216

1317
install:
1418
# Install test dependencies.
15-
- pip install molecule docker
19+
- pip install molecule yamllint ansible-lint docker
1620

1721
before_script:
1822
# Use actual Ansible Galaxy role name for the project directory.
File renamed without changes.

README.md

+19-6
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ Available variables are listed below, along with default values (see `defaults/m
2424

2525
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.
2626

27-
kubernetes_version: '1.13'
28-
kubernetes_version_rhel_package: '1.13.1'
27+
kubernetes_version: '1.16'
28+
kubernetes_version_rhel_package: '1.16.4'
2929

3030
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.
3131

@@ -42,6 +42,10 @@ Extra args to pass to `kubelet` during startup. E.g. to allow `kubelet` to start
4242

4343
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"`
4444

45+
kubernetes_join_command_extra_opts: ""
46+
47+
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`
48+
4549
kubernetes_allow_pods_on_master: true
4650

4751
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,21 @@ Whether to remove the taint that denies pods from being deployed to the Kubernet
5155

5256
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.
5357

54-
kubernetes_pod_network_cidr: '10.244.0.0/16'
58+
kubernetes_pod_network:
59+
# Flannel CNI.
60+
cni: 'flannel'
61+
cidr: '10.244.0.0/16'
62+
# Calico CNI.
63+
# cni: 'calico'
64+
# cidr: '192.168.0.0/16'
65+
66+
This role currently supports `flannel` (default) or `calico` for cluster pod networking. Choose one or the other for your cluster; converting between the two is not done automatically and could result in broken networking, and should be done outside of this role.
67+
5568
kubernetes_apiserver_advertise_address: ''
5669
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
5770
kubernetes_ignore_preflight_errors: 'all'
5871

59-
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.
72+
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.
6073

6174
kubernetes_apt_release_channel: main
6275
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
@@ -85,7 +98,7 @@ None.
8598
- hosts: all
8699

87100
vars:
88-
kubernetes_allow_pods_on_master: True
101+
kubernetes_allow_pods_on_master: true
89102

90103
roles:
91104
- geerlingguy.docker
@@ -112,7 +125,7 @@ Playbook:
112125
- hosts: all
113126

114127
vars:
115-
kubernetes_allow_pods_on_master: True
128+
kubernetes_allow_pods_on_master: true
116129

117130
roles:
118131
- geerlingguy.docker

defaults/main.yml

+15-4
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,27 @@ kubernetes_packages:
99
- name: kubernetes-cni
1010
state: present
1111

12-
kubernetes_version: '1.13'
13-
kubernetes_version_rhel_package: '1.13.1'
12+
kubernetes_version: '1.16'
13+
kubernetes_version_rhel_package: '1.16.4'
1414

1515
kubernetes_role: master
1616

1717
kubernetes_kubelet_extra_args: ""
1818
kubernetes_kubeadm_init_extra_opts: ""
19+
kubernetes_join_command_extra_opts: ""
1920

2021
kubernetes_allow_pods_on_master: true
2122
kubernetes_enable_web_ui: true
22-
kubernetes_web_ui_manifest_file: https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
23+
kubernetes_web_ui_manifest_file: https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
24+
25+
kubernetes_pod_network:
26+
# Flannel CNI.
27+
cni: 'flannel'
28+
cidr: '10.244.0.0/16'
29+
# Calico CNI.
30+
# cni: 'calico'
31+
# cidr: '192.168.0.0/16'
2332

24-
kubernetes_pod_network_cidr: '10.244.0.0/16'
2533
kubernetes_apiserver_advertise_address: ''
2634
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
2735
kubernetes_ignore_preflight_errors: 'all'
@@ -36,3 +44,6 @@ kubernetes_yum_arch: x86_64
3644
# Flannel config files.
3745
kubernetes_flannel_manifest_file_rbac: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
3846
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
47+
48+
# Calico config files
49+
kubernetes_calico_manifest_file: https://docs.projectcalico.org/v3.10/manifests/calico.yaml

meta/main.yml

+2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ galaxy_info:
1111
- name: EL
1212
versions:
1313
- 7
14+
- 8
1415
- name: Debian
1516
versions:
1617
- stretch
18+
- buster
1719
- name: Ubuntu
1820
versions:
1921
- xenial

molecule/default/converge.yml

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
- name: Converge
3+
hosts: all
4+
become: true
5+
6+
vars:
7+
# Allow swap in test environments (hard to control in some Docker envs).
8+
kubernetes_kubelet_extra_args: "--fail-swap-on=false --cgroup-driver=cgroupfs"
9+
docker_install_compose: false
10+
11+
pre_tasks:
12+
- name: Update apt cache.
13+
apt: update_cache=true cache_valid_time=600
14+
when: ansible_os_family == 'Debian'
15+
16+
- name: Ensure test dependencies are installed (RedHat).
17+
package: name=iproute state=present
18+
when: ansible_os_family == 'RedHat'
19+
20+
- name: Ensure test dependencies are installed (Debian).
21+
package: name=iproute2 state=present
22+
when: ansible_os_family == 'Debian'
23+
24+
- name: Gather facts.
25+
action: setup
26+
27+
roles:
28+
- role: geerlingguy.docker
29+
- role: geerlingguy.kubernetes
30+
31+
post_tasks:
32+
- name: Get cluster info.
33+
command: kubectl cluster-info
34+
changed_when: false
35+
register: kubernetes_info
36+
37+
- name: Print cluster info.
38+
debug: var=kubernetes_info.stdout
39+
40+
- name: Get all running pods.
41+
command: kubectl get pods --all-namespaces
42+
changed_when: false
43+
register: kubernetes_pods
44+
45+
- name: Print list of running pods.
46+
debug: var=kubernetes_pods.stdout

molecule/default/molecule.yml

+5-13
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ dependency:
33
name: galaxy
44
driver:
55
name: docker
6-
lint:
7-
name: yamllint
8-
options:
9-
config-file: molecule/default/yaml-lint.yml
6+
lint: |
7+
set -e
8+
yamllint .
9+
ansible-lint
1010
platforms:
1111
- name: instance
1212
image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos7}-ansible:latest"
@@ -18,13 +18,5 @@ platforms:
1818
pre_build_image: true
1919
provisioner:
2020
name: ansible
21-
lint:
22-
name: ansible-lint
2321
playbooks:
24-
converge: ${MOLECULE_PLAYBOOK:-playbook.yml}
25-
scenario:
26-
name: default
27-
verifier:
28-
name: testinfra
29-
lint:
30-
name: flake8
22+
converge: ${MOLECULE_PLAYBOOK:-converge.yml}

molecule/default/playbook.yml renamed to molecule/default/playbook-calico.yml

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
become: true
55

66
vars:
7+
kubernetes_pod_network:
8+
cni: 'calico'
9+
cidr: '192.168.0.0/16'
10+
711
# Allow swap in test environments (hard to control in some Docker envs).
8-
kubernetes_kubelet_extra_args: "--fail-swap-on=false"
12+
kubernetes_kubelet_extra_args: "--fail-swap-on=false --cgroup-driver=cgroupfs"
913
docker_install_compose: false
1014

1115
pre_tasks:
@@ -24,11 +28,6 @@
2428
- name: Gather facts.
2529
action: setup
2630

27-
- name: Use cgroupfs cgroup driver instead of systemd (RedHat).
28-
set_fact:
29-
kubernetes_kubelet_extra_args: '"--fail-swap-on=false --cgroup-driver=cgroupfs"'
30-
when: ansible_os_family == 'RedHat'
31-
3231
roles:
3332
- role: geerlingguy.docker
3433
- role: geerlingguy.kubernetes

molecule/default/tests/test_default.py

-14
This file was deleted.

tasks/kubelet-setup.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
set_fact:
1616
kubelet_args_path: '/etc/systemd/system/kubelet.service.d/10-kubeadm.conf'
1717
kubelet_args_line: "{{ 'Environment=\"KUBELET_EXTRA_ARGS=' + kubernetes_kubelet_extra_args + '\"' }}"
18-
kubelet_args_regexp: '^Environment='
18+
kubelet_args_regexp: '^Environment="KUBELET_EXTRA_ARGS='
1919
when: not kubelet_environment_file.stat.exists
2020

2121
- name: Configure KUBELET_EXTRA_ARGS.

tasks/main.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@
4444

4545
- name: Set the kubeadm join command globally.
4646
set_fact:
47-
kubernetes_join_command: "{{ kubernetes_join_command_result.stdout }}"
47+
kubernetes_join_command: >
48+
{{ kubernetes_join_command_result.stdout }}
49+
{{ kubernetes_join_command_extra_opts }}
4850
when: kubernetes_join_command_result.stdout is defined
4951
delegate_to: "{{ item }}"
5052
delegate_facts: true

tasks/master-setup.yml

+20-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22
- name: Initialize Kubernetes master with kubeadm init.
33
command: >
44
kubeadm init
5-
--pod-network-cidr={{ kubernetes_pod_network_cidr }}
6-
--apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address) }}
5+
--pod-network-cidr={{ kubernetes_pod_network.cidr }}
6+
--apiserver-advertise-address={{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}
77
--kubernetes-version {{ kubernetes_version_kubeadm }}
88
--ignore-preflight-errors={{ kubernetes_ignore_preflight_errors }}
99
{{ kubernetes_kubeadm_init_extra_opts }}
10+
register: kubeadmin_init
11+
when: not kubernetes_init_stat.stat.exists
1012

13+
- name: Print the init output to screen.
14+
debug:
15+
var: kubeadmin_init.stdout
16+
verbosity: 2
1117
when: not kubernetes_init_stat.stat.exists
1218

1319
- name: Ensure .kube directory exists.
@@ -28,24 +34,33 @@
2834
- kubectl apply -f {{ kubernetes_flannel_manifest_file }}
2935
register: flannel_result
3036
changed_when: "'created' in flannel_result.stdout"
37+
when: kubernetes_pod_network.cni == 'flannel'
38+
39+
- name: Configure Calico networking.
40+
command: "{{ item }}"
41+
with_items:
42+
- kubectl apply -f {{ kubernetes_calico_manifest_file }}
43+
register: calico_result
44+
changed_when: "'created' in calico_result.stdout"
45+
when: kubernetes_pod_network.cni == 'calico'
3146

3247
# TODO: Check if taint exists with something like `kubectl describe nodes`
3348
# instead of using kubernetes_init_stat.stat.exists check.
3449
- name: Allow pods on master node (if configured).
3550
command: "kubectl taint nodes --all node-role.kubernetes.io/master-"
3651
when:
37-
- kubernetes_allow_pods_on_master
52+
- kubernetes_allow_pods_on_master | bool
3853
- not kubernetes_init_stat.stat.exists
3954

4055
- name: Check if Kubernetes Dashboard UI service already exists.
4156
shell: kubectl get services --namespace kube-system | grep -q kubernetes-dashboard
4257
changed_when: false
4358
failed_when: false
4459
register: kubernetes_dashboard_service
45-
when: kubernetes_enable_web_ui
60+
when: kubernetes_enable_web_ui | bool
4661

4762
- name: Enable the Kubernetes Web Dashboard UI (if configured).
4863
command: "kubectl create -f {{ kubernetes_web_ui_manifest_file }}"
4964
when:
50-
- kubernetes_enable_web_ui
65+
- kubernetes_enable_web_ui | bool
5166
- kubernetes_dashboard_service is failed

0 commit comments

Comments
 (0)