Skip to content

Commit 405c9b4

Browse files
committed
Initial refactor for new k8s version
1 parent 861dcc0 commit 405c9b4

15 files changed

+199
-47
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
This ansible role will install and configure a high available Kubernetes cluster. This repo automate the installation process of Kubernetes using [kubeadm](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/).
99

10-
This repo is only a example on how to use Ansible automation to install and configure a Kubernetes cluster. For a production environment use [Kubespray](https://kubernetes.io/docs/setup/production-environment/tools/kubespray/)
10+
This repo is only a example on how to use Ansible automation to install and configure a Kubernetes cluster. For a production environment use [Kubespray](https://kubespray.io)
1111

1212
## Requirements
1313

defaults/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
disable_firewall: no
44

5-
kubernetes_version: 1.27.3
5+
kubernetes_version: 1.31.4
66
kubernetes_cri: containerd
77
kubernetes_cni: flannel
88
kubernetes_dns_domain: cluster.local
@@ -15,7 +15,7 @@ kubernetes_subnet: 192.168.25.0/24
1515
setup_vip: no
1616
kubernetes_vip_ip: 192.168.25.225
1717

18-
kubevip_version: v0.6.0
18+
kubevip_version: v0.8.7
1919

2020
install_longhorn: no
2121
longhorn_version: v1.4.3

tasks/init_cluster.yml

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,28 @@
55
ignore_errors: true
66
register: cluster_exist
77

8-
- set_fact:
8+
- ansible.builtin.set_fact:
99
kubernetes_init: "{% if kubernetes_init_host is defined and kubernetes_init_host == inventory_hostname %}yes{% else %}no{% endif %}"
1010

11-
- set_fact:
11+
- ansible.builtin.set_fact:
1212
kubernetes_ip_address: "{{ item }}"
13-
when: "item | ansible.utils.ipaddr( kubernetes_subnet )"
13+
when:
14+
- ansible_interfaces | length > 2
15+
- kubernetes_vip_ip is defined
16+
- "item | ansible.utils.ipaddr( kubernetes_subnet )"
1417
with_items: "{{ ansible_all_ipv4_addresses | difference([kubernetes_vip_ip]) }}"
1518

16-
- set_fact:
19+
- ansible.builtin.set_fact:
20+
kubernetes_ip_address: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
21+
when:
22+
- ansible_interfaces | length <= 2
23+
24+
- ansible.builtin.set_fact:
1725
kubernetes_image_repository: "registry.k8s.io"
1826

1927
- block:
20-
21-
- set_fact:
22-
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_' + item ]['device'] }}"
23-
when:
24-
- hostvars[inventory_hostname]['ansible_' + item ].ipv4 is defined
25-
- hostvars[inventory_hostname]['ansible_' + item ]['ipv4']['address'] | ansible.utils.ipaddr( kubernetes_subnet )
26-
with_items: "{{ ansible_interfaces }}"
2728

28-
- set_fact:
29+
- ansible.builtin.set_fact:
2930
apiserver_sans: "{{ (sans_base + [kubernetes_vip_ip] ) | unique }}"
3031

3132
- name: render kubeadm-init.yml
@@ -39,7 +40,7 @@
3940
- setup_vip
4041
- inventory_hostname in groups['kubemaster']
4142

42-
- set_fact:
43+
- ansible.builtin.set_fact:
4344
kubeadm_extra_args: "{% if groups['kubemaster'] | length > 1 %}--upload-certs{% else %}{% endif %}"
4445

4546
- name: Init kubernetes cluster

tasks/install_cni.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
---
22

3+
- ansible.builtin.set_fact:
4+
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_' + item ]['device'] }}"
5+
when:
6+
- ansible_interfaces | length > 2
7+
- kubernetes_vip_ip is defined
8+
- hostvars[inventory_hostname]['ansible_' + item ].ipv4 is defined
9+
- hostvars[inventory_hostname]['ansible_' + item ]['ipv4']['address'] | ansible.utils.ipaddr( kubernetes_subnet )
10+
with_items: "{{ ansible_interfaces }}"
11+
12+
- ansible.builtin.set_fact:
13+
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['interface'] }}"
14+
when:
15+
- ansible_interfaces | length <= 2
16+
317
- block:
418
- name: Download kube-flannel.yml
519
ansible.builtin.get_url:

tasks/install_cri.yml

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323

2424
- name: Render containerd default config
2525
ansible.builtin.shell: containerd config default > /etc/containerd/config.toml
26-
when:
27-
- containerd_config.found
26+
when: containerd_config.found
2827

2928
- name: enable SystemdCgroup for containerd
3029
ansible.builtin.replace:
@@ -34,6 +33,36 @@
3433
notify:
3534
- reload containerd
3635

36+
- name: Update the [grpc] block in /etc/containerd/config.toml
37+
ansible.builtin.blockinfile:
38+
path: /etc/containerd/config.toml
39+
marker: "{mark}"
40+
block: |2
41+
address = "{{ cri_socket_paths[kubernetes_cri] }}"
42+
gid = 0
43+
max_recv_message_size = 16777216
44+
max_send_message_size = 16777216
45+
tcp_address = ""
46+
tcp_tls_ca = ""
47+
tcp_tls_cert = ""
48+
tcp_tls_key = ""
49+
uid = 0
50+
marker_begin: "[grpc]"
51+
marker_end: "[metrics]"
52+
notify:
53+
- reload containerd
54+
55+
- name: Update sandbox_image in /etc/containerd/config.toml
56+
ansible.builtin.lineinfile:
57+
path: /etc/containerd/config.toml
58+
regexp: '^\s*sandbox_image\s*=.*'
59+
line: ' sandbox_image = "registry.k8s.io/pause:3.10"'
60+
61+
- name: render crictl.yaml
62+
ansible.builtin.template:
63+
src: crictl.yaml.j2
64+
dest: /etc/crictl.yaml
65+
3766
- name: start and enable containerd
3867
ansible.builtin.systemd:
3968
name: containerd

tasks/join_cluster.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
path: /var/lib/kubelet
66
register: kubelet_dir
77

8-
- set_fact:
8+
- ansible.builtin.set_fact:
99
kubernetes_ip_address: "{{ item }}"
1010
when: "item | ansible.utils.ipaddr( kubernetes_subnet )"
1111
with_items: "{{ ansible_all_ipv4_addresses | difference([kubernetes_vip_ip]) }}"
1212

13-
- set_fact:
13+
- ansible.builtin.set_fact:
1414
api_server_endpoint: "{% if groups['kubemaster'] | length > 1 %}{{ kubernetes_vip_ip }}{% else %}{{ hostvars[groups['kubemaster'][0]]['kubernetes_ip_address'] }}{% endif %}"
1515

1616
- name: "wait for kubeapi server"
@@ -62,12 +62,12 @@
6262
changed_when: false
6363

6464
- name: Set kubeadm_token to generated token
65-
set_fact:
65+
ansible.builtin.set_fact:
6666
kubeadm_token: "{{ temp_token.stdout }}"
6767
when: kubeadm_token is not defined
6868

6969
- name: Set kubeadm_cert to generated cert
70-
set_fact:
70+
ansible.builtin.set_fact:
7171
kubeadm_cert: "{{ temp_cert.stdout }}"
7272
when: kubeadm_cert is not defined
7373

tasks/setup_repo_Debian.yml

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
22

3+
- ansible.builtin.set_fact:
4+
kubernetes_major: "{{ kubernetes_version | regex_replace('^([0-9]+\\.[0-9]+)\\..*', '\\1') }}"
5+
36
- name: Install required system packages
47
ansible.builtin.apt:
58
name:
@@ -11,16 +14,23 @@
1114
update_cache: yes
1215
force_apt_get: yes
1316

14-
- name: Add Google GPG apt Key
15-
ansible.builtin.apt_key:
16-
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
17-
state: present
17+
- name: Create /etc/apt/keyrings/ directory
18+
ansible.builtin.file:
19+
path: /etc/apt/keyrings/
20+
state: directory
21+
mode: '0755'
22+
23+
- name: Add K8s Repository key
24+
ansible.builtin.get_url:
25+
url: https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_major }}/deb/Release.key
26+
dest: /etc/apt/keyrings/kubernetes-apt-keyring.key
1827

1928
- name: Add K8s Repository
20-
ansible.builtin.apt_repository:
21-
repo: deb https://apt.kubernetes.io/ kubernetes-xenial main
22-
state: present
23-
ignore_errors: "{{ ansible_check_mode }}"
29+
ansible.builtin.lineinfile:
30+
path: /etc/apt/sources.list.d/kubernetes.list
31+
regexp: '^deb'
32+
line: deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.key] https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_major }}/deb/ /
33+
create: yes
2434

2535
- name: Add Docker GPG apt Key
2636
ansible.builtin.apt_key:

tasks/setup_repo_RedHat.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
22

3+
- ansible.builtin.set_fact:
4+
kubernetes_major: "{{ kubernetes_version | regex_replace('^([0-9]+\\.[0-9]+)\\..*', '\\1') }}"
5+
36
- name: Install required system packages
47
ansible.builtin.dnf:
58
name:
@@ -25,9 +28,8 @@
2528
block: |
2629
[kubernetes]
2730
name=Kubernetes
28-
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ uname_m.stdout }}
31+
baseurl=https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_major }}/rpm/
2932
enabled=1
3033
gpgcheck=1
31-
repo_gpgcheck=1
32-
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
33-
exclude=kubelet kubeadm kubectl
34+
gpgkey=https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_major }}/rpm/repodata/repomd.xml.key
35+
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni

tasks/setup_vip.yml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,41 @@
11
---
22

3-
- set_fact:
3+
- ansible.builtin.set_fact:
4+
kubernetes_init: "{% if kubernetes_init_host is defined and kubernetes_init_host == inventory_hostname %}yes{% else %}no{% endif %}"
5+
6+
- ansible.builtin.set_fact:
47
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_' + item ]['device'] }}"
58
when:
9+
- ansible_interfaces | length > 2
10+
- kubernetes_vip_ip is defined
611
- hostvars[inventory_hostname]['ansible_' + item ].ipv4 is defined
712
- hostvars[inventory_hostname]['ansible_' + item ]['ipv4']['address'] | ansible.utils.ipaddr( kubernetes_subnet )
813
with_items: "{{ ansible_interfaces }}"
914

15+
- ansible.builtin.set_fact:
16+
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['interface'] }}"
17+
when:
18+
- ansible_interfaces | length <= 2
19+
1020
- name: Create /etc/kubernetes/manifests/ directory
1121
ansible.builtin.file:
1222
name: /etc/kubernetes/manifests/
1323
state: directory
1424

25+
- name: render kube-vip.yml
26+
ansible.builtin.template:
27+
src: kube-vip-init.yml.j2
28+
dest: /etc/kubernetes/manifests/kube-vip.yaml
29+
when:
30+
- kubernetes_init
31+
notify:
32+
- wait kube-vip
33+
1534
- name: render kube-vip.yml
1635
ansible.builtin.template:
1736
src: kube-vip.yml.j2
1837
dest: /etc/kubernetes/manifests/kube-vip.yaml
38+
when:
39+
- not kubernetes_init
1940
notify:
2041
- wait kube-vip

templates/crictl.yaml.j2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
runtime-endpoint: "unix://{{ cri_socket_paths[kubernetes_cri] }}"
3+
image-endpoint: "unix://{{ cri_socket_paths[kubernetes_cri] }}"

0 commit comments

Comments
 (0)