Eugeny Shtoltc

IT Cloud


Скачать книгу

"google_client_config" "default" {}

      provider "kubernetes" {

      host = var.endpoint

      token = data.google_client_config.default.access_token

      cluster_ca_certificate = var.cluster_ca_certificate

      load_config_file = false

      }

      essh @ kubernetes-master: ~ / node-cluster $ cat nodejs / main.tf

      resource "kubernetes_deployment" "nodejs" {

      metadata {

      name = "terraform-nodejs"

      labels = {

      app = "NodeJS"

      }

      }

      spec {

      replicas = 3

      selector {

      match_labels = {

      app = "NodeJS"

      }

      }

      template {

      metadata {

      labels = {

      app = "NodeJS"

      }

      }

      spec {

      container {

      image = "Nginx: 1.17.0"

      name = "node-js"

      command = ["/ bin / bash"]

      args = ["-c", "echo $ HOSTNAME> /usr/share/Nginx/html/index.html && / usr / sbin / Nginx -g 'daemon off;'"]

      }

      }

      }

      }

      }

      resource "kubernetes_service" "nodejs" {

      metadata {

      name = "terraform-nodejs"

      }

      spec {

      selector = {

      app = kubernetes_deployment.nodejs.metadata.0.labels.app

      }

      port {

      port = 80

      target_port = var.target_port

      }

      type = "LoadBalancer"

      }

      Let's check the work using kubectl, for this we transfer the secrets from gcloud to kubectl.

      essh @ kubernetes-master: ~ / node-cluster $ sudo ./terraform apply

      essh @ kubernetes-master: ~ / node-cluster $ gcloud container clusters get-credentials node-ks –region = europe-west2-a

      Fetching cluster endpoint and auth data.

      kubeconfig entry generated for node-ks.

      essh @ kubernetes-master: ~ / node-cluster $ kubectl get deployments -o wide

      NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR

      terraform-nodejs 3 3 3 3 25m node-js Nginx: 1.17.0 app = NodeJS

      essh @ kubernetes-master: ~ / node-cluster $ kubectl get pods -o wide

      NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE

      terraform-nodejs-6bd565dc6c-8768b 1/1 Running 0 4m45s 10.4.3.15 gke-node-ks-node-ks-pool-07115c5b-bw15 none>

      terraform-nodejs-6bd565dc6c-hr5vg 1/1 Running 0 4m42s 10.4.5.13 gke-node-ks-node-ks-pool-27e2e52c-9q5b none>

      terraform-nodejs-6bd565dc6c-mm7lh 1/1 Running 0 4m43s 10.4.2.6 gke-node-ks-default-pool-2dc50760-757p none>

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ docker ps | grep node-js_terraform

      152e3c0ed940 719cd2e3ed04

      "/ bin / bash -c 'ech …" 8 minutes ago Up 8 minutes

      Kubernetes_node-js_terraform-nodejs-6bd565dc6c-8768b_default_7a87ae4a-9379-11e9-a78e-42010a9a0114_0

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ docker exec -it 152e3c0ed940 cat /usr/share/Nginx/html/index.html

      terraform-nodejs-6bd565dc6c-8768b

      esschtolts @ gke-node-ks-node-ks-pool-27e2e52c-9q5b ~ $ docker exec -it c282135be446 cat /usr/share/Nginx/html/index.html

      terraform-nodejs-6bd565dc6c-hr5vg

      esschtolts @ gke-node-ks-default-pool-2dc50760-757p ~ $ docker exec -it 8d1cf9ef44e6 cat /usr/share/Nginx/html/index.html

      terraform-nodejs-6bd565dc6c-mm7lh

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.4.2.6

      terraform-nodejs-6bd565dc6c-mm7lh

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.4.5.13

      terraform-nodejs-6bd565dc6c-hr5vg

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.4.3.15

      terraform-nodejs-6bd565dc6c-8768b

      The Balancers load balance between PODs that are filtered by matching their selectors in the meta information and the Selector specified in the balancer description in the spec section . All nodes are connected to one common network, so you can connect to any node (I did this via SSH of the GCP WEB interface in the section with Compute Engine virtual machines). You can address both the IP address in the container or node host, and the host of the terraform-nodejs service in the terraform-NodeJS: 80 curl container , which is created by the internal DNS by the name of the service. You can view the external IP address EXTERNAL -IP both using kubectl at the service and using the web interface: GCP -> Kubernetes Engine -> Services:

      essh @ kubernetes-master: ~ / node-cluster $ kubectl get service

      NAME TYPE CLUSTER-IP EXTERNAL-IP PORT (S) AGE

      kubernetes ClusterIP 10.7.240.1 none> 443 / TCP 6h58m

      terraform-nodejs LoadBalancer 10.7.246.234 35.197.220.103 80: 32085 / TCP 5m27s

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-mm7lh

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-mm7lh

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-hr5vg

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-hr5vg

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-8768b

      esschtolts @ gke-node-ks-node-ks-pool-07115c5b-bw15 ~ $ curl 10.7.246.234

      terraform-nodejs-6bd565dc6c-mm7lh

      essh @ kubernetes-master: ~ / node-cluster $ curl 35.197.220.103

      terraform-nodejs-6bd565dc6c-mm7lh

      essh @ kubernetes-master: ~ / node-cluster $ curl 35.197.220.103

      terraform-nodejs-6bd565dc6c-mm7lh

      essh @ kubernetes-master: ~ / node-cluster $ curl 35.197.220.103

      terraform-nodejs-6bd565dc6c-8768b

      essh @ kubernetes-master: ~ / node-cluster $ curl 35.197.220.103

      terraform-nodejs-6bd565dc6c-hr5vg

      essh @ kubernetes-master: ~ / node-cluster $ curl 35.197.220.103

      terraform-nodejs-6bd565dc6c-8768b

      essh @ kubernetes-master: