Anasayfa » Kubernetes’de ConfigMap Kullanmak

Share This Post

Blog

Kubernetes’de ConfigMap Kullanmak

ConfigMaps Nedir ?

Container imajı içerisindeki konfigürasyon detaylarını ayrı olarak tutmaya yarayan bir nesnedir. Çalışan bir pod’unuz ve containerlarınız var. Bu pod üzerindeki konfigürasyonda değişiklik yapmak isterseniz yaml dosyasını yeniden oluşturup tekrar deploy etmeniz gerekecektir. ConfigMaps ler ile pod üzerinde bir değişiklik yapmadan dışarıdan istenilen değişikliklerin uygulanması sağlanılır.

Webnginx.yaml isimli bir yaml dosyası oluşturuyoruz. Dosya içerisinde STRING ve PATH olmak üzere iki tane data alanımız mevcut durumda. Bu alanları oluşturacağımız pod’a bağlayacağız. Amacımız Merhaba Nginx!! içerikli bir nginx sayfasını  STRING kısmında yazdığımız Hello World değeriyle değiştirmek. Bu çalışmamızda daha önceki dokümanlarda kullandığımız Minikube cluster’ımızı kullanacağız.

  apiVersion: v1
 kind: ConfigMap
 metadata:
   name: webnginx
   namespace: default
 data:
   STRING: Merhaba Nginx!!!
   PATH: /usr/share/nginx/html/index.html

minikube kubectl create — -f webnginx.yaml komutuyla configmap’ımızı oluşturalım.


minikube kubectl get configmaps komutuyla oluşturduğumuz configmap’i görelim.

minikube kubectl describe configmap webnginx komutuyla tanımları görelim. Configmap yerine cm şeklinde kısaltma kullanabilirsiniz.

Şimdi oluşturacağımız pod’umuz için webapp.yaml isimli bir yaml dosyası oluşturuyoruz.

  apiVersion: v1
 kind: Pod
 metadata:
   name: webapp
   labels:
       app: webapp
 spec:
     containers:
     - image: nginx
       name: nginx
       ports:
       - containerPort: 80
       command: ["/bin/sh", "-c", "echo $(DATA_STRING) > $(DATA_PATH); sleep 3600"]
       env:
        - name: DATA_STRING
          valueFrom:
             configMapKeyRef:
                 name: webnginx
                 key: STRING
                 optional: true
        - name: DATA_PATH
          valueFrom:
             configMapKeyRef:
                 name: webnginx
                 key: PATH
                 optional: true 

Yaml dosyamızda 1 adet container içeren pod bulunmaktadır. Container’ın içerisinde nginx imajımız var. Command bölümünde configmap olarak hazırladığımız yaml içerisindeki datalar tanımlı. Env bölümünde command bölümünde tanımladığımız dataların configmap ile olan ilişkisi kuruluyor. configMapKeyRef bölümündeki name kısımlarına dikkat edilirse daha önceden oluşturduğumuz configmap bilgisinin yazıldığı görülür.
minikube kubectl create — -f webapp.yaml komutuyla pod’umuzu oluşturuyoruz.

Oluşturduğumuz pod’umuza bu sefer CLI ile erişip configmap içerisinde belirtiğimiz değerler index.html dosyamıza yazılmış mı kontrol edelim.
minikube kubectl exec webapp — -it /bin/sh komutuyla pod’umuza erişim sağlıyoruz.

Ardından configmap içerisinde belirttiğimiz dizindeki sayfada değişikliği kontrol edelim.
cat /usr/share/nginx/html/index

Configmap’imizle karşılaştıralım.

PATH bölümündeki dizine STRING bölümündeki değerimizle birlikte pod içerisine atamış olduk. webnginx.yaml configmaps dosyamızın içerisindeki STRING değerini Hello World olarak değiştirelim.
minikube kubectl edit configmaps webnginx komutuyla notepad üzerinden dosyanızı editleyebilirsiniz.

Dosyada değişiklik yapıp kaydettikten sonra kapatıyoruz. Dosyanın düzenlendiğine dair bir uyarı mesajı geliyor.

Ardından yine pod’umuzu içerisine girerek cat /usr/share/nginx/html/index.html komutunu çalıştırıyoruz.

Faydalı olması dileğiyle,

Serinin diğer dokümanları;

1-Container Kubernetes Minikube
2-Pod Nedir? Deployment ve Rollout İşlemleri
3-Kubernetesde Authentication ve Authorization Nedir?
4-Kubernetes WEB Arayüzünden Pod Oluşturmak
5-Kubernetes’de CLI üzerinde Deployment işlemleri
6-Kubernetes’de Shared Volume Oluşturmak

Share This Post

1 Comment

  1. Eline sağlık. Bu konuda çok kaynak yok, bu nedenle çok kıymetli.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>