Deployment of Kubernetes on OpenStack
Prepare OpenStack environment
Install OpenStack client
$ sudo dnf install -y python-openstackclient
$ sudo pip install python-openstackclient
Create clouds.yaml
file
$ vi ~/.config/openstack/clouds.yaml
clouds:
dreamhost:
auth:
auth_url: https://iad2.dream.io:5000/v2.0
project_name: [projectname]
username: [username]
password: [password]
region_name: RegionOne
Note: change the values of [projectname]
, [username]
and [password]
accordingly. The values can be found in stackrc
file you normally use.
$ openstack --os-cloud dreamhost server list
Download CentOS Atomic image
$ wget -q http://cloud.centos.org/centos/7/atomic/images/CentOS-Atomic-Host-7-GenericCloud.qcow2.gz -O CentOS7-Atomic.qcow2.gz
$ gunzip CentOS7-Atomic.qcow2.gz
Convert image
$ dnf install -y qemu-tools
$ qemu-img convert /tmp/centos7.qcow2 CentOS7-Atomic.raw
Upload image
$ openstack --os-cloud dreamhost image create "CentOS7-Atomic" --disk-format raw --container-format bare --file CentOS7-Atomic.raw --property os_distro=centos
Install ansible
$ sudo dnf install -y ansible
$ sudo pip install ansible
Install shade library
$ sudo pip install shade
Upload public key
$ openstack --os-cloud dreamhost keypair create --public-key ~/.ssh/id_rsa.pub atomic
Ansible playbook to upload public key
You can also use the following Ansible playbook
---
- hosts: localhost
tasks:
- name: Upload public key to OpenStack cloud provider
os_keypair:
cloud: "{{ cloud }}"
name: {{ key }}
public_key_file: ~/.ssh/id_rsa.pub
$ ansible-playbook upload-publickey.yml -e cloud=dreamhost -e key=atomic
Create instances
$ openstack --os-cloud server create --flavor 10 --image "CentOS7-Atomic" --key-name atomic atomic-01
$ openstack --os-cloud server create --flavor 10 --image "CentOS7-Atomic" --key-name atomic atomic-02
$ openstack --os-cloud server create --flavor 10 --image "CentOS7-Atomic" --key-name atomic atomic-03
Ansible playbook to create instances
---
- hosts: localhost
tasks:
- name: Create instance
os_server:
state: present
cloud: "{{ cloud }}"
name: "{{ item }}"
image: {{ image }}
key_name: "{{ key }}"
network: public
flavor: 10
with_items:
- atomic-01
- atomic-02
- atomic-03
$ ansible-playbook create-instance-multiple.yml -e cloud=dreamhost -e key=atomic -e image=CentOS7-Atomic
Deploy Kubernetes
Clone playbook repository
$ git clone https://github.com/gbraad/ansible-playbook-kubernetes.git
Deploy kubernetes
$ openstack --os-cloud dreamhost server list
$ dnf install -y ansible
$ ansible-galaxy install -r roles.txt
$ vi hosts
$ ansible-playbook -i hosts deploy-kubernetes.yml
Install kubernetes client
$ dnf install -y kubernetes-client
$ wget http://storage.googleapis.com/kubernetes-release/release/v1.3.4/bin/linux/amd64/kubectl
$ chmod +x kubectl
Test
$ kubectl --server=[master ip]]:8080 get nodes
$ kubectl --server=[master ip]]:8080 run nginx
$ kubectl --server=[master ip]]:8080 get pods