diff --git a/README.md b/README.md index 64ef33813a..eced87da73 100644 --- a/README.md +++ b/README.md @@ -1,117 +1,56 @@ -# Домашнее задание к занятию "`Название занятия`" - `Фамилия и имя студента` +# Домашнее задание к занятию "Хранение в K8s" - `Молоствов Андрей` -### Инструкция по выполнению домашнего задания - - 1. Сделайте `fork` данного репозитория к себе в Github и переименуйте его по названию или номеру занятия, например, https://github.com/имя-вашего-репозитория/git-hw или https://github.com/имя-вашего-репозитория/7-1-ansible-hw). - 2. Выполните клонирование данного репозитория к себе на ПК с помощью команды `git clone`. - 3. Выполните домашнее задание и заполните у себя локально этот файл README.md: - - впишите вверху название занятия и вашу фамилию и имя - - в каждом задании добавьте решение в требуемом виде (текст/код/скриншоты/ссылка) - - для корректного добавления скриншотов воспользуйтесь [инструкцией "Как вставить скриншот в шаблон с решением](https://github.com/netology-code/sys-pattern-homework/blob/main/screen-instruction.md) - - при оформлении используйте возможности языка разметки md (коротко об этом можно посмотреть в [инструкции по MarkDown](https://github.com/netology-code/sys-pattern-homework/blob/main/md-instruction.md)) - 4. После завершения работы над домашним заданием сделайте коммит (`git commit -m "comment"`) и отправьте его на Github (`git push origin`); - 5. Для проверки домашнего задания преподавателем в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем Github. - 6. Любые вопросы по выполнению заданий спрашивайте в чате учебной группы и/или в разделе “Вопросы по заданию” в личном кабинете. - -Желаем успехов в выполнении домашнего задания! - -### Дополнительные материалы, которые могут быть полезны для выполнения задания - -1. [Руководство по оформлению Markdown файлов](https://gist.github.com/Jekins/2bf2d0638163f1294637#Code) - ---- - ### Задание 1 -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - ``` -Поле для вставки кода... -.... -.... -.... -.... +mkdir -p k8s-storage-tasks +cd k8s-storage-tasks +nano containers-data-exchange.yaml +kubectl apply -f containers-data-exchange.yaml +kubectl describe pod -l app=data-exchange +kubectl logs -l app=data-exchange -c multitool --tail=5 +kubectl get pv +kubectl describe pv local-pv ``` +image -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 1](ссылка на скриншот 1)` - - ---- +image ### Задание 2 -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 2](ссылка на скриншот 2)` - - ---- +local-pv - созданный вручную, статус Available +pvc-dcd0e528... - автоматически созданный, статус Bound к PVC -### Задание 3 +PVC привязался не к local-pv, а к автоматически созданному PV потому что: -`Приведите ответ в свободной форме........` +1)У автоматического PV storageClassName: standard (дефолтный) -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. +2)У PV не указан storageClassName +3)PVC ищет подходящий PV, нашел стандартный и привязался к нему ``` -Поле для вставки кода... -.... -.... -.... -.... +nano simple-pv-pvc.yaml +kubectl apply -f simple-pv-pvc.yaml --validate=false +kubectl get pv,pvc,pods -l app=data-exchange-pvc +kubectl logs -l app=data-exchange-pvc -c multitool --tail=3 +kubectl delete deployment data-exchange-pvc +kubectl get pv +kubectl describe pv local-pv ``` +image -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` - -### Задание 4 - -`Приведите ответ в свободной форме........` +image -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. +image +### Задание 3 ``` -Поле для вставки кода... -.... -.... -.... -.... +nano sc.yaml +minikube ssh "sudo mkdir -p /mnt/sc-data && sudo chmod 777 /mnt/sc-data" +kubectl apply -f sc.yaml +sleep 15 +kubectl get sc,pv,pvc,pods -l app=data-exchange-sc +kubectl logs -l app=data-exchange-sc -c multitool --tail=3 ``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` +image diff --git a/containers-data-exchange.yaml b/containers-data-exchange.yaml new file mode 100644 index 0000000000..bbabbc7d6d --- /dev/null +++ b/containers-data-exchange.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: data-exchange +spec: + replicas: 1 + selector: + matchLabels: + app: data-exchange + template: + metadata: + labels: + app: data-exchange + spec: + containers: + - name: busybox + image: busybox + command: ["/bin/sh", "-c"] + args: ["while true; do echo $(date) >> /shared/data.log; sleep 5; done"] + volumeMounts: + - name: shared-volume + mountPath: /shared + - name: multitool + image: wbitt/network-multitool + command: ["/bin/sh", "-c"] + args: ["tail -f /shared/data.log"] + volumeMounts: + - name: shared-volume + mountPath: /shared + volumes: + - name: shared-volume + emptyDir: {} diff --git a/img/1.jpg b/img/1.jpg new file mode 100644 index 0000000000..98079eb6dd Binary files /dev/null and b/img/1.jpg differ diff --git a/img/2.jpg b/img/2.jpg new file mode 100644 index 0000000000..617cf5e28f Binary files /dev/null and b/img/2.jpg differ diff --git a/img/3.jpg b/img/3.jpg new file mode 100644 index 0000000000..01676978f7 Binary files /dev/null and b/img/3.jpg differ diff --git a/img/4.jpg b/img/4.jpg new file mode 100644 index 0000000000..7b9fa8a61d Binary files /dev/null and b/img/4.jpg differ diff --git a/sc.yaml b/sc.yaml new file mode 100644 index 0000000000..8fd12ad7cf --- /dev/null +++ b/sc.yaml @@ -0,0 +1,69 @@ +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: local-sc +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: local-sc-pv +spec: + capacity: + storage: 1Gi + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Delete + storageClassName: local-sc + hostPath: + path: /mnt/sc-data +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: local-sc-pvc +spec: + volumeMode: Filesystem + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 512Mi + storageClassName: local-sc +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: data-exchange-sc +spec: + replicas: 1 + selector: + matchLabels: + app: data-exchange-sc + template: + metadata: + labels: + app: data-exchange-sc + spec: + containers: + - name: busybox + image: busybox + command: ["/bin/sh", "-c"] + args: ["while true; do echo $(date) >> /storage/data.log; sleep 5; done"] + volumeMounts: + - name: sc-volume + mountPath: /storage + - name: multitool + image: wbitt/network-multitool + command: ["/bin/sh", "-c"] + args: ["tail -f /storage/data.log"] + volumeMounts: + - name: sc-volume + mountPath: /storage + volumes: + - name: sc-volume + persistentVolumeClaim: + claimName: local-sc-pvc diff --git a/simple-pv-pvc.yaml b/simple-pv-pvc.yaml new file mode 100644 index 0000000000..659bf9f2f1 --- /dev/null +++ b/simple-pv-pvc.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: local-pv +spec: + capacity: + storage: 1Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + hostPath: + path: /mnt/k8s-data + type: DirectoryOrCreate +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: local-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 512Mi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: data-exchange-pvc +spec: + replicas: 1 + selector: + matchLabels: + app: data-exchange-pvc + template: + metadata: + labels: + app: data-exchange-pvc + spec: + containers: + - name: busybox + image: busybox + command: ["sh", "-c"] + args: ["while true; do echo 'PV test: $(date)' >> /mnt/shared.log; sleep 5; done"] + volumeMounts: + - name: mypvc + mountPath: /mnt + - name: multitool + image: busybox + command: ["sh", "-c"] + args: ["tail -f /mnt/shared.log"] + volumeMounts: + - name: mypvc + mountPath: /mnt + volumes: + - name: mypvc + persistentVolumeClaim: + claimName: local-pvc