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/03/04 05:11] – [Headless Services для Stafullset] admindevops:kubernetes [2022/03/25 06:54] – [Headless Services для Stafullset] admin
Line 938: Line 938:
 ====== Headless Services для Stafullset ====== ====== Headless Services для Stafullset ======
 И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\ И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\
-https://www.tigera.io/blog/exposing-statefulsets-in-kubernetes/+https://www.tigera.io/blog/exposing-statefulsets-in-kubernetes/ \\ 
 + 
 +Обычно сервисы используются в 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