Move Kubernetes cluster bootstrap partially to Ansible
This commit is contained in:
		
							
								
								
									
										58
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								README.md
									
									
									
									
									
								
							| @@ -160,30 +160,7 @@ Added some ARM64 workers by using Ubuntu 22.04 server on Raspberry Pi. | |||||||
|  |  | ||||||
| After machines have booted up and you can reach them via SSH: | After machines have booted up and you can reach them via SSH: | ||||||
|  |  | ||||||
| ```bash | ``` | ||||||
| # Enable required kernel modules |  | ||||||
| cat > /etc/modules << EOF |  | ||||||
| overlay |  | ||||||
| br_netfilter |  | ||||||
| EOF |  | ||||||
| cat /etc/modules | xargs -L 1 -t modprobe |  | ||||||
|  |  | ||||||
| # Finetune sysctl: |  | ||||||
| cat > /etc/sysctl.d/99-k8s.conf << EOF |  | ||||||
| net.ipv4.conf.all.accept_redirects  = 0 |  | ||||||
| net.bridge.bridge-nf-call-iptables  = 1 |  | ||||||
| net.ipv4.ip_forward                 = 1 |  | ||||||
| net.bridge.bridge-nf-call-ip6tables = 1 |  | ||||||
|  |  | ||||||
| # Elasticsearch needs this |  | ||||||
| vm.max_map_count                    = 524288 |  | ||||||
|  |  | ||||||
| # Bump inotify limits to make sure |  | ||||||
| fs.inotify.max_user_instances=1280 |  | ||||||
| fs.inotify.max_user_watches=655360 |  | ||||||
| EOF |  | ||||||
| sysctl --system |  | ||||||
|  |  | ||||||
| # Disable Ubuntu caching DNS resolver | # Disable Ubuntu caching DNS resolver | ||||||
| systemctl disable systemd-resolved.service | systemctl disable systemd-resolved.service | ||||||
| systemctl stop systemd-resolved | systemctl stop systemd-resolved | ||||||
| @@ -206,39 +183,6 @@ apt-get install -yqq linux-image-generic | |||||||
| apt-get remove -yq cloud-init linux-image-*-kvm | apt-get remove -yq cloud-init linux-image-*-kvm | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Install packages: |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| OS=xUbuntu_22.04 |  | ||||||
| VERSION=1.25 |  | ||||||
| echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list |  | ||||||
| echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list |  | ||||||
|  |  | ||||||
| rm -fv /etc/apt/trusted.gpg |  | ||||||
|  |  | ||||||
| curl -s https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor > /etc/apt/trusted.gpg.d/libcontainers-archive-keyring.gpg |  | ||||||
| curl -s https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/Release.key | gpg --dearmor > /etc/apt/trusted.gpg.d/libcontainers-crio-archive-keyring.gpg |  | ||||||
| curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor >  /etc/apt/trusted.gpg.d/packages-cloud-google.gpg |  | ||||||
|  |  | ||||||
| echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list |  | ||||||
|  |  | ||||||
| apt-get update |  | ||||||
| apt-get install -yqq --allow-change-held-packages apt-transport-https curl cri-o cri-o-runc kubelet=1.25.12-00 kubectl=1.25.12-00 kubeadm=1.25.12-00 cri-o=1.25.3~0 |  | ||||||
| apt-mark hold kubelet kubeadm kubectl cri-o |  | ||||||
|  |  | ||||||
| cat << \EOF > /etc/containers/registries.conf |  | ||||||
| unqualified-search-registries = ["docker.io"] |  | ||||||
| # To pull Docker images from a mirror uncomment following |  | ||||||
| #[[registry]] |  | ||||||
| #prefix = "docker.io" |  | ||||||
| #location = "mirror.gcr.io" |  | ||||||
| EOF |  | ||||||
| sudo systemctl restart crio |  | ||||||
| sudo systemctl daemon-reload |  | ||||||
| sudo systemctl enable crio --now |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| On master: | On master: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
|   | |||||||
							
								
								
									
										63
									
								
								ansible-kubernetes.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ansible-kubernetes.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | --- | ||||||
|  | - name: Pin kube components | ||||||
|  |   hosts: kubernetes | ||||||
|  |   tasks: | ||||||
|  |     - name: Pin packages | ||||||
|  |       loop: | ||||||
|  |         - kubeadm | ||||||
|  |         - kubectl | ||||||
|  |         - kubelet | ||||||
|  |       ansible.builtin.copy: | ||||||
|  |         dest: "/etc/apt/preferences.d/{{ item }}" | ||||||
|  |         content: | | ||||||
|  |           Package: {{ item }} | ||||||
|  |           Pin: version 1.26.* | ||||||
|  |           Pin-Priority: 1001 | ||||||
|  |  | ||||||
|  | - name: Reset /etc/containers/registries.conf | ||||||
|  |   hosts: kubernetes | ||||||
|  |   tasks: | ||||||
|  |   - name: Copy /etc/containers/registries.conf | ||||||
|  |     ansible.builtin.copy: | ||||||
|  |       content: "unqualified-search-registries = [\"docker.io\"]\n" | ||||||
|  |       dest: /etc/containers/registries.conf | ||||||
|  |     register: registries | ||||||
|  |   - name: Restart CRI-O | ||||||
|  |     service: | ||||||
|  |       name: cri-o | ||||||
|  |       state: restarted | ||||||
|  |     when: registries.changed | ||||||
|  |  | ||||||
|  | - name: Reset /etc/modules | ||||||
|  |   hosts: kubernetes | ||||||
|  |   tasks: | ||||||
|  |   - name: Copy /etc/modules | ||||||
|  |     ansible.builtin.copy: | ||||||
|  |       content: | | ||||||
|  |         overlay | ||||||
|  |         br_netfilter | ||||||
|  |       dest: /etc/modules | ||||||
|  |     register: kernel_modules | ||||||
|  |   - name: Load kernel modules | ||||||
|  |     ansible.builtin.shell: "cat /etc/modules | xargs -L 1 -t modprobe" | ||||||
|  |     when: kernel_modules.changed | ||||||
|  |  | ||||||
|  | - name: Reset /etc/sysctl.d/99-k8s.conf | ||||||
|  |   hosts: kubernetes | ||||||
|  |   tasks: | ||||||
|  |   - name: Copy /etc/sysctl.d/99-k8s.conf | ||||||
|  |     ansible.builtin.copy: | ||||||
|  |       content: | | ||||||
|  |         cat > /etc/sysctl.d/99-k8s.conf << EOF | ||||||
|  |         net.ipv4.conf.all.accept_redirects  = 0 | ||||||
|  |         net.bridge.bridge-nf-call-iptables  = 1 | ||||||
|  |         net.ipv4.ip_forward                 = 1 | ||||||
|  |         net.bridge.bridge-nf-call-ip6tables = 1 | ||||||
|  |         vm.max_map_count                    = 524288 | ||||||
|  |         fs.inotify.max_user_instances       = 1280 | ||||||
|  |         fs.inotify.max_user_watches         = 655360 | ||||||
|  |       dest: /etc/sysctl.d/99-k8s.conf | ||||||
|  |     register: sysctl | ||||||
|  |   - name: Reload sysctl config | ||||||
|  |     ansible.builtin.shell: "sysctl --system" | ||||||
|  |     when: sysctl.changed | ||||||
| @@ -1,19 +1,27 @@ | |||||||
| all: | all: | ||||||
|  |   children: | ||||||
|  |     kubernetes: | ||||||
|       children: |       children: | ||||||
|         masters: |         masters: | ||||||
|           hosts: |           hosts: | ||||||
|             master1.kube.k-space.ee: |             master1.kube.k-space.ee: | ||||||
|             master2.kube.k-space.ee: |             master2.kube.k-space.ee: | ||||||
|             master3.kube.k-space.ee: |             master3.kube.k-space.ee: | ||||||
|     workers: |         kubelets: | ||||||
|  |           children: | ||||||
|  |             mon: | ||||||
|               hosts: |               hosts: | ||||||
|                 mon1.kube.k-space.ee: |                 mon1.kube.k-space.ee: | ||||||
|                 mon2.kube.k-space.ee: |                 mon2.kube.k-space.ee: | ||||||
|                 mon3.kube.k-space.ee: |                 mon3.kube.k-space.ee: | ||||||
|  |             storage: | ||||||
|  |               hosts: | ||||||
|                 storage1.kube.k-space.ee: |                 storage1.kube.k-space.ee: | ||||||
|                 storage2.kube.k-space.ee: |                 storage2.kube.k-space.ee: | ||||||
|                 storage3.kube.k-space.ee: |                 storage3.kube.k-space.ee: | ||||||
|                 storage4.kube.k-space.ee: |                 storage4.kube.k-space.ee: | ||||||
|  |             workers: | ||||||
|  |               hosts: | ||||||
|                 worker1.kube.k-space.ee: |                 worker1.kube.k-space.ee: | ||||||
|                 worker2.kube.k-space.ee: |                 worker2.kube.k-space.ee: | ||||||
|                 worker3.kube.k-space.ee: |                 worker3.kube.k-space.ee: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user