предисловие
Существует множество методов хранения для k8s, в этой статье основное внимание уделяется ConfigMap и постоянному хранилищу-nfs. Это также распространенный метод хранения для k8s. Говорить сухими словами непросто, поэтому возьму в качестве примера nginx, потому что nginx как раз и нуждается в двух вышеуказанных способах хранения одновременно. Вот простой рисунок.
В этой серии руководств используется всего три сервера, один из которых может быть подключен к Интернету, а два из них не подключены к Интернету. Кластер k8s не может быть объединен в сеть.
анализ типа хранилища nginx
При использовании nginx больше всего беспокоят следующие два каталога:
/etc/nginx/conf.d
и/usr/share/nginx/html
Один из них — каталог файла конфигурации, а другой — каталог статических ресурсов. Как правило, ConfigMap используется для хранения файлов конфигурации в рабочей среде, а постоянное хранилище nfs — для статических ресурсов.
конфигурационный файл
├── /etc/nginx/conf.d
├── default.conf
├── a.conf
├── b.conf
└── c.conf
статические ресурсы
├── /usr/share/nginx/html
├── index.html
├── a.html
├── b.html
└── c.html
ConfigMap
Создать рабочий каталог
mkdir -p /mldong/k8s/nginx
войти в рабочий каталог
cd /mldong/k8s/nginx
Используйте yaml, чтобы определить способ
определить один
cat <<EOF > /mldong/k8s/nginx/nginx-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm
namespace: mldong-test
data:
a.conf: |-
server {
listen 80;
server_name a.mldong.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
определить несколько
cat <<EOF > /mldong/k8s/nginx/nginx-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm
namespace: mldong-test
data:
a.conf: |-
server {
listen 80;
server_name a.mldong.com;
location / {
root /usr/share/nginx/html/a;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
b.conf: |-
server {
listen 80;
server_name b.mldong.com;
location / {
root /usr/share/nginx/html/b;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
создать команду
kubectl apply -f nginx_cm.yaml
Просмотреть все карты ConfigMaps в пространстве имен
kubectl get configmap -n mldong-test
Просмотр сведений об указанном ConfigMap
kubectl describe configmap nginx-cm -n mldong-test
ConfigMap===>kind
nginx-cm===>metadata.name
mldong-test===>metadata.namespace
Удалить определенный ConfigMap
kubectl delete -f nginx_cm.yaml
Определяется с помощью внешнего файла
Создайте a.conf и b.conf в текущем каталоге
a.conf
cat <<EOF > /mldong/k8s/nginx/a.conf
server {
listen 80;
server_name a.mldong.com;
location / {
root /usr/share/nginx/html/a;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
b.conf
cat <<EOF > /mldong/k8s/nginx/b.conf
server {
listen 80;
server_name b.mldong.com;
location / {
root /usr/share/nginx/html/b;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
создать команду
создать единый
kubectl create configmap nginx-cm --from-file=a.conf -n mldong-test
создать несколько
kubectl create configmap nginx-cm --from-file=a.conf --from-file=b.conf -n mldong-test
По умолчанию имя файла является ключом, если вы хотите изменить его, например:
kubectl create configmap nginx-cm --from-file=xxxx=a.conf -n mldong-test
Удалить созданный ConfigMap
kubectl delete configmap nginx-cm -n mldong-test
Просмотреть все карты ConfigMaps в пространстве имен
kubectl get configmap -n mldong-test
Просмотр сведений об указанном ConfigMap
kubectl describe configmap nginx-cm -n mldong-test
ConfigMap===>kind
nginx-cm===>metadata.name
mldong-test===>metadata.namespace
постоянное хранение
Постоянное хранилище здесь использует nfs, которое в Alibaba Cloud называется nas. Если у вас его нет, сначала активируйте его — есть бесплатная версия.
открытый нас
искать нас
Процесс создания опущен
На что следует обратить внимание, так это на правильный выбор региона.
Просмотр сведений о конфигурации
устанавливать
Скопируйте команду mount и выполните ее на маленьком сервере A.
sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport 9fdd94bf87-wkf12.cn-zhangjiakou.nas.aliyuncs.com:/ /mnt
/mnt — это локальный каталог для монтирования, если нет, вам нужно создать его самостоятельно. Вы также можете перейти в другой каталог.
Проверить статус монтирования
df -h | grep aliyun
размонтировать
umount /mnt
плагин для хранения
Подключаемый модуль кластерного хранилища Alibaba Cloud имеет два Flexvolume и CSI. Официальная рекомендация — использовать CSI. После выбора кластер установит подключаемый модуль по умолчанию.
··
Перед началом рекомендуется полностью прочитать документацию.
Плагины хранилища устанавливаются по умолчанию
Проверить установку
- Выполните следующую команду, чтобы вывести несколько (количество узлов) списков подов в состоянии «Работает».
kubectl get pod -n kube-system | grep csi-plugin
- Выполните следующую команду, чтобы вывести список модулей в состоянии «Работает».
kubectl get pod -n kube-system | grep csi-provisioner
начать использовать
В этой статье сначала используется метод статического хранилища NAS для реального боя, главным образом потому, что я боюсь, что это будет немного грязно, если я сделаю слишком много сразу. Сам пробовал, в ямле этого документа есть ямка. Если вы не можете создать его, вы можете использовать консоль для его создания, а затем изучить его yaml.
Создайте том статического хранилища NAS
nginx-pv.yaml
cat <<EOF > /mldong/k8s/nginx/nginx-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-pv
labels:
alicloud-pvname: nginx-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: nginx-pv
volumeAttributes:
server: "9fdd94bf87-wfq72.cn-zhangjiakou.nas.aliyuncs.com"
path: "/"
vers: "3"
storageClassName: nas
EOF
иллюстрировать
-
driver
: Тип вождения. В этом примере значение равноnasplugin.csi.alibabacloud.com
, что указывает на то, что используется подключаемый модуль Alibaba Cloud NAS CSI. -
volumeHandle
: Настройте имя PV. -
server
: точка подключения NAS. -
path
: монтировать подкаталоги. -
vers
: номер версии протокола NFS, используемого для подключения тома данных NAS, рекомендуется v3; сверхбыстрый NAS поддерживает только v3.
Примечание: pv совместно используется всеми пространствами имен, поэтому нет необходимости добавлять пространство имен.
Создать PV
kubectl apply -f nginx-pv.yaml
Просмотр PV
kubectl get pv
Доступно->успешно, Выпущено->не удалось
Просмотр сведений о PV
kubectl describe pv
удалить PV
kubectl delete -f nginx-pv.yaml
nginx-pvc.yaml
Примечание: pvc имеет пространство имен, поэтому добавьте пространство имен
cat <<EOF > /mldong/k8s/nginx/nginx-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: 'yes'
pv.kubernetes.io/bound-by-controller: 'yes'
finalizers:
- kubernetes.io/pvc-protection
name: nginx-pvc
namespace: mldong-test
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
selector:
matchLabels:
alicloud-pvname: nginx-pv
storageClassName: nas
volumeMode: Filesystem
volumeName: nginx-pv
EOF
Основное alicloud-pvname здесь — это metadata.name pv.
Создание PVC
kubectl apply -f nginx-pvc.yaml
Посмотреть ПВХ
kubectl get pvc -n mldong-test
Привязано-> успех, Ожидание-> неудача
Посмотреть детали ПВХ
kubectl describe pvc -n mldong-test
Удалить PVC
kubectl delete -f nginx-pvc.yaml
начать монтировать
Сначала необходимо определить том хранилища k8s, а затем смонтировать.Мы только что определили два типа купонов хранилища, configmap и pvc.
cat <<EOF > /mldong/k8s/nginx/nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-pod
namespace: mldong-test
spec:
selector:
matchLabels:
app: nginx-pod
replicas: 1
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: registry-vpc.cn-zhangjiakou.aliyuncs.com/mldong/java/nginx:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
name: port
protocol: TCP
volumeMounts:
- name: nginx-pvc
mountPath: "/usr/share/nginx/html"
- name: nginx-cm
mountPath: "/etc/nginx/conf.d"
volumes:
- name: nginx-pvc
persistentVolumeClaim:
claimName: nginx-pvc
- name: nginx-cm
configMap:
name: nginx-cm
EOF
проиллюстрировать:
-
volumeMount.name
==>volumes.name
-
volumeMount.mountPath
==> каталог контейнера -
persistentVolumeClaim.claimName
==> имя определенного пвх -
configMap.name
==> имя определенной карты конфигурации -
---
Для сегментации файлов поможет k8s
создать модуль
kubectl apply -f nginx-deployment.yaml
Просмотр модулей
kubectl get pods -n mldong-test
Маленький сервер создает файлы
├── /mnt
├── a
└── index.html
└── b
└── index.html
в контейнер
kubectl exec -it pod-name -n mldong-test -- bash
Проверьте, существует ли файл конфигурации
ls /etc/nginx/conf.d/
Проверьте, существуют ли статические ресурсы
ls /usr/share/nginx/html
Создать сервис
документ
cat <<EOF > /mldong/k8s/nginx/nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
namespace: mldong-test
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 32180
selector:
app: nginx-pod
EOF
издать приказ
kubectl apply -f nginx-service.yaml
Посмотреть сервис
kubectl get Service -n mldong-test
служба доступа
узел доступа 1
curl worker1:32180
узел доступа 2
curl worker2:32180
домен доступа а
curl -H 'Host: a.mldong.com' worker1:32180
посетить домен b
curl -H 'Host: b.mldong.com' worker1:32180
резюме
В этой статье nginx используется в качестве примера, чтобы объяснить, как использовать ConfigMap и постоянное хранилище.Хотя он основан на облачной платформе, основные процессы аналогичны.
-
Сначала определите тип хранилища службы, которую нужно развернуть.
-
Если это ConfigMap
- определить конфигурацию
-
если это пв
- определить PV
- определить пвх
-
Определение креплений pod
-
Определить службу публикации службы
Статьи по Теме
Практика с вами, чтобы играть в создание кластера k8s и Hello World