Illumina Innovates with Rancher and Kubernetes
To deploy Kubernetes, RKE deploys several core components or services in Docker containers on the nodes. Based on the roles of the node, the containers deployed may be different.
All services support additional custom arguments, Docker mount binds and extra environment variables.
etcd
kube-api
kube-controller
kubelet
scheduler
kubeproxy
Kubernetes uses etcd as a store for cluster state and data. Etcd is a reliable, consistent and distributed key-value store.
RKE supports running etcd in a single node mode or in HA cluster mode. It also supports adding and removing etcd nodes to the cluster.
You can enable etcd to take recurring snapshots. These snapshots can be used to restore etcd.
By default, RKE will deploy a new etcd service, but you can also run Kubernetes with an external etcd service.
Note for Rancher 2 users If you are configuring Cluster Options using a Config File when creating Rancher Launched Kubernetes, the names of services should contain underscores only: kube_api. This only applies to Rancher v2.0.5 and v2.0.6.
kube_api
The Kubernetes API REST service, which handles requests and data for all Kubernetes objects and provide shared state for all the other Kubernetes components.
services: kube-api: # IP range for any services created on Kubernetes # This must match the service_cluster_ip_range in kube-controller service_cluster_ip_range: 10.43.0.0/16 # Expose a different port range for NodePort services service_node_port_range: 30000-32767 pod_security_policy: false # Enable AlwaysPullImages Admission controller plugin # Available as of v0.2.0 always_pull_images: false secrets_encryption_config: enabled: true
RKE supports the following options for the kube-api service :
service_cluster_ip_range
10.43.0.0/16
service_node_port_range
NodePort
30000-32767
pod_security_policy
false
true
always_pull_images
AlwaysPullImages
Secrets Encryption Config (secrets_encryption_config) - Manage Kubernetes at-rest data encryption. Documented here
secrets_encryption_config
Note for Rancher 2 users If you are configuring Cluster Options using a Config File when creating Rancher Launched Kubernetes, the names of services should contain underscores only: kube_controller. This only applies to Rancher v2.0.5 and v2.0.6.
kube_controller
The Kubernetes Controller Manager service is the component responsible for running Kubernetes main control loops. The controller manager monitors the cluster desired state through the Kubernetes API server and makes the necessary changes to the current state to reach the desired state.
services: kube-controller: # CIDR pool used to assign IP addresses to pods in the cluster cluster_cidr: 10.42.0.0/16 # IP range for any services created on Kubernetes # This must match the service_cluster_ip_range in kube-api service_cluster_ip_range: 10.43.0.0/16
RKE supports the following options for the kube-controller service:
cluster_cidr
/24
10.42.0.0/16
The kubelet services acts as a “node agent” for Kubernetes. It runs on all nodes deployed by RKE, and gives Kubernetes the ability to manage the container runtime on the node.
services: kubelet: # Base domain for the cluster cluster_domain: cluster.local # IP address for the DNS service endpoint cluster_dns_server: 10.43.0.10 # Fail if swap is on fail_swap_on: false # Generate per node serving certificate generate_serving_certificate: false
RKE supports the following options for the kubelet service:
cluster_domain
cluster.local
cluster_dns_server
10.43.0.10
fail_swap_on
generate_serving_certificate
kube-ca
If hostname_override is configured for one or more nodes in cluster.yml, please make sure the correct IP address is configured in address (and the internal address in internal_address) to make sure the generated certificate contains the correct IP address(es).
hostname_override
cluster.yml
address
internal_address
An example of an error situation is an EC2 instance where the the public IP address is configured in address, and hostname_override is used, the connection between kube-apiserver and kubelet will fail because the kubelet will be contacted on the private IP address and the generated certificate will not be valid (the error x509: certificate is valid for value_in_address, not private_ip will be seen). The resolution is to provide the internal IP address in internal_address.
kube-apiserver
x509: certificate is valid for value_in_address, not private_ip
For more information on host overrides, refer to the node configuration page.
The Kubernetes Scheduler service is responsible for scheduling cluster workloads based on various configurations, metrics, resource requirements and workload-specific requirements.
Currently, RKE doesn’t support any specific options for the scheduler service.
The Kubernetes network proxy service runs on all nodes and manages endpoints created by Kubernetes for TCP/UDP ports.
Currently, RKE doesn’t support any specific options for the kubeproxy service.