Google Kubernetes Engine

Revision as of 20:37, 26 June 2019 by Adam (talk | contribs) (Hálózat)

Revision as of 20:37, 26 June 2019 by Adam (talk | contribs) (Hálózat)


Contents

Regisztráció a Google Cloud Platform-ban

https://console.cloud.google.com

Kubernetes Engine API aktiválása a projektben:

ClipCapIt-190621-232945.PNG

Majd a keresőbe írjuk be, hogy Kubernetes. Ekkor bejön

ClipCapIt-190621-233149.PNG

Kattintsunk az Enable-re.

ClipCapIt-190621-233720.PNG

...

A baloldali fő menüben megjelent a Kubernetes Engine menüpont:

ClipCapIt-190622-000203.PNG

Google Cloud SDK beállítása

SDK install

Vegyük fel az új DNF repository-t:

# sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM
[google-cloud-sdk]
name=Google Cloud SDK
baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOM

Installáljuk fel

# dnf install google-cloud-sdk
...

SDK init

Inicializáljuk az sdk-t. Ez meg fog nyitni a root nevében futó böngészőt, ahol be kell jelentkezni a google account-ba.

# gcloud init
..
You must log in to continue. Would you like to log in (Y/n)?
...

Harmadik lépésként létre kell hozni egy projektet:

# gcloud projects create adamproject1
Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/adamproject1].
# gcloud projects list
PROJECT_ID              NAME              PROJECT_NUMBER
adamproject1            adamproject1      206600067398

Válasszuk ki az új projektet

# gcloud config set project adamproject1
  • az új projektet hozzá kell rendeli egy billing account-hoz (amihez a bankszámlát beállítottuk
  • be kell rajta kapcsolni a Kubernetes Engine API-t.

https://console.cloud.google.com/apis/library/container.googleapis.com?project=adamproject1


Bejelentkezés és kubectl

A gcloud bejelentkezési adatait a config list paranccsal lehet lekérni:

# gcloud config list
[core]
account = myemail@gmail.com
disable_usage_reporting = True
project = adamproject1

Your active configuration is: [default]

A disable_usage_reporting anonim adatokat küld a Google-nek, nem a projekthez kapcsolódik.


A config-helper paranccsal pedig a tokent is listázni lehet:

# gcloud config config-helper
configuration:
  active_configuration: default
  properties:
    core:
      account: myemail@gmail.com
      disable_usage_reporting: 'True'
      project: adamproject1
credential:
  access_token: XXXXX
  id_token: YYYY
  token_expiry: '2019-06-22T08:43:33Z'
sentinels:
  config_sentinel: /root/.config/gcloud/config_sentinel


kubectl kontextus

A kubectl konfigurációs fájlja itt van: ~/.kube/config. Minikube esetében ez így néz ki:

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority: /root/.minikube/ca.crt
    server: https://192.168.42.224:8443
  name: minikube
contexts:
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /root/.minikube/client.crt
    client-key: /root/.minikube/client.key
- context:
    cluster: minikube
    user: minikube
  name: minikube

Miden egyes kubectl parancs a kiválasztott kontextusban fut le. Minden kontextus tartalmaz egy klasztert és egy user-t, amivel végrehajtjuk a parancsokat a klaszteren. A current-context mutatja meg, hogy melyik kontextus van kiválasztva.


Mikor létrehozunk egy cluster-t a gcloud containter cluster create paranccsal, akkor a gcloud automatikusan hozzáad egy új kontextust a .kube/config fájlhoz:

# gcloud container clusters create adam1
...
kubeconfig entry generated for adam1.

Nézzük meg a kontextust:

# kubectl config current-context
gke_adamproject1_europe-west6_adam1

Láthatjuk, hogy a gcloud átállította a kontextust a GKE klaszerünkre.


És most nézzük bele a config fájlba:

apiVersion: v1
kind: Config
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://34.65.220.36
  name: gke_adamproject1_europe-west6_adam1
- cluster:
    certificate-authority: /root/.minikube/ca.crt
    server: https://192.168.42.224:8443
  name: minikube
contexts:
- context:
    cluster: gke_adamproject1_europe-west6_adam1
    user: gke_adamproject1_europe-west6_adam1
  name: gke_adamproject1_europe-west6_adam1
- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: gke_adamproject1_europe-west6_adam1
preferences: {}
users:
- name: gke_adamproject1_europe-west6_adam1
  user:
    auth-provider:
      config:
        cmd-args: config config-helper --format=json
        cmd-path: /usr/lib64/google-cloud-sdk/bin/gcloud
        expiry-key: '{.credential.token_expiry}'
        token-key: '{.credential.access_token}'
      name: gcp
- name: minikube
  user:
    client-certificate: /root/.minikube/client.crt
    client-key: /root/.minikube/client.key

Láthatjuk, hogy a GKE klaszterhez user-hez a beállításokat a gcloud config config-helper paranccsal gyűjti be.


Ahhoz hogy visszaváltsunk a minikube kontextusra, csak ki kell adni config use-context parancsot.

# kubectl config use-context minikube
Switched to context "minikube".
ImportantIcon.png

Note
Ha kitöröljük a GKE klasztert a gcloud container clusters delete paranccsal, akkor a kubernetes config fájlból is ki fogja törölni a bejegyzést.


Klaszter létrehozás

A gcloud container cluster create parancsnak első sorban azt kell megadni, hogy milyen típusú virtuális gépet szeretnénk készíteni, ez jelentősen befolyásolni fogja az árat. Az elérhető virtuális gépe listáját a machine-types list paranccsal listázhatjuk:

$ gcloud compute machine-types list
NAME             ZONE                       CPUS  MEMORY_GB  DEPRECATED
f1-micro         us-central1-f              1     0.60
g1-small         us-central1-f              1     1.70
n1-highcpu-16    us-central1-f              16    14.40
n1-highcpu-2     us-central1-f              2     1.80
n1-highcpu-32    us-central1-f              32    28.80
...

A cluster létrehozásához meg kell adni azt is, hogy milyen régióban és azon belül milyen lehetséges zónákban jöjjenek létre a Kubernetes node-ok. A lehetséges zónákat a régiókkal együtt a compute zones list paranccsal listázhatjuk, ebből kell válogatni:

# gcloud compute zones list | grep europe-west6
europe-west6-a             europe-west6             UP
europe-west6-b             europe-west6             UP
europe-west6-c             europe-west6             UP

Láthatjuk, hogy a europe-west6 régió három zónából áll, itt fogjuk létrehozni a klasztert. A zónákat vesszővel elválasztva kell megadni, space nélkül.


gcloud container clusters \
    create adam1 \
    --region europe-west6 \
    --node-locations europe-west6-a,europe-west6-b,europe-west6-c, \
    --machine-type n1-standard-1 \
    --enable-autoscaling \
    --num-nodes 1 \
    --max-nodes 3 \
    --min-nodes 1
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/europe-west6/adam1?project=adamproject1
kubeconfig entry generated for adam1.
NAME   LOCATION      MASTER_VERSION  MASTER_IP     MACHINE_TYPE   NODE_VERSION   NUM_NODES  STATUS
adam1  europe-west6  1.12.8-gke.10   34.65.149.13  n1-standard-1  1.12.8-gke.10  3          RUNNING

Menjünk a Kubernetes Engine felületre, és itt válasszuk a Cluster menüpontot: https://console.cloud.google.com/kubernetes

ClipCapIt-190621-235437.PNG


# kubectl get nodes
NAME                                   STATUS   ROLES    AGE     VERSION
gke-adam1-default-pool-b9ed6fb1-d955   Ready    <none>   2m11s   v1.12.8-gke.10
gke-adam1-default-pool-c1ab468d-slqn   Ready    <none>   2m8s    v1.12.8-gke.10
gke-adam1-default-pool-e3b15f3f-98dl   Ready    <none>   2m7s    v1.12.8-gke.10


# gcloud container clusters delete adam1 --region europe-west6
The following clusters will be deleted.
 - [adam1] in [europe-west6]

Do you want to continue (Y/n)?  Y


Hálózat

A GKE klaszterben a node-nak van egy external és egy internal IP-je. Az external IP egy publikus IP cím. Ha készítünk egy nodePort-os Kubernetes service-t, akkor a node publikus IP -n és a service portján elérhetőek lesznek a service-hez tartozó pod-ok. Listázzuk a node-okat a -o wide kapcsolóval. Az EXTERNAL-IP oszlopban valós, publikus (dinamikusan kiosztott) IP címek szerepelnek.

# kubectl get nodes -o wide
NAME                                   STATUS   ROLES    AGE   VERSION          INTERNAL-IP   EXTERNAL-IP 
gke-adam1-default-pool-67fe18ad-3v96   Ready    <none>   14m   v1.12.8-gke.10   10.172.0.12   34.65.193.16
gke-adam1-default-pool-75a1a9b3-slpl   Ready    <none>   14m   v1.12.8-gke.10   10.172.0.13   34.65.84.196
gke-adam1-default-pool-eaf55b7a-9kb3   Ready    <none>   14m   v1.12.8-gke.10   10.172.0.11   34.65.22.212



A node-ok egy VPC (Virtaul Private Cloud) hálózatra vannak kötve. Azt, hogy milyen portok vannak nyitva a VPC-n, tűzfal szabályok szabályozzák (firewall-rules).

# gcloud compute firewall-rules list
NAME                         NETWORK  DIRECTION  PRIORITY  ALLOW                         DENY  DISABLED
default-allow-icmp           default  INGRESS    65534     icmp                                False                          False
default-allow-ssh            default  INGRESS    65534     tcp:22                              False
...

Láthatjuk, hogy a klaszerünkben a 22-es (SSH) port alapértelmezetten nyitva van.

A VPC-vel kapcsolatos beállításokat a Web-es konzolon a VPC network menüpotban végezhetjük el:

ClipCapIt-190626-222945.PNG



Itt megtekinthetjük a fent listázott tűzfal szabályokat:

ClipCapIt-190626-223154.PNG



Az External IP addresses menüpontban megtekinthetjük a Google Cloud Platform-on használt publikus IP címeinket. Jelenleg a három node-os Kubernetes klaszterünk mindegyik node-jához tartozik egy publikus IP cím:

ClipCapIt-190626-223532.PNG