Import Ansible playbook for bootstrap k8s cluster
This commit is contained in:
parent
5068274017
commit
a6706498b6
17 changed files with 230 additions and 3 deletions
6
contrib/ansible/bootstrap-node.yml
Normal file
6
contrib/ansible/bootstrap-node.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: bootstrap playbook for any k8s machine
|
||||||
|
hosts: k8s
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- bootstrap
|
12
contrib/ansible/group_vars/all/main.yml
Normal file
12
contrib/ansible/group_vars/all/main.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
k8s_version: '1.17.5'
|
||||||
|
k8s_first_master_node: 'k8s-demo'
|
||||||
|
k8s_domain: coins.k8s.demo.ix.gs
|
||||||
|
k8s_pod_network: '192.168.0.0/16'
|
||||||
|
k8s_service_network: '10.254.0.0/24'
|
||||||
|
k8s_controlplane_vip: '10.129.0.194'
|
||||||
|
k8s_controlplane_address: '{{ k8s_controlplane_vip }}:6443'
|
||||||
|
k8s_cluster_name: k8s-demo
|
||||||
|
|
||||||
|
cloud_provider: baremetal
|
||||||
|
ha_enabled: false
|
||||||
|
|
1
contrib/ansible/host_vars/k8s-demo.yml
Normal file
1
contrib/ansible/host_vars/k8s-demo.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
k8s_node_role: 'master'
|
7
contrib/ansible/init-cluster.yml
Normal file
7
contrib/ansible/init-cluster.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
---
|
||||||
|
- name: Init k8s cluster
|
||||||
|
hosts: '{{ host }}'
|
||||||
|
become: yes
|
||||||
|
max_fail_percentage: 0
|
||||||
|
roles:
|
||||||
|
- init-cluster
|
6
contrib/ansible/keepalived.yml
Normal file
6
contrib/ansible/keepalived.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: bootstrap playbook for any k8s machine
|
||||||
|
hosts: k8s-masters
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- keepalived
|
6
contrib/ansible/roles/bootstrap/defaults/main.yml
Normal file
6
contrib/ansible/roles/bootstrap/defaults/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
kubernetes_apt_release_channel: main
|
||||||
|
# Note that xenial repo is used for all Debian derivatives at this time.
|
||||||
|
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
|
||||||
|
## Calico config files
|
||||||
|
kubernetes_calico_manifest_file: https://docs.projectcalico.org/v3.10/manifests/calico.yaml
|
||||||
|
|
6
contrib/ansible/roles/bootstrap/handlers/main.yml
Normal file
6
contrib/ansible/roles/bootstrap/handlers/main.yml
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
- name: restart kubelet
|
||||||
|
service: name=kubelet state=restarted
|
||||||
|
|
||||||
|
- name: restart docker daemon
|
||||||
|
service: name=docker state=restarted
|
39
contrib/ansible/roles/bootstrap/tasks/main.yml
Normal file
39
contrib/ansible/roles/bootstrap/tasks/main.yml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
- name: Ensure dependencies are installed.
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- apt-transport-https
|
||||||
|
- ca-certificates
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add Kubernetes apt key.
|
||||||
|
apt_key:
|
||||||
|
url: https://packages.cloud.google.com/apt/doc/apt-key.gpg
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Add Kubernetes repository.
|
||||||
|
apt_repository:
|
||||||
|
repo: "{{ kubernetes_apt_repository }}"
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
|
- name: Install kubeadm kubelet kubectl
|
||||||
|
apt:
|
||||||
|
pkg:
|
||||||
|
- kubeadm={{ k8s_version }}-00
|
||||||
|
- kubelet={{ k8s_version }}-00
|
||||||
|
- kubectl={{ k8s_version }}-00
|
||||||
|
- kubernetes-cni=0.7.5-00
|
||||||
|
update_cache: yes
|
||||||
|
notify: restart kubelet
|
||||||
|
|
||||||
|
- name: Add Kubernetes apt preferences file to pin a version.
|
||||||
|
template:
|
||||||
|
src: apt-preferences-kubernetes.j2
|
||||||
|
dest: /etc/apt/preferences.d/kubernetes
|
||||||
|
|
||||||
|
- name:
|
||||||
|
template:
|
||||||
|
src: daemon.json
|
||||||
|
dest: /etc/docker/daemon.json
|
||||||
|
notify: restart docker daemon
|
|
@ -0,0 +1,11 @@
|
||||||
|
Package: kubectl
|
||||||
|
Pin: version {{ k8s_version }}.*
|
||||||
|
Pin-Priority: 1000
|
||||||
|
|
||||||
|
Package: kubeadm
|
||||||
|
Pin: version {{ k8s_version }}.*
|
||||||
|
Pin-Priority: 1000
|
||||||
|
|
||||||
|
Package: kubelet
|
||||||
|
Pin: version {{ k8s_version }}.*
|
||||||
|
Pin-Priority: 1000
|
8
contrib/ansible/roles/bootstrap/templates/daemon.json
Normal file
8
contrib/ansible/roles/bootstrap/templates/daemon.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"exec-opts": ["native.cgroupdriver=systemd"],
|
||||||
|
"log-driver": "json-file",
|
||||||
|
"log-opts": {
|
||||||
|
"max-size": "100m"
|
||||||
|
},
|
||||||
|
"storage-driver": "overlay2"
|
||||||
|
}
|
52
contrib/ansible/roles/init-cluster/tasks/main.yml
Normal file
52
contrib/ansible/roles/init-cluster/tasks/main.yml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
- name: Add Kubeadm config file
|
||||||
|
template:
|
||||||
|
src: kubeadm.conf.j2
|
||||||
|
dest: /etc/kubeadm.conf
|
||||||
|
when: k8s_node_role == 'master'
|
||||||
|
|
||||||
|
- name: Init cluster
|
||||||
|
command: kubeadm init --config /etc/kubeadm.conf --upload-certs --ignore-preflight-errors serviceSubnet
|
||||||
|
when: ansible_hostname == k8s_first_master_node
|
||||||
|
|
||||||
|
- name: Create kube config directory for root
|
||||||
|
file: path=/root/.kube state=directory
|
||||||
|
when: k8s_node_role == 'master'
|
||||||
|
|
||||||
|
- name: Copy Kubernetes admin config to home directory
|
||||||
|
copy:
|
||||||
|
src: "/etc/kubernetes/admin.conf"
|
||||||
|
dest: "/root/.kube/config"
|
||||||
|
remote_src: yes
|
||||||
|
when: and ansible_hostname == k8s_first_master_node
|
||||||
|
|
||||||
|
- name: Install Calico CNI
|
||||||
|
command: kubectl apply -f "https://docs.projectcalico.org/v3.13/manifests/calico.yaml"
|
||||||
|
when: ansible_hostname == k8s_first_master_node
|
||||||
|
|
||||||
|
|
||||||
|
- name: Generate join token
|
||||||
|
command: kubeadm token create --print-join-command
|
||||||
|
register: join_cmd
|
||||||
|
delegate_to: '{{ k8s_first_master_node }}'
|
||||||
|
|
||||||
|
# Эта часть не работает
|
||||||
|
# Правильная команда выглядит так:
|
||||||
|
# kubeadm join 10.129.64.60:6443 --token <token> --discovery-token-ca-cert-hash <ca-cert-hash> --control-plane --certificate-key <key>
|
||||||
|
# Предыдущий блок генерит сертификат и токен без указания ключа
|
||||||
|
# Надо пофиксить как будет время
|
||||||
|
- name: Join rest of master nodes
|
||||||
|
command: "{{ join_cmd.stdout }} --control-plane"
|
||||||
|
when: k8s_node_role == 'master' and ha_enabled and ansible_hostname != k8s_first_master_node
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
#- name: Copy Kubernetes admin config to home directory
|
||||||
|
# copy:
|
||||||
|
# src: "/etc/kubernetes/admin.conf"
|
||||||
|
# dest: "/root/.kube/config"
|
||||||
|
# remote_src: yes
|
||||||
|
# when: k8s_node_role == 'master'
|
||||||
|
|
||||||
|
- name: Join worker nodes
|
||||||
|
command: "{{ join_cmd.stdout }}"
|
||||||
|
when: k8s_node_role == 'worker'
|
||||||
|
|
25
contrib/ansible/roles/init-cluster/templates/kubeadm.conf.j2
Normal file
25
contrib/ansible/roles/init-cluster/templates/kubeadm.conf.j2
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: kubelet.config.k8s.io/v1beta1
|
||||||
|
kind: KubeletConfiguration
|
||||||
|
cgroupDriver: systemd
|
||||||
|
---
|
||||||
|
apiVersion: kubeadm.k8s.io/v1beta2
|
||||||
|
kind: InitConfiguration
|
||||||
|
nodeRegistration:
|
||||||
|
---
|
||||||
|
apiVersion: kubeadm.k8s.io/v1beta2
|
||||||
|
kind: ClusterConfiguration
|
||||||
|
kubernetesVersion: {{ k8s_version }}
|
||||||
|
certificatesDir: /etc/kubernetes/pki
|
||||||
|
clusterName: {{ k8s_cluster_name }}
|
||||||
|
controlPlaneEndpoint: {{ k8s_controlplane_address }}
|
||||||
|
dns:
|
||||||
|
type: CoreDNS
|
||||||
|
etcd:
|
||||||
|
local:
|
||||||
|
dataDir: /var/lib/etcd
|
||||||
|
imageRepository: k8s.gcr.io
|
||||||
|
networking:
|
||||||
|
dnsDomain: {{ k8s_domain }}
|
||||||
|
podSubnet: {{ k8s_pod_network }}
|
||||||
|
serviceSubnet: {{ k8s_service_network }}
|
||||||
|
scheduler: {}
|
1
contrib/ansible/roles/keepalived/defaults/main.yml
Normal file
1
contrib/ansible/roles/keepalived/defaults/main.yml
Normal file
|
@ -0,0 +1 @@
|
||||||
|
---
|
3
contrib/ansible/roles/keepalived/handlers/main.yml
Normal file
3
contrib/ansible/roles/keepalived/handlers/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
- name: restart keepalived
|
||||||
|
service: name=keepalived state=restarted
|
14
contrib/ansible/roles/keepalived/tasks/main.yml
Normal file
14
contrib/ansible/roles/keepalived/tasks/main.yml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
- name: Install keepalived
|
||||||
|
apt:
|
||||||
|
pkg:
|
||||||
|
- keepalived
|
||||||
|
state: latest
|
||||||
|
|
||||||
|
- name: Configure keepalived
|
||||||
|
template: src=keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf
|
||||||
|
tags: keepalived
|
||||||
|
notify: restart keepalived
|
||||||
|
|
||||||
|
- name: Start keepalived
|
||||||
|
service: name=keepalived state=started
|
|
@ -0,0 +1,31 @@
|
||||||
|
! Configuration File for keepalived
|
||||||
|
global_defs {
|
||||||
|
}
|
||||||
|
|
||||||
|
{#vrrp_script haproxy-check {
|
||||||
|
script "killall -0 haproxy"
|
||||||
|
interval 2
|
||||||
|
weight 20
|
||||||
|
}#}
|
||||||
|
|
||||||
|
vrrp_instance VI_1 {
|
||||||
|
state {{ keepalived_role }}
|
||||||
|
interface {{ keepalived_shared_iface }}
|
||||||
|
virtual_router_id {{ keepalived_router_id }}
|
||||||
|
{% if keepalived_role.lower() == "master" %}
|
||||||
|
priority {{ keepalived_priority }}
|
||||||
|
{% else %}
|
||||||
|
priority {{ keepalived_backup_priority }}
|
||||||
|
{% endif %}
|
||||||
|
advert_int 1
|
||||||
|
authentication {
|
||||||
|
auth_type PASS
|
||||||
|
auth_pass {{ keepalived_auth_pass }}
|
||||||
|
}
|
||||||
|
virtual_ipaddress {
|
||||||
|
{{ keepalived_shared_ip }} dev {{ keepalived_shared_iface }} label {{ keepalived_shared_iface }}:0
|
||||||
|
}
|
||||||
|
{# track_script {
|
||||||
|
haproxy-check weight 20
|
||||||
|
}#}
|
||||||
|
}
|
|
@ -64,7 +64,7 @@ tasksel tasksel/first multiselect none, ssh-server, standard
|
||||||
# Individual additional packages to install
|
# Individual additional packages to install
|
||||||
d-i pkgsel/include string \
|
d-i pkgsel/include string \
|
||||||
apt-transport-https gnupg2 ca-certificates curl \
|
apt-transport-https gnupg2 ca-certificates curl \
|
||||||
iptables linux-headers-amd64 git
|
iptables linux-headers-amd64 git ansible
|
||||||
|
|
||||||
# Whether to upgrade packages after debootstrap.
|
# Whether to upgrade packages after debootstrap.
|
||||||
# Allowed values: none, safe-upgrade, full-upgrade
|
# Allowed values: none, safe-upgrade, full-upgrade
|
||||||
|
@ -93,8 +93,7 @@ d-i preseed/late_command string in-target /bin/sh -c " \
|
||||||
echo 'deb [arch=amd64] https://download.docker.com/linux/debian/ stretch stable' >/etc/apt/sources.list.d/docker.list ; \
|
echo 'deb [arch=amd64] https://download.docker.com/linux/debian/ stretch stable' >/etc/apt/sources.list.d/docker.list ; \
|
||||||
apt-get update ; \
|
apt-get update ; \
|
||||||
apt-get install -y \
|
apt-get install -y \
|
||||||
docker-ce docker-ce-cli containerd.io \
|
docker-ce docker-ce-cli containerd.io ; \
|
||||||
kubelet kubeadm kubectl ; \
|
|
||||||
apt-get clean ; \
|
apt-get clean ; \
|
||||||
systemctl enable serial-getty@ttyS0.service ; \
|
systemctl enable serial-getty@ttyS0.service ; \
|
||||||
systemctl enable docker.service \
|
systemctl enable docker.service \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue