mirror of
https://gitlab.durp.info/durfy/runbooks/ansible.git
synced 2026-05-07 08:00:29 -05:00
add k3s
This commit is contained in:
parent
dff9d8f725
commit
7619911e35
17 changed files with 2339 additions and 0 deletions
|
|
@ -35,3 +35,11 @@ ansible-base:
|
||||||
- ansible-playbook $CI_PROJECT_DIR/ansible/base.yaml
|
- ansible-playbook $CI_PROJECT_DIR/ansible/base.yaml
|
||||||
rules:
|
rules:
|
||||||
- if: '$SCRIPT == "base"'
|
- if: '$SCRIPT == "base"'
|
||||||
|
|
||||||
|
ansible-k3s-dev:
|
||||||
|
extends: .ansible
|
||||||
|
script:
|
||||||
|
- ansible-galaxy install -r $CI_PROJECT_DIR/ansible/roles/k3s/requirements.yaml
|
||||||
|
- ansible-playbook $CI_PROJECT_DIR/ansible/base.yaml -l dev-cluster
|
||||||
|
rules:
|
||||||
|
- if: '$SCRIPT == "k3s-dev"'
|
||||||
|
|
|
||||||
10
ansible/roles/k3s/download/tasks/main.yml
Normal file
10
ansible/roles/k3s/download/tasks/main.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
- name: Download k3s binary x64
|
||||||
|
get_url:
|
||||||
|
url: https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/k3s
|
||||||
|
checksum: sha256:https://github.com/k3s-io/k3s/releases/download/{{ k3s_version }}/sha256sum-amd64.txt
|
||||||
|
dest: /usr/local/bin/k3s
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
when: ansible_facts.architecture == "x86_64"
|
||||||
12
ansible/roles/k3s/master/defaults/main.yml
Normal file
12
ansible/roles/k3s/master/defaults/main.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
ansible_user: root
|
||||||
|
server_init_args: >-
|
||||||
|
{% if groups['master'] | length > 1 %}
|
||||||
|
{% if ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname'] %}
|
||||||
|
--cluster-init
|
||||||
|
{% else %}
|
||||||
|
--server https://{{ hostvars[groups['master'][0]].k3s_node_ip }}:6443
|
||||||
|
{% endif %}
|
||||||
|
--token {{ k3s_token }}
|
||||||
|
{% endif %}
|
||||||
|
{{ extra_server_args | default('') }}
|
||||||
178
ansible/roles/k3s/master/tasks/main.yml
Normal file
178
ansible/roles/k3s/master/tasks/main.yml
Normal file
|
|
@ -0,0 +1,178 @@
|
||||||
|
---
|
||||||
|
- name: Create manifests directory on first master
|
||||||
|
file:
|
||||||
|
path: /var/lib/rancher/k3s/server/manifests
|
||||||
|
state: directory
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
|
||||||
|
|
||||||
|
- name: Copy vip rbac manifest to first master
|
||||||
|
template:
|
||||||
|
src: "vip.rbac.yaml.j2"
|
||||||
|
dest: "/var/lib/rancher/k3s/server/manifests/vip-rbac.yaml"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
|
||||||
|
|
||||||
|
- name: Copy vip manifest to first master
|
||||||
|
template:
|
||||||
|
src: "vip.yaml.j2"
|
||||||
|
dest: "/var/lib/rancher/k3s/server/manifests/vip.yaml"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
when: ansible_hostname == hostvars[groups['master'][0]]['ansible_hostname']
|
||||||
|
|
||||||
|
- name: Init cluster inside the transient k3s-init service
|
||||||
|
command:
|
||||||
|
cmd: "systemd-run -p RestartSec=2 \
|
||||||
|
-p Restart=on-failure \
|
||||||
|
--unit=k3s-init \
|
||||||
|
k3s server {{ server_init_args }}"
|
||||||
|
creates: "{{ systemd_dir }}/k3s.service"
|
||||||
|
#args:
|
||||||
|
# warn: false # The ansible systemd module does not support transient units
|
||||||
|
|
||||||
|
- name: Verification
|
||||||
|
block:
|
||||||
|
- name: Verify that all nodes actually joined (check k3s-init.service if this fails)
|
||||||
|
command:
|
||||||
|
cmd: k3s kubectl get nodes -l "node-role.kubernetes.io/master=true" -o=jsonpath="{.items[*].metadata.name}"
|
||||||
|
register: nodes
|
||||||
|
until: nodes.rc == 0 and (nodes.stdout.split() | length) == (groups['master'] | length)
|
||||||
|
retries: "{{ retry_count | default(20) }}"
|
||||||
|
delay: 10
|
||||||
|
changed_when: false
|
||||||
|
always:
|
||||||
|
- name: Save logs of k3s-init.service
|
||||||
|
include_tasks: fetch_k3s_init_logs.yml
|
||||||
|
when: log_destination
|
||||||
|
vars:
|
||||||
|
log_destination: >-
|
||||||
|
{{ lookup('ansible.builtin.env', 'ANSIBLE_K3S_LOG_DIR', default=False) }}
|
||||||
|
- name: Kill the temporary service used for initialization
|
||||||
|
systemd:
|
||||||
|
name: k3s-init
|
||||||
|
state: stopped
|
||||||
|
failed_when: false
|
||||||
|
when: not ansible_check_mode
|
||||||
|
|
||||||
|
- name: Copy K3s service file
|
||||||
|
register: k3s_service
|
||||||
|
template:
|
||||||
|
src: "k3s.service.j2"
|
||||||
|
dest: "{{ systemd_dir }}/k3s.service"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0644
|
||||||
|
|
||||||
|
- name: Enable and check K3s service
|
||||||
|
systemd:
|
||||||
|
name: k3s
|
||||||
|
daemon_reload: yes
|
||||||
|
state: restarted
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Wait for node-token
|
||||||
|
wait_for:
|
||||||
|
path: /var/lib/rancher/k3s/server/node-token
|
||||||
|
|
||||||
|
- name: Register node-token file access mode
|
||||||
|
stat:
|
||||||
|
path: /var/lib/rancher/k3s/server
|
||||||
|
register: p
|
||||||
|
|
||||||
|
- name: Change file access node-token
|
||||||
|
file:
|
||||||
|
path: /var/lib/rancher/k3s/server
|
||||||
|
mode: "g+rx,o+rx"
|
||||||
|
|
||||||
|
- name: Read node-token from master
|
||||||
|
slurp:
|
||||||
|
src: /var/lib/rancher/k3s/server/node-token
|
||||||
|
register: node_token
|
||||||
|
|
||||||
|
- name: Store Master node-token
|
||||||
|
set_fact:
|
||||||
|
token: "{{ node_token.content | b64decode | regex_replace('\n', '') }}"
|
||||||
|
|
||||||
|
- name: Restore node-token file access
|
||||||
|
file:
|
||||||
|
path: /var/lib/rancher/k3s/server
|
||||||
|
mode: "{{ p.stat.mode }}"
|
||||||
|
|
||||||
|
- name: Create directory .kube
|
||||||
|
file:
|
||||||
|
path: ~{{ item }}/.kube
|
||||||
|
state: directory
|
||||||
|
owner: "{{ item }}"
|
||||||
|
mode: "u=rwx,g=rx,o="
|
||||||
|
loop:
|
||||||
|
- "{{ ansible_user }}"
|
||||||
|
- "{{ username }}"
|
||||||
|
|
||||||
|
- name: Copy config file to user home directory
|
||||||
|
copy:
|
||||||
|
src: /etc/rancher/k3s/k3s.yaml
|
||||||
|
dest: ~{{ item }}/.kube/config
|
||||||
|
remote_src: yes
|
||||||
|
owner: "{{ item }}"
|
||||||
|
mode: "u=rw,g=,o="
|
||||||
|
loop:
|
||||||
|
- "{{ ansible_user }}"
|
||||||
|
- "{{ username }}"
|
||||||
|
|
||||||
|
- name: Configure kubectl cluster to {{ endpoint_url }}
|
||||||
|
command: >-
|
||||||
|
k3s kubectl config set-cluster default
|
||||||
|
--server={{ endpoint_url }}
|
||||||
|
--kubeconfig ~{{ item }}/.kube/config
|
||||||
|
changed_when: true
|
||||||
|
loop:
|
||||||
|
- "{{ ansible_user }}"
|
||||||
|
- "{{ username }}"
|
||||||
|
vars:
|
||||||
|
endpoint_url: >-
|
||||||
|
https://{{ apiserver_endpoint | ansible.utils.ipwrap }}:6443
|
||||||
|
# Deactivated linter rules:
|
||||||
|
# - jinja[invalid]: As of version 6.6.0, ansible-lint complains that the input to ipwrap
|
||||||
|
# would be undefined. This will not be the case during playbook execution.
|
||||||
|
# noqa jinja[invalid]
|
||||||
|
|
||||||
|
- name: Create kubectl symlink
|
||||||
|
file:
|
||||||
|
src: /usr/local/bin/k3s
|
||||||
|
dest: /usr/local/bin/kubectl
|
||||||
|
state: link
|
||||||
|
|
||||||
|
- name: Create crictl symlink
|
||||||
|
file:
|
||||||
|
src: /usr/local/bin/k3s
|
||||||
|
dest: /usr/local/bin/crictl
|
||||||
|
state: link
|
||||||
|
|
||||||
|
- name: Get contents of manifests folder
|
||||||
|
find:
|
||||||
|
paths: /var/lib/rancher/k3s/server/manifests
|
||||||
|
file_type: file
|
||||||
|
register: k3s_server_manifests
|
||||||
|
|
||||||
|
- name: Get sub dirs of manifests folder
|
||||||
|
find:
|
||||||
|
paths: /var/lib/rancher/k3s/server/manifests
|
||||||
|
file_type: directory
|
||||||
|
register: k3s_server_manifests_directories
|
||||||
|
|
||||||
|
- name: Remove manifests and folders that are only needed for bootstrapping cluster so k3s doesn't auto apply on start
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: absent
|
||||||
|
with_items:
|
||||||
|
- "{{ k3s_server_manifests.files }}"
|
||||||
|
- "{{ k3s_server_manifests_directories.files }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.path }}"
|
||||||
|
|
||||||
5
ansible/roles/k3s/master/templates/content.j2
Normal file
5
ansible/roles/k3s/master/templates/content.j2
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{#
|
||||||
|
This is a really simple template that just outputs the
|
||||||
|
value of the "content" variable.
|
||||||
|
#}
|
||||||
|
{{ content }}
|
||||||
24
ansible/roles/k3s/master/templates/k3s.service.j2
Normal file
24
ansible/roles/k3s/master/templates/k3s.service.j2
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Lightweight Kubernetes
|
||||||
|
Documentation=https://k3s.io
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStartPre=-/sbin/modprobe br_netfilter
|
||||||
|
ExecStartPre=-/sbin/modprobe overlay
|
||||||
|
ExecStart=/usr/local/bin/k3s server {{ extra_server_args | default("") }}
|
||||||
|
KillMode=process
|
||||||
|
Delegate=yes
|
||||||
|
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||||
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
TasksMax=infinity
|
||||||
|
TimeoutStartSec=0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
12
ansible/roles/k3s/master/templates/metallb.configmap.j2
Normal file
12
ansible/roles/k3s/master/templates/metallb.configmap.j2
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
namespace: metallb-system
|
||||||
|
name: config
|
||||||
|
data:
|
||||||
|
config: |
|
||||||
|
address-pools:
|
||||||
|
- name: default
|
||||||
|
protocol: layer2
|
||||||
|
addresses:
|
||||||
|
- {{ metal_lb_ip_range }}
|
||||||
1797
ansible/roles/k3s/master/templates/metallb.crds.j2
Normal file
1797
ansible/roles/k3s/master/templates/metallb.crds.j2
Normal file
File diff suppressed because it is too large
Load diff
6
ansible/roles/k3s/master/templates/metallb.namespace.j2
Normal file
6
ansible/roles/k3s/master/templates/metallb.namespace.j2
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: metallb-system
|
||||||
|
labels:
|
||||||
|
app: metallb
|
||||||
32
ansible/roles/k3s/master/templates/vip.rbac.yaml.j2
Normal file
32
ansible/roles/k3s/master/templates/vip.rbac.yaml.j2
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: kube-vip
|
||||||
|
namespace: kube-system
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
rbac.authorization.kubernetes.io/autoupdate: "true"
|
||||||
|
name: system:kube-vip-role
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["services", "services/status", "nodes", "endpoints"]
|
||||||
|
verbs: ["list","get","watch", "update"]
|
||||||
|
- apiGroups: ["coordination.k8s.io"]
|
||||||
|
resources: ["leases"]
|
||||||
|
verbs: ["list", "get", "watch", "update", "create"]
|
||||||
|
---
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: system:kube-vip-binding
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: system:kube-vip-role
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: kube-vip
|
||||||
|
namespace: kube-system
|
||||||
77
ansible/roles/k3s/master/templates/vip.yaml.j2
Normal file
77
ansible/roles/k3s/master/templates/vip.yaml.j2
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: kube-vip-ds
|
||||||
|
namespace: kube-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
name: kube-vip-ds
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
name: kube-vip-ds
|
||||||
|
spec:
|
||||||
|
affinity:
|
||||||
|
nodeAffinity:
|
||||||
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
nodeSelectorTerms:
|
||||||
|
- matchExpressions:
|
||||||
|
- key: node-role.kubernetes.io/master
|
||||||
|
operator: Exists
|
||||||
|
- matchExpressions:
|
||||||
|
- key: node-role.kubernetes.io/control-plane
|
||||||
|
operator: Exists
|
||||||
|
containers:
|
||||||
|
- args:
|
||||||
|
- manager
|
||||||
|
env:
|
||||||
|
- name: vip_arp
|
||||||
|
value: "true"
|
||||||
|
- name: port
|
||||||
|
value: "6443"
|
||||||
|
- name: vip_interface
|
||||||
|
value: {{ flannel_iface }}
|
||||||
|
- name: vip_cidr
|
||||||
|
value: "{{ apiserver_endpoint | ansible.utils.ipsubnet | ansible.utils.ipaddr('prefix') }}"
|
||||||
|
- name: cp_enable
|
||||||
|
value: "true"
|
||||||
|
- name: cp_namespace
|
||||||
|
value: kube-system
|
||||||
|
- name: vip_ddns
|
||||||
|
value: "false"
|
||||||
|
- name: svc_enable
|
||||||
|
value: "false"
|
||||||
|
- name: vip_leaderelection
|
||||||
|
value: "true"
|
||||||
|
- name: vip_leaseduration
|
||||||
|
value: "15"
|
||||||
|
- name: vip_renewdeadline
|
||||||
|
value: "10"
|
||||||
|
- name: vip_retryperiod
|
||||||
|
value: "2"
|
||||||
|
- name: address
|
||||||
|
value: {{ apiserver_endpoint }}
|
||||||
|
image: ghcr.io/kube-vip/kube-vip:{{ kube_vip_tag_version }}
|
||||||
|
imagePullPolicy: Always
|
||||||
|
name: kube-vip
|
||||||
|
resources: {}
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
add:
|
||||||
|
- NET_ADMIN
|
||||||
|
- NET_RAW
|
||||||
|
- SYS_TIME
|
||||||
|
hostNetwork: true
|
||||||
|
serviceAccountName: kube-vip
|
||||||
|
tolerations:
|
||||||
|
- effect: NoSchedule
|
||||||
|
operator: Exists
|
||||||
|
- effect: NoExecute
|
||||||
|
operator: Exists
|
||||||
|
updateStrategy: {}
|
||||||
|
status:
|
||||||
|
currentNumberScheduled: 0
|
||||||
|
desiredNumberScheduled: 0
|
||||||
|
numberMisscheduled: 0
|
||||||
|
numberReady: 0
|
||||||
16
ansible/roles/k3s/node/tasks/main.yml
Normal file
16
ansible/roles/k3s/node/tasks/main.yml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
- name: Copy K3s service file
|
||||||
|
template:
|
||||||
|
src: "k3s.service.j2"
|
||||||
|
dest: "{{ systemd_dir }}/k3s-node.service"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0755
|
||||||
|
|
||||||
|
- name: Enable and check K3s service
|
||||||
|
systemd:
|
||||||
|
name: k3s-node
|
||||||
|
daemon_reload: yes
|
||||||
|
state: restarted
|
||||||
|
enabled: yes
|
||||||
24
ansible/roles/k3s/node/templates/k3s.service.j2
Normal file
24
ansible/roles/k3s/node/templates/k3s.service.j2
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Lightweight Kubernetes
|
||||||
|
Documentation=https://k3s.io
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
ExecStartPre=-/sbin/modprobe br_netfilter
|
||||||
|
ExecStartPre=-/sbin/modprobe overlay
|
||||||
|
ExecStart=/usr/local/bin/k3s agent --server https://{{ apiserver_endpoint | ansible.utils.ipwrap }}:6443 --token {{ hostvars[groups['master'][0]]['token'] | default(k3s_token) }} {{ extra_agent_args | default("") }}
|
||||||
|
KillMode=process
|
||||||
|
Delegate=yes
|
||||||
|
# Having non-zero Limit*s causes performance problems due to accounting overhead
|
||||||
|
# in the kernel. We recommend using cgroups to do container-local accounting.
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=infinity
|
||||||
|
LimitCORE=infinity
|
||||||
|
TasksMax=infinity
|
||||||
|
TimeoutStartSec=0
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
65
ansible/roles/k3s/prereq/tasks/main.yml
Normal file
65
ansible/roles/k3s/prereq/tasks/main.yml
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
---
|
||||||
|
- name: Set same timezone on every Server
|
||||||
|
timezone:
|
||||||
|
name: "{{ system_timezone }}"
|
||||||
|
when: (system_timezone is defined) and (system_timezone != "Your/Timezone")
|
||||||
|
|
||||||
|
- name: Set SELinux to disabled state
|
||||||
|
selinux:
|
||||||
|
state: disabled
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
|
- name: Enable IPv4 forwarding
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv4.ip_forward
|
||||||
|
value: "1"
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
|
||||||
|
- name: Enable IPv6 forwarding
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv6.conf.all.forwarding
|
||||||
|
value: "1"
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
|
||||||
|
- name: Enable IPv6 router advertisements
|
||||||
|
sysctl:
|
||||||
|
name: net.ipv6.conf.all.accept_ra
|
||||||
|
value: "2"
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
|
||||||
|
- name: Add br_netfilter to /etc/modules-load.d/
|
||||||
|
copy:
|
||||||
|
content: "br_netfilter"
|
||||||
|
dest: /etc/modules-load.d/br_netfilter.conf
|
||||||
|
mode: "u=rw,g=,o="
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
|
- name: Load br_netfilter
|
||||||
|
modprobe:
|
||||||
|
name: br_netfilter
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
|
- name: Set bridge-nf-call-iptables (just to be sure)
|
||||||
|
sysctl:
|
||||||
|
name: "{{ item }}"
|
||||||
|
value: "1"
|
||||||
|
state: present
|
||||||
|
reload: yes
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
loop:
|
||||||
|
- net.bridge.bridge-nf-call-iptables
|
||||||
|
- net.bridge.bridge-nf-call-ip6tables
|
||||||
|
|
||||||
|
- name: Add /usr/local/bin to sudo secure_path
|
||||||
|
lineinfile:
|
||||||
|
line: 'Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin'
|
||||||
|
regexp: "Defaults(\\s)*secure_path(\\s)*="
|
||||||
|
state: present
|
||||||
|
insertafter: EOF
|
||||||
|
path: /etc/sudoers
|
||||||
|
validate: 'visudo -cf %s'
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
5
ansible/roles/k3s/requirements.yaml
Normal file
5
ansible/roles/k3s/requirements.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
collections:
|
||||||
|
- name: ansible.utils
|
||||||
|
- name: community.general
|
||||||
|
- name: ansible.posix
|
||||||
|
- name: kubernetes.core
|
||||||
53
ansible/roles/k3s/vars/main.yaml
Normal file
53
ansible/roles/k3s/vars/main.yaml
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
---
|
||||||
|
#k3s_version: v1.30.4+k3s1
|
||||||
|
k3s_version: "{{ lookup('env', 'k3s_version') }}"
|
||||||
|
ansible_user: administrator
|
||||||
|
systemd_dir: /etc/systemd/system
|
||||||
|
|
||||||
|
# Set your timezone
|
||||||
|
system_timezone: "America/Chicago"
|
||||||
|
|
||||||
|
# interface which will be used for flannel
|
||||||
|
flannel_iface: "eth0"
|
||||||
|
|
||||||
|
# apiserver_endpoint is virtual ip-address which will be configured on each master
|
||||||
|
apiserver_endpoint: "{{ lookup('env','api_endpoint') }}"
|
||||||
|
|
||||||
|
# k3s_token is required masters can talk together securely
|
||||||
|
k3s_token: "{{ lookup('env','k3s_token') }}"
|
||||||
|
|
||||||
|
# The IP on which the node is reachable in the cluster.
|
||||||
|
# Here, a sensible default is provided, you can still override
|
||||||
|
# it for each of your hosts, though.
|
||||||
|
k3s_node_ip: '{{ ansible_facts[flannel_iface]["ipv4"]["address"] }}'
|
||||||
|
|
||||||
|
# Disable the taint manually by setting: k3s_master_taint = false
|
||||||
|
k3s_master_taint: "{{ true if groups['node'] | default([]) | length >= 1 else false }}"
|
||||||
|
|
||||||
|
# these arguments are recommended for servers as well as agents:
|
||||||
|
extra_args: >-
|
||||||
|
--flannel-iface={{ flannel_iface }}
|
||||||
|
--node-ip={{ k3s_node_ip }}
|
||||||
|
|
||||||
|
# change these to your liking, the only required are: --disable servicelb, --tls-san {{ apiserver_endpoint }}
|
||||||
|
extra_server_args: >-
|
||||||
|
{{ extra_args }}
|
||||||
|
{{ '--node-taint node-role.kubernetes.io/master=true:NoSchedule' if k3s_master_taint else '' }}
|
||||||
|
--tls-san {{ apiserver_endpoint }}
|
||||||
|
--disable servicelb
|
||||||
|
--disable traefik
|
||||||
|
--kube-controller-manager-arg bind-address=0.0.0.0
|
||||||
|
--kube-proxy-arg metrics-bind-address=0.0.0.0
|
||||||
|
--kube-scheduler-arg bind-address=0.0.0.0
|
||||||
|
--etcd-expose-metrics true
|
||||||
|
--kubelet-arg containerd=/run/k3s/containerd/containerd.sock
|
||||||
|
extra_agent_args: >-
|
||||||
|
{{ extra_args }}
|
||||||
|
--kubelet-arg node-status-update-frequency=5s
|
||||||
|
|
||||||
|
# image tag for kube-vip
|
||||||
|
kube_vip_tag_version: "v0.7.2"
|
||||||
|
|
||||||
|
username: "administrator"
|
||||||
|
|
||||||
|
environment: "{{ lookup('env','ENVIRONMENT_NAME') }}"
|
||||||
|
|
@ -42,3 +42,18 @@ dev-node:
|
||||||
openvpn:
|
openvpn:
|
||||||
hosts:
|
hosts:
|
||||||
192.168.98.20:
|
192.168.98.20:
|
||||||
|
|
||||||
|
dev-cluster:
|
||||||
|
children:
|
||||||
|
dev-master:
|
||||||
|
dev-node:
|
||||||
|
|
||||||
|
dmz-cluster:
|
||||||
|
children:
|
||||||
|
dmz-master:
|
||||||
|
dmz-node:
|
||||||
|
|
||||||
|
infra-cluster:
|
||||||
|
children:
|
||||||
|
infra-master:
|
||||||
|
infra-node:
|
||||||
Loading…
Add table
Add a link
Reference in a new issue