Giriş
Bu yaml yerine kubectl create deployment komutu kullanılabilir.Deployment'ı geri almak için kubectl rollout undo komutu kullanılabilir.
kind : Deployment vs kind : Pod
terminationGracePeriodSeconds Alanı
Deployment Nedir
Açıklaması şöyle. Yani kaç tane pod istediğimizi vs belirtiriz.
Although pods are the basic unit of computation in Kubernetes, they are not typically directly launched on a cluster. Instead, pods are usually managed by one more layer of abstraction: the deployment.
A deployment’s primary purpose is to declare how many replicas of a pod should be running at a time. When a deployment is added to the cluster, it will automatically spin up the requested number of pods, and then monitor them. If a pod dies, the deployment will automatically re-create it.
Using a deployment, you don’t have to deal with pods manually. You can just declare the desired state of the system, and it will be managed for you automatically.
Deployment Ne Zaman Değişmiş Kabul Edilir
Açıklaması şöyle
A Deployment’s rollout is triggered if and only if the Deployment’s pod template (i.e, .spec.template) is modified. If you modify the scaling parameter, it will not rollout, but if you are changing the deployment labels or container images info, it will trigger the deployment rollout to update it.
Deployment kullanılırsa, eğer pod kapanırsa tekrar başlatılır. Pod kullanılırsa tekrar başlatılmaz. Kubernetes kind : Pod yazısına bakabilirsiniz.
Deployment Name Uzunluğu
metadata/name altınındaki string uzunluğu en fazla 47 karakter olsa iyi olur. Açıklaması şöyle. Yani aslında 253 karaktere kadar deployment name olabiliyor.
Most Kubernetes objects, including Deployments, can have names that are ≤ 253 characters in length. You should, however, consider restricting your Deployment names to ≤ 47 characters because of the implications that exceeding this threshold will have on your Pod names.
Sebebi şöyle. Yani deployment name kullanılarak ReplicaSet ve ondan da Pod ismi türetiliyor.
As you likely know, Deployments create ReplicaSets — and those ReplicaSets create Pods. When Deployment names are short (e.g. mydeployment), the ReplicaSet name is the Deployment name with a suffix of a dash/hyphen followed by the pod-template-hash, which is 9 hexadecimal characters (e.g. mydeployment–548f955bf). The Pod name is the ReplicaSet name with a suffix of a dash/hyphen followed by 5 random hexadecimal characters (e.g. mydeployment–548f955bf-j8wng).This is convenient because it allows you to easily see which Pods correspond to which ReplicaSets as well as which Deployments simply by looking at their names, while at the same time guaranteeing uniqueness of both the Pod and ReplicaSet names.
Eğer deployment ismi 47 karakterden fazlaysa ReplicaSet ve Pod isimleri de kırpılmaya başlıyor.
spec/containers Alanı
spec/containers içinde tüm container'lar tanımlanabiliyor. Aynı şey "kind : Pod" içinde de yapılabiliyor
Örnek
Şöyle yaparız. 4 replica içren nginx çalıştırılıyor
apiVersion: v1kind: Service metadata: name: my-nginx-svc labels: app: nginx spec: type: LoadBalancer ports: - port: 80 selector: app: nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx labels: app: nginx spec: replicas: 4 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Örnek
Şöyle yaparız. Burada container için env de tanımlanıyor
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-deployment
namespace: default
labels:
app: order-deployment
spec:
selector:
matchLabels:
app: order-deployment
template:
metadata:
labels:
app: order-deployment
spec:
containers:
- name: order-service
image: europe-west4-docker.pkg.dev/...
env:
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://postgres-service:5432/postgres?currentSchema=order
resources:
limits:
cpu: "500m"
memory: "1024Mi"
requests:
cpu: "200m"
memory: "256Mi"Örnek
Şöyle yaparız. Burada container için command tanımlanıyor
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-deployment-name
spec:
replicas: 1
selector:
matchLabels:
app: your-app-name
template:
metadata:
labels:
app: your-app-name
spec:
containers:
- name: your-container-name
image: your-image-name
command: ["./your-executable-name","-Djavax.net.ssl.trustStore=/opt/certs/truststore.jks","-Djavax.net.ssl.trustStorePassword=changeit"]
ports:
- containerPort: 9092spec/containers/resources Alanı
Kubernetes Resource Requirements yazısına taşıdım
.spec.minReadySeconds = 30
Açıklaması şöyle
The Kubernetes deployment specification allows us to set a minimum amount of time that a new pod must be in the ready state before it starts terminating the old pod.
spec/selector/matchLabesl Alanı
matchLabels Alanı yazısına taşıdımspec/restartPolicy Alanı
Açıklaması şöyle
Always means that the container will be restarted even if it exited with a zero exit code (i.e. successfully). This is useful when you don't care why the container exited, you just want to make sure that it is always running (e.g. a web server). This is the default.OnFailure means that the container will only be restarted if it exited with a non-zero exit code (i.e. something went wrong). This is useful when you want accomplish a certain task with the pod, and ensure that it completes successfully - if it doesn't it will be restarted until it does.Never means that the container will not be restarted regardless of why it exited.
Örnek
Şöyle yaparız. Burada Kafka sunucusunun sürekli çalışması istendiği için "restartPolicy: Always" kullanılıyor
kind: Deployment
apiVersion: apps/v1
metadata:
name: example-kafka
namespace: kafka-example
labels:
app: example-kafka
spec:
replicas: 1
selector:
matchLabels:
app: example-kafka
template:
metadata:
labels:
app: example-kafka
spec:
containers:
- name: example-kafka
image: 'wurstmeister/kafka:2.12-2.4.0'
ports:
- containerPort: 9093
protocol: TCP
- containerPort: 9092
protocol: TCP
env:
- name: KAFKA_ADVERTISED_LISTENERS
value: INTERNAL://:9092,EXTERNAL://example-kafka.kafka-example.svc.cluster.local:9093
- name: KAFKA_CREATE_TOPICS
value: example-topic:1:1
- name: KAFKA_INTER_BROKER_LISTENER_NAME
value: INTERNAL
- name: KAFKA_LISTENERS
value: INTERNAL://:9092,EXTERNAL://:9093
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
- name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
value: '1'
- name: KAFKA_ZOOKEEPER_CONNECT
value: example-zookeeper.kafka-example.svc.cluster.local:2181
imagePullPolicy: IfNotPresent
restartPolicy: Always
dnsPolicy: ClusterFirst
schedulerName: default-scheduler
enableServiceLinks: true
strategy:
type: RollingUpdateStrategy Alanı
Deployment Strategy yazısına taşıdım
imagePullPolicy Alanı
IfNotPresent değerini alabilir. Şöyle yaparızapiVersion: apps/v1
kind: Deployment # Kubernetes resource kind we are creating
metadata:
name: spring-boot-k8s
spec:
selector:
matchLabels:
app: spring-boot-k8s
replicas: 2 # Number of replicas that will be created for this deployment
template:
metadata:
labels:
app: spring-boot-k8s
spec:
containers:
— name: spring-boot-k8s
image: springboot-k8s-example:1.0
# Image that will be used to containers in the cluster
imagePullPolicy: IfNotPresent
ports:
— containerPort: 8080
# The port that the container is running on in the clusterterminationGracePeriodSeconds alanı yazısına taşıdım
Hiç yorum yok:
Yorum Gönder