Install Portainer CE on your Kubernetes environment
Introduction
Portainer consists of two elements, the Portainer Server and the Portainer Agent. Both elements run as lightweight containers on Kubernetes.
To get started, you will need:
A working and up to date Kubernetes cluster.
Access to run
helmorkubectlcommands on your cluster.Cluster Admin rights on your Kubernetes cluster. This is so Portainer can create the necessary
ServiceAccountandClusterRoleBindingfor it to access the Kubernetes cluster.A
defaultStorageClass configured (see below).
The installation instructions also make the following assumptions about your environment:
Your environment meets our requirements. While Portainer may work with other configurations, it may require configuration changes or have limited functionality.
Kubernetes RBAC is enabled and working (this is required for the access control functionality in Portainer).
You will be using the
portainernamespace for Portainer. At present this is a requirement - other namespaces are currently unsupported.Kubernetes' metrics server is installed and working (if you wish to use the metrics within Portainer).
Data Persistence
Portainer requires data persistence, and as a result needs at least one StorageClass available to use. Portainer will attempt to use the default StorageClass during deployment. If you do not have a StorageClass tagged as default the deployment will likely fail.
You can check if you have a default StorageClass by running the following command on your cluster:
kubectl get scand looking for a StorageClass with (default) after its name:
root@kubemaster01:~# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage (default) k8s-sigs.io/nfs-subdir-external-provisioner Delete Immediate false 11dTo set a StorageClass as default, you can use the following:
kubectl patch storageclass <storage-class-name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'replacing <storage-class-name> with the name of your StorageClass.
Alternatively, if you are installing using our Helm chart, you can pass the following parameter in your helm install command to specify the StorageClass to use for Portainer:
--set persistence.storageClass=<storage-class-name>Deployment
To deploy Portainer within a Kubernetes cluster you can use our provided Helm charts or YAML manifests.
Deploy using Helm
First add the Portainer Helm repository by running the following commands:
helm repo add portainer https://portainer.github.io/k8s/
helm repo updateOnce the update completes, you're ready to begin the installation. Which method you choose will depend on how you wish to expose the Portainer service:
Using the following command, Portainer will be available on port 30779 for HTTPS:
helm upgrade --install --create-namespace -n portainer portainer portainer/portainer \
--set tls.force=true \
--set image.tag=ltsIn this example, Portainer will be deployed to your cluster and assigned a Cluster IP, with an nginx Ingress Controller at the defined hostname. For more on Ingress options, refer to the list of Chart Configuration Options.
helm upgrade --install --create-namespace -n portainer portainer portainer/portainer \
--set service.type=ClusterIP \
--set tls.force=true \
--set image.tag=lts \
--set ingress.enabled=true \
--set ingress.ingressClassName=<ingressClassName (eg: nginx)> \
--set ingress.annotations."nginx\.ingress\.kubernetes\.io/backend-protocol"=HTTPS \
--set ingress.hosts[0].host=<fqdn (eg: portainer.example.io)> \
--set ingress.hosts[0].paths[0].path="/"Using the following command, Portainer will be available at an assigned Load Balancer IP on port 9443 for HTTPS:
helm upgrade --install --create-namespace -n portainer portainer portainer/portainer \
--set service.type=LoadBalancer \
--set tls.force=true \
--set image.tag=ltsDeploy using YAML manifests
Our YAML manifests support exposing Portainer via either NodePort or Load Balancer.
To expose via NodePort, you can use the following command (Portainer will be available on port 30777 for HTTP and 30779 for HTTPS):
kubectl apply -n portainer -f https://downloads.portainer.io/ce-lts/portainer.yamlTo expose via Load Balancer, use the following command to provision Portainer at an assigned Load Balancer IP on port 9000 for HTTP and 9443 for HTTPS:
kubectl apply -n portainer -f https://downloads.portainer.io/ce-lts/portainer-lb.yamlkubectl patch deployments -n portainer portainer -p '{"spec": {"template": {"spec": {"nodeSelector": {"kubernetes.io/hostname": "'$(kubectl get pods -n portainer -o jsonpath='{ ..nodeName }')'"}}}}}' || (echo Failed to identify current node of portainer pod; exit 1)Logging In
Now that the installation is complete, you can log into your Portainer Server instance. Depending on how you chose to expose your Portainer installation, open a web browser and navigate to the following URL:
https://localhost:30779/ or http://localhost:30777/Replace localhost with the relevant IP address or FQDN if needed, and adjust the port if you changed it earlier.
https://<FQDN>/Replace <FQDN> with the FQDN of your Portainer instance.
https://<loadbalancer IP>:9443/ or http://<loadbalancer IP>:9000/Replace <loadbalancer IP> with the IP address or FQDN of the load balancer, and adjust the port if you changed it earlier.
You will be presented with the initial setup page for Portainer Server.
Initial setupLast updated
Was this helpful?