Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
devops:kubernetes [2022/01/12 13:54] – [Распределить поды деплоймента по разным нодам кластера] admindevops:kubernetes [2022/03/24 15:20] – [Headless Services для Stafullset] admin
Line 935: Line 935:
             app: my-service             app: my-service
 </code> </code>
 +
 +====== Headless Services для Stafullset ======
 +И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\
 +https://www.tigera.io/blog/exposing-statefulsets-in-kubernetes/
 +
 +Following the normal practice of having a single Service point to all instances of your application doesn’t work when you want to query a specific instance directly. This is already handled internally with the Headless Service you create alongside the StatefulSet. The created ervice will not be given a clusterIP, but will instead simply include a list of Endpoints. These Endpoints are then used to generate instance-specific DNS records in the form of: <StatefulSet>-<Index>.<Service>.<Namespace>.svc.cluster.locale.g., app-0.myapp.default.svc.cluster.local.
 +
 +Обычно сервисы используются в k8s для доступа ко всем рпликам сервиса, однако, в слуаче со statefull-приложениями может понадобиться доступ к конкретной реплике. Для этого в k8s существуют Statefullset'ы и связанные с ними Headless-сервисы. \\
 +Что такое **Statefullset** - это способ создать набор именованных реплик сервиса, каждая из которых будет сохранять свое имя и после перезапуска. \\
 +Что такое **Headless Service** - это сервис, который НЕ имеет адреса в кластере (**ClusterIP: None**) и НЕ выполняет балансировку подключний по эндпоинтам, а просто является списком эндпоинтов для именованных реплик, управляемых Statefullset'ом. А для доступа к именованным репликам в DNS кластера генерируются имена:
 +  <StatefulSet>-<Ordinal>.<Service>.<Namespace>.svc.cluster.local
 +например:
 +  app-0.myapp.default.svc.cluster.local.
 +Вопрос - а как же можно опубликовать именованную реплику в составе Statefullset'а, например через Ingress?? Ведь для этого надо как-то сослаться на сервис, который будет связан с портом на конкретной реплике! \\
 +Все просто - каждый под, управляеый Statefullset'ом имеет уникальну метку (примерно такую - **statefulset.kubernetes.io/pod-name: app-0** ), которую можно использовать в качестве селектора в сервисе:
 +<code>apiVersion: v1
 +kind: Service
 +metadata:
 +  name: app-0
 +spec:
 +  type: LoadBalancer
 +  selector:
 +    statefulset.kubernetes.io/pod-name: app-0
 +  ports:
 +  - protocol: TCP
 +    port: 80
 +    targetPort: 80</code> 
 +
 +====== Как скопировать секрет из одного неймспейса в другой ======
 +  kubectl get secret my-tlssecret --namespace=nginx-ns -o yaml | sed 's/namespace: .*/namespace: default/' | kubectl apply -f -
  • devops/kubernetes.txt
  • Last modified: 2023/11/30 08:03
  • by admin