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.
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.”
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
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
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..
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.