Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revisionBoth sides next revision
devops:kubernetes [2022/03/04 05:11] – [Headless Services для Stafullset] admindevops:kubernetes [2022/03/24 15:20] – [Headless Services для Stafullset] admin
Line 939: Line 939:
 И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\ И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\
 https://www.tigera.io/blog/exposing-statefulsets-in-kubernetes/ 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 -   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