# Topology K8S Onboarding In order to deploy blueprints that require K8S you will need to have a working K8S cluster in witch resources are deployed. There are basically 2 ways to add a K8S cluster in the NFVCL topology: - Deploy a K8s cluster on OpenStack through the K8S **blueprint** - Add an external ready cluster to the topology must be configured and working (like k8S bare metal installation or K3S installation with Rancher) ## Create Kubernetes Cluster (Blueprint) The first way will use a blueprint to deploy a cluster on a VIM belonging to the topology. The number of nodes of the new cluster can be changed in the request. For further details you can look at the dedicated page of the K8s blueprint: [K8s blueprint creation](../blueprints/k8s/k8s_blue_creation.md) ## Add *External* Kubernetes Cluster If you want to add an external K8s to NFVCL - API (POST): {{ base_url }}/v1/topology/kubernetes_external - Body: ``` json { "name": "BareMK8S", "nfvo_onboard": true, "credentials": "CONTENT OF /etc/kubernetes/admin.conf or other enabled admin users", "vim_name": "OS-3", "k8s_version": "1.24", "networks": ["radio_0SJDRI"], "areas": [ 0 ] } ``` ### Credential content To manually build the **credentials** field you can use Notepad++. Copy the content of /etc/kubernetes/admin.conf (in the K8s controller) inside Notepad++. Then go `Edit->EOL conversion->Unix`. The last step is `Search->Replace` and replace line end (`\n`) with (`\\n`), you should obtain a one line content to be placed in the **credentials** field. The final result should look like this: ```json { "name": "r1hpgen8-test-c", "provided_by": "external", "blueprint_ref": "", "credentials": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EVXhNREE1TkRZeU9Wb1hEVE16TURVd056QTVORFl5T1Zvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT3daCm5xWUYvMHdZZUYzUk1xaGU3RVpxZHJDNmFOd1kwNlcxRUE4ZjZkWWQwK0RtNEZiVnhmekV1MWJnSi9YRlU5a3YKcFZ3UFdmL09DK0JHREpzQjY1NTIraEZjM3B0dW8vTnEvZzRaaHJyMEgyNU1NNFBKT3VURFA1U0Vidkp2R1JHRApKSzlyR2xseWVKOGFGaUZ4UmZIcHk2YmJhVTJ5UW1YWUk5Sm1GM2xpcVl3TVlUTURBQW9mdStYYlE2YTd0VzNyCkx6OTI1U2QveHErNEQxeE5EWTJaQlBwZFJYWkcrTHNpVzBrOW9haTR5emUxOElJR3lPMitOTWpVclBTQXRBUlYKRTRKcG5lMXgzQ1F3Z1N5eGtpUisvWUxhZGhJc3M3TlBtR3h6UzRSRlJDWWJDT0xBbGRTZTVITmNLV21DSnJsagoxblVIbzNyZVJtUGpBUnpld2pjQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZDSG9ldXJqZ2QxTVFXV1hBSFI4dnJvSjNmTjFNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQTdwQzlNRHQ0WnNKWlRQVTUxMAovanl0RWtPOWN2RlQ4UFE2eXBpUjVPVXJGSXZqUTVxekU5cS9oRmlOVldoQ3VNK01FUnVuVkhpWHpUWC94M1JqCkR6VnlCTXNCUU1zQnRVUFh5TXZ2SE9uaUUvSDlOTEJzUnJKbjhIWnBKMDJlUlNCaklLelhHQVRNV29QbEROTFgKeXBlaWdWZVBsOWdTWFRtKzNiUmU5VTN0eGRIclZsNTJHdk1aaW1kQTRjZmpKVGx6RzhFbkJWRmd3NEc3RGFMOQpnVGg0L05Ec2dHeEx6YWpUdElWUC8vdmRoL0w2dVc4VWxoU0x5VTNCUzVzbXl4YThUVnRiUGdLTDQ3VnFsQTBSCmY1elJuaVZOZGhwb2JmSjV6MStJbGV1cjVoU0c0RjJkbjR4Q2FWZVpPUVVxNkFadXB1UGRnRWhTUzdPeW1QaFQKaE5ZPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n server: https://192.168.17.28:6443\n name: kubernetes\ncontexts:\n- context:\n cluster: kubernetes\n user: kubernetes-admin\n name: kubernetes-admin@kubernetes\ncurrent-context: kubernetes-admin@kubernetes\nkind: Config\npreferences: {}\nusers:\n- name: kubernetes-admin\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJTXNrUDVnMXc3ZlF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBMU1UQXdPVFEyTWpsYUZ3MHlOREExTURrd09UUTJNekphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW1sSmxhNkdoTEF3Sks1L3YKQngveEk5UU1XcnpybEVnM2p4L3BiQWRDbWg0eGI0QUdJY0hmVWFlMUM2NDF1V2hMVDc3d053L053YzFxeWhtTApqeGt0NUhGa2lIcjBmcFF1K2lTY0EwY3p0bDlzdHhMRUoyeWd6QnNMdnVTblhSTW5Xd28vczJjU1o5b1IxTnc2CkxlUU1wZXlZazdVRzRJNFF0WEVLZTJIOHZPaENpODlENEt4NTI1VGpsamhaSXRITWtqSmwrQ2Nld28wUXluWlMKY1N1SkdYK0QybmJ2cGNpTnBzSjRMaXQ0MUh1djRrWlp0Ri9FcFlWWWZ3WWk2dW9KTmFrVzZld2JpeWx2dm4xRgprRDlndDAzZWUwVDBXYkVZWFEwSG83NVRZSDlBcExtZHhuOC9RTjlCeEVoYW5JNDlubFZrdUY4SnJobEdTSnAwCkpNazJPd0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRaDZIcnE0NEhkVEVGbGx3QjBmTDY2Q2QzegpkVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBMjd2TS83WjJ3aXZjc3dYdHlLT0NJTkN4ZlV2Mi9Ld2htZzlQCmhkS2ZnUjRPR3dmL3dvNVFwdXdZUEtreW1ldlNYN1BjTDZGNElXMWM5eURVcUxSVnc5UWNLY1M1S0dJeENzcnQKRXNCTTFVK3RBRnMzaUdUNFhYVWRQcit0U0hjdldJYkYvZ0cxWk95WENDSTFHcGRwU3U1c2JpK0JkMm5GT0FWYgpxV25XT3hZQ2pmVUdTVmFmSU5XN21qYVk2YUxNU0hZdkY4LzBxNDAxRjhtRzY4ckdiWXJhSzR5d2NjQ2xScmQwCjZWdVVHdlI4SjRLTVg5dE84SjdCa3BILys2aGVIRGxoSDd5SWZnRGU2N3paTHpCR1VIV0N6OWZ1UFg5WGd5M1UKWkxjY1B0ckFYdEZjR1A2OFRtaUcvOFI4bUNMZ050VVBaa1UwaFpCU0VYVkRCVGNGZkE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBbWxKbGE2R2hMQXdKSzUvdkJ4L3hJOVFNV3J6cmxFZzNqeC9wYkFkQ21oNHhiNEFHCkljSGZVYWUxQzY0MXVXaExUNzd3TncvTndjMXF5aG1ManhrdDVIRmtpSHIwZnBRdStpU2NBMGN6dGw5c3R4TEUKSjJ5Z3pCc0x2dVNuWFJNbld3by9zMmNTWjlvUjFOdzZMZVFNcGV5WWs3VUc0STRRdFhFS2UySDh2T2hDaTg5RAo0S3g1MjVUamxqaFpJdEhNa2pKbCtDY2V3bzBReW5aU2NTdUpHWCtEMm5idnBjaU5wc0o0TGl0NDFIdXY0a1paCnRGL0VwWVZZZndZaTZ1b0pOYWtXNmV3Yml5bHZ2bjFGa0Q5Z3QwM2VlMFQwV2JFWVhRMEhvNzVUWUg5QXBMbWQKeG44L1FOOUJ4RWhhbkk0OW5sVmt1RjhKcmhsR1NKcDBKTWsyT3dJREFRQUJBb0lCQUhjemVmK2ZRMTFBbHJ6Sgp0dG9zQkJtR3ExeFRYU3lXYzhQc0JHTmJZRWluVmN3b2VaUU5xcS9wK09CaTJrQ3luS21tZE9vekhOMjhDK2E3CndKN3g5ZzdrdjZEa1NJS1ZkNHZrUjFZSTQ1clZMcVppcW4xQlhSc0xNUkZza1JKRnZ6cUZPaHNiWEk0M1ZWcTAKR1lSbENKZ0pudmxJOVZ6eW4xbG5UWTlzYXNxRzhmdmtLblVCZE1Rb0ZneThtN0FPV3VxeEYvN3JkRDlqR2lzbgpJaXlKNVdMa0dWQWhyMkVOVTBqWEVKNGdwUlhsK2trMG9vZHRtRmY2S0JqaDV2ODc1dzZ3ODRoWTlGSDlOeVRPCkNHbDNFWVp3cjZGTkQxM2VDbFRVakRmcG9Xc25FU0FrdU1aR21tU0VmaWltczBEb095NThBZWtvcTNWcDk1SkcKdWRuNno0RUNnWUVBeEpNc254YzNaOXJBTGxpd1cwaklONXBFeWswSDNuVmpJY0RlVUxEV1VGbCtTMUFYZDRPMwprYVY0Ymp0ZCtjVUFIcDhpaURCSVMwY1dQaE5WVEV0d21tV2VYa1JiSERSMURydEJmaENGRDgxTm1zUlo4anA0Ci9mNytNYUN0OVFrcEdMY2Jqa3Q4N0hFQ2JWYzZRNlpadHQ4UEJCMTRnSm5FNVQ3QXlLaXY3S0VDZ1lFQXlQbEkKS1JXb2NQOWhXRGRSV2tnbWVTT1o0N2pIYklHWlYvc2RJaEZZM1BoUUlYTGN6b0VpMVk5cGNqV2hmbGJ4c0tQOQpGN0t0VG9Scm1uTm9hK1J5MFJRN1RHMjJvNWFUOTZjeTJqa0szRUoxWlg3MmZwOXdpZ053eVZqQWhUeUFUT092Cm9sK3hubnNIejhjZUVoR0d0Q0E1TWxPcDFrK1UxT3p1clNab2VWc0NnWUVBdEFTWHU0VzJYcXhzak1UNWxFODkKMC9XNkE0MnhwQjdhVHNIaWxnQ3I4MTlSa2tUaGlMaWVOb3BUbEpkWGczSE9uenhha2wrdEJRc3ZxbDlvSVB1QgpQbFBMU1ViT0xURTQ5ZW0wbTI4amZBb21oSkpHVU5jTmtJV2hZZTlrLzE2SlBUSUswUy8rVWtWWDFLd3FGbVBVCkN1MlJRZEovVlQzOG0zZnhjcEZRc3FFQ2dZQmJqdjNxQWJ6d1pkaFNXVGxOMlNyMTYxc3puTDMxMkFFbFRQalQKeVhWampoanJkQ25XUm95NUlKSFlmMGhvaDNHcW1MczRMYVc0N0trYy8xRG1QbmgwZWpRZHVLb0pVeE5zTXhiKwp4aGdGaXAxek5PbFZmSXZIeEpPQWwxZDJHNzhUeUhMK2xYd1ZDRlhodWdRZ0ZTMzZKK2dHM29pMFl5TVo4aXMyClpSWVptd0tCZ0VieGd2bUgxcTR1RUZFYlVudWVVNm9kWkxMc3VCWE9FVHg0WnZTVXFVMHpjZEpWTjczMGhDZngKUnZFOWV5REc5Qy9lU2w5QmdKZzBOS0xzQ2RCWXVDemZycEFuSmxlbUlqQkNhYWNyd200ZDEyaGt5cEVUK2o4MApMVXlrMUlhZklHL3pza1YyczRrK29QVjIwakU5QlJQUDhGUk9Yc2JVK3l6NHRQZmRVTE5WCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==", "vim_name": "OS-1", "k8s_version": "1.24", "networks": [ "radio" ], "areas": [ "0" ] } ```