предисловие
В предыдущем эксперименте мы развернули mysql и wordpress с помощью Deployment+PV/PVC и предоставили доступ к службе через службу типа NodePort, чтобы к ней можно было получить доступ за пределами кластера, но когда число реплик больше 1, несколько POD, сгенерированных развертыванием являются общими A PV, поэтому могут быть проблемы в производительности и бизнесе.В этом случае мы должны рассмотреть StatefulSet.На официальном сайте StatefulSet использует в качестве примера master-slave Mysql, но автор считает, что master-slave Сам Mysql такой же, как и Mysql.Знания связаны, и примеры больше склонны к практике stateful службы структуры топологии, поэтому следующие эксперименты основаны на популярной в настоящее время и относительно простой системе мониторинга Grafana+Prometheus для проведения эксперименты.
Сцены
Используйте StatefulSet для развертывания grafana, используйте PV и PVC для сохранения данных. Весь исходный код этого эксперимента хранится в:GitHub.com/live версия классная/нет…
руки вверх
Подготовить ПВХ и ПВХ
✗ kubectl apply -f 01-1-grafana-pvc.yaml
persistentvolumeclaim/grafana-pv-claim created
✗ mkdir -p /data/pv/grafana
✗ kubectl apply -f 01-2-grafana-pv.yaml
persistentvolume/grafana-pv-volume created
✗ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
grafana-pv-claim Bound grafana-pv-volume 2Gi RWX 24m
Если вы не понимаете или у вас есть вопросы, пожалуйста, обратитесь к предыдущемуСерия K8S «Сделай сам» — 2.3 — PV и ПВХ
Создайте Grafana с помощью StatefulSet и используйте PVC в качестве постоянного хранилища
✗ kubectl apply -f 01-3-grafana-statefulset.yaml
statefulset.apps/monitor-grafana created
✗ kubectl get pods
NAME READY STATUS RESTARTS AGE
monitor-grafana-0 0/1 CrashLoopBackOff 3 2m2s
✗ kubectl logs monitor-grafana-0
GF_PATHS_DATA='/var/lib/grafana' is not writable.
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later
mkdir: cannot create directory '/var/lib/grafana/plugins': Permission denied
Запуск не удался, подсказка также очень ясна, что это проблема с разрешением, и также дается решение
# 参考文章 http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later
# 修改文件权限
✗ chown -R 472:472 /data/pv/grafana
# 增加POD配置(我们的01-3-grafana-statefulset.yaml已经加好了)
securityContext:
runAsGroup: 472
runAsUser: 472
fsGroup: 472
После выполнения вышеуказанных операций он по-прежнему не работает.Наконец, после расследования обнаружено, что POD запланирован на узел worker02.Из-за типа Local, используемого нашим PV, этот каталог не существует на worker02, поэтому он не может быть успешно создан. См. предыдущуюСерия K8S «Сделай сам» — 1.3 — Порча и сходствоДобавьте nodeSelector, чтобы указать расписание узлов.
...
template:
metadata:
labels:
app: monitor
type: grafana
spec:
nodeSelector:
kubernetes.io/hostname: worker01 #这个请根据需要修改到你指定的节点上,或者你使用其他的持久化存储方式,则可能没有我这个问题,比如nfs
успех!
✗ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
monitor-grafana-0 1/1 Running 0 3m19s 10.244.0.93 worker01 <none> <none>
Окончательный файл yaml, который вступит в силу, выглядит следующим образом:
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: monitor
type: grafana
name: monitor-grafana
spec:
replicas: 1
selector:
matchLabels:
app: monitor
type: grafana
serviceName: grafana
template:
metadata:
labels:
app: monitor
type: grafana
spec:
nodeSelector:
kubernetes.io/hostname: worker01 #保证调度到我们创建了本地目录的主机上
containers:
- name: grafana
image: grafana/grafana:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: grafana
volumeMounts:
- name: grafana-pv-storage
mountPath: /var/lib/grafana
securityContext:
runAsGroup: 472
runAsUser: 472
fsGroup: 472
volumes:
- name: grafana-pv-storage
persistentVolumeClaim:
claimName: grafana-pv-claim
Используйте службу для предоставления доступа к grafana, чтобы к ней можно было получить доступ за пределами кластера.
✗ kubectl apply -f 01-4-grafana-svc.yaml
service/grafana-svc created
Если вы сомневаетесь, просмотрите этоСерия K8S "Сделай сам" - 2.4 - ОбслуживаниеТеперь наша графана доступна, как показано ниже: