Labels
Kubernetes’de, bir nesneyi tanımlamak veya gruplandırmak için Labels adında bir yapı kullanılır. Label, bir nesne üzerinde tanımlanan anahtar-değer çiftidir ve bir nesne üzerinde birden fazla Label kullanılabilir.
Label’lar, YAML dosyaları aracılığıyla yapılandırılır ve nesnelerin etiketlenmesine, filtrelenmesine, seçilmesine ve gruplanmasına olanak tanır. Örneğin, bir Deployment nesnesi için birden fazla Label tanımlayabilirsiniz ve bu Label’ları kullanarak farklı Deployment nesnelerini gruplandırabilirsiniz.
Ayrıca, Label’lar, Kubernetes’de seçiciler olarak da kullanılabilir. Örneğin, bir Service nesnesi, belirli bir Label’ı olan Pod’ları hedefleyebilir. Bu şekilde, Service nesnesi, belirli bir Label’ı olan tüm Pod’ları hedefleyebilir ve bu Pod’larla iletişim kurabilir.
Label’lar, Kubernetes’te nesnelerin yönetimini kolaylaştırır ve nesnelerin gruplanması ve filtrelenmesi için güçlü bir araçtır. Label’lar, nesneler arasındaki ilişkileri ve bağımlılıkları da belirlemeye yardımcı olur ve Kubernetes’de karmaşık uygulama ortamlarının yönetimini kolaylaştırır.
Servicelerin deploymentlarla ilişkisini test ediyoruz.
kubectl create namespace funstuff
kubectl config set-context --current --namespace=funstuff
- Uygulamayı Kur
# app: mypython
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mypython-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mypython
template:
metadata:
labels:
app: mypython
spec:
containers:
- name: mypython
image: quay.io/rhdevelopers/mypython:v1
ports:
- containerPort: 8000
EOF
- Uygulamayı Kur
# app: mynode
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: mynode-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mynode
template:
metadata:
labels:
app: mynode
spec:
containers:
- name: mynode
image: quay.io/rhdevelopers/mynode:v1
ports:
- containerPort: 8000
EOF
# ayağa kalkmasını bekleyelim.
watch kubectl get pods --show-labels
Servisi kuralım
selector değerine dikkat
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
app: mystuff
spec:
ports:
- name: http
port: 8000
selector:
inservice: mypods
type: LoadBalancer
EOF
Kurduğumuz servisin açıklamalarına bakalım
# hiç endpoints yok
kubectl describe service my-service
kubectl get endpoints
NAME ENDPOINTS AGE
my-service <none> 2m6s
servisin ip adresini ve portunun alalım.
curl <svc_ip>:<svc_port>
curl: (7) Failed to connect to 35.224.233.213 port 8000: Connection refused
deploymentlardaki podlara elle serviceteki labelı ekliyoruz
# 1. uygulama
kubectl label pod -l app=mypython inservice=mypods
curl <svc_ip>:<svc_port>
Python Hello on mypython-deployment-578c56d87-rhlf8
#2. uygulama
kubectl label pod -l app=mypython inservice=mypods
# servisin artık 2 deploymenta da gittiğini görüyoruz.
while true; do curl 10.152.183.159:8000; sleep .3; done
Python Hello on mypython-deployment-578c56d87-rhlf8
Go Hello on mygo-deployment-d49998955-6fgvq
Go Hello on mygo-deployment-d49998955-6fgvq
Python Hello on mypython-deployment-578c56d87-rhlf8
Go Hello on mygo-deployment-d49998955-6fgvq
Go Hello on mygo-deployment-d49998955-6fgvq
Python Hello on mypython-deployment-578c56d87-rhlf8
Benzer şekilde label tanımlarını böyle kaldırabiliriz.
kubectl label pod -l app=mypython inservice-