Рубрики
Uncategorized

LFS258 [8/15]: объемы Kubernetes и данные

TL; DR Обзор: Объем มอง ง่าย ๆ มัน คือ Жесткий диск ของ Контейнер มี ทั้ง แบบ ที่ ถ้า Pods ตาย … Помечено с Куберанетами, DevOps, Nginx.

  • Обзор : Объем มอง ง่าย ๆ มัน คือ คือ жесткий диск ของ ของ มัน มัน คือ ของ ของ ของ ของ มี ทั้ง ที่ ถ้า pods ตาย แล้ว แบบ ที่ ถ้า pods ตาย แล้ว data หาย (эфемерные) และ данные ไม่ หาย (постоянные) โดย Kubernetes นั้น นั้น นั้น เพราะ หลาย หลาย ที่ เป็น แบบ นั้น เพราะ มี flexvolume และ csi ซึ่ง ทำ ให้ поставщик ต่าง ๆ สามารถ พัฒนา Библиотека ที่ Поддержка продукта ของ ตน เอง แล้ว นำ มา ต่อ กับ kubernetes ได้ เลย
  • Представляем тома : Cubernetes Mount Volume ใน ระดับ Pods แสดง ว่า Контейнер ต่าง ๆ ที่ อยู่ ใน Pods จะ เห็น Volume เดียว กัน ขึ้น อยู่ กับ กับ กับ จะ จะ เลือก เอา อะไร ไป ใช้ การ การ การ ขึ้น อยู่ อยู่ разрешение ที่ เรา กำหนด ไว้ โดย โดย โดย Разрешение จะ เป็น ระดับ Узел เช่น Readwriteonce , Readonlymany และ ReadWritemany
  • Типы объемов : Kubernetes Поддержка Backend Storage ได้ หลากหลาย ชนิด เรียก ชนิด เหล่า นั้น ว่า StorageClass โดย StorageClass นี้ เอง จะ เป็น คน ไป คุย กับ กับ กับ กับ กับ กับ เพื่อ เพื่อ เพื่อ ให้ ให้ ให้ ให้ ให้
  • Спец : แสดง การ ใช้ งาน пустоддир ซึ่ง เป็น StorageClass ที่ เป็น эфемерное хранение
  • Поделиться объемами : แสดง การ ใช้ 2 контейнеры ที่ อยู่ ใน POD เดียว กัน Mount Comply เดียว กัน กัน โดย จะ ว่า ว่า ทั้ง 2 контейнеры เห็น Data เดียว กัน
  • Тома настойчивости и тома : ใน การ ใช้ งาน постоянный том ต้อง สร้าง pv ก่อน จาก นั้น สร้าง pvc เพื่อ จอง พื้นที่ จาก pv มา ใช้ จาก นั้น จึง จะ สามารถ สามารถ สามารถ ไป ให้ pods ใช้ งาน ได้ ได้
  • Секреты : เป็น วิธี ช่วย ให้ pods การ เข้า ถึง data ได้ โดย secret จะ ถูก кодирует แบบ base64 โดย pods สามารถ ใช้ งาน Секрет ได้ ทั้ง แบบ Том และ Переменная среды
  • Configmap : เป็น วิธี ช่วย ให้ pods การ เข้า ถึง data ได้ โดย configmap เป็น простой текст โดย Pods สามารถ ใช้ งาน configmap ได้ ทั้ง แบบ объем และ Переменная среды

Объем ก็ คือ хранение นั่น เอง มอง ง่าย ๆ มัน คือ жесткий диск ของ ของ ๆ มัน คือ คือ ของ ของ ของ ของ คือ โดย ทั่ว ไป ถ้า Контейнер ตาย หรือ หรือ ไป ถ้า ใน ใน นั้น ก็ จะ หาย ไป ใน ใน ไม่ ไม่ ใช้ จะ ผูก อยู่ กับ ถ้า ไม่ ใช้ ใช้ ใช้ ภาย ใน โดย ถ้า PODS มี หลาย Контейнер อยู่ ภาย ใน Контейнер นะ เห็น Том และ Данные เดียว กัน กัน

ถ้า ไม่ อยาก ให้ Data หาย สามารถ ใช้ Постоянные тома ได้ ซึ่ง PODS จะ ต้อง ทำ การ Утверждение Объем ผ่าน ทาง Утверждают постоянные тома

การ เขียน หรือ อ่าน อะไร ใน Volume จะ ต้อง ทำ ผ่าน ผ่าน ผ่าน ผ่าน ซึ่ง ซึ่ง v1.17 รอง รับ ถึง 28 ชนิด ไม่ ว่า จะ เป็น ceph, NFS หรือ Хранение ของ Облачные провайдеры เจ้า ต่างฟ ๆ ซึ่ง อาจ มี การ Установка ต่าง กัน ตาม ชนิด ของ Backend

Backend Storage ของ Kubernetes มี 2 แบบ คือ คือ

  • в дереве : ส่วน ใหญ่ เป็น มา กับ กับ kubernetes มา อย่าง ยาวนาน โดย โดย โดย โดย จะ จะ ถูก построенный, связанный, скомпилированный และ поставляется มา กับ Core ของ Kubernetes เลย Backend ประเภท นี้ ค่อย ๆ ถูก Миграция ไป เป็น вне дерева
  • вне дерева : หลัง จาก การ มา ของ FlexVolume ใน v1.2 และ Интерфейс для хранения контейнера (CSI) ใน v1.9 ทำ ให้ Code ของ Backend Storage ไม่ ต้อง รวม อยู่ ใน Core ของ ต้อง รวม อยู่ ใน ต่อ ของ ของ เจ้า ของ อีก ต่อ ต่อ ไป โดย เจ้า ของ ของ สามารถ Разработка เอง แล้ว ค่อย มา ต่อ กับ Kubernetes ด้วย วิธี นี้ ทำ ให้ Core ของ Kubernetes เบา ขึ้น และ เจ้า ของ Продукт สามารถ Исправление ошибки หรือ เพิ่ม Функция ได้ เอง โดย ไม่ ต้อง รอ มาก มาก Merge Code กับ Kubernets การ ทำ งาน ก็ จะ เร็ว ขึ้น ขึ้น

นอก จาก การ ใช้ Объем ที่ กล่าว ข้าง ต้น ยัง มี อีก 2 ทาง ใน การ นำ Data เข้า ไป ยัง Pods นั่น คือ

  • Секрет : เป็น การ ส่ง ข้อมูล ที่ ถูก ถูก ถูก ถูก แล้ว แล้ว เข้า ไป ใน pods เช่น เช่น เช่น ไป ไป หรือ หรือ หรือ หรือ หรือ Сертификация HTTPS
  • Configmap : เป็น การ ส่ง ข้อมูล ที่ ไม่ ถูก ถูก ถูก ถูก ถูก ถูก เข้า ใน pods เช่น файл конфигурации ต่าง ๆ

ใน 1 PODS สามารถ Mount ได้ หลาย Volume และ สามารถ คละ Тип бэкэнда ได้ และ เนื่อง จาก Volume ถูก Настоящий ใน ระดับ POD ดัง นั้น ต่าง ต่าง ต่าง กัน สามารถ เห็น Volume เดียว กัน ได้ อาจ ใช้ ท่า นี้ เพื่อ ใช้ ใน ทำ ทำ Containter Containter

นอก จาก นี้ Volume ยัง สามารถ ถูก เข้า ถึง ได้ จาก หลาย ๆ Pods พร้อม ๆ กัน และ สามารถ ให้ สิทธิ์ ที่ แตกต่าง กัน ได้ แต่ เนื่อง จาก จาก ไม่ กัน ได้ แต่ เนื่อง จาก จาก ไม่ มี Оптарежная проверка ดัง นั้น อาจ เกิด ปัญหา поврежденная หรือ Блокировка ได้

ใน การ กำหนด กำหนด Режим доступа ต้อง ทำ 2 ทาง คือ ที่ Volume เอง และ ตอน ที่ Pods Запрос претензии เข้า มา โดย Запрос จะ ต้อง ไม่ มาก กว่า สิทธิ์ ที่ Объем กำหนด ไว้ โดย Режим доступа มี ดัง นี้ นี้

  • Readwriteonce : อนุญาติ ให้ อ่าน และ เขียน ได้ จาก จาก จาก จาก จาก จาก จาก (2 pods ที่ อยู่ อยู่ เดียว กัน สามารถ สามารถ чтение/запись ได้ พร้อม กัน แต่ Pods ที่ อยู่ ต่าง Узел Прочитайте/Написать ไม่ ได้ จะ ได้ Ошибка Постоянныйathactachvolume Несомненно
  • Readonlymany : อนุญาติ ให้ อ่าน อย่าง เดียว จาก หลาย ๆ Узел พร้อม ๆ ๆ กัน.
  • ReadWritemany : อนุญาติ ให้ อ่าน และ เขียน ได้ จาก หลาย ๆ ๆ ๆ พร้อม ๆ ๆ ๆ กัน.

Kubernetes จะ จัด กลุ่ม ของ Volume ที่ มี Разрешение เหมือน กัน ไว้ และ Сортировать размер громкости จาก น้อย ไป หา มาก เมื่อ มี Запрос เข้า มา ก็ จะ เลือก Объем เหมาะสม ที่ สุด ให้ ไป

เมื่อ มี การ Запрос громкости

  • API Server ของ Kubernetes จะ Запрос ขอ Хранение ไป ยัง StorageClass плагин และ StorageClass плагин จะ เป็น คน ไป คุย กับ กับ Backend Storage เอง
  • Kubelet จะ Map Roam Authents กับ Mount Point ใน Контейнер แลัว ทำ เป็น Символьная ссылка บน Хост-узел Filesystem เพื่อ ให้ Контейнер ใช้ งาน Хранение ได้

ถ้า เรา ไม่ ระบุ StorageClass Kubernetes จะ เลือก Хранение อะไร ก็ ได้ ที่ เหมาะสม กับ Размер และ Режим доступа ที่ เรา ส่ง ไป กลับ มา ให้ เรา เรา

Kubernetes รองรับ Backend Storage ได้ หลากหลาย บาง อย่าง ใช้ ใน ใน local บาง อย่าง ต้อง ใช้ งาน ผ่าน ผ่าน ซึ่ง แต่ละ ชนิด ก็ มี ข้อดี ข้อ เสีย แต่ กัน ซัก หน่อย หน่อย มา ดู ตัวอย่าง กัน ซักซัก

  • GCEPERSISTENTDISK : เป็น การ Mount Disk GCE บน Google Cloud Platform เข้า ไป ใน Pods
  • awselasticlockstore. : เป็น การ Mount Disk EBS บน AWS เข้า ไป ใน Pods
  • пустоддир : เป็น การ Mount Пустой каталог ให้ กับ Pods โดย Volume จะ เกิด และ ตาย ไป พร้อม กับ pod
  • хозяин : เป็น การ Mount Resource จาก Хост เช่น Файл หรือ Directoty ให้ กับ Pods ซึ่ง ต้อง มี Ресурс ดัง กล่าว อยู่ ที่ Хост ก่อน ยกเว้น ถ้า เรา ใช้ опция DirectoryRreate หรือ. FileOrCreate ที่ จะ สร้าง Ресурс ให้ Pods หาก ไม่ มี
  • NFS : เป็น การ Mount NFS (сетевая файловая система) ให้ กับ PODS (เหมาะ กับ несколько читателей)
  • ISCSI : เป็น การ Mount ISCSI (SCSI над IP) ให้ กับ PODS (เหมาะ กับ несколько читателей)
  • RBD : เป็น การ Устройство блочного устройства Mount RADOS ให้ กับ Подвигание (เหมาะ กับ несколько писателей)
  • Cephfs : เป็น การ Установите громкость Cephfs ให้ กับ PODS (เหมาะ กับ несколько писателей)
  • блестки : เป็น การ крепление Блеск (сетевая файловая система с открытым исходным кодом) ให้ กับ PODS (เหมาะ กับ несколько писателей)

สามารถ ดู Backend Storage เพิ่มเติม ได้ จาก Официальный документ

ตัวอย่าง การ Объем монтирования ง่าย ๆ คือ пустой โดย. пустоддир คือ การ สร้าง Directory ภาย ใน ใน Контейнер นั่น เอง ไม่ ได้ ไป Mount ที่ ไหน การ เขียน Data จะ อยู่ ใน Общее контейнерное пространство ทำ ให้ ไม่ ไม่ ไม่ และ และ หาย ไป กับ การ ตาย ของ POD

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busy
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /scratch
      name: scratch-volume
  volumes:
  - name: scratch-volume
    emptyDir: {}

YAML-файл ข้าง ต้น เป็น การ สร้าง POD ที่ มี 1 + контейнер และ มี Volume ชื่อ Cratch-Volume Mount ไว้ ที/царапин ภาย ใน Контейнер

สามารถ ทดสอบ ได้ ดัง นี้ นี้

$ cat > busybox-emptyDir.yml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busy
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /scratch
      name: scratch-volume
  volumes:
  - name: scratch-volume
    emptyDir: {}
EOF
$ kubectl apply -f busybox-emptyDir.yml 
pod/busybox created
$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          9s
$ kubectl exec -it busybox -- sh
/ # df -h /scratch
Filesystem                Size      Used Available Use% Mounted on
/dev/mapper/rhel-var     60.0G      2.5G     57.5G   4% /scratch
/ # exit
$ kubectl delete -f busybox-emptyDir.yml 
pod "busybox" deleted

จาก ที่ เรา รู้ แล้ว ว่า ว่า ว่า ว่า ว่า ใน pod เดียว กัน จะ จะ Объем Области กัน หัวข้อ นี้ จะ มา ลง มือ ทำ กัน ดู ก่อน มา มา ดู yaml กัน ก่อน.

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busy
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /busy
      name: test
  - image: busybox
    name: box
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /box
      name: test
  volumes:
  - name: test
    emptyDir: {}

จาก YAML-файл ข้าง ต้น ใน POD มี 2 контейнеры ชื่อ Busy และ Box โดย แต่ละ Container Country Volume ชื่อ Test ไว้ ที่ Path/Busy และ/box ตาม ลำดับ เดี๋ยว เรา จะ ลอง เขียน อ่าน файл ดู กัน ว่า มัน เห็น เหมือน กัน ไหม

$ cat > busybox-sharedVolume.yml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busy
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /busy
      name: test
  - image: busybox
    name: box
    command:
      - sleep
      - "3600"
    volumeMounts:
    - mountPath: /box
      name: test
  volumes:
  - name: test
    emptyDir: {}
EOF
$ kubectl apply -f busybox-sharedVolume.yml
pod/busybox created 
$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
busybox   2/2     Running   0          16s
$ kubectl exec -it busybox -c box -- touch /box/foobar
$ kubectl exec -it busybox -c busy -- ls /busy/
foobar
$ kubectl delete -f busybox-sharedVolume.yml
pod "busybox" deleted

Объем настойчивых (PV) คือ Хранение ที่ ถ้า PODS ตาย Data ก็ ยัง อยู่ การ Назначить тома ประเภท นี้ ให้ กับ Pods จะ ต้อง Определите ПерсистентВолюю ก่อน จาก นี้ สร้าง PersiStenctvolumeclaim (ПВХ) เพื่อ ขอ เฉือน Volume มา ให้ POD ใช้ จาก นั้น จึง ค่อย Прикрепите постоянный том ก้อน ที่ Утверждение มา ให้ กับ Pod

Жизненный цикл ของ объем และ претензия มี ดัง นี้ นี้

  • Предоставление : เป็น การ สร้าง pv โดย ทำ ได้ ทั้ง статическое และ динамическое

    • Статики : admin Создать PV ทิ้ง ไว้ รอ ให้ Пользователи มา Претензия ไป ใช้
    • Динамический : ถ้า ไม่ มี pv ไหน match กับ pvc เลย kubernetes จะ создать PV ให้ อันโนมัติ โดย кластер ต้อง ระบุ Defaultstorageclass ด้วย.
  • Привязка : อาจ เป็น ช่วง ที่ กำลัง Match PVC กับ PV หรือ PV รอ ให้ StorageClass Предоставление PV ขึ้น มา
  • Использование : เป็น ช่วง ที่ Pods Mount Volume ไป ใช้ แล้ว
  • Выпуская : เป็น ช่วง ที่ pods ส่ง คำ สั่ง ไป เลิก ใช้ pvc และ ทำ การ Удалить PVC เมื่อ PVC ถูก ลบ ไป แล้ว data อาจ ยัง อยู่ หรือ ถูก ลบ ขึ้น อยู่ กับ ПерсистентВолуМереклаимполит
  • Восстановление : เป็น ช่วง หลัง จาก จาก ที่ pvc ถูก Удалить เรียบร้อย โดย มี 3 варианта คือ

    • Сохранить : ยัง เก็บ PV ไว้ อยู่ ให้ admin เอา ไป จัด การ เอง
    • Удалить : ลบ pv และ Backend Storage ที่ выделить ให้ ไป ด้วย เลย เลย
    • Перерабатывать : (устарел แล้ว) ลบ ข้อมูล ใน PVC ด้วย ( RM -RF/TheVolume/* ) จาก นั้น ก็ พร้อม สำหรับ การ ถูก претензия ใหม่

PV นั้น ไม่ ได้ อยู่ ใน пространство имен ใด пространство имен หนึ่ง แต่ PVC จะ อยู่ ได้ แค่ пространство имен เดียว เท่า นั้น

ตัวอย่าง การ Создать PV ชื่อ Task-PV-том ซึ่ง แบบ HostPath ขนาด 10 ГБ ใน Режим readwriteonce

$ cat > pv-volume.yaml << EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
EOF
$ kubectl apply -f pv-volume.yaml 
persistentvolume/task-pv-volume created
$ kubectl get pv task-pv-volume
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
task-pv-volume   10Gi       RWO            Retain           Available           manual                  14s

ตัวอย่าง การ Создать ПВХ ชื่อ Task-PV-претензия ซึ่ง เฉือน มา ใช้ 3 ГБ ใน Режим readwriteonce

$ cat > pv-claim.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
EOF
$ kubectl apply -f pv-claim.yaml
persistentvolumeclaim/task-pv-claim created
$ kubectl get pv task-pv-volume
NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
task-pv-volume   10Gi       RWO            Retain           Bound    default/task-pv-claim   manual                  6m23s
$ kubectl get pvc task-pv-claim
NAME            STATUS   VOLUME           CAPACITY   ACCESS MODES   STORAGECLASS   AGE
task-pv-claim   Bound    task-pv-volume   10Gi       RWO            manual         75s

จะ เห็น ว่า PVC เปลี่ยน จาก Статус «Доступный» เป็น «связан»

ตัวอย่าง การ attch pvc ไป ยัง pods

# ที่ Master Node
$ cat > pv-pod.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage
EOF
$ kubectl apply -f pv-pod.yaml
pod/task-pv-pod created
$ kubectl get pod task-pv-pod -o wide
NAME          READY   STATUS    RESTARTS   AGE   IP              NODE                  NOMINATED NODE   READINESS GATES
task-pv-pod   1/1     Running   0          71s   192.168.32.51   kube-0003.novalocal              

# login เข้าไปยังเครื่องที่ pods run อยู่ ในที่นี้คือ kube-0003.novalocal 
$ sudo sh -c "echo 'Hello from Kubernetes storage' > /mnt/data/index.html"
$ cat /mnt/data/index.html
Hello from Kubernetes storage

# กลับไปยัง Master Node
kubectl exec -it task-pv-pod -- /bin/bash
root@task-pv-pod:/# apt update
root@task-pv-pod:/# apt install curl
root@task-pv-pod:/# curl http://localhost/
Hello from Kubernetes storage
root@task-pv-pod:/# exit

# Clean up
$ kubectl delete pod task-pv-pod
pod "task-pv-pod" deleted
$ kubectl delete pvc task-pv-claim
persistentvolumeclaim "task-pv-claim" deleted
$ kubectl delete pv task-pv-volume
persistentvolume "task-pv-volume" deleted

# Login ไปยังเครื่องที่ สร้าง file ไว้ (kube-0003.novalocal)
$ sudo rm /mnt/data/index.html
$ sudo rmdir /mnt/data

ถึง แม้ Pods จะ สามารถ เข้า ถึง Data ต่าง ๆ ด้วย Volume แต่ ก็ มี บาง data ที่ เรา ไม่ อยาก ให้ เห็น ได้ ด้วย เช่น เช่น пароль หรือ Сертификация จึง มี Секрет เกิด ขึ้น มา โดย Secret จะ ถูก เก็บ ใน รูปแบบ รูปแบบ base64-encoded (по умолчанию)

แต่ เรา สามารถ Настройка ให้ มัน Шифрование ได้ โดย การ สร้าง EncryctionConfiguration ด้วย Ключ และ Идентичность ที่ เหมาะสม จาก นั้น ทำ การ เพิ่ม Флаг TECHRYPTION-PROVYER-CONFIGE ที่ ใช่ ระบุ วิธี การ Шифрование เช่น «aescdc» หรือ «KSM» ให้ กับ Kube-Apisiserver แล้ว ทำ การ воссоздать секрет ใหม่ ทั้งหมด

ใน การ เปลี่ยน Ключ ต้อง สร้าง Key ใหม่ ก่อน แล้ว จึง Перезагрузка Kube-Apisiserver ทุก ตัว จาก นั้น จึง воссоздать секрет ใหม่ ทั้งหมด

Kubernetes ไม่ ได้ จำกับ จำนวน Secret แต่ Secret ไม่ ควร มี ขนาด เกิน 1 MB โดย Secret จะ ถูก เก็บ ใน TMPFS ซึ่ง เป็น память ดัง นั้น ถ้า มี เยอะ กิน ไป ก็ จะ เปลือง память ของ хост

เรา สามารถ создать секрет ได้ ดัง นี้

  1. Создать ด้วย Kubectl Создать секрет Команда จาก Файл

  2. Создать ด้วย Cubectl Create. секрет команда จาก การ пройти аргумент

  3. Создать ด้วย YAML-файл แบบ Руководство

  4. Создать ด้วย YAML-файл โดย ใช้ stringdata.

เรา สามารถ ใช้ งาน Secret ได้ ดัง นี้

  1. ใช้ ใน รูปแบบ ของ файл ใน Pods

    เรา สามารถ เลือก Mount บาง Файл แล้ว เปลี่ยน ที่ วาง และ ชื่อ файл ด้วย ได้ ดัง นี้

  2. ใช้ ใน รูปแบบ ของ Переменная среды ใน PODS

$ cat > pod-with-mysecret-03.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
  restartPolicy: Never
EOF
$ kubectl apply -f pod-with-mysecret-03.yaml
pod/secret-env-pod created
$ kubectl exec -it secret-env-pod -- bash
root@secret-env-pod:/data# echo $SECRET_USERNAME
admin
root@secret-env-pod:/data# echo $SECRET_PASSWORD
1f2d1e2e67df
root@secret-env-pod:/data# exit
exit
$ kubectl delete -f pod-with-mysecret-03.yaml
pod "secret-env-pod" deleted

Configmap เหมือน Secret เลย ยกเว้น แค่ ไม่ ได้ ได้ ได้ เรา เรา ใช้ Configmap เพื่อ แยก файл конфигурации ออก มา จาก Изображение ของ Контейнер เพื่อ เวลา ที่ ต้องการ แก้ไข файл конфигурации จะ ได้ ไม่ ต้อง Создать изображение ใหม่ ซึ่ง จะ ทำ ให้ версия ของ изображение เพิ่ม ขึ้น โดย ไม่ ได้ มี การ แก้ไข код ด้วย ด้วย

Configmap สามารถ เก็บ ข้อมูล ได้ ทั้ง ใน รูปแบบ รูปแบบ Пара ключа-значения หรือ файл простого конфигурации

เรา สามารถ สร้าง configmap ได้ ดัง นี้

  1. สร้าง จาก. Каталог

  2. สร้าง จาก. Файл

  3. สร้าง จาก буквальные значения

เรา สามารถ ใช้ งาน Configmap ได้ ดัง นี้

  1. Назначить configmap ไป ยัง Переменная среды

  2. Добавить Configmap เป็น Data ใน Volume

Оригинал: «https://dev.to/peepeepopapapeepeepo/lfs258-8-15-kubernetes-volumes-and-data-17de»