Please note: The packages are being moved to another registry. Containerum Element is temporarily unavailable.
Containerum Element is a set of Ansible scripts for bootstrapping a minimum stable Kubernetes cluster. It is based on the certified Kubernetes Distribution by Containerum (read more about KDC at Containerum website).
Containerum Elements installs a Kubernetes cluster with the following components:
- Kubernetes Distribution by Containerum 1.11.6
- Cri-o as container runtime
- CoreDNS as DNS and Service Discovery
- Calico as container network interface
- Bird BGP for routing Internet Protocol packets
- Helm package manager (optional)
Containerum Element installs the latest stable versions of the aforementioned components. KDC version is currently 1.11.6.
Local machine
- Ansible >=2.7
- Cert Machine
Nodes:
- CentOS 7
- File system should support OverlayFS
Each node should have centos user accessible via ssh with permission to execute sudo with no password.
Fork or download the repo and edit /ansible/group_vars/all.yaml as follows:
cloud_external_ip: xxx.xxx.xxx.xxx #external IP of the master node. In case of using several master nodes a floating IP address must be specified. k8s_api_external_port: 56443 #port to access the Kubernetes API cloud_internal_ip: 10.16.0.30 #internal IP address of the master node. In case of using several master nodes, a floating IP address must be specified. SERVICE_CLUSTER_IP_RANGE: 10.96.0.0/16 #standard Kubernetes subnet. Do not change unless VERY necessary. SERVICE_NODE_PORT_RANGE: "30000-32767" #port range for Kubernetes services CLUSTER_CIDR: 192.168.0.0/16 #change only if it overlaps with existing services KUBELET_RUNTIME: remote KUBELET_RUNTIME_ENDPOINT: "unix:///var/run/crio/crio.sock" IP_AUTODETECTION_METHOD_NIC: ens160 #name of the internal network interface on virtual machines ansible_user: centos #user that has access to all machines and can execute sudo with no password ## settings fs #dev_master_log: /dev/sdb #name of the disk on the master node for storing logs #dev_slave_log: /dev/sdb #name of the disk on worker nodes for storing logs #dev_slave_containers: /dev/sdd #name of the disk on worker nodes for storing container temporary data and images #dev_etcd_log: /dev/sdb #name of the disk on etcd nodes for storing logs #dev_etcd_data_etcd: /dev/sdc #name of the disk on etcd nodes for storing etcd data # CA cert env cert_ca_country: "EU" cert_ca_organization: "DEMO_ORG" cert_ca_organization_unit: "DEMO_UNIT" cert_ca_locality: "DEMO_LOC" cert_ca_validity_days: 1024 cert_ca_key_size: 4096 #cert env cert_cluster_name: "Containerum" cert_validity_days: 365 cert_key_size: 2048 helm_version: 2.12.1 #Helm Version Edit /ansible/group_vars/inventory as follows:
[masters] demo-m1 ansible_host=192.0.2.2 - master node's hostname and IP address. Here and below nodes' current hostnames will be overridden with the ones specified in this config file. #etc [slaves] demo-s1 ansible_host=192.0.2.3 - worker1 node's hostname and IP address demo-s2 ansible_host=192.0.2.4 - worker2 node's hostname and IP address #etc [etcd] demo-m1 ansible_host=192.0.2.2 - etcd1 node's hostname and IP address(same as master) demo-s1 ansible_host=192.0.2.3 - etcd2 node's hostname and IP address (same as same as worker1) demo-s2 ansible_host=192.0.2.4 - etcd3 node's hostname and IP address (same as same as worker1) #etc [local] localhost ansible_connection=local After the variables are set, run:
ansible-playbook -i inventory element.yaml Done!
To manage the cluster remotely, install kubectl locally and copy .kube/config file from the master node to .kube/config on your local machine.
To install Helm, run:
ansible-playbook -i inventory deploy-app.yaml --tags "app-helm" To manage the cluster remotely, install helm locally and copy .kube/helm from the master node to .kube/helm on your local machine. Then run helm commands with --tls flag.
During installation Containerum Elements overrides the following config files on each node:
/etc/resolv.conf:
nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 1.1.1.1 /etc/hosts:
192.0.2.2 demo-m1 192.0.2.3 demo-s1 192.0.2.4 demo-s2 The parameters here are drawn from the inventory file.
/etc/hostname:
hostname_from_the_inventory_file Containerum Element has been tested with:
- vCloud
If you have found a bug, please open an issue. If you have questions about Containerum Element or Kubernetes Distribution by Containerum, you can join us on Telegram.
You will also find lots of useful information on Kubernetes on our Medium blog.
Copyright (c) 2019 Containerum.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.