Kops = Kubernetes per tutti -...

Post on 18-Feb-2019

215 views 0 download

transcript

Kops = Kubernetes per tutti

Introduzione al cluster Kubernetes secondo Kops

di Valentino Pistis

Cagliari 27 Ottobre 2018

!1

Guasila

Software Engineer

Padre .......durante il tempo libero

Cagliari 27 Ottobre 2018

Chi sono?!2

Cagliari 27 Ottobre 2018

Cos'è un clusterWikipedia:

è un insieme di computer connessi tra loro tramite una rete telematica.

!3

Cagliari 27 Ottobre 2018

Cos'è un cluster

cluster di computer fisici

!4

Cagliari 27 Ottobre 2018

Cos'è un clustercomputer virtuali

!5

Cagliari 27 Ottobre 2018

Cos'è un clustercluster di containers?

No...ma quasi...

!6

Cagliari 27 Ottobre 2018

Cos'è un containerLXC -> linux containers

!7

Cagliari 27 Ottobre 2018

Cos'è un containerWikipedia:

Linux Container...è un ambiente di virtualizzazione a container, che opera a livello del sistema operativo e permette di eseguire

diversi ambienti Linux virtuali isolati tra loro...

!8

Cagliari 27 Ottobre 2018

Cos'è un container!9

Cagliari 27 Ottobre 2018

KubernetesWikipedia: e' un sistema di orchestrazione e gestione di container.

!10

Cagliari 27 Ottobre 2018

KubernetesArchitettura

!11

Cagliari 27 Ottobre 2018

KubernetesPods

Un POD rappresenta un processo in esecuzione sul cluster kubernetes

!12

Cagliari 27 Ottobre 2018

KubernetesDeployments

!13

Cagliari 27 Ottobre 2018

KubernetesapiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: k8s-app: myappspec: replicas: 3 selector: matchLabels: k8s-app: myapp template: metadata: labels: k8s-app: myapp spec: containers: - name: nginx image: nginx:1.15.4 resources: limits: cpu: 200m memory: 700Mi requests: cpu: 100m memory: 500Mi ports: - containerPort: 80

!14

Cagliari 27 Ottobre 2018

KubernetesServices

!15

Cagliari 27 Ottobre 2018

KubernetesapiVersion: v1kind: Servicemetadata: labels: k8s-app: myapp name: myapp-service namespace: my-namespace annotations:spec: ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 80 selector: k8s-app: myapp sessionAffinity: None type: ClusterIP

!16

Cagliari 27 Ottobre 2018

KubernetesIngress

!17

Cagliari 27 Ottobre 2018

KubernetesapiVersion: extensions/v1beta1kind: Ingressmetadata: name: myapp-ingress namespace: my-namespace annotations:spec: rules: - host: myapp.org http: paths: - path: backend: serviceName: myapp-service servicePort: 80

!18

Cagliari 27 Ottobre 2018

KubernetesPersistent Volumes

!19

Cagliari 27 Ottobre 2018

KubernetesapiVersion: v1kind: PersistentVolumeClaimmetadata: name: pvc-my-disk namespace: my-namespacespec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi

!20

Cagliari 27 Ottobre 2018

KubernetesHorizontal Pod Autoscaler

!21

Cagliari 27 Ottobre 2018

KubernetesapiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: myapp-hpa namespace: my-namespacespec: scaleTargetRef: apiVersion: apps/v1beta1 kind: Deployment name: myapp minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 90 - type: Resource resource: name: memory targetAverageUtilization: 90

!22

Cagliari 27 Ottobre 2018

KubernetesCluster Autoscaler

!23

Cagliari 27 Ottobre 2018

KubernetesMonitoring e Logging

!24

Cagliari 27 Ottobre 2018

KubernetesSite Reliability Engineering:

is a discipline that incorporates aspects of software engineering and applies that to IT operations problems

!25

Cagliari 27 Ottobre 2018

KubernetesCreazione cluster

!26

Cagliari 27 Ottobre 2018

KopsCome funziona

!27

Cagliari 27 Ottobre 2018

Kops!28

Cagliari 27 Ottobre 2018

Kopsinstallare kops

macos: • brew update && brew install kops

Linux: • curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s

https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64

• chmod +x kops-linux-amd64• sudo mv kops-linux-amd64 /usr/local/bin/kops

!29

Cagliari 27 Ottobre 2018

KopsIAM per kops

• aws iam create-group --group-name kops• aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2FullAccess --group-

name kops• aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53FullAccess --group-

name kops• aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --group-name

kops• aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/IAMFullAccess --group-name kops• aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccess --group-

name kops• aws iam create-user --user-name kops• aws iam add-user-to-group --user-name kops --group-name kops• aws iam create-access-key --user-name kops

!30

Cagliari 27 Ottobre 2018

KopsS3 Bucket per cluster state storage

• aws s3api create-bucket --bucket my-cluster-state-store --region aws-region --create-bucket-configuration LocationConstraint=aws-region

• aws s3api put-bucket-versioning --bucket my-cluster-state-store --versioning-configuration Status=Enabled`

!31

Cagliari 27 Ottobre 2018

Kops

Un solo comando Kops per accendere Kubernetes su AWS: • kops create cluster --cloud aws --zones aws-zone my-cluster-name --yes

Un solo comando per distruggere: • kops delete cluster --name my-cluster-name --yes

Due comandi per aggiornare il cluster: • kops update cluster my-cluster-name --yes• kops rolling-update cluster my-cluster-name --yes

!32

Cagliari 27 Ottobre 2018

Comandi utili• kops validate cluster

!33

Cagliari 27 Ottobre 2018

Comandi utilivpistis@vpistisMacBookAir⎈ (my-kube-cluster-name|namespace) ~> kops validate cluster Using cluster from kubectl context: my-kube-cluster-name

Validating cluster my-kube-cluster-name

INSTANCE GROUPSNAME ROLE MACHINETYPE MIN MAX SUBNETSapp-nodes Node t2.large 1 20 eu-west-2bdb-nodes Node t2.large 1 8 eu-west-2bmaster-eu-west-2b Master c4.large 1 3 eu-west-2b

NODE STATUSNAME ROLE READYip-X-X-X-X.eu-west-2.compute.internal node Trueip-X-X-X-X..eu-west-2.compute.internal node Trueip-X-X-X-X..eu-west-2.compute.internal node Trueip-X-X-X-X..eu-west-2.compute.internal masterTrueip-X-X-X-X..eu-west-2.compute.internal node Trueip-X-X-X-X..eu-west-2.compute.internal node True

Your cluster my-kube-cluster-name is ready

!34

Cagliari 27 Ottobre 2018

Comandi utili• kubectl top pods • kubectl top nodes • kubectl apply -f config-file.yaml

!35

Cagliari 27 Ottobre 2018

Comandi utilikubectl top pods

NAME CPU(cores) MEMORY(bytes) deployment-name-xxxxxxx-xxxxxx 18m 53Mi

kubectl top nodes

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% ip-x-x-x-x.eu-west-2.compute.internal 415m 20% 5236Mi 66% ip-x-x-x-x.eu-west-2.compute.internal 108m 5% 4845Mi 61%

!36

Cagliari 27 Ottobre 2018

KopsKubernetes Dashboard

!37

Cagliari 27 Ottobre 2018

Kopse ora?

Docker: la tua applicazione web Load Balancer: Zalando skipper e aws ingress controller..Logging: Fluentd, Mongo, ElasticSearch... Monitoring: Prometheus, Grafana...

!38

Cagliari 27 Ottobre 2018

Grazie!Valentino Pistis

github: @vpistis

!39