Deploying Contrail Charms with Kubernetes
You can deploy Contrail by using Juju Charms. Juju Charms simplifies Contrail deployment by providing a simple way to deploy, configure, scale, and manage Contrail operations. For more information, see Understanding Juju Charms with Kubernetes.
Contrail supports the following charms:
contrail-agent
contrail-analytics
contrail-analyticsdb
contrail-controller
contrail-kubernetes-master
contrail-kubernetes-node
You can deploy Contrail Charms in a bundle or manually.
Deploying Contrail Charms in a Bundle
Follow these steps to deploy Contrail Charms in a bundle.
- Deploy Contrail Charms.
To deploy Contrail Charms in a bundle, use the
juju deploy <bundle_yaml_file>
command.The following example shows you how to use
bundle_yaml_file
to deploy Contrail on Amazon Web Services (AWS) Cloud.series: "{{ SERIES }}" machines: # kubernetes pods 0: series: "{{ SERIES }}" constraints: mem=8G cores=2 root-disk=60G {%- set compute_nodes = [0] %} # kubernetes master 2: series: "{{ SERIES }}" constraints: mem=8G cores=2 root-disk=60G {%- if KUBERNETES_HA == 'true' %} {%- for i in [3, 4] %} {{ i }}: series: "{{ SERIES }}" constraints: mem=8G cores=2 root-disk=60G {%- endfor %} {%- set k8s_nodes = [2, 3, 4] %} {% else %} {%- set k8s_nodes = [2] %} {%- endif %} # contrail components 5: series: "{{ SERIES }}" constraints: mem=16G cores=4 root-disk=60G {%- if CONTRAIL_HA == 'true' %} {%- for i in [6, 7] %} {{ i }}: series: "{{ SERIES }}" constraints: mem=16G cores=4 root-disk=60G {%- endfor %} {%- set contrail_nodes = [5, 6, 7] %} {% else %} {%- set contrail_nodes = [5] %} {%- endif %} services: # kubernetes easyrsa: series: "{{ SERIES }}" charm: cs:~containers/easyrsa num_units: 1 to: - lxd:2 etcd: series: "{{ SERIES }}" charm: cs:~containers/etcd num_units: {{ k8s_nodes | count }} options: channel: 3.2/stable to: {{ k8s_nodes }} kubernetes-master: series: "{{ SERIES }}" charm: cs:~containers/kubernetes-master-696 expose: true num_units: {{ k8s_nodes | count }} options: channel: '1.14/stable' service-cidr: '10.96.0.0/12' docker_runtime: 'custom' docker_runtime_repo: 'deb [arch={ARCH}] https://download.docker.com/linux/ubuntu {CODE} stable' docker_runtime_key_url: 'https://download.docker.com/linux/ubuntu/gpg' docker_runtime_package: 'docker-ce' to: {{ k8s_nodes }} kubernetes-worker: series: "{{ SERIES }}" charm: cs:~containers/kubernetes-worker-550 num_units: {{ compute_nodes | count }} options: channel: '1.14/stable' docker_runtime: 'custom' docker_runtime_repo: 'deb [arch={ARCH}] https://download.docker.com/linux/ubuntu {CODE} stable' docker_runtime_key_url: 'https://download.docker.com/linux/ubuntu/gpg' docker_runtime_package: 'docker-ce' to: {{ compute_nodes }} # contrail-kubernetes contrail-kubernetes-master: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-kubernetes-master options: log-level: 'SYS_DEBUG' service_subnets: '10.96.0.0/12' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" contrail-kubernetes-node: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-kubernetes-node options: log-level: 'SYS_DEBUG' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" # contrail contrail-agent: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-agent options: log-level: 'SYS_DEBUG' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" contrail-analytics: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-analytics expose: true num_units: {{ contrail_nodes | count }} options: log-level: 'SYS_DEBUG' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" to: {{ contrail_nodes }} contrail-analyticsdb: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-analyticsdb num_units: {{ contrail_nodes | count }} options: cassandra-minimum-diskgb: '4' cassandra-jvm-extra-opts: '-Xms1g -Xmx2g' log-level: 'SYS_DEBUG' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" to: {{ contrail_nodes }} contrail-controller: series: "{{ SERIES }}" charm: {{ JUJU_REPO }}/contrail-controller expose: true num_units: {{ contrail_nodes | count }} options: auth-mode: 'no-auth' cassandra-minimum-diskgb: '4' cassandra-jvm-extra-opts: '-Xms1g -Xmx2g' log-level: 'SYS_DEBUG' docker-registry: "{{ CONTAINER_REGISTRY }}" image-tag: "{{ CONTRAIL_VERSION }}" to: {{ contrail_nodes }} # misc ntp: charm: "cs:{{ SERIES }}/ntp" relations: - [ kubernetes-master:kube-api-endpoint, kubernetes-worker:kube-api-endpoint ] - [ kubernetes-master:kube-control, kubernetes-worker:kube-control ] - [ kubernetes-master:certificates, easyrsa:client ] - [ kubernetes-master:etcd, etcd:db ] - [ kubernetes-worker:certificates, easyrsa:client ] - [ etcd:certificates, easyrsa:client ] # contrail - [ kubernetes-master, ntp ] - [ kubernetes-worker, ntp ] - [ contrail-controller, ntp ] - [ contrail-controller, contrail-analytics ] - [ contrail-controller, contrail-analyticsdb ] - [ contrail-analytics, contrail-analyticsdb ] - [ contrail-agent, contrail-controller ] # contrail-kubernetes - [ contrail-kubernetes-node:cni, kubernetes-master:cni ] - [ contrail-kubernetes-node:cni, kubernetes-worker:cni ] - [ contrail-kubernetes-master:contrail-controller, contrail-controller:contrail-controller ] - [ contrail-kubernetes-master:kube-api-endpoint, kubernetes-master:kube-api-endpoint ] - [ contrail-agent:juju-info, kubernetes-worker:juju-info ] - [ contrail-agent:juju-info, kubernetes-master:juju-info ] - [ contrail-kubernetes-master:contrail-kubernetes-config, contrail-kubernetes-node:contrail-kubernetes-config ]
You can create or modify the Contrail Charm deployment bundle YAML file to:
Point to machines or instances where the Contrail Charms must be deployed.
Include the options you need.
Each Contrail Charm has a specific set of options. The options you choose depend on the charms you select. For more information on the options that are available, see Options for Juju Charms with Kubernetes.
- (Optional) Check the status of deployment.
You can check the status of the deployment by using the
juju status
command. - Enable configuration statements.
Based on your deployment requirements, you can enable the following configuration statements:
contrail-agent
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-agent/README.md.
contrail-analytics
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-analytics/README.md.
contrail-analyticsdb
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-analyticsdb/README.md.
contrail-controller
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-controller/README.md.
contrail-kubernetes-master
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-kubernetes-master/README.md.
contrail-kubernetes-node
For more information, see https://github.com/Juniper/contrail-charms/blob/R5/contrail-kubernetes-node/README.md.
Deploying Juju Charms with Kubernetes Manually
Before you begin deployment, ensure that you have:
Installed and configured Juju
Created a Juju controller
Ubuntu 16.04 or Ubuntu 18.04 installed
Follow these steps to deploy Juju Charms with Kubernetes manually:
- Create machine instances for Kubernetes master, Kubernetes
workers, and Contrail.
juju add-machine --constraints mem=16G cores=2 root-disk=50G --series=xenial #for all-in-one machine
- Deploy Kubernetes services.
Some of the applications may need an additional configuration.
You can deploy Kubernetes services by using any one of the following methods:
Note You must use the same docker version for Contrail and Kubernetes.
By specifying the Kubernetes parameters in a YAML file
By using CLI
By using a combination of YAML-formatted file and CLI
For more details, refer to Juju Application Configuration.
- Deploy and configure ntp, easyrsa, etcd, kubernetes-master,
kubernetes-worker.
juju deploy cs:xenial/ntp ntp juju deploy cs:~containers/easyrsa easyrsa --to lxd:0 juju deploy cs:~containers/etcd etcd \ --resource etcd=3 \ --resource snapshot=0 juju set etcd channel="3.2/stable" juju deploy cs:~containers/kubernetes-master kubernetes-master \ --resource cdk-addons=0 \ --resource kube-apiserver=0 \ --resource kube-controller-manager=0 \ --resource kube-proxy=0 \ --resource kube-scheduler=0 \ --resource kubectl=0 juju set kubernetes-master channel="1.14/stable" \ enable-dashboard-addons="false" \ enable-metrics="false" \ dns-provider="none" \ docker_runtime="custom" \ docker_runtime_repo="deb [arch={ARCH}] https://download.docker.com/linux/ubuntu {CODE} stable" \ docker_runtime_key_url="https://download.docker.com/linux/ubuntu/gpg" \ docker_runtime_package="docker-ce" juju deploy cs:~containers/kubernetes-worker kubernetes-worker \ --resource kube-proxy="0" \ --resource kubectl="0" \ --resource kubelet="0" juju set kubernetes-worker channel="1.14/stable" \ ingress="false" \ docker_runtime="custom" \ docker_runtime_repo="deb [arch={ARCH}] https://download.docker.com/linux/ubuntu {CODE} stable" \ docker_runtime_key_url="https://download.docker.com/linux/ubuntu/gpg" \ docker_runtime_package="docker-ce"
- Deploy and configure Contrail services.
Deploy contrail-analyticsdb, contrail-analytics, contrail-controller, contrail-kubernets-master, contrail-kubernetes-node, contrail-agent from the directory where you have downloaded the charms.
Note You must set auth-mode parameter of the contrail-controller charm to no-auth if Contrail is deployed without a keystone.
juju deploy contrail-analytics contrail-analytics juju deploy contrail-analyticsdb contrail-analyticsdb juju set contrail-analyticsdb cassandra-minimum-diskgb="4" cassandra-jvm-extra-opts="-Xms1g -Xmx2g" juju deploy contrail-controller contrail-controller juju set contrail-controller cassandra-minimum-diskgb="4" cassandra-jvm-extra-opts="-Xms1g -Xmx2g" auth-mode="no-auth" juju deploy contrail-kubernetes-master contrail-kubernetes-master juju deploy contrail-kubernetes-node contrail-kubernetes-node juju deploy contrail-agent contrail-agent
- Enable applications to be available to external traffic:
juju expose kubernetes-master juju expose kubernetes-worker
- Enable contrail-controller
and contrail-analytics services to be available to external traffic
if you do not use HAProxy.
juju expose contrail-controller juju expose contrail-analytics
- Apply SSL.
You can apply SSL if needed. To use SSL with Contrail services, deploy easy-rsa service and
add-relation
command to create relations to contrail-controller service and contrail-agent services.juju add-relation easyrsa contrail-controller juju add-relation easyrsa contrail-analytics juju add-relation easyrsa contrail-analyticsdb juju add-relation easyrsa contrail-kubernetes-master juju add-relation easyrsa contrail-agent
- Add other necessary relations.
juju add-relation "contrail-controller" "contrail-analytics" juju add-relation "contrail-controller" "contrail-analyticsdb" juju add-relation "contrail-analytics" "contrail-analyticsdb" juju add-relation "contrail-agent" "contrail-controller" juju add-relation "contrail-controller" "ntp" juju add-relation “kubernetes-worker”, “ntp” juju add-relation “kubernetes-master”, “ntp” juju add-relation "kubernetes-master:kube-api-endpoint" "kubernetes-worker:kube-api-endpoint" juju add-relation "kubernetes-master:kube-control" "kubernetes-worker:kube-control" juju add-relation "kubernetes-master:certificates" "easyrsa:client" juju add-relation "kubernetes-master:etcd" "etcd:db" juju add-relation "kubernetes-worker:certificates" "easyrsa:client" juju add-relation "etcd:certificates" "easyrsa:client" juju add-relation "contrail-kubernetes-node:cni" "kubernetes-master:cni" juju add-relation "contrail-kubernetes-node:cni" "kubernetes-worker:cni" juju add-relation "contrail-kubernetes-master:contrail-controller" "contrail-controller:contrail-controller" juju add-relation "contrail-kubernetes-master:kube-api-endpoint" "kubernetes-master:kube-api-endpoint" juju add-relation “contrail-agent:juju-info” “kubernetes-master:juju-info” juju add-relation "contrail-agent:juju-info" "kubernetes-worker:juju-info" juju add-relation "contrail-kubernetes-master:contrail-kubernetes-config" "contrail-kubernetes-node:contrail-kubernetes-config"