Skip to content

Latest commit

 

History

History
96 lines (76 loc) · 3.58 KB

README.md

File metadata and controls

96 lines (76 loc) · 3.58 KB

Images volumes

Внимание! Работает только с Container runtime, которые поддерживают этот механизм. Например, CRI-O ≥ v1.31.

В kubernetes v1.31 появился новый тип volume - image.

Тома типа image представляют собой объект OCI (образ контейнера или артефакт), который доступен на хост-компьютере kubelet.

Создание артефакта в OCI хранилище

Некоторые приложения, например helm или ormb, могут самостоятельно создавать артефакты в OCI хранилище. Но если вам потребуется разместить в нём произвольный набор файлов, рекомендую воспользоваться приложением ORAS.

ORAS

Для создания (и не только) артефактов в OCI хранилище можно использовать приложение oras.

Установка приложения описана в документации.

export VERSION="1.2.0"
curl -LO "https://github.com/oras-project/oras/releases/download/v${VERSION}/oras_${VERSION}_linux_amd64.tar.gz"
mkdir -p oras-install/
tar -zxf oras_${VERSION}_*.tar.gz -C oras-install/
sudo mv oras-install/oras /usr/local/bin/
rm -rf oras_${VERSION}_*.tar.gz oras-install/

Если вы привыкли к контейнерам, то для вас разработчики создали контейнер с приложением:

docker run -it --rm -v $(pwd):/workspace ghcr.io/oras-project/oras:v1.2.0 help

Создание артефакта

В качестве примера будем использовать файлы из директории html.

У меня свой собственный СА, поэтому приходится при запуске приложения указывать его сертификат.

Грузим артефакт в хранилище:

export CL_PASS=password
echo $CL_PASS | oras push -u admin --password-stdin --ca-file ca.crt registry-cl.kryukov.local/library/files:1.0.0 ./html/:text/html

Проверяем:

oras manifest fetch --ca-file ca.crt registry-cl.kryukov.local/library/files:1.0.0 --pretty

Пример использования volume image

kind: Deployment
apiVersion: apps/v1
metadata:
  name: sample-volume
  namespace: default
  labels:
    app: &app nginx
    version: &version 1.27.1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: *app
      version: *version
  template:
    metadata:
      labels:
        app: *app
        version: *version
    spec:
      volumes:
      - name: nginx-persistent-storage
        image: 
          reference: registry-cl.kryukov.local/library/files:1.0.0
          pullPolicy: IfNotPresent
      containers:
      - name: nginx
        image: nginx:1.27.1
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-persistent-storage
          mountPath: /usr/share/nginx
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
          requests:
            memory: "64Mi"
            cpu: "250m"