Skaffold ile Build Docker İmage & Kubernetes Deploy
bu yazımda build ve deploy için kullanılan skaffold toolunu inceleyeceğim.

skaffold gerçekten tek bir yaml file ile size build ve deploy işlemini yapmanızı sağlar. google tarafından hayatımıza kazandırılmış bu toolun kullanımı gayet basit. bütün build ve deployment dosyalarınızı yani source code, Dockerfile ve kubernetes manifestleri bir dosya içinde tutuyorsunuz.
dev ortamı için bir deneme yapalım ne kadar basit olduğunu göreceksiniz.
skaffold install
öncelikle skaffold CLI indirmeniz gerekiyor.
kubernetes-cluster
kubernetes için KinD kullanacağım. kind ile ilgili yazıya linkedin sayfamdan ulaşabilirsiniz.
basit bir şekilde docker container üzerinde kubernetes cluster oluşturabiliyorsunuz. basit bir demo yapacağımız için ben tek bir nodelu cluster yarattım.

demo pre-req
öncelikle basit bir Dockerfile kullanacağız.
FROM nginx
COPY index.html /usr/share/nginx/html/
WORKDIR /usr/share/nginx/html
EXPOSE 8080
CMD [ "/bin/bash", "-c", "nginx -g 'daemon off;'" ]
index.html içinde de basit bir string koyalım.
Hello world - Test Page 1
kubernetes deployment ve service manifest yazalım.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
selector:
matchLabels:
app: hello-world
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: nginx-skaffoldapiVersion: v1
kind: Service
metadata:
name: hello-world
spec:
selector:
app: hello-world
ports:
- port: 8080
protocol: TCP
targetPort: 8080
type: NodePort
daha sonra bütün işlemi yapacak olan basit bir skaffold dosyamız olacak. yaml formatında yazacağız ve dosyalarımızın olduğu dizinde olacak.
skaffold.yaml
apiVersion: skaffold/v1alpha2
kind: Config
build:
artifacts:
- imageName: nginx-skaffold
workspace: .
local: {}deploy:
kubectl:
manifests:
- kubernetes-*
burada ilk build adımı imagename olarak docker build yapacak. local bir kubernetes olacağı için push işlemini atlayacak. eğer local olmasaydı image i repoya pushlayacaktı.
daha detaylı yaml file lar için sitesiniz ziyaret edebilirsiniz.

skaffold run
skaffold u çalıştırmak için basit bir komut kullanıyoruz. “skaffold run”

çok basit bir şekilde build ve deploy yaptık. tek bir yaml file ile bu şekilde bir deployment yapmak gerçekten kullanım açısından çok efektif.
image tag
skaffold build alırken size image taglemek için bazı opsiyonlar sunar.
- the
gitCommit
tagger uses git commits/references.
build:
tagPolicy:
gitCommit: {}
artifacts:
- image: gcr.io/k8s-skaffold/example
- the
inputDigest
tagger uses a digest of the artifact source files.
build:
tagPolicy:
inputDigest: {}
artifacts:
- image: gcr.io/k8s-skaffold/example
- the
datetime
tagger uses current date and time, with a configurable pattern.
build:
tagPolicy:
dateTime: {}
artifacts:
- image: gcr.io/k8s-skaffold/example
eğer bunları kullanmazsanız latest adında bir image tag atar.
sonuç
basit bir development ci/cd si kurabilirsiniz ve basitçe karmaşık pipelinelar olmadan geliştirmelerinizi yapabilirsiniz.