apply templates/concept and fix code snippets (#9540)

This commit is contained in:
makocchi
2018-07-19 06:04:46 +09:00
committed by k8s-ci-robot
parent 78a92480b6
commit 7aa07a4602
@@ -2,31 +2,38 @@
reviewers: reviewers:
- thockin - thockin
title: Cloudstack title: Cloudstack
content_template: templates/concept
--- ---
{{% capture overview %}}
[CloudStack](https://cloudstack.apache.org/) is a software to build public and private clouds based on hardware virtualization principles (traditional IaaS). To deploy Kubernetes on CloudStack there are several possibilities depending on the Cloud being used and what images are made available. CloudStack also has a vagrant plugin available, hence Vagrant could be used to deploy Kubernetes either using the existing shell provisioner or using new Salt based recipes. [CloudStack](https://cloudstack.apache.org/) is a software to build public and private clouds based on hardware virtualization principles (traditional IaaS). To deploy Kubernetes on CloudStack there are several possibilities depending on the Cloud being used and what images are made available. CloudStack also has a vagrant plugin available, hence Vagrant could be used to deploy Kubernetes either using the existing shell provisioner or using new Salt based recipes.
[CoreOS](http://coreos.com) templates for CloudStack are built [nightly](http://stable.release.core-os.net/amd64-usr/current/). CloudStack operators need to [register](http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/templates.html) this template in their cloud before proceeding with these Kubernetes deployment instructions. [CoreOS](http://coreos.com) templates for CloudStack are built [nightly](http://stable.release.core-os.net/amd64-usr/current/). CloudStack operators need to [register](http://docs.cloudstack.apache.org/projects/cloudstack-administration/en/latest/templates.html) this template in their cloud before proceeding with these Kubernetes deployment instructions.
This guide uses a single [Ansible playbook](https://github.com/apachecloudstack/k8s), which is completely automated and can deploy Kubernetes on a CloudStack based Cloud using CoreOS images. The playbook, creates an ssh key pair, creates a security group and associated rules and finally starts coreOS instances configured via cloud-init. This guide uses a single [Ansible playbook](https://github.com/apachecloudstack/k8s), which is completely automated and can deploy Kubernetes on a CloudStack based Cloud using CoreOS images. The playbook, creates an ssh key pair, creates a security group and associated rules and finally starts coreOS instances configured via cloud-init.
{{% /capture %}}
{{% capture body %}}
{{< toc >}}
## Prerequisites ## Prerequisites
$ sudo apt-get install -y python-pip libssl-dev ```shell
$ sudo pip install cs sudo apt-get install -y python-pip libssl-dev
$ sudo pip install sshpubkeys sudo pip install cs
$ sudo apt-get install software-properties-common sudo pip install sshpubkeys
$ sudo apt-add-repository ppa:ansible/ansible sudo apt-get install software-properties-common
$ sudo apt-get update sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get install ansible sudo apt-get update
sudo apt-get install ansible
```
On CloudStack server you also have to install libselinux-python : On CloudStack server you also have to install libselinux-python :
yum install libselinux-python ```shell
yum install libselinux-python
```
[_cs_](https://github.com/exoscale/cs) is a python module for the CloudStack API. [_cs_](https://github.com/exoscale/cs) is a python module for the CloudStack API.
@@ -36,34 +43,42 @@ You can define them as environment variables: `CLOUDSTACK_ENDPOINT`, `CLOUDSTACK
Or create a `~/.cloudstack.ini` file: Or create a `~/.cloudstack.ini` file:
[cloudstack] ```none
endpoint = <your cloudstack api endpoint> [cloudstack]
key = <your api access key> endpoint = <your cloudstack api endpoint>
secret = <your api secret key> key = <your api access key>
method = post secret = <your api secret key>
method = post
```
We need to use the http POST method to pass the _large_ userdata to the coreOS instances. We need to use the http POST method to pass the _large_ userdata to the coreOS instances.
### Clone the playbook ### Clone the playbook
$ git clone https://github.com/apachecloudstack/k8s ```shell
$ cd kubernetes-cloudstack git clone https://github.com/apachecloudstack/k8s
cd kubernetes-cloudstack
```
### Create a Kubernetes cluster ### Create a Kubernetes cluster
You simply need to run the playbook. You simply need to run the playbook.
$ ansible-playbook k8s.yml ```shell
ansible-playbook k8s.yml
```
Some variables can be edited in the `k8s.yml` file. Some variables can be edited in the `k8s.yml` file.
vars: ```none
ssh_key: k8s vars:
k8s_num_nodes: 2 ssh_key: k8s
k8s_security_group_name: k8s k8s_num_nodes: 2
k8s_node_prefix: k8s2 k8s_security_group_name: k8s
k8s_template: <templatename> k8s_node_prefix: k8s2
k8s_instance_type: <serviceofferingname> k8s_template: <templatename>
k8s_instance_type: <serviceofferingname>
```
This will start a Kubernetes master node and a number of compute nodes (by default 2). This will start a Kubernetes master node and a number of compute nodes (by default 2).
The `instance_type` and `template` are specific, edit them to specify your CloudStack cloud specific template and instance type (i.e. service offering). The `instance_type` and `template` are specific, edit them to specify your CloudStack cloud specific template and instance type (i.e. service offering).
@@ -72,22 +87,36 @@ Check the tasks and templates in `roles/k8s` if you want to modify anything.
Once the playbook as finished, it will print out the IP of the Kubernetes master: Once the playbook as finished, it will print out the IP of the Kubernetes master:
TASK: [k8s | debug msg='k8s master IP is {{ k8s_master.default_ip }}'] ******** ```none
TASK: [k8s | debug msg='k8s master IP is {{ k8s_master.default_ip }}'] ********
```
SSH to it using the key that was created and using the _core_ user and you can list the machines in your cluster: SSH to it using the key that was created and using the _core_ user.
$ ssh -i ~/.ssh/id_rsa_k8s core@<master IP> ```shell
$ fleetctl list-machines ssh -i ~/.ssh/id_rsa_k8s core@<master IP>
MACHINE IP METADATA ```
a017c422... <node #1 IP> role=node
ad13bf84... <master IP> role=master And you can list the machines in your cluster:
e9af8293... <node #2 IP> role=node
```shell
fleetctl list-machines
```
```none
MACHINE IP METADATA
a017c422... <node #1 IP> role=node
ad13bf84... <master IP> role=master
e9af8293... <node #2 IP> role=node
```
## Support Level ## Support Level
IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level IaaS Provider | Config. Mgmt | OS | Networking | Docs | Conforms | Support Level
-------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ---------------------------- -------------------- | ------------ | ------ | ---------- | --------------------------------------------- | ---------| ----------------------------
CloudStack | Ansible | CoreOS | flannel | [docs](/docs/getting-started-guides/cloudstack/) | | Community ([@Guiques](https://github.com/ltupin/)) CloudStack | Ansible | CoreOS | flannel | [docs](/docs/setup/on-premises-vm/cloudstack/) | | Community ([@Guiques](https://github.com/ltupin/))
For support level information on all solutions, see the [Table of solutions](/docs/getting-started-guides/#table-of-solutions) chart. For support level information on all solutions, see the [Table of solutions](/docs/setup/pick-right-solution/#table-of-solutions) chart.
{{% /capture %}}