20/11/2020 - KUBERNETES
Bir Docker imajının belirli bir etikete sahip olmamanın, dağıtımın geri alınmasını zorlaştırdığına dikkat çekmek önemlidir. Bu örnekte, uygulamamızda her yeni güncellememiz olduğunda Docker imajlarımızı etiketleyeceğiz, onu Docker Hub'a göndereceğiz ve Kubernetes'e dağıtacağız.
Uygulamanızı güncellediğinizi varsayalım. Oluşturalım, etiketleyelim ve Docker Hub'a aktaralım.
IMAGE_TAG := $(shell git rev-parse --short HEAD)
.PHONY: docker
docker:
docker build -t you/address-finder-go:$(IMAGE_TAG) -f ./docker/go/Dockerfile .
docker push you/address-finder-go:$(IMAGE_TAG)
Yukarıda görebileceğiniz gibi, en son Git commit kodunu imaj etiketi olarak kullandık. GitHub sürümlerindeki v1.0.0
gibi sürüm etiketlerini de kullanabilirsiniz. Terminal çıktısının aşağıdaki gibi göründüğünü farzedelim.
Successfully built 11416713s43z
Successfully tagged you/address-finder-go:v225062
docker push you/address-finder-go:v225062
The push refers to repository [docker.io/you/address-finder-go]
dd6dc1v214r2: Pushed
Dağıtım dosyamız aşağıdaki gibidir. Gördüğünüz gibi, resim etiketini latest
olarak ayarladık, ancak şimdilik endişelenmeyin. Aşağıdaki komutla bu geçersiz kılınacaktır. Kafanızı karıştırırsa latest
etiketini kaldırabilirsiniz.
apiVersion: apps/v1
kind: Deployment
metadata:
name: address-finder-deployment
labels:
app: address-finder
spec:
replicas: 1
selector:
matchLabels:
app: address-finder
template:
metadata:
labels:
app: address-finder
spec:
containers:
- name: go
image: you/address-finder-go:latest
IMAGE_TAG := $(shell git rev-parse --short HEAD)
.PHONY: k8s-setup
k8s-setup:
kubectl apply -f deploy/k8s/configmap.yaml
kubectl apply -f deploy/k8s/deployment.yaml
kubectl apply -f deploy/k8s/service.yaml
.PHONY: k8s-deploy
k8s-deploy:
kubectl apply -f deploy/k8s/configmap.yaml
kubectl set image deployment/address-finder-deployment go=you/address-finder-go:$(IMAGE_TAG)
kubectl apply -f deploy/k8s/service.yaml
kubectl set image
komutunu aşağıdaki ile değiştirebilirsiniz çünkü her ikiside aynı işi görür.
kubectl patch deployment address-finder-deployment -p '{"spec":{"template":{"spec":{"containers":[{"name":"go","image":"you/address-finder-go:$(IMAGE_TAG)"}]}}}}'
Kubernetes ortamımızı kuralım. Bu, ilk kez uygulama kurulum işlemi olarak gereklidir. Burada latest
imaj etiketini kullanılacaktır.
$ make k8s-setup
kubectl apply -f deploy/k8s/configmap.yaml
configmap/address-finder-config created
kubectl apply -f deploy/k8s/deployment.yaml
deployment.apps/address-finder-deployment created
kubectl apply -f deploy/k8s/service.yaml
service/address-finder-service created
Bileşenlere hangi imaj etiketinin eklendiğini kontrol edelim. Görüldüğü gibi latest
.
$ kubectl describe deployment.apps/address-finder-deployment | grep Image
Image: you/address-finder-go:latest
$ kubectl describe replicaset.apps/address-finder-deployment-68dd5b79b8 | grep Image
Image: you/address-finder-go:latest
$ kubectl describe pod/address-finder-deployment-68dd5b79b8-24ppp | grep Image
Image: you/address-finder-go:latest
Resmimizin Docker Hub'da v225062
ile etiketlendiğini zaten biliyoruz. Ayrıca uygulamamızın en son commit kodudur, bu yüzden onu iletelim.
$ make k8s-deploy
kubectl apply -f deploy/k8s/configmap.yaml
configmap/address-finder-config unchanged
kubectl set image deployment/address-finder-deployment go=you/address-finder-go:v225062
deployment.apps/address-finder-deployment image updated
kubectl apply -f deploy/k8s/service.yaml
service/address-finder-service unchanged
Değişiklikleri teyit edelim.
$ kubectl describe deployment.apps/address-finder-deployment | grep Image
Image: you/address-finder-go:v225062
$ kubectl describe replicaset.apps/address-finder-deployment-7887d5f54f | grep Image
Image: you/address-finder-go:v225062
$ kubectl describe pod/address-finder-deployment-7887d5f54f-phnf7 | grep Image
Image: you/address-finder-go:v225062