Создайте набор демонов в Kubernetes
На этой странице
- Предварительные условия
- Что мы будем делать?
- Создание набора демонов
- Заключение
DaemonSet гарантирует, что все узлы в кластере Kubernetes запускают копию модуля. Каждый узел будет иметь копию модуля. Когда узлы добавляются в кластер, к ним добавляются поды, а когда узлы удаляются из кластера, поды удаляются. Если мы удалим DaemonSet , он очистит созданные им модули.
DaemonSet гарантирует, что на всех узлах будет запущена копия пода. Обычно узел, на котором работает модуль, выбирается планировщиком, но модули DaemonSet создаются и планируются контроллером DaemonSet.
Демонсет можно использовать:
- Чтобы запустить кластерное хранилище на каждом узле, например: glusterd, ceph
- Чтобы запустить сбор журналов на каждом узле, например: fluentd, logstash
- Для запуска мониторинга узлов в любой заметке, например: Prometheus Node Exporter, collectd, агент Datadog.
Чтобы узнать больше о Daemonset, посетите kubernetes.io — официальную документацию Kubernetes.
В этой статье мы создадим набор демонов Fluent_elasticsearch. При этом на каждом узле в кластере будут созданы модули \fluent_elasticsearch\. Наш файл определения Daemonset будет иметь допуск к заражению главных узлов, чтобы позволить Pod планироваться на главном узле.
Предпосылки
- Кластер Kubernetes по крайней мере с 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.
Что мы будем делать?
- Создание набора демонов
Создать набор демонов
Проверьте, существует ли набор демонов в пространстве имен по умолчанию и во всех пространствах имен.
kubectl get daemonsets #Get daemonsets from the default namespace
kubectl get daemonsets --all-namespaces #Get daemonsets from all namespace using --all-namespace option
На приведенном выше снимке экрана видно, что доступно несколько наборов демонов. Все эти наборы демонов предназначены для компонентов кластера.
Теперь получите модули, принадлежащие пространству имен \kube-system\.
kubectl get pods -n kube-system #Get pods from the "kube-system" namespace
Все эти модули, показанные на скриншоте выше, относятся к набору компонентов кластера Daemonset.
Получите список прокси-модулей.
kubectl get pods -n kube-system | grep proxy #Get pods from the "kube-system" namespace and grep for proxy
Проверьте, что управляет пакетами прокси-серверов.
kubectl describe pod kube-proxy-s5vzp -n kube-system #Describe the pod from the "kube-system" namespace
Получите подробную информацию о наборе демонов, который управляет модулями прокси.
kubectl describe daemonset kube-proxy -n kube-system #Describe the daemonset from the "kube-system" namespace
Создайте файл со следующим определением набора демонов.
vim my-daemonset.yml
apiVersion: apps/v1 kind: DaemonSet metadata: name: my-fluentd-elasticsearch-daemonset namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers
В приведенном выше определении у нас есть терпимость к порче главного узла. Это также позволит разместить модуль на главном узле.
Создайте набор демонов, используя файл определения, созданный на предыдущем шаге.
kubectl create -f my-daemonset.yml #Create a daemonset
kubectl get daemonset -n kube-system #Get daemonset from the "kube-system" namespace
Этот набор deamont был создан в пространстве имен \kube-system\.
Опишите набор демонов, который мы только что создали, в пространстве имен \kube-system\.
kubectl describe daemonset my-fluentd-elasticsearch-daemonset -n kube-system #Describe the daemonset from the "kube-system" namespace
На приведенном выше снимке экрана видно, что модули были развернуты на 2 узлах.
Теперь мы можем получить подробную информацию о модулях, которые развернуты как наборы демонов на 2 узлах.
kubectl get pods -n kube-system | grep my-fluentd-elasticsearch-daemonset #Get pods from the "kube-system" namespace and grep
kubectl describe pod my-fluentd-elasticsearch-daemonset-4t9vs -n kube-system | grep Node #Describe the pods from the "kube-system" namespace and grep
kubectl describe pod my-fluentd-elasticsearch-daemonset-kxfjj -n kube-system | grep Node #Describe the pod from the "kube-system" namespace and grep
На приведенном выше снимке экрана видно, что модули были развернуты на рабочем узле «node01» и главном узле «master». Причина получения модуля, запланированного на главном узле, — терпимость к заражению главного узла.
Заключение
В этой статье мы рассмотрели шаги по созданию набора демонов и увидели, как модули в наборе демонов развертываются на каждом узле в кластере Kubernetes.