Skip to content

Commit

Permalink
deploy microk8s with portainer agent
Browse files Browse the repository at this point in the history
  • Loading branch information
ddemlow committed Nov 29, 2023
1 parent 75583be commit ae1b266
Showing 1 changed file with 128 additions and 0 deletions.
128 changes: 128 additions & 0 deletions simple_vm_deploy_microk8s.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
---
- name: Simple vm deploy microk8s single node #edit vmname variable - use -l filter to specify cluster vs. full inventory
hosts: edge
vars:
- vmname: microk8s-
connection: local
gather_facts: false
strategy: host_pinned # free #allows each cluster to start next task before all clusters have finished current task
environment: #if set here - hypercore modules will automatically use this for each remote cluster - avoiding need to specify cluster_instance for each test
SC_HOST: "https://{{ inventory_hostname }}"
SC_USERNAME: "{{ scale_user }}"
SC_PASSWORD: "{{ scale_pass }}"

tasks:
- name: generate 5 digit random character password using lower case ans set as variable named ran5
ansible.builtin.set_fact:
ran5: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=5') }}"


- name: Ubuntu20_04 template - Ubuntu 20.04 - import if not present # used to clone and cloud-init target VM
scale_computing.hypercore.vm_import:
cluster_instance:
host: "https://{{inventory_hostname }}"
username: "{{scale_user}}"
password: "{{scale_pass}}"
vm_name: ubuntu20_04
http_uri:
path: 'https://github.com/ddemlow/RestAPIExamples/raw/master/ubuntu20_04-cloud-init'
file_name: ubuntu20_04-cloud-init.xml
# until: ubuntu20_04.msg is search("import complete") #doesnt' check if vm already exists
retries: 5
delay: 1
ignore_errors: false # import errors are not uncommon depdending on network connection to smb / https source
register: ubuntu20_04


- name: Clone and configure ad hoc "{{ vmname }} {{ran5}}"
scale_computing.hypercore.vm_clone:
cluster_instance:
host: "https://{{inventory_hostname }}"
username: "{{scale_user}}"
password: "{{scale_pass}}"
vm_name: "{{vmname}}{{ran5}}"
source_vm_name: ubuntu20_04
tags:
- temp
cloud_init:
user_data: |
#cloud-config
password: "password"
chpasswd: { expire: False }
ssh_pwauth: True
ssh_authorized_keys: # Add your ssh public key for publickey authentication
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDihWWhjoPj8KVLtdLDwNJQ71zi9An0iUFjefRWu2Eju [email protected]
disable_root: false # allow ssh root login
ssh_pwauth: True
ssh_import_id: gh:ddemlow
apt: {sources: {docker.list: {source: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable', keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88}}}
packages: [snapd, qemu-guest-agent, ansible, git, unzip]
snap:
commands:
00: snap install microk8s
bootcmd:
- [ sh, -c, 'sudo echo GRUB_CMDLINE_LINUX="nomodeset" >> /etc/default/grub' ]
- [ sh, -c, 'sudo echo GRUB_GFXPAYLOAD_LINUX="1024x768" >> /etc/default/grub' ]
- [ sh, -c, 'sudo echo GRUB_DISABLE_LINUX_UUID=true >> /etc/default/grub' ]
- [ sh, -c, 'sudo update-grub' ]
runcmd:
- [ systemctl, restart, --no-block, qemu-guest-agent ]
- snap install microk8s --classic
# Add the default user to the microk8s group
- adduser ubuntu microk8s
- chown -f -R ubuntu ~/.kube
# Enable MicroK8s addons
- microk8s enable dns dashboard storage host-access
# Wait for MicroK8s to become available
- microk8s status --wait-ready
# Make kubectl available to the default user
- snap alias microk8s.kubectl kubectl
#helm repo add
- microk8s helm registry login --username='robot-edgelabs-clients' --password='LWb7bsa9msWphOy8brbXu6XJUlzXhfSV' registry.edgelabs.ai
- microk8s kubectl create secret docker-registry regcred --docker-server=registry.edgelabs.ai --docker-username=robot-edgelabs-clients --docker-password='LWb7bsa9msWphOy8brbXu6XJUlzXhfSV'
- microk8s helm install ai-sensor --set api.key='id1756317079|IWz602oCKaOuwBlhwEo8' oci://registry.edgelabs.ai/charts/ai-sensor
#install portainer agent and register
- PORTAINER_EDGE_ID=$(hostname)
- 'curl https://downloads.portainer.io/ee2-19/portainer-edge-agent-setup.sh | bash -s -- "$PORTAINER_EDGE_ID" "aHR0cHM6Ly8yMC44OC4yMi4yMjc6OTQ0M3wyMC44OC4yMi4yMjc6ODAwMHwydXByOUtuYTd6ZHBNWExNMm9meDNubHZEOHh2THpLVjN5WnlXM1lsWFdvPXww" "1" "" "EDGE_ASYNC=1,PORTAINER_GROUP=3"'
- echo "cloud-init complete" > /dev/tty
write_files:
- content: "{{ inventory_hostname }}"
path: /clusterip.txt
meta_data: |
dsmode: local
local-hostname: "{{ vmname }}{{ ran5 }}"
- name: Disk desired configuration for "{{ vmname }}{{ran5}}"
scale_computing.hypercore.vm_disk:
cluster_instance:
host: "https://{{inventory_hostname }}"
username: "{{scale_user}}"
password: "{{scale_pass}}"
vm_name: "{{ vmname }}{{ran5}}"
items:
- disk_slot: 0
type: virtio_disk
size: "{{ '300 GB' | human_to_bytes }}" # 50GB | human to bytes results in 53.7GB VSD in Hypercore
state: present

- name: Vm desired configuration and state for "{{ vmname }}{{ran5}}"
scale_computing.hypercore.vm_params:
cluster_instance:
host: "https://{{inventory_hostname }}"
username: "{{scale_user}}"
password: "{{scale_pass}}"
vm_name: "{{vmname}}{{ran5}}"
memory: "{{ '4 GB' | human_to_bytes }}"
description:
tags:
- ansible
- "{{ site_name }}"
- ansible_group__microk8s # this will create tag used by hypercore inventory plugin when executing towards VM hosts
- SERIAL
vcpu: 4
power_state: start

0 comments on commit ae1b266

Please sign in to comment.