vSphere with K8s (Pacific) === > [name=Alexandre CAUSSIGNAC] > [time=Dimanche 12 Avril 2020] Préambule --- Ce post est le dernier d'une série de quatre articles axés autour du moteur d'orchestration Kubernetes (K8s) et qui ont pour objectifs d'expliquer comment passer d'un mode *Do It Yourself* (DIY) à une plateforme de conteneurs pleinement fonctionnelle, supportée et scalable. 1. [K8s on vSphere (DIY)](https://hackmd.io/@ac09081979/K8s_on_vSphere) 1. [K8s on vSphere with Cluster API (DIY)](https://hackmd.io/@ac09081979/K8s_on_vSphere_with_Cluster_API) 1. [Tanzu Kubernetes Grid (TKG) on vSphere](https://hackmd.io/@ac09081979/TKG) 1. **[vSphere with K8s (Pacific)](https://hackmd.io/@ac09081979/vSphere_with_K8s)** Introduction --- vSphere with Kubernetes plus connu sous le nom de projet Pacific a été annoncé à VMworld US 2019. Il fait partie des nombreuses nouvelles fonctionnalités de vSphere 7 et est désormais GA :+1: Pour de plus amples informations, je vous renvoie sur le blog de mes deux collègues [Farid BENREJDAL](https://loeilduse.fr/?p=693) et [Mikael LELOUCH](https://myvmworld.fr/rocket-launch-vmware-next-generation/). Comme nous l'avons vu sur le précédent article, TKG permet d'automatiser le provisionnement de clusters K8s, d'en assurer leur disponibilité ainsi que la mise à l'échelle (scalabilité). Le projet Pacific fait partie de l'offre Tanzu basée sur le Framework *Build, Run & Manage* avec pour leitmotiv *Any App - Any Cloud - Any Cluster*. Il devient alors possible de : 1. Provisionner (via Cluster API) des clusters K8s upstream (projet Tanzu Kubernetes Grid) en vue d'une stratégie On-Premise/multi Cloud et d'une portabilité/réversibilité extrême (eg. vSphere/AWS/Azure/GCP). 1. Faire tourner des conteneurs et des machines virtuelles (VM) directement sur l'hyperviseur vSphere (via un agent [Spherelet](https://blogs.vmware.com/vsphere/2019/08/project-pacific-technical-overview.html)) en élargissant la portée des namespaces ; ce qui permet de construire des applications hybrides constituées par exemple d'un mixte VM Legacy et Pods micro services (projet Pacific). 1. Disposer de tous les composants calculs, réseaux et stockage nécessaires et indispensables à la mise en place d’une plateforme de conteneurs dite *Rock Solid*. VMware offre la possibilité de gérer de manière uniforme l’ensemble de ces composants via l’offre Cloud Foundation. De la même façon que les Hyperscalers proposent leurs services K8s managés, les clients seront à même de disposer d’une plateforme prête à l’emploi pour faire tourner l’intégralité de leur patrimoine numérique, qu’il soit composé de serveurs physiques, de machines virtuelles ou de conteneurs. 1. Gérer les opérations Day1 (installation) et Day2 (intégrité, gestion du cycle de vie, sauvegarde/restauration, …) via une seule et même interface graphique (Tanzu Mission Control). 1. Disposer d’une expertise reconnue dans la modernisation des applications via l’offre Pivotal Lab, d’un market place applicatif (Bitnami) et du framework de développement [Spring](https://tanzu.vmware.com/spring-runtime). Dans cet article, nous allons nous focaliser sur la partie Pacific et nous verrons comment rattacher nos clusters à Tanzu Mission Control. Environnement de Lab --- Ce lab est un environnement dit *nested*. Il y a quatre serveurs physiques sur lesquels j'ai déployé quatre hyperviseurs vSphere (en machines virtuelles) et un vCenter Server Appliance (VCSA). Pour faire ça, j'ai utilisé un super outil appelé [cPodFactory](https://github.com/bdereims/cPodFactory) qui a été créé et est maintenu par mon collègue [Brice DEREIMS](https://fr.linkedin.com/in/brice-dereims-65a3a4). Même s'il n'est pas possible de l'utiliser en production pour des raisons de support, il reste très utile pour tous types de tests. > Si vous disposez déjà d'un environnement vSphere équivalent, vous pouvez vous rendre directement à la section suivante. L'avantage de disposer d'une plateforme VCF est l'installation et la gestion du cycle de vie automatique de l'ensemble des produits qui composent le SDDC VMware. Voici les produits et versions utilisés durant ce lab: | Product | Version | | -------------------------------- | ---------------------------- | | VMware vSphere Hypervisor (ESXi) | 7.0 (Build Number: 15843807) | | VMware vCenter Server Appliance | 7.0 (Build Number: 15952498) | | NSX-T | 3.0 (Build Number: 15946739) | | Ubuntu | 18.04.4 LTS | Ainsi que les détails réseaux sur les composants installés: | IP | FQDN | | ------------ | ------------------------------------- | | 172.20.27.3 | vcsa.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.21 | esx-01.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.22 | esx-02.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.23 | esx-03.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.24 | esx-04.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.25 | nsxmgr.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.26 | nsxedg.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.27 | nsxgtw.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.30 | admcli.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.65 | apipac.cpod-aca-pac.az-lab.shwrfr.com | | 172.20.27.66 | harbor.cpod-aca-pac.az-lab.shwrfr.com | | Range/Subnet | Function | | ----------------- | ------------- | | 172.20.27.200-254 | DHCP | | 10.244.0.0/19 | Pod CIDRs | | 10.96.0.0/22 | Service CIDRs | | 172.20.27.64/26 | Ingress CIDRs | | 172.20.27.128/26 | Egress CIDRs | Préparation du Lab --- - [ ] Créer un cPod (appelé ACA-PAC dans ce tutoriel) - [ ] Déployer un VCSA - [ ] Récupérer le mot de passe généré - [ ] Se connecter au vCenter et mettre à jour les licences - [ ] Mettre à jour la table host du cPod router > Le cPod router (basé sur PhotonOS) offre ces différents services: BGP, DHCP, DNS, L3 gateway, NFS server, routing. ``` root@cpodrouter-aca-pac [ ~ ]# cat /etc/hosts # Begin /etc/hosts (network card version) ::1 localhost ipv6-localhost ipv6-loopback 127.0.0.1 localhost.localdomain 127.0.0.1 localhost 172.20.27.1 cpodrouter cpod # End /etc/hosts (network card version) 172.20.27.2 cpodfiler 172.20.27.24 esx-04 172.20.27.23 esx-03 172.20.27.22 esx-02 172.20.27.21 esx-01 172.20.27.3 vcsa 172.20.27.25 nsxmgr 172.20.27.26 nsxedg 172.20.27.27 nsxgtw 172.20.27.30 admcli 172.20.27.65 apipac 172.20.27.66 harbor ``` > Les adresses IP de apipac (API control plane) et harbor seront à adapter après l'activation de vSphere with K8s (cf section afférente) - [ ] Activer les fonctionnalités DRS et HA (en ajoutant les options ci-dessous) sur le cluster vSphere | Option | Value | | --------------------------------- | ----- | | das.ignoreInsufficientHbDatastore | TRUE | | das.ignoreRedundantNetWarning | TRUE | > Penser à modifier la MTU du vSwitch0 si vous utiliser un Lab nested. ![](https://i.imgur.com/allQacR.png) Installation de la machine virtuelle (administration) basée sur Ubuntu 18.04.4 LTS --- - [ ] Déployer la machine virtuelle ADMCLI ![](https://i.imgur.com/VnBFifa.png) - [ ] Fixer l'adresse IP de la machine virtuelle ``` root@admcli:~# cat /etc/netplan/01-netcfg.yaml # This file describes the network interfaces available on your system # For more information, see netplan(5). network: version: 2 renderer: networkd ethernets: ens160: addresses: [172.20.27.30/24] gateway4: 172.20.27.1 nameservers: addresses: [172.20.27.1] search: [cpod-aca-pac.az-lab.shwrfr.com] dhcp4: no root@admcli:~# cat /etc/hosts 127.0.0.1 localhost 172.20.27.30 admcli.cpod-aca-pac.az-lab.shwrfr.com admcli # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters ``` - [ ] Installer unzip jq et govc sur ADMCLI ``` root@admcli:~# apt install -y unzip jq root@admcli:~# curl -L https://github.com/vmware/govmomi/releases/download/v0.22.1/govc_linux_amd64.gz | gunzip > /usr/local/bin/govc root@admcli:~# chmod +x /usr/local/bin/govc root@admcli:~# exit acaussignac@admcli:~$ cat .govc export GOVC_INSECURE=true export GOVC_URL="https://vcsa.cpod-aca-pac.az-lab.shwrfr.com" export GOVC_USERNAME="administrator@cpod-aca-pac.az-lab.shwrfr.com" export GOVC_PASSWORD="password" acaussignac@admcli:~$ source .govc acaussignac@admcli:~$ govc ls /cPod-ACA-PAC/vm /cPod-ACA-PAC/network /cPod-ACA-PAC/host /cPod-ACA-PAC/datastore ``` - [ ] Installer Docker sur ADMCLI ``` root@admcli:~# apt install -y docker.io root@admcli:~# cat /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "insecure-registries" : ["harbor.cpod-aca-pac.az-lab.shwrfr.com"] } root@admcli:~# systemctl restart docker root@admcli:~# systemctl enable docker root@admcli:~$ usermod -aG docker acaussignac ``` > Il est nécessaire de se reconnecter avec l'utilisateur concerné pour pouvoir utiliser le démon docker ou exécuter la commande suivante ```exec su -l acaussignac``` Installer et configurer la partie réseau avec NSX-T (*Container Network Interface*) --- > L'intérêt d'utiliser NSX-T est qu'il va gérer l'intégralité des fonctionnalités abordées par les précédents articles, à savoir L2/L3, Load Balancer, Ingress, Network Policy et ce pour l'intégralité du Datacenter (VM et Pods) - [ ] Déployer l'OVA de NSX-T ![](https://i.imgur.com/beQwaec.png) - [ ] Se connecter à l'interface d'administration du NSX Manager et mettre à jour la licence - [ ] Enregistrer la VCSA System > Fabric > Compute Managers: ADD ![](https://i.imgur.com/1VyhP1D.png) - [ ] Créer deux Tranport Zones (Overlay et VLAN) System > Fabric > Transport Zones: ADD ![](https://i.imgur.com/DbRUjaU.png) ![](https://i.imgur.com/X9tI1F9.png) - [ ] Créer 3 Uplink Profile Host, Edge et T0 System > Fabric > Profiles: ADD ![](https://i.imgur.com/AM9Lgkq.png) ![](https://i.imgur.com/Y8Fppp6.png) --- ![](https://i.imgur.com/K0bgDaU.png) ![](https://i.imgur.com/bg5XCIJ.png) --- ![](https://i.imgur.com/Y2xVlWa.png) ![](https://i.imgur.com/41T0sxn.png) - [ ] Créer un IP Pool Networking > IP Address Pools: ADD IP ADDRESS POOL ![](https://i.imgur.com/ZVmdTuQ.png) --- ![](https://i.imgur.com/dQj92Sn.png) - [ ] Ajouter un Transport Node Profile System > Fabric > Profiles > Transport Nodes Profile: ADD ![](https://i.imgur.com/E5j8mP5.png) --- ![](https://i.imgur.com/1zNaCNe.png) - [ ] Préparer les hôtes ESXi System > Fabric > Nodes: Managed by VCSA -> CONFIGURE NSX ![](https://i.imgur.com/MvyDOjF.png) --- ![](https://i.imgur.com/xn8fe1D.png) - [ ] Déployer NSX Edge node System > Fabric > Nodes > Edge Transport Nodes: ADD EDGE VM ![](https://i.imgur.com/EIEEzVd.png) --- ![](https://i.imgur.com/CLc4Yv2.png) --- ![](https://i.imgur.com/qYvXg7F.png) --- ![](https://i.imgur.com/DxVRgbj.png) --- ![](https://i.imgur.com/AcYrkBc.png) --- ![](https://i.imgur.com/7AKjd6i.png) --- ![](https://i.imgur.com/zm4mSHE.png) - [ ] Créer un Edge cluster System > Fabric > Nodes > Edge Clusters: ADD ![](https://i.imgur.com/kGHUisJ.png) - [ ] Créer un T0 Uplink Segment sur la Transport Zone VLAN Networking > Segments: ADD SEGMENT ![](https://i.imgur.com/0N7CeSL.png) --- ![](https://i.imgur.com/BRsbruA.png) - [ ] Créer une gateway pour le T0 Networking > Tier-0 Gateways: ADD GATEWAY (Tier-0) ![](https://i.imgur.com/WRys3Gm.png) - [ ] Ajouter une interface (et adresse IP) ![](https://i.imgur.com/vFZs16Z.png) - [ ] Ajouter une route statique qui pointe en next hop sur le cPod router ![](https://i.imgur.com/iE3IUea.png) --- ![](https://i.imgur.com/QAFAHA2.png) --- ![](https://i.imgur.com/7dc5fpv.png) --- ![](https://i.imgur.com/gkgMSwr.png) Installer et configurer la partie stockage (*Container Storage Interface*) --- > L'installation du vSphere Cloud Controller Manager et du vSphere Cloud Storage Interface Driver est déjà intégrée dans Pacific. - [ ] Créer un tag vSphere nommé K8s et l'assigner au datastore adéquat ![](https://i.imgur.com/whLB4Iu.png) --- ![](https://i.imgur.com/y6AAlD0.png) - [ ] Créer une vSphere Storage Policy basée sur le tag créé précédemment ![](https://i.imgur.com/6iMZP1F.png) --- ![](https://i.imgur.com/QRZbLSI.png) --- ![](https://i.imgur.com/bK3oIv7.png) --- ![](https://i.imgur.com/snoFOUs.png) --- ![](https://i.imgur.com/Fjt3O8p.png) Configurer la partie vSphere with K8s --- - [ ] Aller dans le menu Workload Management ![](https://i.imgur.com/CYo7Fs3.png) - [ ] Cliquer sur Enable et suivre les étapes ci-dessous ![](https://i.imgur.com/Y7FV52D.png) --- - [ ] Sélectionner le cluster vSphere ![](https://i.imgur.com/entYkPt.png) --- ![](https://i.imgur.com/VNQaYyl.png) --- > Il s'agit de la configuration réseau du control plane de management (attention range d'adresses IP consécutives) > 1ère IP: la VIP de l'API K8s du cluster > 2ème à 4ème IP: adresses IP de chaque master node > 5ème IP: réservée lors des rolling update du control plane ![](https://i.imgur.com/qMFUF9H.png) ![](https://i.imgur.com/3TeGgDE.png) --- ![](https://i.imgur.com/7daOMzg.png) --- ![](https://i.imgur.com/oa3kHU8.png) --- ![](https://i.imgur.com/kQHWVhi.png) > L'installation prend environ 1h Configurer une Content Library et une registry Harbor --- - [ ] Ajouter une content Library contenant les OVA de TKG (menu Content Libraries) ![](https://i.imgur.com/fbJVIMA.png) --- ![](https://i.imgur.com/I8Yz0mg.png) --- > **ATTENTION**: L'URL à utiliser est https://wp-content.vmware.com/v2/latest/lib.json ![](https://i.imgur.com/HhinqCV.png) --- ![](https://i.imgur.com/OGF8DZk.png) --- ![](https://i.imgur.com/3SvjRfT.png) --- ![](https://i.imgur.com/HlHwYZR.png) - [ ] Rattacher cette Content Library au cluster vSphere (Add Library) ![](https://i.imgur.com/lceN6TX.png) --- ![](https://i.imgur.com/IVGbpSZ.png) - [ ] Ajouter une registry Harbor qui sera automatiquement configurée à chaque projet K8s (incluant les droits utilisateurs) ![](https://i.imgur.com/tJIFOmt.png) --- ![](https://i.imgur.com/89tc5hW.png) --- ![](https://i.imgur.com/sDlLnqD.png) --- ![](https://i.imgur.com/bcxzTHz.png) --- ![](https://i.imgur.com/AfQPQoT.png) --- ![](https://i.imgur.com/ux7tXV7.png) - [ ] Configurer la registry Harbor sur ADMCLI `root@admcli:~# mkdir -p /etc/docker/certs.d/harbor.cpod-aca-pac.az-lab.shwrfr.com` - [ ] Récupérer le certificat SSL sur vSphere et le transférer sur ADMCLI ![](https://i.imgur.com/igikjpR.png) ``` root@admcli:~# cat /etc/docker/certs.d/harbor.cpod-aca-pac.az-lab.shwrfr.com/ca.crt -----BEGIN CERTIFICATE----- MIIEYTCCA0mgAwIBAgIJAN4D7l33mOKsMA0GCSqGSIb3DQEBCwUAMIG7MQswCQYD VQQDDAJDQTEcMBoGCgmSJomT8ixkARkWDGNwb2QtYWNhLXBhYzEhMB8GCgmSJomT 8ixkARkWEWF6LWxhYi5zaHdyZnIuY29tMQswCQYDVQQGEwJVUzETMBEGA1UECAwK Q2FsaWZvcm5pYTEsMCoGA1UECgwjdmNzYS5jcG9kLWFjYS1wYWMuYXotbGFiLnNo d3Jmci5jb20xGzAZBgNVBAsMElZNd2FyZSBFbmdpbmVlcmluZzAeFw0yMDA0MDcw ODA4MTFaFw0zMDA0MDUwODA4MTFaMIG7MQswCQYDVQQDDAJDQTEcMBoGCgmSJomT 8ixkARkWDGNwb2QtYWNhLXBhYzEhMB8GCgmSJomT8ixkARkWEWF6LWxhYi5zaHdy ZnIuY29tMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEsMCoGA1UE CgwjdmNzYS5jcG9kLWFjYS1wYWMuYXotbGFiLnNod3Jmci5jb20xGzAZBgNVBAsM ElZNd2FyZSBFbmdpbmVlcmluZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAOZH3oP8ZoPBuF1escl/n1A3UwBmwPCLI+3tbTo16L2UtYWpcU0RIt0bW5TS PlkuWR3avBvIPJ+wTSy1Kbm9HOjuLjD5T7x2f2VAkJ4IzxNzix1oPYh910z+0Hm/ 3acxjpsk41JWHe0jhiX7pNgubEU4OTWcWYOekg9nZqM0LD8Ar08kZpm44I4bNm/t g/ZmZ9q6300pzKkZHB3r+IkLXejVVUI52AmCMoY+12PhX5BkdzLkCTopvZKHh5T6 2B1VP98cxgigIw9rD+jm/WhcL8XAEi0Wv4dA6O9R9URqaAXRn979Y0P89K1z/L0b eSbdAnerfoSWKcwiLLNZ5V1jOQ0CAwEAAaNmMGQwHQYDVR0OBBYEFK3qXF3yLBSk DRHZ4rklcLMqT16IMB8GA1UdEQQYMBaBDmVtYWlsQGFjbWUuY29thwR/AAABMA4G A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqGSIb3DQEBCwUA A4IBAQA56klMKFsIgoBMNo6P4BTuDfywcTJp9ezcNXHyxw+uohNZKb8bOueTPWzR GqKCoEXJW6tdNg5UyXmMd2DQlTdWN0he21T/lTzjZcE2m6SA+wrGTuSB7WxMYR3T B4JX6d94eMzlzTB9Mp/5faWsWDYObTOHNc0E6aRdswLmsp4M758BfuAgcArjawu8 K8H1yeoMr/OubVNY1CLMYWhH17l4HYczLsb7mM8h90Yld3Gx5hb8ffcZ8V9PzB3R 4ODnF5xB1f10H2XOMlmyzbo8BQmiXdcI6A+ww7NYAgywnEw8R0lbL1rL9oOL0LgJ zMIpJFa6shFS0eK8Frrl32Fj063j -----END CERTIFICATE----- acaussignac@admcli:~$ docker login https://harbor.cpod-aca-pac.az-lab.shwrfr.comUsername: acaussignac@cpod-aca-pac.az-lab.shwrfr.com Password: WARNING! Your password will be stored unencrypted in /home/acaussignac/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded ``` Créer votre premier environnement K8s sur vSphere --- - [ ] Ajouter un utilisaeur dans le domaine PSC cpod-aca-pac.az-lab.shwrfr.com ![](https://i.imgur.com/U7Copub.png) - [ ] Créer un namespace ![](https://i.imgur.com/D4PsjoL.png) --- ![](https://i.imgur.com/dkMWPFu.png) - [ ] Affecter les permissions à l'utilisateur créé précédemment ![](https://i.imgur.com/pZfpmZw.png) --- ![](https://i.imgur.com/dMqAnnU.png) - [ ] Affecter une politique de stockage ![](https://i.imgur.com/FG0gJqP.png) --- ![](https://i.imgur.com/SUmrwZH.png) --- ![](https://i.imgur.com/SiNGYWK.png) - [ ] Récupérer les binaires pour se connecter à l'API du cluster de management sur https://apipac.cpod-aca-pac.az-lab.shwrfr.com/ ![](https://i.imgur.com/HKMcqC9.png) ``` root@admcli:~# wget https://apipac.cpod-aca-pac.az-lab.shwrfr.com/wcp/plugin/linux-amd64/vsphere-plugin.zip --no-check-certificate root@admcli:~# unzip vsphere-plugin.zip Archive: vsphere-plugin.zip creating: bin/ inflating: bin/kubectl-vsphere inflating: bin/kubectl root@admcli:~# chmod u+x bin/* root@admcli:~# mv bin/* /usr/local/bin/ ``` - [ ] Se connecter sur le cluster K8s ``` acaussignac@admcli:~$ kubectl vsphere login --vsphere-username acaussignac@cpod-aca-pac.az-lab.shwrfr.com --server=https://apipac.cpod-aca-pac.az-lab.shwrfr.com --insecure-skip-tls-verify Password: Logged in successfully. You have access to the following contexts: apipac.cpod-aca-pac.az-lab.shwrfr.com production If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use `kubectl config use-context <workload name>` ``` - [ ] Déployer une application sur le supervisor cluster ``` acaussignac@admcli:~$ kubectl config use-context production Switched to context "production". acaussignac@admcli:~$ kubectl apply -f https://raw.githubusercontent.com/mann1mal/pacific/master/hellok8-sv.yaml service/hello-kubernetes created deployment.apps/hello-kubernetes created acaussignac@admcli:~$ kubectl get po,svc NAME READY STATUS RESTARTS AGE pod/hello-kubernetes-f8f676685-884xk 1/1 Running 0 23s pod/hello-kubernetes-f8f676685-bznxr 1/1 Running 0 23s pod/hello-kubernetes-f8f676685-xmnq8 1/1 Running 0 23s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/hello-kubernetes LoadBalancer 10.96.0.66 172.20.27.67 80:31819/TCP 24s ``` ![](https://i.imgur.com/xVtoY1A.png) --- ![](https://i.imgur.com/iF0kHYY.png) Créer des clusters K8s upstream TKG --- ``` acaussignac@admcli:~$ kubectl vsphere login --vsphere-username acaussignac@cpod-aca-pac.az-lab.shwrfr.com --server=https://apipac.cpod-aca-pac.az-lab.shwrfr.com --insecure-skip-tls-verify acaussignac@admcli:~$ kubectl config use-context production Switched to context "production". acaussignac@admcli:~$ kubectl get virtualmachineimages NAME AGE ob-15957779-photon-3-k8s-v1.16.8---vmware.1-tkg.3.60d2ffd 6m26s acaussignac@admcli:~$ cat create_guestcluster.yaml apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TanzuKubernetesCluster metadata: name: tkg-cluster-1 namespace: production spec: distribution: version: v1.16.8 topology: controlPlane: count: 1 class: best-effort-xsmall storageClass: k8s workers: count: 2 class: best-effort-xsmall storageClass: k8s settings: network: cni: name: calico services: cidrBlocks: ["198.51.100.0/12"] pods: cidrBlocks: ["192.0.2.0/16"] storage: classes: ["k8s"] defaultClass: k8s acaussignac@admcli:~$ kubectl create -f create_guestcluster.yaml tanzukubernetescluster.run.tanzu.vmware.com/tkg-cluster-1 created acaussignac@admcli:~$ kubectl get TanzuKubernetesCluster NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE tkg-cluster-1 1 2 v1.16.8+vmware.1-tkg.3.60d2ffd 6m54s creating acaussignac@admcli:~$ kubectl get TanzuKubernetesCluster NAME CONTROL PLANE WORKER DISTRIBUTION AGE PHASE tkg-cluster-1 1 2 v1.16.8+vmware.1-tkg.3.60d2ffd 12m running ``` > La création d'un cluster K8s prend environ 10 minutes. - [ ] Se connecter au cluster TKG nouvellement créé ``` acaussignac@admcli:~$ kubectl vsphere login --vsphere-username acaussignac@cpod-aca-pac.az-lab.shwrfr.com --server=https://apipac.cpod-aca-pac.az-lab.shwrfr.com --insecure-skip-tls-verify --tanzu-kubernetes-cluster-name tkg-cluster-1 Password: WARN[0006] Tanzu Kubernetes cluster login: no namespace given, name (tkg-cluster-1) may be ambiguous Logged in successfully. You have access to the following contexts: apipac.cpod-aca-pac.az-lab.shwrfr.com production production-172.20.27.65 tkg-cluster-1 If the context you wish to use is not in this list, you may need to try logging in again later, or contact your cluster administrator. To change context, use `kubectl config use-context <workload name>` acaussignac@admcli:~$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE apipac.cpod-aca-pac.az-lab.shwrfr.com apipac.cpod-aca-pac.az-lab.shwrfr.com wcp:apipac.cpod-aca-pac.az-lab.shwrfr.com:acaussignac@cpod-aca-pac.az-lab.shwrfr.com production 172.20.27.65 wcp:172.20.27.65:acaussignac@cpod-aca-pac.az-lab.shwrfr.com production production-172.20.27.65 172.20.27.65 wcp:172.20.27.65:administrator@cpod-aca-pac.az-lab.shwrfr.com production * tkg-cluster-1 172.20.27.68 wcp:172.20.27.68:acaussignac@cpod-aca-pac.az-lab.shwrfr.com acaussignac@admcli:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION tkg-cluster-1-control-plane-8hgjz Ready master 9m21s v1.16.8+vmware.1 tkg-cluster-1-workers-qv85n-5cb46c984f-gj4kp Ready <none> 109s v1.16.8+vmware.1 tkg-cluster-1-workers-qv85n-5cb46c984f-zbgjc Ready <none> 100s v1.16.8+vmware.1 ``` ![](https://i.imgur.com/tUCPFgx.png) > Nous allons déployer un Pod qui nécessite des privilèges élevés. ``` acaussignac@admcli:~$ cat runasroot.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: psp:privileged rules: - apiGroups: ['policy'] resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: - vmware-system-privileged --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: all:psp:privileged roleRef: kind: ClusterRole name: psp:privileged apiGroup: rbac.authorization.k8s.io subjects: - kind: Group name: system:serviceaccounts apiGroup: rbac.authorization.k8s.io acaussignac@admcli:~$ kubectl create -f runasroot.yaml clusterrole.rbac.authorization.k8s.io/psp:privileged created clusterrolebinding.rbac.authorization.k8s.io/all:psp:privileged created acaussignac@admcli:~$ cat deploy_kuard_cluster1.yaml apiVersion: apps/v1 kind: Deployment metadata: name: kuard-cluster-1 labels: app: kuard deployment: kuard-cluster-1 spec: replicas: 1 selector: matchLabels: app: kuard template: metadata: labels: app: kuard deployment: kuard-cluster-1 spec: containers: - name: kuard-cluster-1 image: gcr.io/kuar-demo/kuard-amd64:blue ports: - containerPort: 8080 acaussignac@admcli:~$ kubectl create -f deploy_kuard_cluster1.yaml deployment.apps/kuard-cluster-1 created acaussignac@admcli:~$ cat expose-kuard-cluster1.yaml apiVersion: v1 kind: Service metadata: name: kuard-cluster-1 spec: selector: app: kuard deployment: kuard-cluster-1 type: LoadBalancer ports: - port: 8080 targetPort: 8080 acaussignac@admcli:~$ kubectl create -f expose-kuard-cluster1.yaml service/kuard-cluster-1 created acaussignac@admcli:~$ kubectl get po,svc NAME READY STATUS RESTARTS AGE pod/kuard-cluster-1-6c8fcfcc95-khpcc 1/1 Running 0 90s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kuard-cluster-1 LoadBalancer 198.49.176.46 172.20.27.69 8080:32138/TCP 20s service/kubernetes ClusterIP 198.48.0.1 <none> 443/TCP 17m service/supervisor ClusterIP None <none> 6443/TCP 16m ``` ![](https://i.imgur.com/K3J1cG4.png) > NSX-T prend en charge l'ensemble des opérations réseau et sécurité des Supervisor Clusters et Guest Clusters. - [ ] Création d'un Persistent Volume Claim pour voir si la création des volumes fonctionne également à l'intérieur des Guest Clusters. ``` acaussignac@admcli:~$ cat pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-content labels: Pour-Application: kuard spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: k8s acaussignac@admcli:~$ kubectl create -f pvc.yaml persistentvolumeclaim/pvc-content created acaussignac@admcli:~$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-content Bound pvc-85a54e32-1e80-4a77-98ed-9894ef214afd 1Gi RWO k8s 53s ``` ![](https://i.imgur.com/iClxJQZ.png) Conclusion --- vSphere with Kubernetes (Pacific) est une plate-forme permettant d’héberger nativement des pods (containers) kubernetes, des VMs et des clusters Kubernetes à la demande, offrant ainsi la possibilité de concilier les exigences de sécurité, de performance, de résilience et d’évolutivité souhaitée par l’administrateur de l’infrastructure et les exigences d’agilité, de rapidité et de simplicité souhaitée par le développeur. Cette plate-forme peut héberger une application complète même si elle est composée de VM et de containers. Les investissements en terme financier et de compétence sur la plate-forme vSphere sont ainsi pérennisés. Les développeurs et les administrateurs continuent à utiliser leurs outils habituels avec lesquels ils sont à l’aise tout en travaillant sur une même plate-forme. En synthèse --- J'ai essayé de dresser les points positifs et négatifs de cette solution: * **Points forts**: appréhender les concepts de K8s, disposer de clusters multi masters, bénéficier de la persistance des données pour les applications qui le nécessitent, opérations Day1 et Day2, support d'un éditeur sur TKG ainsi que les produits Open Source de la gamme Tanzu (Antrea, Contour, Octant, Sonobuoy, Velero), possibilité d'étendre le support à des intégrations K8s spécifiques en fonction des besoins clients, bénéficier de toutes les fonctionnalités de réseau et de sécurité en un seul et même produit, gestion automatisée des couches d'infrastructure via la plateforme VMware Cloud Foundation. * **Points faibles**: son côté addictif :+1: