Compare commits

...
Sign in to create a new pull request.

100 commits
WIP ... master

Author SHA1 Message Date
3281379c4c
Update kubernetes to versoin 1.31.5 2025-02-08 13:51:27 +01:00
012f324d11
Updat ekubernetes to version 1.31.4 2024-12-21 12:19:58 +01:00
3688fdb5d2
Update kubernetes to version 1.31.3 2024-12-05 09:24:56 +01:00
c58515cbce
Add more configuration to enable swap 2024-12-01 11:30:24 +01:00
714868ab71
Fix file /etc/kubernetes/admin.conf absent with k3s 2024-11-01 15:15:46 +01:00
2c69995cf9
Update k3s config file 2024-11-01 15:12:21 +01:00
e4fb1642e5
Add link for the documentation 2024-11-01 15:10:26 +01:00
b23028a336
Finaly no need to exclude system-upgrade namespace in psa.yml file 2024-11-01 15:10:03 +01:00
1f757d7782
Add system-upgrade namespace exception in psa.yaml file 2024-10-26 10:20:40 +02:00
b9802106c9
Update kubernetes to version 1.31.2 2024-10-26 09:52:07 +02:00
1611c091e6
Fix directories creation 2024-10-02 15:51:34 +02:00
21f4c81832
Fix SELinux context for local-path provisioner 2024-10-02 09:11:23 +02:00
7e78625cff
Add EventRateLimit admission configuration 2024-09-28 18:53:03 +02:00
e047229a8b
Fix NetworkPolicies 2024-09-28 18:52:40 +02:00
345cf8020b
Update kubernetes to versoin 1.31.1 2024-09-21 14:26:46 +02:00
9862658cc2
Update k3s-selinux to version 1.6.stable.1 2024-09-17 00:00:07 +02:00
453ed3df65
Add forgoten file 2024-09-16 16:46:57 +02:00
e6206ca929
Fix pod & svc network 2024-09-16 16:46:19 +02:00
6772711145
Fix k3s deployment 2024-09-15 17:12:31 +02:00
43353b130b
Update firewall configuration 2024-09-14 10:29:48 +02:00
be494c827c
fix fqn 2024-09-11 15:38:43 +02:00
2b560deaad
I should install k3s without lvm 2024-09-10 19:41:34 +02:00
82c63c2628
Update kubernetes to version 1.31.0 2024-09-04 09:55:57 +02:00
5717cca04d
Securing k3s deployment 2024-09-01 14:36:15 +02:00
3fd4c7dee0
Fix indentation 2024-09-01 13:44:57 +02:00
b45abf84be
Add more security to k3s installation 2024-08-31 11:17:00 +02:00
3c077f7baf
Update kubernetes to verson 1.30.4 2024-08-23 17:30:30 +02:00
88de685393
Update kubernetes to version 1.30.3 2024-08-01 00:11:43 +02:00
4e9dc784e3
Update k3s to version 1.30.2 k3s2 2024-07-05 00:10:06 +02:00
7d8a38e528
Update k3s to version 1.30.2 2024-06-29 10:26:31 +02:00
e2fdb2d3ef
Update kubernetes to version 1.30.2 2024-06-15 11:54:52 +02:00
39bc7e86d4
Update kubernetes to version 1.30.1 2024-05-29 00:27:26 +02:00
26738bf313
Add swap support 2024-05-21 12:44:40 +02:00
987cb320cd
Update kubernetes to version 1.30.0 2024-05-11 11:26:05 +02:00
b60a176cff
Make some update on kubeadm config template 2024-05-04 13:31:31 +02:00
bd2a60fa44
Update kubernetes to version 1.29.4 2024-05-04 13:31:02 +02:00
34889ccaac
Add useful link into readme file 2024-04-16 08:19:08 +02:00
8e2462f388
Update kubeadm template 2024-04-16 08:18:51 +02:00
db74c39b5a
Update kubernetes to version 1.29.3 2024-03-27 16:59:13 +01:00
a27773f0ad
Update kubernetes to version 1.29.1 2024-02-10 12:55:18 +01:00
2cfe25c7b8
Update kubernetes to version 1.29.0 2023-12-22 07:36:01 +01:00
84ece19c0a
Update k3s to version 1.28.4+k3s2 2023-12-07 08:42:09 +01:00
6d91f75029
Update k3s to version 1.28.4+k3s1 2023-12-06 18:50:03 +01:00
a62ebfb336
Update kubernetes to version 1.28.4 2023-11-18 09:51:32 +01:00
e18d436a37
Update version 2023-11-15 18:50:38 +01:00
15367bb088
Update kubernetes to version 1.28.2
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-09-27 13:42:33 +02:00
6b2514190c
Update kubernetes to version 1.28.1
Some checks reported errors
continuous-integration/drone/push Build was killed
2023-09-10 16:58:52 +02:00
b2e635467f
Update k3s-selinux package to version 1.4.stable.1
Some checks failed
continuous-integration/drone/push Build is failing
2023-06-03 11:32:45 +02:00
032f8df146
Update k3s-selinux package version
Some checks failed
continuous-integration/drone/push Build is failing
2023-05-31 12:10:04 +02:00
bfa0928b50
Update kubernetes to version 1.27.2
Some checks failed
continuous-integration/drone/push Build is failing
2023-05-30 11:25:26 +02:00
bc6998794d
Update k3s version
Some checks failed
continuous-integration/drone/push Build is failing
2023-03-05 10:43:13 +01:00
faa4048861
Update kubernetes to version 1.26.0
Some checks failed
continuous-integration/drone/push Build is failing
2022-12-25 20:40:12 +01:00
5fe7a7eec6
Update meta
Some checks failed
continuous-integration/drone/push Build is failing
2022-12-14 09:12:52 +01:00
ef754b75eb
Update kubernetes to version 1.25.5
Some checks failed
continuous-integration/drone/push Build is failing
2022-12-09 17:07:39 +01:00
ae5337271b
Update kubernetes to version 1.25.4
Some checks reported errors
continuous-integration/drone/push Build was killed
continuous-integration/drone Build is failing
2022-11-18 19:00:52 +01:00
d4dac488f9
Update role
Some checks failed
continuous-integration/drone/push Build is failing
2022-10-27 23:38:04 +02:00
48e99ac551
Update kubernetes to version 1.25.3
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-10-17 23:45:15 +02:00
c22964d87c
Update kubernetes to version 1.25.2
Some checks are pending
continuous-integration/drone/push Build is pending
2022-09-28 22:47:16 +02:00
fc33afe916
Update kubernetes to version 1.25.0 2022-09-13 08:25:08 +02:00
8234690fdc
Update k3s to version 1.24.4-k3s1
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-08-27 00:57:27 +02:00
2185662cd4
Update k3s(selinux package to version 1.2-2
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-08-16 11:34:44 +02:00
62d4a6013e
Update kubernetes to version 1.24.3
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-07-19 09:05:42 +02:00
ae44b2baff
Update k3s to version v1.24.2-k3s2
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-07-16 12:52:01 +02:00
a46b0346da
Update kubernetes version to 1.24.2
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2022-06-28 00:15:58 +02:00
ecc2c41afe
Update k3s deployment
Some checks failed
continuous-integration/drone/push Build is failing
2022-05-04 00:06:49 +02:00
18c9c75569
Fix module name
Some checks failed
continuous-integration/drone/push Build is failing
2022-04-15 15:43:39 +02:00
f67d9d8029
Exclude calico management from NetworkManager
Some checks failed
continuous-integration/drone/push Build is failing
2022-04-15 11:03:44 +02:00
39d7aec1b1
Update to version 1.23.5
Some checks failed
continuous-integration/drone/push Build is failing
2022-04-09 17:00:54 +02:00
607840c88d
Update k3s version
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-25 07:03:29 +01:00
ba4600add3
Update k3s version to 1.23.1+k3s2
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-14 10:05:26 +01:00
bacbb04cc3
Update k3s version
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-06 07:56:26 +01:00
15e88a727e
Update k3s version
Some checks failed
continuous-integration/drone/push Build is failing
2021-12-17 21:01:58 +01:00
36149cf532
Update template
Some checks are pending
continuous-integration/drone/push Build is pending
2021-10-20 17:10:43 +02:00
4c13424675
Update k3s version
Some checks failed
continuous-integration/drone/push Build is failing
2021-10-05 22:36:00 +02:00
ea47d112e8
Update version & fix desktop deployment tools
Some checks failed
continuous-integration/drone/push Build is failing
2021-09-26 16:56:45 +02:00
cfa8180c18
Update loadbalancer deployment
Some checks failed
continuous-integration/drone/push Build is failing
2021-08-16 00:09:14 +02:00
a16013a8a1
Update version of k3s & add restart service 2021-08-16 00:09:00 +02:00
2b1fe56b47
Update default kubernetes version to 1.21.4 & add 2021-08-16 00:08:21 +02:00
0c02bc3a32
Update deployment
Some checks failed
continuous-integration/drone/push Build is pending
continuous-integration/drone Build is failing
2021-07-10 00:04:39 +02:00
1008484e46
Update forgoten template
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2021-06-27 12:21:08 +02:00
1b665fa94c
Update k8s version & can chose network interface
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2021-06-27 02:49:55 +02:00
738896b356
Update for falco
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-06-05 10:51:19 +02:00
d18ccea770
Update audit policies file
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-06-02 15:46:58 +02:00
1e17bc7317
Update template for kube-prometheus-stack
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-06-01 19:01:01 +02:00
84aa6f023f
Define LV size for master 2021-05-07 23:57:04 +02:00
fe14247baa
Set packages version 2021-05-07 23:56:20 +02:00
7309d7e559
Update kubernetes & k3s version to 1.20.6 2021-05-07 23:55:50 +02:00
361895d43d
Preparing for falco 2021-05-07 23:55:15 +02:00
b5eb997165
Comment deprecated port 2021-05-07 23:51:52 +02:00
91a200ae09
Fix Firewalld pb
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-20 01:09:58 +01:00
fa4679acdd
Fix nodes registration in multi-clusters config
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-19 22:07:41 +01:00
39c5ef5e82
Fix network coherence & firewall
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-16 00:47:08 +01:00
8bbd3fa11c
Fix deployment on multiple kubernetes clusters
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-07 01:36:50 +01:00
2ce6678959
Deploy multiple clusters in one time
All checks were successful
continuous-integration/drone/push Build is passing
2021-02-06 15:22:17 +01:00
7f36b6eae6
Fix FS mount bug order
Some checks failed
continuous-integration/drone/push Build is failing
2021-02-06 14:17:40 +01:00
1e4d82d403
Fix dnf warning by k8s tools
Some checks reported errors
continuous-integration/drone/push Build encountered an error
2021-01-31 14:19:30 +01:00
6fa60172df
Add selinux for k3s 2021-01-31 14:19:00 +01:00
d43e295f30
Update name
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-30 11:02:22 +01:00
52a8de84bc
Fix k3s deployment
All checks were successful
continuous-integration/drone/push Build is passing
2021-01-27 00:08:51 +01:00
884df14b6e Merge pull request 'Fix kubeadm deployment bugs, update for EL8' (#1) from WIP into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #1
2021-01-18 21:56:21 +00:00
28 changed files with 1074 additions and 357 deletions

View file

@ -9,3 +9,5 @@ Deploy kubernetes
https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2?tab=doc https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2?tab=doc
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/ https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
https://github.com/XenitAB/spegel

View file

@ -2,7 +2,16 @@
# value for kubernetes_cri: containerd, cri-o # value for kubernetes_cri: containerd, cri-o
#kubernetes_cri: "containerd" #kubernetes_cri: "containerd"
kubernetes_server: false kubernetes_server: false
kubernetes_interface: '{{ ansible_default_ipv4.interface }}'
# value for kuberntes_network: flannel, calico, weave-net # value for kuberntes_network: flannel, calico, weave-net
#kubernetes_network: weave-net #kubernetes_network: weave-net
kubernetes_kubeproxy_mode: ipvs kubernetes_kubeproxy_mode: ipvs
kubernetes_version: 1.20.1 kubernetes_version: 1.31.5
kubernetes_k3s_version: 1.31.5+k3s1
#kubernetes_pods_network: "10.244.0.0/16"
#kubernetes_svc_network: "10.96.0.0/12"
kubernetes_pods_network: "10.42.0.0/16"
kubernetes_svc_network: "10.43.0.0/16"
lb_auth_pass: 1be344d62acc46c6858ae8475668a245
kubernetes_swap_enabled: false
kubernetes_lvm: true

View file

@ -0,0 +1,3 @@
# https://docs.tigera.io/calico/latest/operations/troubleshoot/troubleshooting#configure-networkmanager
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali

View file

@ -10,7 +10,15 @@ rules:
- group: "" - group: ""
# Resource "pods" doesn't match requests to any subresource of pods, # Resource "pods" doesn't match requests to any subresource of pods,
# which is consistent with the RBAC policy. # which is consistent with the RBAC policy.
resources: ["pods"] resources: ["pods", "deployments"]
- level: RequestResponse
resources:
- group: "rbac.authorization.k8s.io"
# Resource "pods" doesn't match requests to any subresource of pods,
# which is consistent with the RBAC policy.
resources: ["clusterroles", "clusterrolebindings"]
# Log "pods/log", "pods/status" at Metadata level # Log "pods/log", "pods/status" at Metadata level
- level: Metadata - level: Metadata
resources: resources:
@ -48,11 +56,17 @@ rules:
# The empty string "" can be used to select non-namespaced resources. # The empty string "" can be used to select non-namespaced resources.
namespaces: ["kube-system"] namespaces: ["kube-system"]
# Log configmap and secret changes in all other namespaces at the Metadata level. # Log configmap changes in all other namespaces at the RequestResponse level.
- level: RequestResponse
resources:
- group: "" # core API group
resources: ["configmaps"]
# Log secret changes in all other namespaces at the Metadata level.
- level: Metadata - level: Metadata
resources: resources:
- group: "" # core API group - group: "" # core API group
resources: ["secrets", "configmaps"] resources: ["secrets"]
# Log all other resources in core and extensions at the Request level. # Log all other resources in core and extensions at the Request level.
- level: Request - level: Request

View file

@ -0,0 +1,27 @@
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "restricted"
enforce-version: "latest"
audit: "restricted"
audit-version: "latest"
warn: "restricted"
warn-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: [kube-system, cis-operator-system]
- name: EventRateLimit
configuration:
apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
- burst: 20000
qps: 5000
type: Server
path: ""

View file

@ -10,7 +10,9 @@ galaxy_info:
version: version:
- 7 - 7
- 8 - 8
- 9
- name: RedHat - name: RedHat
version: version:
- 7 - 7
- 8 - 8
- 9

View file

@ -1,21 +1,21 @@
--- ---
- name: add docker apt key - name: Add docker apt key
apt_key: ansible.builtin.apt_key:
url: https://download.docker.com/linux/ubuntu/gpg url: https://download.docker.com/linux/ubuntu/gpg
state: present state: present
when: when:
- docker_ver == "docker_ce" - docker_ver == "docker_ce"
- name: add docker repository - name: Add docker repository
apt_repository: ansible.builtin.apt_repository:
repo: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable' repo: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable'
state: present state: present
update_cache: yes update_cache: true
when: when:
- docker_ver == "docker_ce" - docker_ver == "docker_ce"
- name: "Ensure GRUB_CMDLINE_LINUX is updated" - name: "Ensure GRUB_CMDLINE_LINUX is updated"
lineinfile: ansible.builtin.lineinfile:
dest: /etc/default/grub dest: /etc/default/grub
regexp: '^(GRUB_CMDLINE_LINUX=".*)"$' regexp: '^(GRUB_CMDLINE_LINUX=".*)"$'
line: '\1 cgroup_enable=memory swapaccount=1"' line: '\1 cgroup_enable=memory swapaccount=1"'
@ -24,12 +24,12 @@
- not docker_installed.stat.exists - not docker_installed.stat.exists
- name: "Update grub.conf" - name: "Update grub.conf"
command: update-grub ansible.builtin.command: update-grub
when: when:
- not docker_installed.stat.exists - not docker_installed.stat.exists
- name: "Ensure DEFAULT_FORWARD_POLICY in /etc/default/ufw is updated" - name: "Ensure DEFAULT_FORWARD_POLICY in /etc/default/ufw is updated"
lineinfile: ansible.builtin.lineinfile:
dest: /etc/default/ufw dest: /etc/default/ufw
regexp: '^(DEFAULT_FORWARD_POLICY=").*"$' regexp: '^(DEFAULT_FORWARD_POLICY=").*"$'
line: '\1ACCEPT"' line: '\1ACCEPT"'

View file

@ -5,55 +5,155 @@
# description: "Kubernetes Repository" # description: "Kubernetes Repository"
# baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-$releasever-x86_64 # baseurl: https://packages.cloud.google.com/yum/repos/kubernetes-$releasever-x86_64
# gpgcheck: yes # gpgcheck: yes
# enabled: yes # enabled: true
# gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg # gpgkey: https://packages.cloud.google.com/yum/doc/yum-key.gpg
# state: present # state: present
- name: Add Official kubernetes's repo # - name: Add Official kubernetes's repo
template: # ansible.builtin.template:
src: "etc/yum.repos.d/kubernetes.repo.j2" # src: "etc/yum.repos.d/kubernetes.repo.j2"
dest: "/etc/yum.repos.d/kubernetes.repo" # dest: "/etc/yum.repos.d/kubernetes.repo"
group: root # group: root
owner: root # owner: root
mode: 0644 # mode: 0644
# when:
# - not ansible_machine == "armv7l"
# - not ansible_machine == "armv6l"
# - kubernetes_cri != "k3s"
- name: Add Official kubernetes's repo on servers
ansible.builtin.yum_repository:
name: kubernetes
description: Kubernetes
baseurl: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version | regex_replace('^([0-9])\\.([0-9]*).*', '\\1.\\2') }}/rpm/"
enabled: true
gpgcheck: true
repo_gpgcheck: true
gpgkey: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version | regex_replace('^([0-9])\\.([0-9]*).*', '\\1.\\2') }}/rpm/repodata/repomd.xml.key"
exclude: kubelet kubeadm
become: true
when: when:
- not ansible_machine == "armv7l" - not ansible_machine == "armv7l"
- not ansible_machine == "armv6l" - not ansible_machine == "armv6l"
- kubernetes_server|bool
- kubernetes_cri != "k3s" - kubernetes_cri != "k3s"
- name: Register kubernetes firewalld service - name: Add Official kubernetes's repo for Desktop
template: ansible.builtin.yum_repository:
src: "etc/firewalld/services/kubernetes.xml.j2" name: kubernetes
dest: "/etc/firewalld/services/kubernetes.xml" description: Kubernetes
group: root baseurl: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version | regex_replace('^([0-9])\\.([0-9]*).*', '\\1.\\2') }}/rpm/"
owner: root enabled: true
mode: 0644 gpgcheck: true
register: need_firewalld_reload repo_gpgcheck: true
gpgkey: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version | regex_replace('^([0-9])\\.([0-9]*).*', '\\1.\\2') }}/rpm/repodata/repomd.xml.key"
exclude: kubelet kubeadm kubectl
become: true
when: when:
- kubernetes_server|bool - not ansible_machine == "armv7l"
- not ansible_machine == "armv6l"
- not kubernetes_server|bool
#- name: Reload firewalld configuration # - name: Redhat | Installing K8s Packages
# service: # ansible.builtin.package:
# name: firewalld # name:
# state: reloaded # - kubectl
# enabled: yes # - kubelet
# - kubeadm
# - iproute-tc
# - ipvsadm
# state: present
# disable_excludes: kubernetes
# become: true
# register: result
# until: result is successful
# - name: Register kubernetes firewalld service
# ansible.builtin.template:
# src: "etc/firewalld/services/kubernetes.xml.j2"
# dest: "/etc/firewalld/services/kubernetes.xml"
# group: root
# owner: root
# mode: 0644
# register: need_firewalld_reload
# when: # when:
# - kubernetes_server|bool # - kubernetes_server|bool
#
# - name: Reload firewalld configuration
# ansible.builtin.service:
# name: firewalld
# state: reloaded
# enabled: true
# when:
# - kubernetes_server|bool
# - need_firewalld_reload is changed
#
## Définir interface
# - name: Open Firewalld
# ansible.posix.firewalld:
# zone: external
# service: kubernetes
# permanent: true
# state: enabled
# immediate: true
# when:
## - need_firewall|bool
## - firewall_name == "firewalld"
# - kubernetes_server|bool
- name: reload firewalld to refresh service list # - name: Create kubernetes firewalld zone
command: firewall-cmd --reload # ansible.posix.firewalld:
when: # zone: kubernetes
- need_firewalld_reload is changed # permanent: true
- kubernetes_server|bool # state: present
# when:
# Définir interface # - kubernetes_server|bool
- name: Open Firewalld - name: Add kubernetes networks to trusted firewalld zone
firewalld: ansible.posix.firewalld:
service: kubernetes # zone: kubernetes
zone: trusted
permanent: true permanent: true
state: enabled state: enabled
immediate: true source: "{{ item }}"
when: when:
# - need_firewall|bool
# - firewall_name == "firewalld"
- kubernetes_server|bool - kubernetes_server|bool
with_items:
- "{{ kubernetes_pods_network }}"
- "{{ kubernetes_svc_network }}"
- name: Add kubernetes networks to trusted firewalld zone
ansible.posix.firewalld:
# zone: kubernetes
zone: trusted
permanent: true
state: enabled
source: "{{ item }}"
when:
- kubernetes_server|bool
- kubernetes_interface is defined
# - false
with_items:
- "{{ (lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.network + '/' + lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.netmask) | ansible.utils.ipaddr('net') }}"
- name: Install kubernetes tools
ansible.builtin.dnf:
name: "{{ kubernetes_package_name }}"
enablerepo: "kubernetes"
state: present
update_cache: true
disable_excludes: kubernetes
# notify: Restart kubelet
when:
- ansible_pkg_mgr == "dnf"
- (not kubernetes_server|bool) or ( kubernetes_server|bool and kubernetes_cri != "k3s")
- name: Install kubernetes tools
ansible.builtin.yum:
name: "{{ kubernetes_package_name }}"
enablerepo: "kubernetes"
state: present
update_cache: true
# notify: Restart kubelet
when:
- ansible_pkg_mgr == "yum"
- (not kubernetes_server|bool) or ( kubernetes_server|bool and kubernetes_cri != "k3s")

View file

@ -1,19 +1,46 @@
--- ---
- name: Install Wireguard - name: Install Wireguard
include_role: ansible.builtin.include_role:
name: wireguard name: wireguard
# when: when:
# - kubernetes_cni == "wireguard" # - kubernetes_cni == "wireguard"
- "'Vpn' not in group_names"
- name: Import Rancher key
ansible.builtin.rpm_key:
state: present
key: https://rpm.rancher.io/public.key
when:
- ansible_os_family == "RedHat"
- name: Install the k3s-selinux rpm from a remote repo for yum distro
ansible.builtin.yum:
name: "https://github.com/k3s-io/k3s-selinux/releases/download/v1.6.stable.1/k3s-selinux-1.6-1.el7.noarch.rpm"
state: present
when:
- ansible_pkg_mgr == "yum"
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == '7'
- name: Install the k3s-selinux rpm from a remote repo for dnf distro
ansible.builtin.dnf:
name: "https://github.com/k3s-io/k3s-selinux/releases/download/v1.6.stable.1/k3s-selinux-1.6-1.el{{ ansible_distribution_major_version }}.noarch.rpm"
state: present
when:
- ansible_pkg_mgr == "dnf"
- ansible_os_family == "RedHat"
- ansible_distribution_major_version >= '8'
- name: Check if /usr/local/bin/k3s already existe - name: Check if /usr/local/bin/k3s already existe
stat: ansible.builtin.stat:
path: /usr/local/bin/k3s path: /usr/local/bin/k3s
register: k3s_bin register: k3s_bin
check_mode: false
changed_when: False changed_when: False
- name: retreive k3s binary for x86_64 - name: Retreive k3s binary for x86_64
get_url: ansible.builtin.get_url:
url: "https://github.com/rancher/k3s/releases/download/v1.20.2%2Bk3s1/k3s" url: "https://github.com/rancher/k3s/releases/download/v{{ kubernetes_k3s_version | urlencode }}/k3s"
dest: "/usr/local/bin/k3s" dest: "/usr/local/bin/k3s"
group: root group: root
owner: root owner: root
@ -22,9 +49,9 @@
- not k3s_bin.stat.exists - not k3s_bin.stat.exists
- ansible_machine == "x86_64" - ansible_machine == "x86_64"
- name: retreive k3s binary for arm64 - name: Retreive k3s binary for arm64
get_url: ansible.builtin.get_url:
url: "https://github.com/rancher/k3s/releases/download/v1.20.2%2Bk3s1/k3s-arm64" url: "https://github.com/rancher/k3s/releases/download/v{{ kubernetes_k3s_version | urlencode }}/k3s-arm64"
dest: "/usr/local/bin/k3s" dest: "/usr/local/bin/k3s"
group: root group: root
owner: root owner: root
@ -33,9 +60,9 @@
- not k3s_bin.stat.exists - not k3s_bin.stat.exists
- ansible_machine == "arm64" - ansible_machine == "arm64"
- name: retreive k3s binary for armv6/armv7 - name: Retreive k3s binary for armv6/armv7
get_url: ansible.builtin.get_url:
url: "https://github.com/rancher/k3s/releases/download/v1.20.2%2Bk3s1/k3s-armhf" url: "https://github.com/rancher/k3s/releases/download/v{{ kubernetes_k3s_version | urlencode }}/k3s-armhf"
dest: "/usr/local/bin/k3s" dest: "/usr/local/bin/k3s"
group: root group: root
owner: root owner: root
@ -45,7 +72,7 @@
- (ansible_machine == "armv7l") or (ansible_machine == "armv6l") - (ansible_machine == "armv7l") or (ansible_machine == "armv6l")
- name: Create tools link - name: Create tools link
file: ansible.builtin.file:
src: "k3s" src: "k3s"
dest: "/usr/local/bin/{{ item }}" dest: "/usr/local/bin/{{ item }}"
owner: root owner: root
@ -56,23 +83,12 @@
- "crictl" - "crictl"
- "ctr" - "ctr"
# Manque kubernetes_server_token, kubernetes_master url - name: Create logical volume for k3s
- name: Deploy systemd service
template:
src: "etc/systemd/system/{{ item }}.j2"
dest: "/etc/systemd/system/{{ item }}"
owner: root
group: root
mode: 0600
with_items:
- "k3s.service"
- "k3s.service.env"
when: when:
- ansible_service_mgr == "systemd" - kubernetes_lvm|bool
block:
- name: Create thin volumes for k3s - name: Create thin volumes for k3s
lvol: community.general.lvol:
vg: "{{ item.vg }}" vg: "{{ item.vg }}"
lv: "{{ item.name }}" lv: "{{ item.name }}"
thinpool: kubernetes thinpool: kubernetes
@ -80,15 +96,15 @@
with_items: with_items:
- { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"} - { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"}
- name: create file system on containerd lv - name: Create file system on containerd lv
filesystem: community.general.filesystem:
fstype: ext4 fstype: ext4
dev: "/dev/{{ item.vg }}/{{ item.name }}" dev: "/dev/{{ item.vg }}/{{ item.name }}"
with_items: with_items:
- { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"} - { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"}
- name: mount logical volumes - name: Mount logical volumes
mount: ansible.posix.mount:
name: "{{ item.mount_point }}" name: "{{ item.mount_point }}"
src: "/dev/{{ item.vg }}/{{ item.name }}" src: "/dev/{{ item.vg }}/{{ item.name }}"
fstype: ext4 fstype: ext4
@ -97,8 +113,195 @@
with_items: with_items:
- { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"} - { name: var_lib_k3s, vg: vg_sys, size: 10g, mount_point: /var/lib/rancher/k3s, mount_opts: "discard"}
- name: Ensure protect-kernel-defaults is set
ansible.posix.sysctl:
name: "{{ item.name }}"
value: "{{ item.value }}"
sysctl_file: /etc/sysctl.d/90-kubelet.conf
reload: true
with_items:
- { name: "vm.panic_on_oom", value: "0" }
- { name: "vm.overcommit_memory", value: "1" }
- { name: "kernel.panic", value: "10" }
- { name: "kernel.panic_on_oops", value: "1" }
when:
- kubernetes_server|bool
- name: /etc/kubernetes directory
ansible.builtin.file:
path: "/etc/kubernetes"
state: directory
owner: root
group: root
mode: 0755
when:
- kubernetes_master|bool
- name: Configure Pod Security
ansible.builtin.copy:
src: "etc/kubernetes/psa.yaml"
dest: "/etc/kubernetes/psa.yaml"
group: root
owner: root
mode: 0644
when:
- kubernetes_master|bool
- name: Audit policies directory
ansible.builtin.file:
path: "/etc/kubernetes/policies"
state: directory
owner: root
group: root
mode: 0700
when:
- kubernetes_master|bool
- name: Configure audit policy
ansible.builtin.copy:
src: "etc/kubernetes/policies/audit-policy.yaml"
dest: "/etc/kubernetes/policies/audit-policy.yaml"
group: root
owner: root
mode: 0644
when:
- kubernetes_master|bool
# Check controlers
- name: Check if /etc/rancher/k3s/k3s.yaml already existe
ansible.builtin.stat:
path: /etc/rancher/k3s/k3s.yaml
register: st
check_mode: false
changed_when: False
when:
- kubernetes_master|bool
- name: Create KubernetesMasterConfigured group
ansible.builtin.group_by:
key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
check_mode: false
when:
- kubernetes_master|bool
- st.stat.exists
# First controler
- name: Configure first controler
# run_once: true
block:
- name: Create k3s directories on master nodes
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: 0700
with_items:
- "/etc/rancher"
- "/etc/rancher/k3s"
- "/etc/rancher/k3s/config.yaml.d"
- "/var/lib/rancher"
- "/var/lib/rancher/k3s"
- "/var/lib/rancher/k3s/server"
- "/var/lib/rancher/k3s/server/manifests"
when:
- kubernetes_master|bool
- name: Create k3s directories on all nodes
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: 0700
with_items:
- "/var/lib/rancher/k3s/storage"
# semanage fcontext -a -t container_file_t "/var/lib/rancher/k3s/storage(/.*)?"
- name: Allow K3S local-path provisioner to create directories in /var/lib/rancher/k3s/storage
community.general.sefcontext:
target: '/var/lib/rancher/k3s/storage(/.*)?'
setype: container_file_t
state: present
- name: Apply new SELinux file context to filesystem
ansible.builtin.command: restorecon -R /var/lib/rancher/k3s/storage/
- name: Deploy Network Policies
ansible.builtin.template:
src: "{{ item }}.j2"
dest: "/{{ item }}"
owner: root
group: root
mode: 0600
with_items:
- "var/lib/rancher/k3s/server/manifests/np-00-intra-namespace.yaml"
- "var/lib/rancher/k3s/server/manifests/np-01-default-network-dns-policy.yaml"
- "var/lib/rancher/k3s/server/manifests/np-03-metrics-server-traefik.yaml"
when:
- kubernetes_master|bool
- name: Deploy systemd service
ansible.builtin.template:
src: "{{ item }}.j2"
dest: "/{{ item }}"
owner: root
group: root
mode: 0600
with_items:
- "etc/systemd/system/k3s.service"
- "etc/systemd/system/k3s.service.env"
- "etc/rancher/k3s/config.yaml"
when:
- ansible_service_mgr == "systemd"
- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: true
- name: Enable k3s on boot - name: Enable k3s on boot
service: ansible.builtin.service:
name: k3s name: k3s
state: started state: started
enabled: yes enabled: true
- name: Wait for k3s.yaml
wait_for:
path: /etc/rancher/k3s/k3s.yaml
- name: Wait for token
wait_for:
path: /var/lib/rancher/k3s/server/token
- name: Add {{ ansible_hostname }} to KubernetesMasterConfigured group
ansible.builtin.group_by:
key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
check_mode: false
when:
- kubernetes_master|bool
- vars['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined
# chmod -R 600 /var/lib/rancher/k3s/server/tls/*.crt
# Manque kubernetes_server_token, kubernetes_master url
# - name: Deploy systemd service
# ansible.builtin.template:
# src: "etc/systemd/system/{{ item }}.j2"
# dest: "/etc/systemd/system/{{ item }}"
# owner: root
# group: root
# mode: 0600
# with_items:
# - "k3s.service"
# - "k3s.service.env"
# when:
# - ansible_service_mgr == "systemd"
- name: Enable k3s on boot
ansible.builtin.service:
name: k3s
state: started
enabled: true

View file

@ -1,27 +1,46 @@
--- ---
- name: Install Containerd - name: Install Containerd
include_role: ansible.builtin.include_role:
name: containerd name: containerd
when: when:
- kubernetes_cri == "containerd" - kubernetes_cri == "containerd"
# register: kubernetes_cri_changed # register: kubernetes_cri_changed
- name: Install CRI-O - name: Install CRI-O
include_role: ansible.builtin.include_role:
name: cri-o name: cri-o
when: when:
- kubernetes_cri == "cri-o" - kubernetes_cri == "cri-o"
# register: kubernetes_cri_changed # register: kubernetes_cri_changed
# - name: Restart kubelet after kubernetes cri installation # - name: Restart kubelet after kubernetes cri installation
# service: # ansible.builtin.service:
# name: kubelet # name: kubelet
# status: restarted # status: restarted
# when: # when:
# - kubernetes_cri_changed is changed # - kubernetes_cri_changed is changed
- name: Configure NetworkManager for Calico
ansible.builtin.copy:
src: "etc/NetworkManager/conf.d/calico.conf"
dest: "/etc/NetworkManager/conf.d/calico.conf"
group: root
owner: root
mode: 0644
when:
- kubernetes_network == "calico"
- ansible_os_family == "RedHat"
register: kubernetes_network_networkmanager_changed
- name: Restart kubelet after kubernetes cri installation
ansible.builtin.service:
name: NetworkManager
status: reload
when:
- kubernetes_network_networkmanager_changed is changed
- name: Configuring IPVS kernel module to be load on boot - name: Configuring IPVS kernel module to be load on boot
template: ansible.builtin.template:
src: "etc/modules-load.d/ipvs.conf.j2" src: "etc/modules-load.d/ipvs.conf.j2"
dest: "/etc/modules-load.d/ipvs.conf" dest: "/etc/modules-load.d/ipvs.conf"
group: root group: root
@ -31,7 +50,7 @@
- kubernetes_kubeproxy_mode == "ipvs" - kubernetes_kubeproxy_mode == "ipvs"
- name: Load IPVS kernel module for EL7 - name: Load IPVS kernel module for EL7
modprobe: community.general.modprobe:
name: "{{ item }}" name: "{{ item }}"
state: present state: present
with_items: with_items:
@ -47,7 +66,7 @@
- ansible_distribution_major_version == '7' - ansible_distribution_major_version == '7'
- name: Load IPVS kernel module for EL8 - name: Load IPVS kernel module for EL8
modprobe: community.general.modprobe:
name: "{{ item }}" name: "{{ item }}"
state: present state: present
with_items: with_items:
@ -59,10 +78,10 @@
when: when:
- kubernetes_kubeproxy_mode == "ipvs" - kubernetes_kubeproxy_mode == "ipvs"
- ansible_os_family == "RedHat" - ansible_os_family == "RedHat"
- ansible_distribution_major_version == '8' - ansible_distribution_major_version >= '8'
- name: Create thin volumes for kubernetes - name: Create thin volumes for kubernetes
lvol: community.general.lvol:
vg: "{{ item.vg }}" vg: "{{ item.vg }}"
lv: "{{ item.name }}" lv: "{{ item.name }}"
thinpool: kubernetes thinpool: kubernetes
@ -74,8 +93,8 @@
when: when:
- kubernetes_master|bool - kubernetes_master|bool
- name: create file system on containerd lv - name: Create file system on containerd lv
filesystem: community.general.filesystem:
fstype: ext4 fstype: ext4
dev: "/dev/{{ item.vg }}/{{ item.name }}" dev: "/dev/{{ item.vg }}/{{ item.name }}"
with_items: with_items:
@ -85,8 +104,8 @@
when: when:
- kubernetes_master|bool - kubernetes_master|bool
- name: mount logical volumes - name: Mount logical volumes
mount: ansible.posix.mount:
name: "{{ item.mount_point }}" name: "{{ item.mount_point }}"
src: "/dev/{{ item.vg }}/{{ item.name }}" src: "/dev/{{ item.vg }}/{{ item.name }}"
fstype: ext4 fstype: ext4
@ -101,14 +120,14 @@
- kubernetes_master|bool - kubernetes_master|bool
- name: Ensuring /var/lib/etcd/lost+found Folder does not exists - name: Ensuring /var/lib/etcd/lost+found Folder does not exists
file: ansible.builtin.file:
path: "/var/lib/etcd/lost+found" path: "/var/lib/etcd/lost+found"
state: "absent" state: "absent"
when: when:
- partition_formated is changed - partition_formated is changed
- name: Secure etcd directory - name: Secure etcd directory
file: ansible.builtin.file:
path: "/var/lib/etcd" path: "/var/lib/etcd"
state: directory state: directory
owner: root owner: root
@ -118,7 +137,7 @@
- kubernetes_master|bool - kubernetes_master|bool
- name: Ensuring /etc/systemd/system/kubelet.service.d Folder Exists - name: Ensuring /etc/systemd/system/kubelet.service.d Folder Exists
file: ansible.builtin.file:
path: "/etc/systemd/system/kubelet.service.d" path: "/etc/systemd/system/kubelet.service.d"
state: "directory" state: "directory"
group: root group: root
@ -128,7 +147,7 @@
- ansible_service_mgr == "systemd" - ansible_service_mgr == "systemd"
- name: Configure kubelet service - name: Configure kubelet service
template: ansible.builtin.template:
src: "etc/{{ item }}.j2" src: "etc/{{ item }}.j2"
dest: "/etc/{{ item }}" dest: "/etc/{{ item }}"
group: root group: root
@ -140,8 +159,35 @@
when: when:
- ansible_service_mgr == "systemd" - ansible_service_mgr == "systemd"
- name: Configure kubelet service for CRI-O
ansible.builtin.template:
src: "etc/{{ item }}.j2"
dest: "/etc/{{ item }}"
group: root
owner: root
mode: 0644
with_items:
- "systemd/system/kubelet.service.d/11-cgroups.conf"
when:
- ansible_service_mgr == "systemd"
- kubernetes_cri == "cri-o"
- name: Enable Swap for kubelet service
ansible.builtin.template:
src: "etc/{{ item }}.j2"
dest: "/etc/{{ item }}"
group: root
owner: root
mode: 0644
with_items:
- "systemd/system/kubelet.service.d/20-allow-swap.conf"
when:
- ansible_service_mgr == "systemd"
- kubernetes_swap_enabled is defined
- kubernetes_swap_enabled|bool
- name: Configure kubelet service - name: Configure kubelet service
template: ansible.builtin.template:
src: "etc/{{ item }}.j2" src: "etc/{{ item }}.j2"
dest: "/etc/{{ item }}" dest: "/etc/{{ item }}"
group: root group: root
@ -153,79 +199,105 @@
- not ansible_service_mgr == "systemd" - not ansible_service_mgr == "systemd"
- name: Enable kubelet on boot - name: Enable kubelet on boot
service: ansible.builtin.service:
name: kubelet name: kubelet
state: started state: started
enabled: yes enabled: true
- name: Audit policies directory
ansible.builtin.file:
path: "/etc/kubernetes/policies"
state: directory
owner: root
group: root
mode: 0700
when:
- kubernetes_master|bool
# https://v1-17.docs.kubernetes.io/docs/tasks/debug-application-cluster/falco/
# https://github.com/falcosecurity/falco/blob/master/rules/k8s_audit_rules.yaml
# Ou récupération de ces règles pour une utilisation avec falco
- name: Configure audit policy
ansible.builtin.copy:
src: "etc/kubernetes/policies/audit-policy.yaml"
dest: "/etc/kubernetes/policies/audit-policy.yaml"
group: root
owner: root
mode: 0644
when:
- kubernetes_master|bool
# First controler # First controler
- name: Check if /etc/kubernetes/admin.conf already existe - name: Check if /etc/kubernetes/admin.conf already existe
stat: ansible.builtin.stat:
path: /etc/kubernetes/admin.conf path: /etc/kubernetes/admin.conf
register: st register: st
check_mode: false
changed_when: False changed_when: False
- name: Create KubernetesMasterConfigured group - name: Create KubernetesMasterConfigured group
group_by: ansible.builtin.group_by:
key: KubernetesMasterConfigured key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
check_mode: false
when: when:
- st.stat.exists - st.stat.exists
- name: Retreive kubeadm Major version - name: Retreive kubeadm Major version
shell: set -o pipefail && kubeadm version | sed 's/.*{Major:"\([0-9]\)".*/\1/' ansible.builtin.shell: set -o pipefail && kubeadm version | sed 's/.*{Major:"\([0-9]\)".*/\1/'
register: kubeadm_version_major register: kubeadm_version_major
check_mode: false
changed_when: False changed_when: False
- name: Retreive kubeadm Minor version - name: Retreive kubeadm Minor version
shell: set -o pipefail && kubeadm version | sed -e 's/.* Minor:"\([0-9]*\)".*/\1/' ansible.builtin.shell: set -o pipefail && kubeadm version | sed -e 's/.* Minor:"\([0-9]*\)".*/\1/'
register: kubeadm_version_minor register: kubeadm_version_minor
check_mode: false
changed_when: False changed_when: False
- name: Defined a default lb_kubemaster - name: Defined a default lb_kubemaster
set_fact: ansible.builtin.set_fact:
lb_kubemaster: "{{ groups['KubernetesMasters'][0] }}" lb_kubemaster: "{{ groups['KubernetesMasters_' ~ kubernetes_cluster_name][0] }}"
when: when:
- lb_kubemaster is undefined - lb_kubemaster is undefined
# - groups['KubernetesMasters'] | length > 1 # - groups['KubernetesMasters'] | length > 1
changed_when: False changed_when: False
check_mode: false
- name: Deploy First controler
block:
- name: Deploy initial kubeadm config - name: Deploy initial kubeadm config
template: ansible.builtin.template:
src: kubeadm-config.yaml.j2 src: kubeadm-config.yaml.j2
dest: /root/kubeadm-config.yaml dest: /root/kubeadm-config.yaml
owner: root owner: root
group: root group: root
mode: 0600 mode: 0600
when:
- groups['KubernetesMasterConfigured'] is not defined
- groups['KubernetesMasters'][0] == ansible_hostname
- name: Init Kubernetes on {{ groups['KubernetesMasters'][0] }} - name: Init Kubernetes on {{ groups['KubernetesMasters_' ~ kubernetes_cluster_name][0] }}
command: kubeadm init --config=/root/kubeadm-config.yaml ansible.builtin.command: kubeadm init --config=/root/kubeadm-config.yaml
when:
- groups['KubernetesMasterConfigured'] is not defined
- groups['KubernetesMasters'][0] == ansible_hostname
- name: Add {{ ansible_hostname }} to KubernetesMasterConfigured group - name: Add {{ ansible_hostname }} to KubernetesMasterConfigured group
group_by: ansible.builtin.group_by:
key: KubernetesMasterConfigured key: KubernetesMasterConfigured_{{ kubernetes_cluster_name }}
check_mode: false
when: when:
- groups['KubernetesMasterConfigured'] is not defined - groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined
- groups['KubernetesMasters'][0] == ansible_hostname - groups['KubernetesMasters_' ~ kubernetes_cluster_name][0] == ansible_hostname
# End of first controler # End of first controler
- name: Test if server node already included - name: Test if server node already included
command: kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes {{ ansible_hostname | lower }} ansible.builtin.command: kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes {{ ansible_hostname | lower }}
delegate_to: "{{ lb_kubemaster }}" delegate_to: "{{ lb_kubemaster }}"
register: server_enrolled register: server_enrolled
changed_when: False changed_when: False
ignore_errors: yes ignore_errors: yes
when: check_mode: false
- groups['KubernetesMasterConfigured'] is not defined
# - name: Deploy kubeadm config # - name: Deploy kubeadm config
# template: # ansible.builtin.template:
# src: kubeadm-config.yaml.j2 # src: kubeadm-config.yaml.j2
# dest: /root/kubeadm-config.yaml # dest: /root/kubeadm-config.yaml
# owner: root # owner: root
@ -236,24 +308,24 @@
# - server_enrolled.rc == 1 # - server_enrolled.rc == 1
- name: Retreive certificats key on {{ lb_kubemaster }} - name: Retreive certificats key on {{ lb_kubemaster }}
shell: set -o pipefail && kubeadm init phase upload-certs --upload-certs | grep -v upload-certs ansible.builtin.shell: set -o pipefail && kubeadm init phase upload-certs --upload-certs | grep -v upload-certs
register: kubernetes_certificateKey register: kubernetes_certificateKey
check_mode: false
delegate_to: "{{ lb_kubemaster }}" delegate_to: "{{ lb_kubemaster }}"
when: when:
- groups['KubernetesMasterConfigured'] is not defined
- server_enrolled.rc == 1 - server_enrolled.rc == 1
- kubernetes_master|bool - kubernetes_master|bool
- name: Retreive token on "{{ lb_kubemaster }}" - name: Retreive token on "{{ lb_kubemaster }}"
command: kubeadm token create ansible.builtin.command: kubeadm token create
register: kubetoken register: kubetoken
delegate_to: "{{ lb_kubemaster }}" delegate_to: "{{ lb_kubemaster }}"
check_mode: false
when: when:
- groups['KubernetesMasterConfigured'] is not defined
- server_enrolled.rc == 1 - server_enrolled.rc == 1
- name: Retreive hash certificat - name: Retreive hash certificat
shell: > ansible.builtin.shell: >
set -o pipefail && set -o pipefail &&
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |
openssl rsa -pubin -outform der 2>/dev/null | openssl rsa -pubin -outform der 2>/dev/null |
@ -261,23 +333,21 @@
sed 's/^.* //' sed 's/^.* //'
register: cacerthash register: cacerthash
delegate_to: "{{ lb_kubemaster }}" delegate_to: "{{ lb_kubemaster }}"
check_mode: false
when: when:
- groups['KubernetesMasterConfigured'] is not defined
- server_enrolled.rc == 1 - server_enrolled.rc == 1
- name: Deploy kubeadm config - name: Deploy kubeadm config
template: ansible.builtin.template:
src: kubeadm-config.yaml.j2 src: kubeadm-config.yaml.j2
dest: /root/kubeadm-config.yaml dest: /root/kubeadm-config.yaml
owner: root owner: root
group: root group: root
mode: 0600 mode: 0600
when: when:
- groups['KubernetesMasterConfigured'] is not defined
- server_enrolled.rc == 1 - server_enrolled.rc == 1
- name: Join '{{ ansible_hostname }}' to Kubernetes cluster - name: Join '{{ ansible_hostname }}' to Kubernetes cluster
command: kubeadm join --config=/root/kubeadm-config.yaml ansible.builtin.command: kubeadm join --config=/root/kubeadm-config.yaml
when: when:
- groups['KubernetesMasterConfigured'] is not defined
- server_enrolled.rc == 1 - server_enrolled.rc == 1

View file

@ -1,52 +1,53 @@
--- ---
- name: Include vars for not taint Kubernetes masters
ansible.builtin.include_vars: masters.yml
when:
- kubernetes_master|bool
- not kubernetes_master_taint|bool
- name: Add master to KubernetesMasters_ClusterName group
ansible.builtin.group_by:
key: KubernetesMasters_{{ kubernetes_cluster_name }}
check_mode: false
when:
- "'KubernetesMasters' in group_names"
- name: Add node to KubernetesNodes_ClusterName group
ansible.builtin.group_by:
key: KubernetesNodes_{{ kubernetes_cluster_name }}
check_mode: false
when:
- "'KubernetesNodes' in group_names"
- name: Disable SWAP since kubernetes can't work with swap enabled (1/2) - name: Disable SWAP since kubernetes can't work with swap enabled (1/2)
command: swapoff -a ansible.builtin.command: swapoff -a
changed_when: false changed_when: false
- name: Remove swapfile from /etc/fstab (2/2) - name: Remove swapfile from /etc/fstab (2/2)
mount: ansible.posix.mount:
name: swap name: swap
fstype: swap fstype: swap
state: absent state: absent
- name: Create a thin pool for kubernetes - name: Create a thin pool for kubernetes
lvol: community.general.lvol:
vg: vg_sys vg: vg_sys
thinpool: kubernetes thinpool: kubernetes
size: 20g size: "{{ lv_kubernetes_size | default('20g') }}"
# Install API loadbalancer ## Install API loadbalancer
- include_tasks: "load_balancer.yml" # - ansible.builtin.include_tasks: "load_balancer.yml"
when: # when:
- kubernetes_master|bool # - kubernetes_master|bool
- groups['KubernetesMasters'] | length > 1 # - groups['KubernetesMasters'] | length > 1
- name: Audit policies directory
file:
path: "/etc/kubernetes/policies"
state: directory
owner: root
group: root
mode: 0700
when:
- kubernetes_master|bool
- name: Configure audit policy
copy:
src: "etc/kubernetes/policies/audit-policy.yaml"
dest: "/etc/kubernetes/policies/audit-policy.yaml"
group: root
owner: root
mode: 0644
when:
- kubernetes_master|bool
- name: Kubernetes cluster with kubeadm - name: Kubernetes cluster with kubeadm
include_tasks: "cluster_kubeadm.yml" ansible.builtin.include_tasks: "cluster_kubeadm.yml"
when: when:
- kubernetes_cri != "k3s" - kubernetes_cri != "k3s"
- name: Kubernetes cluster with k3s - name: Kubernetes cluster with k3s
include_tasks: "cluster_k3s.yml" ansible.builtin.include_tasks: "cluster_k3s.yml"
when: when:
- kubernetes_cri == "k3s" - kubernetes_cri == "k3s"
@ -55,7 +56,7 @@
# #
- name: Make /root/.kube directory - name: Make /root/.kube directory
file: ansible.builtin.file:
path: "/root/.kube" path: "/root/.kube"
owner: root owner: root
group: root group: root
@ -65,10 +66,10 @@
- kubernetes_master|bool - kubernetes_master|bool
- name: Copy kubeconfig file from /etc/kubernetes/admin.conf - name: Copy kubeconfig file from /etc/kubernetes/admin.conf
copy: ansible.builtin.copy:
src: "/etc/kubernetes/admin.conf" src: "/etc/kubernetes/admin.conf"
dest: /root/.kube/config dest: /root/.kube/config
remote_src: yes remote_src: true
owner: root owner: root
group: root group: root
mode: 0600 mode: 0600
@ -77,10 +78,10 @@
- kubernetes_cri != "k3s" - kubernetes_cri != "k3s"
- name: Copy kubeconfig file from /etc/rancher/k3s/k3s.yaml - name: Copy kubeconfig file from /etc/rancher/k3s/k3s.yaml
copy: ansible.builtin.copy:
src: "/etc/rancher/k3s/k3s.yaml" src: "/etc/rancher/k3s/k3s.yaml"
dest: /root/.kube/config dest: /root/.kube/config
remote_src: yes remote_src: true
owner: root owner: root
group: root group: root
mode: 0600 mode: 0600
@ -88,27 +89,40 @@
- kubernetes_master|bool - kubernetes_master|bool
- kubernetes_cri == "k3s" - kubernetes_cri == "k3s"
- name: Make link from /etc/rancher/k3s/k3s.yaml to /etc/kubernetes/admin.conf
file:
src: "/etc/rancher/k3s/k3s.yaml"
state: link
dest: "/etc/kubernetes/admin.conf"
force: yes
owner: root
group: root
when:
- kubernetes_master|bool
- kubernetes_cri == "k3s"
# #
# Manque autoconfig de .kube/config local # Manque autoconfig de .kube/config local
# #
# - name: Fetching CA certificat # - name: Fetching CA certificat
# copy: # ansible.builtin.copy:
# src: /etc/kubernetes/pki/ca.crt # src: /etc/kubernetes/pki/ca.crt
# dest: /root/.kube/{{ kubernetes_cluster_name }}/ca.crt # dest: /root/.kube/{{ kubernetes_cluster_name }}/ca.crt
# when: # when:
# - kubernetes_master|bigip_pool # - kubernetes_master|bigip_pool
# kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints --no-headers
- name: Check if a node is still tainted - name: Check if a node is still tainted
command: kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes '{{ ansible_hostname | lower }}' -o jsonpath='{.spec.taints}' ansible.builtin.command: kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes '{{ ansible_hostname | lower }}' -o jsonpath='{.spec.taints}'
register: current_taint register: current_taint
check_mode: false
when: when:
- kubernetes_master_taint|bool - kubernetes_master_taint|bool
- name: taint the machine if needed - name: Taint the machine if needed
# command: kubectl --kubeconfig=/etc/kubernetes/admin.conf taint nodes --all node-role.kubernetes.io/master- # ansible.builtin.command: kubectl --kubeconfig=/etc/kubernetes/admin.conf taint nodes --all node-role.kubernetes.io/master-
command: kubectl taint nodes '{{ ansible_hostname | lower }}' node-role.kubernetes.io/master- ansible.builtin.command: kubectl --kubeconfig=/etc/kubernetes/admin.conf taint nodes '{{ ansible_hostname | lower }}' node-role.kubernetes.io/master-
when: when:
- kubernetes_master_taint|bool - kubernetes_master_taint|bool
- current_taint.stdout - current_taint.stdout

View file

@ -1,22 +1,21 @@
--- ---
- name: Install needed packages - name: Install needed packages
package: ansible.builtin.package:
name: "{{ item }}" name:
state: present
update_cache: yes
with_items:
- keepalived - keepalived
- curl - curl
state: present
update_cache: true
notify: Restart keepalived notify: Restart keepalived
- name: Install check_apiserver.sh script for keepalived - name: Install check_apiserver.sh script for keepalived
template: ansible.builtin.template:
src: etc/keepalived/check_apiserver.sh.j2 src: etc/keepalived/check_apiserver.sh.j2
dest: /etc/keepalived/check_apiserver.sh dest: /etc/keepalived/check_apiserver.sh
owner: root owner: root
group: root group: root
mode: 0755 mode: 0755
- name: Install keepalived config file - name: Install keepalived config file
template: ansible.builtin.template:
src: etc/keepalived/keepalived.conf.j2 src: etc/keepalived/keepalived.conf.j2
dest: /etc/keepalived/keepalived.conf dest: /etc/keepalived/keepalived.conf
owner: root owner: root
@ -28,7 +27,7 @@
- groups['KubernetesMasters'][0] == ansible_hostname - groups['KubernetesMasters'][0] == ansible_hostname
notify: Restart keepalived notify: Restart keepalived
- name: Install keepalived config file - name: Install keepalived config file
template: ansible.builtin.template:
src: etc/keepalived/keepalived.conf.j2 src: etc/keepalived/keepalived.conf.j2
dest: /etc/keepalived/keepalived.conf dest: /etc/keepalived/keepalived.conf
owner: root owner: root
@ -39,3 +38,6 @@
when: when:
- not groups['KubernetesMasters'][0] == ansible_hostname - not groups['KubernetesMasters'][0] == ansible_hostname
notify: Restart keepalived notify: Restart keepalived
- name: Flush handlers
ansible.builtin.meta: flush_handlers

View file

@ -1,55 +1,63 @@
--- ---
- name: Kubernetes Install
tags:
- kubernetes
block:
- name: Include vars for {{ ansible_os_family }} - name: Include vars for {{ ansible_os_family }}
include_vars: "{{ ansible_os_family }}.yml" ansible.builtin.include_vars: "{{ ansible_os_family }}.yml"
- name: Define vars for master - name: Define vars for master
set_fact: ansible.builtin.set_fact:
kubernetes_server: true kubernetes_server: true
kubernetes_master: true kubernetes_master: true
kubernetes_master_taint: false kubernetes_master_taint: false
check_mode: false
when: when:
- "'KubernetesMasters' in group_names" - "'KubernetesMasters' in group_names"
- "'KubernetesNodes' not in group_names" - "'KubernetesNodes' not in group_names"
- name: Define vars for node - name: Define vars for node
set_fact: ansible.builtin.set_fact:
kubernetes_server: true kubernetes_server: true
kubernetes_master: false kubernetes_master: false
kubernetes_master_taint: false kubernetes_master_taint: false
check_mode: false
when: when:
- "'KubernetesNodes' in group_names" - "'KubernetesNodes' in group_names"
- "'KubernetesMasters' not in group_names" - "'KubernetesMasters' not in group_names"
- name: Define vars for taint master - name: Define vars for taint master
set_fact: ansible.builtin.set_fact:
kubernetes_server: true kubernetes_server: true
kubernetes_master: true kubernetes_master: true
kubernetes_master_taint: true kubernetes_master_taint: true
check_mode: false
when: when:
- "'KubernetesNodes' in group_names" - "'KubernetesNodes' in group_names"
- "'KubernetesMasters' in group_names" - "'KubernetesMasters' in group_names"
- name: Define vars for tooling - name: Define vars for tooling
set_fact: ansible.builtin.set_fact:
kubernetes_sever: false kubernetes_sever: false
check_mode: false
when: when:
- "'KubernetesMasters' not in group_names" - "'KubernetesMasters' not in group_names"
- "'KubernetesNodes' not in group_names" - "'KubernetesNodes' not in group_names"
- name: Install kubernetes rules for {{ ansible_os_family }} OS family - name: Install kubernetes rules for {{ ansible_os_family }} OS family
include_tasks: "{{ ansible_os_family }}.yml" ansible.builtin.include_tasks: "{{ ansible_os_family }}.yml"
- name: Install kubernetes tools # - name: Install kubernetes tools
package: # ansible.builtin.package:
name: "{{ kubernetes_package_name }}" # name: "{{ kubernetes_package_name }}"
state: present # state: present
update_cache: yes # update_cache: true
# notify: Restart kubelet ## notify: Restart kubelet
when: # when:
- (not kubernetes_server|bool) or ( kubernetes_server|bool and kubernetes_cri != "k3s") # - (not kubernetes_server|bool) or ( kubernetes_server|bool and kubernetes_cri != "k3s")
- name: Include kubernetes server rules - name: Include kubernetes server rules
include_tasks: "install_server.yml" ansible.builtin.include_tasks: "install_server.yml"
when: when:
- kubernetes_server|bool - kubernetes_server|bool

View file

@ -9,6 +9,12 @@
{% if kubernetes_master == true %} {% if kubernetes_master == true %}
# Kubernetes API server, used by all # Kubernetes API server, used by all
<port protocol="tcp" port="6443"/> <port protocol="tcp" port="6443"/>
{% endif %}
{% if kubernetes_cri == "k3s" %}
# K3S with flannel and wireguard
<port protocol="udp" port="51820"/>
{% else %}
{% if kubernetes_master == true %}
# etcd server client API, used by kube-apiserver and etcd # etcd server client API, used by kube-apiserver and etcd
<port protocol="tcp" port="2379"/> <port protocol="tcp" port="2379"/>
<port protocol="tcp" port="2380"/> <port protocol="tcp" port="2380"/>
@ -18,8 +24,8 @@
<port protocol="tcp" port="10251"/> <port protocol="tcp" port="10251"/>
# kube-controler-manager, used by self # kube-controler-manager, used by self
<port protocol="tcp" port="10252"/> <port protocol="tcp" port="10252"/>
# ??? # Read-only Kubelet API (Deprecated)
<port protocol="tcp" port="10255"/> # <port protocol="tcp" port="10255"/>
{% else %} {% else %}
<port protocol="tcp" port="10250"/> <port protocol="tcp" port="10250"/>
{% endif %} {% endif %}
@ -35,4 +41,5 @@
<port protocol="udp" port="6783-6784"/> <port protocol="udp" port="6783-6784"/>
<port protocol="tcp" port="6783"/> <port protocol="tcp" port="6783"/>
{% endif %} {% endif %}
{% endif %}
</service> </service>

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: Config
clusters:
- name: falco
cluster:
server: http://$FALCO_SERVICE_CLUSTERIP:8765/k8s-audit
contexts:
- context:
cluster: falco
user: ""
name: default-context
current-context: default-context
preferences: {}
users: []

View file

@ -0,0 +1,55 @@
{% if 'Vpn' in group_names %}
flannel-backend: vxlan
{% else %}
flannel-backend: wireguard-native
{% endif %}
protect-kernel-defaults: true
{% if kubernetes_master|bool %}
secrets-encryption: true
kube-apiserver-arg:
- "enable-admission-plugins=NodeRestriction,AlwaysPullImages,EventRateLimit"
- 'admission-control-config-file=/etc/kubernetes/psa.yaml'
- 'audit-log-path=/var/log/apiserver/audit.log'
- 'audit-policy-file=/etc/kubernetes/policies/audit-policy.yaml'
- 'audit-log-maxage=30'
- 'audit-log-maxbackup=10'
- 'audit-log-maxsize=100'
# - "request-timeout=300s"
kube-controller-manager-arg:
- 'terminated-pod-gc-threshold=10'
cluster-cidr:
- {{ kubernetes_pods_network }}
service-cidr:
- {{ kubernetes_svc_network }}
{% if vars['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined %}
cluster-init: true
{% else %}
server: https://{{ kubernetes_master }}:6443
token: ${NODE_TOKEN}
{% endif %}
{% else %}
server: https://{{ kubernetes_master }}:6443
token: ${NODE_TOKEN}
{% endif %}
kubelet-arg:
- 'streaming-connection-idle-timeout=5m'
- "tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305"
{% if false %}
- 'feature-gates=NodeSwap=true,CloudDualStackNodeIPs=true'
{% endif %}
{% if ansible_os_family == "RedHat" %}
selinux: true
{% endif %}
#embedded-registry: true
disable:
- traefik
{% if lookup('vars', 'ansible_' + kubernetes_interface ) != ansible_host %}
node-external-ip: {{ ansible_host }}
{% endif %}
node-ip: {{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}
{% if false %}
# node-external-ip: 1.2.3.4
#node-label:
# - "foo=bar"
# - "something=amazing"
{% endif %}

View file

@ -1,2 +1,2 @@
#https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates #https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates
KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint={% if kubernetes_cri == "containerd" %}unix:///run/containerd/containerd.sock{% elif kubernetes_cri == "cri-o" %}unix:///var/run/crio/crio.sock{% endif %} --node-ip={{ ansible_default_ipv4.address }}" KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint={% if kubernetes_cri == "containerd" %}unix:///run/containerd/containerd.sock{% elif kubernetes_cri == "cri-o" %}unix:///var/run/crio/crio.sock{% endif %} --node-ip={{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}"

View file

@ -7,9 +7,9 @@ After=network-online.target
Type=notify Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env EnvironmentFile=/etc/systemd/system/k3s.service.env
{% if kubernetes_master|bool %} {% if kubernetes_master|bool %}
ExecStart=/usr/local/bin/k3s server --flannel-backend=wireguard --disable traefik --secrets-encryption ExecStart=/usr/local/bin/k3s server
{% else %} {% else %}
ExecStart=/usr/local/bin/k3s agent --server https://{{ kubernetes_master }}:6443 --token ${NODE_TOKEN} ExecStart=/usr/local/bin/k3s agent
{% endif %} {% endif %}
KillMode=process KillMode=process
Delegate=yes Delegate=yes

View file

@ -1,2 +1,2 @@
[Service] [Service]
Environment=KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint={% if kubernetes_cri == "containerd" %}unix:///run/containerd/containerd.sock{% elif kubernetes_cri == "cri-o" %}unix:///var/run/crio/crio.sock{% endif %} --node-ip={{ ansible_default_ipv4.address }}" Environment=KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint={% if kubernetes_cri == "containerd" %}unix:///run/containerd/containerd.sock{% elif kubernetes_cri == "cri-o" %}unix:///var/run/crio/crio.sock{% endif %} --node-ip={{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}"

View file

@ -0,0 +1,5 @@
# https://stackoverflow.com/a/57456786
# https://stackoverflow.com/questions/57456667/failed-to-get-kubelets-cgroup
[Service]
CPUAccounting=true
MemoryAccounting=true

View file

@ -0,0 +1 @@
[Service] Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

View file

@ -1,7 +1,7 @@
[kubernetes] [kubernetes]
name=Kubernetes name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ ansible_machine }} baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ ansible_machine }}
enabled=1 enabled=0
gpgcheck=1 gpgcheck=1
repo_gpgcheck=1 repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

View file

@ -1,4 +1,4 @@
apiVersion: kubeadm.k8s.io/v1beta2 apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration kind: InitConfiguration
{% if kubetoken is defined %} {% if kubetoken is defined %}
bootstrapTokens: bootstrapTokens:
@ -14,8 +14,9 @@ nodeRegistration:
{% elif kubernetes_cri == "docker" %} {% elif kubernetes_cri == "docker" %}
criSocket: "/var/run/docker.sock" criSocket: "/var/run/docker.sock"
{% endif %} {% endif %}
name: {{ ansible_hostname }}
{% if false %} {% if false %}
name: "ec2-10-100-0-1" imagePullPolicy: IfNotPresent
taints: taints:
- key: "kubeadmNode" - key: "kubeadmNode"
value: "master" value: "master"
@ -25,70 +26,47 @@ nodeRegistration:
{% if ansible_service_mgr == "systemd" %} {% if ansible_service_mgr == "systemd" %}
cgroup-driver: "systemd" cgroup-driver: "systemd"
{% endif %} {% endif %}
container-runtime: "remote"
runtime-request-timeout: "5m" runtime-request-timeout: "5m"
{% if kubernetes_cri == "containerd" %} node-ip: {{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}
container-runtime-endpoint: "unix:///run/containerd/containerd.sock"
{% elif kubernetes_cri == "cri-o" %}
container-runtime-endpoint: "unix:///var/run/crio/crio.sock"
{% endif %}
node-ip: {{ ansible_default_ipv4.address }}
read-only-port: "10255" read-only-port: "10255"
ignorePreflightErrors: ignorePreflightErrors:
- SystemVerification - SystemVerification
{% if (kubernetes_master|bool and not kubernetes_master_taint|bool) %}
- NumCPU
{% endif %}
{% if true == false %} {% if true == false %}
- IsPrivilegedUser - IsPrivilegedUser
{% endif %} {% endif %}
localAPIEndpoint: localAPIEndpoint:
advertiseAddress: "{{ ansible_default_ipv4.address }}" advertiseAddress: "{{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}"
bindPort: 6443 bindPort: 6443
{% if kubernetes_master|bool and groups['KubernetesMasterConfigured'] is defined %} {% if kubernetes_master|bool and groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is defined %}
certificateKey: "{{ kubernetes_certificateKey.stdout }}" certificateKey: "{{ kubernetes_certificateKey.stdout }}"
{% endif %} {% endif %}
{% if kubernetes_master|bool and groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is not defined %}
--- ---
apiVersion: kubeadm.k8s.io/v1beta2 apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
{% if kubernetes_master|bool %}
controlPlane:
localAPIEndpoint:
advertiseAddress: "{{ ansible_default_ipv4.address }}"
bindPort: 6443
{% if groups['KubernetesMasterConfigured'] is defined %}
certificateKey: "{{ kubernetes_certificateKey.stdout }}"
{% endif %}
{% endif %}
discovery:
bootstrapToken:
apiServerEndpoint: "{{ lb_kubemaster }}:6443"
{% if groups['KubernetesMasterConfigured'] is defined %}
caCertHashes:
- sha256:{{ cacerthash.stdout }}
token: "{{ kubetoken.stdout }}"
{% endif %}
nodeRegistration:
kubeletExtraArgs:
node-ip: {{ ansible_default_ipv4.address }}
read-only-port: "10255"
ignorePreflightErrors:
- SystemVerification
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: stable kubernetesVersion: stable
{% if lbip_kubeapiserver is defined %} {% if lbip_kubeapiserver is defined %}
controlPlaneEndpoint: "{{ lbip_kubeapiserver }}:6443" controlPlaneEndpoint: "{{ lbip_kubeapiserver }}:6443"
{% else %} {% else %}
controlPlaneEndpoint: "{{ ansible_default_ipv4.address }}:6443" controlPlaneEndpoint: "{{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}:6443"
{% endif %} {% endif %}
apiServer: apiServer:
extraArgs: extraArgs:
enable-admission-plugins: NodeRestriction,PodSecurityPolicy enable-admission-plugins: NodeRestriction,AlwaysPullImages,EventRateLimit
authorization-mode: "Node,RBAC" authorization-mode: "Node,RBAC"
audit-policy-file: "/etc/kubernetes/policies/audit-policy.yaml" audit-policy-file: "/etc/kubernetes/policies/audit-policy.yaml"
audit-log-path: "/var/log/apiserver/audit.log" audit-log-path: "/var/log/apiserver/audit.log"
audit-log-maxage: "30" audit-log-maxage: "30"
audit-log-maxbackup: "10" audit-log-maxbackup: "10"
audit-log-maxsize: "100" audit-log-maxsize: "100"
{% if false %}
# Falco
audit-webhook-config-file: "/etc/kubernetes/policies/audit-webhook-kubeconfig"
audit-webhook-batch-max-wait: "5s"
{% endif %}
extraVolumes: extraVolumes:
- name: "audit-log" - name: "audit-log"
hostPath: "/var/log/apiserver" hostPath: "/var/log/apiserver"
@ -96,35 +74,163 @@ apiServer:
readOnly: false readOnly: false
pathType: DirectoryOrCreate pathType: DirectoryOrCreate
- name: "audit-policies" - name: "audit-policies"
hostPath: "/etc/kubernetes/policies" hostPath: "/etc/kubernetes/policies/audit-policy.yaml"
mountPath: "/etc/kubernetes/policies" mountPath: "/etc/kubernetes/policies/audit-policy.yaml"
readOnly: false readOnly: false
pathType: DirectoryOrCreate pathType: File
{% if lb_kubemaster is defined %} {% if lb_kubemaster is defined %}
certSANs: certSANs:
- "{{ lb_kubemaster }}" - "{{ lb_kubemaster }}"
{% endif %} {% endif %}
{% if kubernetes_network == "flannel" or kubernetes_network == "calico" %} {% if kubernetes_network == "flannel" or kubernetes_network == "calico" %}
networking: networking:
{% if kubernetes_network == "flannel" %} podSubnet: "{{ kubernetes_pods_network }}"
podSubnet: "10.244.0.0/16" serviceSubnet: "{{ kubernetes_svc_network }}"
{% elif kubernetes_network == "calico" %} {% endif %}
podSubnet: "192.168.0.0/16" controllerManager:
extraArgs:
bind-address: 0.0.0.0
scheduler:
extraArgs:
bind-address: 0.0.0.0
etcd:
local:
dataDir: /var/lib/etcd
extraArgs:
listen-metrics-urls: http://0.0.0.0:2381
{% endif %}
{% if not kubernetes_master|bool or kubernetes_master|bool and groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is defined %}
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: JoinConfiguration
{% if kubernetes_master|bool %}
controlPlane:
localAPIEndpoint:
advertiseAddress: "{{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}"
bindPort: 6443
{% if groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is defined %}
certificateKey: "{{ kubernetes_certificateKey.stdout }}"
{% endif %}
{% endif %}
discovery:
bootstrapToken:
apiServerEndpoint: "{{ lb_kubemaster }}:6443"
{% if groups['KubernetesMasterConfigured_' ~ kubernetes_cluster_name] is defined %}
caCertHashes:
- sha256:{{ cacerthash.stdout }}
token: "{{ kubetoken.stdout }}"
{% endif %}
nodeRegistration:
kubeletExtraArgs:
node-ip: {{ lookup('vars', 'ansible_' + kubernetes_interface ).ipv4.address }}
# read-only-port: "10255"
ignorePreflightErrors:
- SystemVerification
{% if kubernetes_swap_enabled is defined and kubernetes_swap_enabled|bool %}
- Swap
{% endif %}
{% if (kubernetes_master|bool and not kubernetes_master_taint|bool) %}
- NumCPU
{% endif %} {% endif %}
{% endif %} {% endif %}
--- ---
apiVersion: kubeproxy.config.k8s.io/v1alpha1 apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration kind: KubeProxyConfiguration
metricsBindAddress: "0.0.0.0:10249"
{% if kubernetes_kubeproxy_mode is defined %} {% if kubernetes_kubeproxy_mode is defined %}
mode: {{ kubernetes_kubeproxy_mode }} mode: {{ kubernetes_kubeproxy_mode }}
{% if kubernetes_kubeproxy_mode == "ipvs" %}
ipvs:
strictARP: true
{% endif %}
{% endif %} {% endif %}
--- ---
apiVersion: kubelet.config.k8s.io/v1beta1 apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration kind: KubeletConfiguration
runtimeRequestTimeout: 5m #authentication:
# anonymous:
# enabled: false
# webhook:
# cacheTTL: 2m0s
# enabled: true
# x509:
# clientCAFile: /etc/kubernetes/pki/ca.crt
#authorization:
# mode: Webhook
# webhook:
# cacheAuthorizedTTL: 5m0s
# cacheUnauthorizedTTL: 30s
{% if ansible_service_mgr == "systemd" %} {% if ansible_service_mgr == "systemd" %}
cgroupDriver: systemd cgroupDriver: systemd
{% endif %} {% endif %}
#cgroupsPerQOS: true
#clusterDNS:
#- 10.96.0.10
#clusterDomain: cluster.local
#configMapAndSecretChangeDetectionStrategy: Watch
#containerLogMaxFiles: 5
#containerLogMaxSize: 10Mi
#contentType: application/vnd.kubernetes.protobuf
#cpuCFSQuota: true
#cpuCFSQuotaPeriod: 100ms
#cpuManagerPolicy: none
#cpuManagerReconcilePeriod: 10s
#enableControllerAttachDetach: true
#enableDebuggingHandlers: true
#enforceNodeAllocatable:
#- pods
#eventBurst: 10
#eventRecordQPS: 5
#evictionHard:
# imagefs.available: 15%
# memory.available: 500Mi
# nodefs.available: 10%
# nodefs.inodesFree: 5%
#evictionPressureTransitionPeriod: 5m0s
{% if kubernetes_swap_enabled is defined and kubernetes_swap_enabled|bool %}
# Activation du swap
failSwapOn: false
featureGates:
NodeSwap: true
memorySwap:
swapBehavior: UnlimitedSwap
{% endif %}
#fileCheckFrequency: 20s
#hairpinMode: promiscuous-bridge
#healthzBindAddress: 127.0.0.1
#healthzPort: 10248
#httpCheckFrequency: 20s
#imageGCHighThresholdPercent: 85
#imageGCLowThresholdPercent: 80
#imageMinimumGCAge: 2m0s
#iptablesDropBit: 15
#iptablesMasqueradeBit: 14
#kubeAPIBurst: 10
#kubeAPIQPS: 5
#logging: {}
#makeIPTablesUtilChains: true
#maxOpenFiles: 1000000
#maxPods: 110
#memorySwap: {}
#nodeLeaseDurationSeconds: 40
#nodeStatusReportFrequency: 1m0s
#nodeStatusUpdateFrequency: 10s
#oomScoreAdj: -999
#podPidsLimit: -1
#port: 10250
#registryBurst: 10
#registryPullQPS: 5
#resolvConf: /etc/resolv.conf
#rotateCertificates: true
runtimeRequestTimeout: 5m
#serializeImagePulls: true
#shutdownGracePeriod: 0s
#shutdownGracePeriodCriticalPods: 0s
#staticPodPath: /etc/kubernetes/manifests
#streamingConnectionIdleTimeout: 4h0m0s
#syncFrequency: 1m0s
#topologyManagerPolicy: none
#volumeStatsAggPeriod: 1m0s
{% if false %} {% if false %}
readOnlyPort: 1 readOnlyPort: 1

View file

@ -0,0 +1,12 @@
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: intra-namespace
namespace: kube-system
spec:
podSelector: {}
ingress:
- from:
- namespaceSelector:
matchLabels:
name: kube-system

View file

@ -0,0 +1,17 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-network-dns-policy
namespace: kube-system
spec:
ingress:
- ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
podSelector:
matchLabels:
k8s-app: kube-dns
policyTypes:
- Ingress

View file

@ -0,0 +1,42 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-metrics-server
namespace: kube-system
spec:
podSelector:
matchLabels:
k8s-app: metrics-server
ingress:
- {}
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-svclbtraefik-ingress
namespace: kube-system
spec:
podSelector:
matchLabels:
svccontroller.k3s.cattle.io/svcname: traefik
ingress:
- {}
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-all-traefik-v121-ingress
namespace: kube-system
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: traefik
ingress:
- {}
policyTypes:
- Ingress
---

View file

@ -1,8 +1,9 @@
--- ---
kubernetes_package_name: kubernetes_package_name:
- kubectl - kubectl-{{ kubernetes_version }}
- kubelet - kubelet-{{ kubernetes_version }}
- kubeadm - kubeadm-{{ kubernetes_version }}
- iproute-tc - iproute-tc
- ipvsadm
#kubernetes_remove_packages_name: #kubernetes_remove_packages_name:
# - kubernetes.io # - kubernetes.io

3
vars/masters.yml Normal file
View file

@ -0,0 +1,3 @@
---
lv_containers_size: 2g
lv_kubernetes_size: 8g