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