Pod, ReplicaSet, Deployment
Bu kavramlar tamamen mantıksal kavramlardır.
Önce çalışmak için bir ad alanı oluşturun:
kubectl create namespace myspace
kubectl config set-context --current --namespace=myspace
Pod
Pod, birden fazla konteyneri içeren ve bu konteynerlerin aynı fiziksel veya sanal makinede çalışmasını sağlayan bir kavramdır. Bu konteynerler, birbirleriyle iletişim kurabilirler ve aynı kaynakları paylaşabilirler. Pod, birim olarak yönetilir ve Kubernetes, podların sağlığını kontrol ederek, yeniden başlatarak ve gerektiğinde yeniden oluşturarak uygulamanın sürekli çalışmasını sağlar.
Pod’lar, Kubernetes’in temel yapı taşlarından biridir ve uygulamaların oluşturulmasını ve yönetilmesini kolaylaştırır. Pod’lar, uygulamanın farklı parçalarını bir arada tutarak, uygulamanın bütünlüğünü ve güvenliğini korur.
- yalnız pod (prodda kullanmayın)
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: quarkus-demo
spec:
containers:
- name: quarkus-demo
image: quay.io/rhdevelopers/quarkus-demo:v1
EOF
- Durumuna bak
watch kubectl get pods
NAME READY STATUS RESTARTS AGE
quarkus-demo 0/1 ContainerCreating 0 10s
## bir süre sonra
NAME READY STATUS RESTARTS AGE
quarkus-demo 1/1 Running 0 18s
Poda erişelim
kubectl exec -it quarkus-demo /bin/sh
## pod içinden web servis çalışıyor mu bakıyoruz?
curl localhost:8080
Supersonic Subatomic Java with Quarkus quarkus-demo:1
Önceki Pod’u silelim:
kubectl delete pod quarkus-demo
watch kubectl get pods
NAME READY STATUS RESTARTS AGE
quarkus-demo 0/1 Terminating 0 9m35s
No resources found in myspace namespace.
ReplicaSet
Replicaset, pod’ların istenen sayıda kopyasını oluşturma, yönetme ve kontrol etme işlemini otomatikleştirir. Yani, Replicaset, belirli bir pod sayısını korumak için pod’ların ölçeklenmesini otomatik olarak yapar. Örneğin, bir uygulamanın üç kopyasının her zaman çalışır durumda olmasını sağlamak için, bir Replicaset yapılandırılabilir ve bu şekilde uygulama ölçeklenebilir hale getirilir.
Replicaset, uygulamanın sağlığını kontrol eder ve pod’ların yanıt vermediğinde veya yanıt vermediğinde yeniden oluşturulmasını sağlar. Ayrıca, Replicaset, yeni pod’ların oluşturulmasını da sağlayabilir, böylece uygulama yükü arttığında ölçeklenebilirlik sağlanır.
Replicaset, Kubernetes’in güvenilirlik ve ölçeklenebilirlik özelliklerine katkıda bulunan önemli bir yapıdır.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: rs-quarkus-demo
spec:
replicas: 3
selector:
matchLabels:
app: quarkus-demo
template:
metadata:
labels:
app: quarkus-demo
env: dev
spec:
containers:
- name: quarkus-demo
image: quay.io/rhdevelopers/quarkus-demo:v1
EOF
Etiketleriyle podları getirin
watch kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
rs-quarkus-demo-jd6jk 1/1 Running 0 58s app=quarkus-demo,env=dev
rs-quarkus-demo-mlnng 1/1 Running 0 58s app=quarkus-demo,env=dev
rs-quarkus-demo-t26gt 1/1 Running 0 58s app=quarkus-demo,env=dev
# replicasetleri getirin.
kubectl get rs
NAME DESIRED CURRENT READY AGE
rs-quarkus-demo 3 3 3 79s
ReplicaSet’i tanımlayın
kubectl describe rs rs-quarkus-demo
Name: rs-quarkus-demo
Namespace: myspace
Selector: app=quarkus-demo
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"name":"rs-quarkus-demo","namespace":"myspace"},"spec":{"replicas...
Replicas: 3 current / 3 desired
Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=quarkus-demo
env=dev
Containers:
quarkus-demo:
Image: quay.io/rhdevelopers/quarkus-demo:v1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 89s replicaset-controller Created pod: rs-quarkus-demo-jd6jk
Normal SuccessfulCreate 89s replicaset-controller Created pod: rs-quarkus-demo-t26gt
Normal SuccessfulCreate 89s replicaset-controller Created pod: rs-quarkus-demo-mlnng
Bu rs tarafından kontrol edilen nodlar
kubectl get pod rs-quarkus-demo-mlnng -o json | jq ".metadata.ownerReferences[]"
{
"apiVersion": "apps/v1",
"blockOwnerDeletion": true,
"controller": true,
"kind": "ReplicaSet",
"name": "rs-quarkus-demo",
"uid": "1ed3bb94-dfa5-40ef-8f32-fbc9cf265324"
}
Başka bir ekranda izlerken diğer ekranda podu silin
# 1. terminal
watch kubectl get pods --show-labels
# 2. terminal
kubectl delete pod rs-quarkus-demo-mlnng
- terminalde silinen podun yeniden üretildiğini farkedeceksiniz.
Deployment
Kubernetes’de, uygulamanın güncellenmesi ve sürüm kontrolü gibi işlemleri yönetmek için “Deployment” adında bir yapı kullanılır. Deployment, pod’ların belirli bir özellik setini tanımlayan bir YAML dosyası aracılığıyla yapılandırılır.
Deployment, uygulamanın önceki sürümlerinden farklı olarak, belirli bir zamanda kaç pod’un çalışması gerektiğini belirleyen Replicaset yapılarını oluşturur. Ayrıca, Deployment, güncelleme işlemini gerçekleştirirken eski sürüm pod’larının kaldırılması ve yeni sürüm pod’larının oluşturulması gibi işlemleri otomatik olarak yapar.
Deployment, önceden tanımlanmış bir stratejiye göre işlem yaparak, uygulamanın durmamasını veya müşterilerin etkilenmemesini sağlayarak güncelleme işlemini gerçekleştirir. Yani, Deployment yapılandırılırken, uygulama güncellemeleri gerçekleştirilirken nelere dikkat edilmesi gerektiği ve hangi stratejilerin kullanılacağı belirlenir.
Deployment, uygulamanın farklı sürümlerinin yönetimini kolaylaştırır ve uygulama sürümleri arasında hızlı bir şekilde geçiş yapılmasına olanak tanır. Bu sayede, uygulama geliştirme süreci daha hızlı ve güvenli hale getirilebilir.
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: quarkus-demo-deployment
spec:
replicas: 3
selector:
matchLabels:
app: quarkus-demo
template:
metadata:
labels:
app: quarkus-demo
env: dev
spec:
containers:
- name: quarkus-demo
image: quay.io/rhdevelopers/quarkus-demo:v1
imagePullPolicy: Always
ports:
- containerPort: 8080
EOF
kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
quarkus-demo-deployment-5979886fb7-c888m 1/1 Running 0 17s app=quarkus-demo,env=dev,pod-template-hash=5979886fb7
quarkus-demo-deployment-5979886fb7-gdtnz 1/1 Running 0 17s app=quarkus-demo,env=dev,pod-template-hash=5979886fb7
quarkus-demo-deployment-5979886fb7-grf59 1/1 Running 0 17s app=quarkus-demo,env=dev,pod-template-hash=5979886f
kubectl exec -it quarkus-demo-deployment-5979886fb7-c888m -- curl localhost:8080
Dönüşüm
pod
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
###
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
###
replicaset
apiVersion: apps/v1 ##
kind: ReplicaSet ##
metadata:
name: nginx-replicaset
labels:
app: nginx
## replicaset
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
## replicaset
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80