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

Containers, Kubernetes
and OpenStack
Birol Bilgin @ Red Hat
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.
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
Containers
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.”
Container Tarihçesi
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
Sanallaştırmadan Farkı Ne?
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
DEMO
KUBERNETES - K8S
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
Kubernetes Projesi
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?
Kubernetes Mimarisi
ETCD
● Yüksek erişilebilir, key-value database.
● Geri bildirim yapabiliyor
● Raft consensus algoritması üzerine kurulu
● Go ile yazılmış
● Apache 2.0 Lisans
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
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...)
Kubernetes Kavramlar
● Kavramlar
○ Pod
○ Labels, Selectors and Annotations
○ ReplicaSet
○ Service
○ PersistentVolumes
○ Persistent VolumeClaims
○ Diğer Kavramlar
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']
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"
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
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
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
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]}
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
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
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
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
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
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
Nasıl çalışıyor? Örnek
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
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..
DEMO
OPENSTACK
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
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.
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.
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)
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.
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/
SORULAR
1 of 43

More Related Content

What's hot(13)

Exadata Performance NotesExadata Performance Notes
Exadata Performance Notes
Özgür Umut Vurgun1.4K views
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
Oguz Yarimtepe518 views
Azure Sanal MakinelerAzure Sanal Makineler
Azure Sanal Makineler
Mustafa 518 views
Veri Depolama ve DisklerVeri Depolama ve Diskler
Veri Depolama ve Diskler
Mustafa 421 views
Exchange Server 2007 ClusterExchange Server 2007 Cluster
Exchange Server 2007 Cluster
ÇözümPARK287 views
Nutanix Teknik DokumanNutanix Teknik Dokuman
Nutanix Teknik Dokuman
Veli Anlama537 views
NETSCALER SSLLABS A PlusNETSCALER SSLLABS A Plus
NETSCALER SSLLABS A Plus
Veli Anlama711 views
Hyper-v v2 - MSHowto.OrgHyper-v v2 - MSHowto.Org
Hyper-v v2 - MSHowto.Org
MSHOWTO Bilisim Toplulugu556 views
linux-enterprise-clusterlinux-enterprise-cluster
linux-enterprise-cluster
Kurtuluş Karasu888 views
Ankara JUG Big Data PresentationAnkara JUG Big Data Presentation
Ankara JUG Big Data Presentation
Serkan Özal1.3K views
Linkle mimariLinkle mimari
Linkle mimari
Tahsin Yüksel372 views
Node js giriş (intro)Node js giriş (intro)
Node js giriş (intro)
Hasan Sungur Bilgen420 views

Similar to OpenStack Türkiye 15.Meetup Ankara: Containers, Kubernetes and OpenStack(20)

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

  • 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. 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
  • 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.”
  • 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
  • 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. DEMO
  • 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
  • 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?
  • 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. 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. 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. Kubernetes Kavramlar ● Kavramlar ○ Pod ○ Labels, Selectors and Annotations ○ ReplicaSet ○ Service ○ PersistentVolumes ○ Persistent VolumeClaims ○ Diğer Kavramlar
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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. 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. DEMO
  • 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. 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. 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. 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. 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.