Successfully reported this slideshow.
Your SlideShare is downloading. ×

OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack

  1. 1. Containers, Kubernetes and OpenStack Birol Bilgin @ Red Hat
  2. 2. Yasal Uyarı Bu sunum kişisel olup, kesinlikle Red Hat ile herhangi bağlantısı bulunmamaktadır. Sunumun içeriği tamamen kendi bilgi ve görüşlerimi yansıtmaktadır.
  3. 3. Konular ● Containers ○ Container nedir? ○ Linux Containers teknik detaylar ○ Hangi problemleri çözüyor ○ Demo ● Kubernetes ○ Kubernetes nedir? ○ Kubernetes Projesi ○ Neden Kubernetes? ○ Kubernetes mimarisi ■ ETCD ■ Management Bileşenleri ■ Node Bileşenleri ○ Kubernetes kavramlar ○ OpenShift nedir? ○ Eğilimler, beklentiler ○ Demo ● OpenStack ○ OpenStack Nedir? ○ OpenStack Container entegrasyonu ■ Zun ■ Magnum ■ Kuryr ■ Kolla
  4. 4. Containers
  5. 5. Container Nedir? ● Wikipedia: A container is any receptacle or enclosure for holding a product used in storage, packaging, and shipping. ● “Konteyner bir ürünü depolamak, paketlemek ve taşımak için kullanılan herhangi bir kapalı cisim.”
  6. 6. Container Tarihçesi
  7. 7. Linux Containers ● Linux Namespaces ○ Process Namespace ○ Network Namespace ○ Mount Namespace ○ IPC Namespace ○ User Namespace ○ UTC Namespace ● Cgroups ● SELinux, AppArmor ● Seccomp ● Capabilities ● chroot ● Layer Filesystem ○ OverlayFS ○ Thin provisioned LVM ○ ZFS
  8. 8. Sanallaştırmadan Farkı Ne?
  9. 9. Hangi Problemleri Çözüyor ● Uygulama bütün kütüphaneleri ile birlikte paketleniyor ○ Geliştirme ortamında çalışan prod ortamında da çalışıyor ○ Kendi makinende çalışan bulut üzerinde de aynı şekilde çalışıyor ○ Aynı uygulamayı farklı kütüphane versiyonları ile aynı sunucu üzerinde çalıştırma imkanı sunuyor ● VM lere göre daha düşük kaynak tüketimi ● Çok daha hızlı başlama süreleri ● Kolay bir şekilde birlikte kullanma olanağı ● Değiştirmesi çok kolay
  10. 10. DEMO
  11. 11. KUBERNETES - K8S
  12. 12. Kubernetes Nedir? ● “Kubernetes” eski Yunanca’da “dümenci” manasına geliyor. Ayrıca “vali” ve “sibernetik” kelimelerinin kökü. ● Google tarafından geliştirilip 2014 yılında açık kaynak olarak sunuldu. ● Google da 10 yıldan uzun süre kazanılan container tecrübesi üzerine geliştirildi. Kendi içlerinde kullandıkları aracın ismi Borg. ● Google herşeyi container’lar içinde çalıştırıyor VM’ler dahil. ● Google her hafta 2 milyar kadar container çalıştırıyor. ● Google daha sonra Kubernetes’i Cloud Native Computing Foundation’a (CNCF) verdi. ● Go ile yazılmış ● Apache 2.0 Lisans
  13. 13. Kubernetes Projesi
  14. 14. Neden Kubernetes? ● Network ○ Container’lar nasıl bir birine ulaşacak veya engellenecek? ● Scheduling ○ Hangi Container’ı nerede çalıştırılacak? ○ Kaynakları CPU Memory vs. nasıl etkin kullanılacak? ● Depolama ○ Oluşturulan Container’lara depolama nereden ve nasıl sağlanacak? ● Automation ○ Bir Node kapandığında veya kesinti gerektiğinde Container’lar nasıl taşınacak? ○ Nasıl uygulamamın sağlığını izleyebilir, gerektiğinde yeniden başlatabilirim? ○ Container sayısını gelen yüke göre nasıl artırıp indirebilirim? ● Mikro Servis kullanım gereksinimleri ○ Oluşturulan uygulamalara nasıl ulaşılacak? ○ Konfigürasyon nasıl uygulamalarda kullanılacak? ○ Şifre yönetimi. DB, S3 vb.. Şifreleri nerede tutulacak nasıl kullanılacak? ○ Uygulamanın yeni versiyonu nasıl kesintisiz yüklenecek?
  15. 15. Kubernetes Mimarisi
  16. 16. ETCD ● Yüksek erişilebilir, key-value database. ● Geri bildirim yapabiliyor ● Raft consensus algoritması üzerine kurulu ● Go ile yazılmış ● Apache 2.0 Lisans
  17. 17. Management Bileşenleri ● Management Bileşenleri ○ API Server ■ REST arayüzü sağlar ■ Bütün istemciler, node’lar, kullanıcılar ve uygulamalar bu arayüzü kullanır ○ Controller-Manager ■ Cluster’ın durumunu izler ve istenilen duruma çeker ○ Scheduler ■ İş yüklerini değişik kriterlere göre uygun kaynaklara yerleştirir ○ Cloud-Controller-Manager ■ Üzerinde çalıştığı buluta özel kabiliyetler sağlar
  18. 18. Node Bileşenleri ● Node Bileşenleri ○ Kubelet ■ Pod’ların hayat döngüsünü yönetmekten sorumludur ■ YAML container manifest kullanır ● Dosya ● HTTP yolu ● ETCD uyarı aksiyonu ● Sunucu modu ○ Kube-proxy ■ Network kurallarını yönetir ● Userspace (Legacy) ● iptables ● ipvs (beta in 1.9) ○ Container Runtime ■ Container’ları yöneten CRI uyumlu program ■ (docker, rktlet, cri-o, kata vs...)
  19. 19. Kubernetes Kavramlar ● Kavramlar ○ Pod ○ Labels, Selectors and Annotations ○ ReplicaSet ○ Service ○ PersistentVolumes ○ Persistent VolumeClaims ○ Diğer Kavramlar
  20. 20. Pod ● Pod Kubernetes içinde en küçük iş veya yönetilecek kaynak ● Birden fazla container’dan oluşabilir ● Depolama ve Network paylaşılır ● Her Poda bir IP adresi atanır ● Pod fanidir, ölebilir ama aynı kimlik ile yeniden oluşturulamaz apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: MyApp spec: containers: - name: myapp-container image: busybox command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
  21. 21. Labels, Selectors and Annotations ● Label ○ Bir grup objeyi belirlemek, tanımlamak ve tarif etmek için kullanılan key-value çifti ○ Yazım kuralları çok kısıtlı ● Selector ○ Label’ları kullanarak objeleri filtreler veya seçer ● Annotation ○ Herhangi bir bilginin tutulduğu key-value çifti ○ Annotation’lar label’lar gibi tuttukları değerlerde kısıtlı değiller apiVersion: v1 kind: Pod metadata: name: cuda-test spec: containers: - name: cuda-test image: "k8s.gcr.io/cuda-vector-add:v0.1" resources: limits: nvidia.com/gpu: 1 nodeSelector: accelerator: nvidia-tesla-p100 selector: matchLabels: component: redis matchExpressions: - {key: tier, operator: In, values: [cache]} - {key: environment, operator: NotIn, values: [dev]} metadata: name: my-service annotations: service.beta.kubernetes.io/openstack- internal-load-balancer: "true"
  22. 22. ReplicaSet ● Method of managing pod replicas and their lifecycle. Their scheduling, scaling, and deletion. ● Tek işi eğer gerekenden az ise yenilerini başlat eğer fazla ise fazla olanları öldür ● ReplicationController’dan farkı set-based selector’ları desteklemesi apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: frontend spec: replicas: 3 selector: matchLabels: tier: frontend matchExpressions: - {key: tier, operator: In, values: [frontend]} template: metadata: labels: app: guestbook tier: frontend spec: containers: - name: php-redis image: frontend:v3 resources: ports: - containerPort: 80
  23. 23. Service ● Uygulamara sanal IP veya DNS ile ulaşmayı sağlar ● Pod’ları label selector’lar ile seçer ● Sanal IP kube-proxy tarafından yönetilir ○ iptables kayıtlarını değiştirir (varsayılan) kind: Service apiVersion: v1 metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
  24. 24. PersistentVolume ● PersistentVolume (PV) bir depolama kaynağını sunar. ● PV’ler genelde depolama sağlayan kaynaklara bağlıdır NFS, GCEPersistentDisk, RBD vs.. ● Kullanılmadan önce provizyonlanırlar ● Hayat döngüleri Pod lardan bağımsızdır ● Ayrıca dinamik depolama provizyonlama da mümkün apiVersion: v1 kind: PersistentVolume metadata: name: pv0003 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2
  25. 25. PersistentVolumeClaim ● PersistentVolumeClaim (PVC) depolama alanın direk olarak kullanılması yerine bir takım şartları sağlayan bir alan için istek yapılmasıdır kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 8Gi storageClassName: slow selector: matchLabels: release: "stable" matchExpressions: - {key: environment, operator: In, values: [dev]}
  26. 26. Kubernetes Diğer Kavramlar - 1 ● Namespaces ○ Kullanıcılar ve projeler için izole edilmiş çalışma alanları ● Ingress ○ L7 load balancing ● Deployments ○ Declarative version updates ● Jobs ○ Bir kere çalışan işler ● Autoscaling ○ Otomatik olarak kopya sayısının ayarlanması ● DaemonSets ○ Herhangi bir pod’u her node veya seçilmiş node’larda çalışması ● StatefulSet ○ Stateful (sabit) dağıtık sistem desteği
  27. 27. Kubernetes Diğer Kavramlar - 2 ● Role Based Access Control (RBAC) ○ Kullanıcıların objelere ulaşımını kontrol eder ● Multiple Schedulers ● Flexible Scheduling Constraints ○ Affinity (yakınlık), anti-affinity(uzaklık), taints (scheduling kısıtları), tolerations (tolere etmek) ● Automatic Cluster Scaling ○ K8s dış servislere signal göndererek cluster(küme)’nin otomatik olarak ölçeklenmesini sağlar ● Cloud Provider Integration ○ GCP, AWS, Azure, OpenStack, vSphere ● Network Policy ○ Network ingress policy
  28. 28. Kubernetes Diğer Kavramlar - 3 ● Operators ○ API’ler ile sistemlerin otomatik yönetilmesi ○ K8s extensions - uzantılarını kullanarak entegre olur ○ etcd, Prometheus, elasticsearch, memcached, mongodb, rook, etc. ● Authentication Providers ○ Webhook’lar ile entegre oluyor. OpenID Connect, OAuth2, LDAP, SAML, etc. ● Helm: Package Manager ○ K8s için uygulama yönetimi ● Extended Network Policy
  29. 29. Networking ● Bütün pod’lar diğer bütün pod’lara NAT kullanılmaksızın ulaşabilmeli ● Bütün node’lar diğer bütün podlara ve podlar da node’lara NAT kullanılmaksızın ulaşabilmeli ● Pod IP adresi cluster’da ne ise kendisi de aynı IP’yi görmeli ● Container Network Interface (CNI) : container runtime ile network plugin’i arasındaki arayüz ○ Calico ○ Cillium ○ Contiv ○ Contrail ○ Flannel ○ GCE ○ kube-router ○ Multus ○ OpenVSwitch ○ OVN ○ Romana ○ Weave
  30. 30. Container Runtime ● Open Container Initiative (OCI) ○ Runtime specification ○ Image specification ● Container Runtime Interface (CRI) ○ Kubernetes’in bir sürü değişik container runtime’larını kullanmasını sağlayan eklenti arayüzü ○ gRPC arayüzünü kullanır ○ Kubernetes 1.5 de kullanılmaya başlandı ● CRI runtime ○ docker + dockershim ○ cri-containerd + containerd ○ rktlet ○ cri-o ○ frakti ○ kata-container
  31. 31. Kubernetes Depolama Pluginleri ● Direk desteklenen depolama çözümleri ○ awsElasticBlockStore ○ azureDisk ○ azureFile ○ cephfs ○ configMap ○ csi ○ downwardAPI ○ emptyDir ○ fc (fibre channel) ● Out-of-Tree Volume Plugins ○ CSI ■ Container Storage Interface (CSI) , container’lara isteğe bağlı depolama sağlamak için geliştirilmeye çalışılan endüstri standardı ○ FlexVolume ■ Eklenti FlexVolume tarafından tanımlanan volume komutlarını destekleyen bir program. Bu eklenti ile direk desteklenmeyen diğer depolama ürünleri de container’lar tarafından kullanılabilir ○ flocker ○ gcePersistentDisk ○ gitRepo ○ glusterfs ○ hostPath ○ iscsi ○ local ○ nfs ○ persistentVolumeClaim ○ projected ○ portworxVolume ○ quobyte ○ rbd ○ scaleIO ○ secret ○ storageos ○ vsphereVolume
  32. 32. Nasıl çalışıyor? Örnek
  33. 33. OpenShift Nedir? ● OpenShift Container Platform (OCP veya OpenShift) Kubernetes artı extra kaynaklardan oluşur (Kubernetes++) ● Kubernetes container çalıştırma ortamı ● OpenShift yazılımcı odaklı, PaaS ○ CI/CD ○ RBAC ○ Source to Image (s2i) ● Open source versiyonun adı Origin ● Üç farklı şekilde sunuluyor ○ OpenShift Container Platform ■ Yönetimi tamamen kullanıcıya ait versiyonu, istenilen bulut veya kendi sistemlerinize kurulabilir ○ OpenShift Online ■ OCP Saas versiyonu, çok kullanıcılı, bedava versiyonu var ○ OpenShift Dedicated ■ Tek kullanıcılı, Red Hat tarafından AWS veya GCW üzerinde kurulup yönetilen versiyonu
  34. 34. Kubernetes Projeler Eğilimler ● Service Catalog ● Istio, Envoy service mesh kullanımı ● Projenin core olarak küçültülüp diğer parçaların üzerinde çalıştırılacağı bir platforma dönüştürülmesi ● Daha kolay genişletilebilir bir platform olması ● Uygulama nedir tanımlanması ● Device desteği, grafik kartı desteği vs..
  35. 35. DEMO
  36. 36. OPENSTACK
  37. 37. OpenStack Nedir? ● Bulut biliş im teknolojilerinin bü tü nleş ik olarak sağ landığ ı altyapı ● Yaygın hipervizö r desteğ i (KVM, Xen, VMware, Hyper-V, LXC) ● Rackspace ve NASA tarafından 2010 yılında baş latılmış ● Python ve Django tabanlı ● Aç ık kaynak kodlu (Apache 2.0 Lisansı), 20 M+ satır kod ● 189 ü lke, 650’den fazla ü retici desteğ i, 30.000’den fazla geliş tirici ● Servis sağ layıcılar, kamu kurumları, eğ itim kurumları, araş tırma merkezleri, telekom operatörleri gibi geniş kullanıcı kitlesi ● Amazon WS, EC2 ve S3 ile tam uyumlu
  38. 38. OpenStack Zun ● Önceki adı Higgins ● Container servisi ● OpenStack üzerinde container oluşturmak ve yönetmek için API sağlar. ● Magnum’dan farklı olarak container’ları OpenStack üzerinden yönetilen kaynaklar olarak kullanır. ● Container yönetimi için cinder-volume ve neutron network bileşenleri ile entegre edilmelidir.
  39. 39. OpenStack Magnum ● OpenStack Containers Team tarafından geliştirilmektedir. ● OpenStack aracılığı ile Kubernetes, Docker Swarm ve Apache Mesos gibi Container Orchestration Engine (COE) yönetimi sağlar. ● İçerisinde Docker ve Kubernetes bulunan işletim sistemi imajını provizyonlamak için Heat kullanır. ● Bu işletim sistemi VM veya bare metal üzerinde çalışabilir. ● Kullanıcılarına self servis container çözümü sunmak isteyen bulut operatörleri için idealdir.
  40. 40. OpenStack Kuryr ● OpenStack’teki ağ ve depolama ortamlarına ağ bağlantısı sağlamak üzere arada köprü görevi görür. ● OpenStack network bileşeni Neutron üzerinde gerekli portları oluşturarak container ile bağlantısını sağlar. ● Kuryr kullanılarak k8s içinde ikinci bir overlay network oluşturulmasına gerek kalmaz. (Kullanılan CNI’a göre değişebilir)
  41. 41. OpenStack Kolla ● OpenStack’in kurulumu ve yönetimi karmaşık bir iş ○ Projeler python modüllerinden oluşuyor ○ HA kurulması ve problemsiz yönetimi çok kolay değil ● OpenStack’in containerlar üzerinde kurulumu ve yönetimi için gerekli bileşenleri sağlar. ● Konfigürasyon yönetimi için Ansible kullanır.
  42. 42. Kaynaklar https://www.docker.com/ http://cri-o.io/ https://katacontainers.io/ https://coreos.com/etcd/docs/latest/ https://kubernetes.io/ https://www.katacoda.com/courses/kubernetes https://www.openshift.com/ https://www.openshift.org/ https://www.cncf.io/ https://kubernetes.io/docs/concepts/service-catalog/ https://istio.io/ https://www.envoyproxy.io/ https://github.com/kubernetes/minikube https://www.openstack.org/
  43. 43. SORULAR

×