ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

ื”ืขืจื”. ืชืจื’ื•ื: ืžืืžืจ ื–ื” ื”ื•ื ื—ืœืง ืžื—ื•ืžืจื™ ื”ืคืจื•ื™ืงื˜ ื”ืžืชืคืจืกืžื™ื ื‘ืจืฉื•ืช ื”ืฆื™ื‘ื•ืจ learnk8s, ื”ื“ืจื›ื” ืฉืœ ื—ื‘ืจื•ืช ื•ืžื ื”ืœื™ื ื‘ื•ื“ื“ื™ื ืœืขื‘ื•ื“ื” ืขื Kubernetes. ื‘ื•, ื“ื ื™ืืœ ืคื•ืœื ืฆ'ื™ืง, ืžื ื”ืœืช ืคืจื•ื™ืงื˜ื™ื, ื—ื•ืœืงืช ื”ื ื—ื™ื•ืช ื—ื–ื•ืชื™ื•ืช ืœื’ื‘ื™ ื”ืฆืขื“ื™ื ืฉื™ืฉ ืœื ืงื•ื˜ ื‘ืžืงืจื” ืฉืœ ื‘ืขื™ื•ืช ื›ืœืœื™ื•ืช ืขื ื™ื™ืฉื•ืžื™ื ื”ืคื•ืขืœื™ื ื‘ืืฉื›ื•ืœ K8s.

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

TL;DR: ื”ื ื” ืชืจืฉื™ื ืฉื™ืขื–ื•ืจ ืœืš ืœื ืคื•ืช ื‘ืื’ื™ื ื‘ืคืจื™ืกื” ื‘-Kubernetes:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

ืชืจืฉื™ื ื–ืจื™ืžื” ืœืื™ืชื•ืจ ื•ืชื™ืงื•ืŸ ืฉื’ื™ืื•ืช ื‘ืืฉื›ื•ืœ. ื”ืžืงื•ืจ (ื‘ืื ื’ืœื™ืช) ื–ืžื™ืŸ ื‘ PDF ะธ ื›ืชืžื•ื ื”.

ื‘ืขืช ืคืจื™ืกืช ื™ื™ืฉื•ื ืœ-Kubernetes, ื™ืฉ ื‘ื“ืจืš ื›ืœืœ ืฉืœื•ืฉื” ืจื›ื™ื‘ื™ื ืฉืขืœื™ืš ืœื”ื’ื“ื™ืจ:

  • ืคึผึฐืจึดื™ืกึธื” - ื–ื”ื• ืกื•ื’ ืฉืœ ืžืชื›ื•ืŸ ืœื™ืฆื™ืจืช ืขื•ืชืงื™ื ืฉืœ ื”ืืคืœื™ืงืฆื™ื”, ื”ื ืงืจื ืชืจืžื™ืœื™ื;
  • ืฉืึตืจื•ึผืช - ืžืื–ืŸ ืขื•ืžืกื™ื ืคื ื™ืžื™ ื”ืžื—ืœืง ืชื ื•ืขื” ื‘ื™ืŸ ืชืจืžื™ืœื™ื;
  • Ingress - ืชื™ืื•ืจ ืฉืœ ื”ืื•ืคืŸ ืฉื‘ื• ืชืขื‘ื•ืจ ืชื ื•ืขื” ืžื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ ืœืฉื™ืจื•ืช.

ืœื”ืœืŸ ืชืงืฆื™ืจ ื’ืจืคื™ ืžื”ื™ืจ:

1) ื‘-Kubernetes, ื™ื™ืฉื•ืžื™ื ืžืงื‘ืœื™ื ืชืขื‘ื•ืจื” ืžื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ ื“ืจืš ืฉืชื™ ืฉื›ื‘ื•ืช ืฉืœ ืžืื–ื ื™ ืขื•ืžืกื™ื: ืคื ื™ืžื™ ื•ื—ื™ืฆื•ื ื™.

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

2) ื”ืžืื–ืŸ ื”ืคื ื™ืžื™ ื ืงืจื ืฉื™ืจื•ืช, ื”ื—ื™ืฆื•ื ื™ ื ืงืจื Ingress.

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

3) ื”ืคืจื™ืกื” ื™ื•ืฆืจืช ืคื•ื“ื™ื ื•ืžื ื˜ืจืช ืื•ืชื (ื”ื ืœื ื ื•ืฆืจื™ื ื‘ืื•ืคืŸ ื™ื“ื ื™).

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

ื ื ื™ื— ืฉืืชื” ืจื•ืฆื” ืœืคืจื•ืก ื™ื™ืฉื•ื ืคืฉื•ื˜ ื-ืœื” ืฉืœื•ื ืขื•ืœื. ืชืฆื•ืจืช YAML ืขื‘ื•ืจื• ืชื™ืจืื” ื›ืš:

apiVersion: apps/v1
kind: Deployment # <<<
metadata:
  name: my-deployment
  labels:
    track: canary
spec:
  selector:
    matchLabels:
      any-name: my-app
  template:
    metadata:
      labels:
        any-name: my-app
    spec:
      containers:
      - name: cont1
        image: learnk8s/app:1.0.0
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service # <<<
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    name: app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress # <<<
metadata:
  name: my-ingress
spec:
  rules:
  - http:
    paths:
    - backend:
        serviceName: app
        servicePort: 80
      path: /

ื”ื”ื’ื“ืจื” ื“ื™ ืืจื•ื›ื” ื•ืงืœ ืœื”ืชื‘ืœื‘ืœ ืœื’ื‘ื™ ื”ืื•ืคืŸ ืฉื‘ื• ื”ืจื›ื™ื‘ื™ื ืงืฉื•ืจื™ื ื–ื” ืœื–ื”.

ืœื“ื•ื’ืžื”:

  • ืžืชื™ ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘ื™ืฆื™ืื” 80 ื•ืžืชื™ ื›ื“ืื™ ืœื”ืฉืชืžืฉ ื‘-8080?
  • ื”ืื ืขืœื™ ืœื™ืฆื•ืจ ื™ืฆื™ืื” ื—ื“ืฉื” ืขื‘ื•ืจ ื›ืœ ืฉื™ืจื•ืช ื›ื“ื™ ืฉื”ื ืœื ื™ืชื ื’ืฉื•?
  • ื”ืื ืฉืžื•ืช ื”ืชื•ื•ื™ื•ืช ื—ืฉื•ื‘ื™ื? ื”ืื ื”ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื–ื”ื™ื ื‘ื›ืœ ืžืงื•ื?

ืœืคื ื™ ืฉื ืชืžืงื“ ื‘ื ื™ืคื•ื™ ื‘ืื’ื™ื, ื‘ื•ืื• ื ื–ื›ื•ืจ ื›ื™ืฆื“ ืฉืœื•ืฉืช ื”ืจื›ื™ื‘ื™ื ืงืฉื•ืจื™ื ื–ื” ืœื–ื”. ื‘ื•ืื• ื ืชื—ื™ืœ ืขื ืคืจื™ืกื” ื•ืฉื™ืจื•ืช.

ื”ืงืฉืจ ื‘ื™ืŸ ืคืจื™ืกื” ืœืฉื™ืจื•ืช

ืชืชืคืœืื•, ืื‘ืœ ืคืจื™ืกื” ื•ืฉื™ืจื•ืช ืœื ืงืฉื•ืจื™ื ื‘ืฉื•ื ืฆื•ืจื”. ื‘ืžืงื•ื ื–ืืช, ืฉื™ืจื•ืช ืžืฆื‘ื™ืข ื™ืฉื™ืจื•ืช ืขืœ Pods, ืขื•ืงืฃ ืืช ื”ืคืจื™ืกื”.

ืœืคื™ื›ืš, ืื ื• ืžืชืขื ื™ื™ื ื™ื ื›ื™ืฆื“ ืคื•ื“ื™ื ื•ืฉื™ืจื•ืชื™ื ืงืฉื•ืจื™ื ื–ื” ืœื–ื”. ืฉืœื•ืฉื” ื“ื‘ืจื™ื ืฉื›ื“ืื™ ืœื–ื›ื•ืจ:

  1. ื‘ื•ื—ืจ (selector) ืขื‘ื•ืจ ื”ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ืชืื™ื ืœืคื—ื•ืช ืชื•ื•ื™ืช Pod ืื—ืช.
  2. targetPort ื—ื™ื™ื‘ ืœื”ืชืื™ื ืขื containerPort ืžื™ื›ืœ ื‘ืชื•ืš ื”ืคื•ื“.
  3. port ืฉื™ืจื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ื“ื‘ืจ. ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืื•ืชื” ื™ืฆื™ืื” ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื”ื ื›ืชื•ื‘ื•ืช IP ืฉื•ื ื•ืช.

ื”ืชืจืฉื™ื ื”ื‘ื ืžื™ื™ืฆื’ ืืช ื›ืœ ื”ืืžื•ืจ ืœืขื™ืœ ื‘ืฆื•ืจื” ื’ืจืคื™ืช:

1) ื“ืžื™ื™ื ื• ืฉื”ืฉื™ืจื•ืช ืžืคื ื” ืชื ื•ืขื” ืœืคื•ื“ ืžืกื•ื™ื:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

2) ื‘ืขืช ื™ืฆื™ืจืช ืคื•ื“, ืขืœื™ืš ืœืฆื™ื™ืŸ containerPort ืขื‘ื•ืจ ื›ืœ ืžื™ื›ืœ ื‘ืชืจืžื™ืœื™ื:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

3) ื‘ืขืช ื™ืฆื™ืจืช ืฉื™ืจื•ืช, ืขืœื™ืš ืœืฆื™ื™ืŸ port ะธ targetPort. ืื‘ืœ ื‘ืื™ื–ื” ืžื”ื ืžืฉืชืžืฉื™ื ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœืžื™ื›ืœ?

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

4) ื“ืจืš targetPort. ื–ื” ื—ื™ื™ื‘ ืœื”ืชืื™ื containerPort.

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

5) ื ื ื™ื— ืฉืคื•ืจื˜ 3000 ืคืชื•ื— ื‘ืžื™ื›ืœ ื•ืื– ื”ืขืจืš targetPort ืฆืจื™ืš ืœื”ื™ื•ืช ื–ื”ื”.

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

ื‘ืงื•ื‘ืฅ YAML, ืชื•ื•ื™ื•ืช ื• ports / targetPort ื—ื™ื™ื‘ ืœื”ืชืื™ื:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    track: canary
spec:
  selector:
    matchLabels:
      any-name: my-app
  template:
    metadata:
     labels:  # <<<
        any-name: my-app  # <<<
   spec:
      containers:
      - name: cont1
        image: learnk8s/app:1.0.0
        ports:
       - containerPort: 8080  # <<<
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
  - port: 80
   targetPort: 8080  # <<<
 selector:  # <<<
    any-name: my-app  # <<<

ืžื” ืœื’ื‘ื™ ื”ืชื•ื•ื™ืช track: canary ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืฉืœ ืงื˜ืข ื”ืคืจื™ืกื”? ื–ื” ืฆืจื™ืš ืœื”ืชืื™ื?

ืชื•ื•ื™ืช ื–ื• ื”ื™ื ืกืคืฆื™ืคื™ืช ืœืคืจื™ืกื” ื•ืื™ื ื” ืžืฉืžืฉืช ืืช ื”ืฉื™ืจื•ืช ืœื ื™ืชื•ื‘ ืชื ื•ืขื”. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ื ื™ืชืŸ ืœื”ืกื™ืจ ืื•ืชื• ืื• ืœื”ืงืฆื•ืช ืœื• ืขืจืš ืื—ืจ.

ืžื” ืขื ื”ื‘ื•ืจืจ matchLabels?

ื–ื” ื—ื™ื™ื‘ ืชืžื™ื“ ืœื”ืชืื™ื ืœืชื•ื•ื™ื•ืช ืฉืœ ื”ืคื•ื“, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžืฉืžืฉ ืืช Deployment ืœืžืขืงื‘ ืื—ืจ ืชืจืžื™ืœื™ื.

ื ื ื™ื— ืฉื‘ื™ืฆืขืช ืืช ื”ืขืจื™ื›ื•ืช ื”ื ื›ื•ื ื•ืช. ืื™ืš ื‘ื•ื“ืงื™ื ืื•ืชื?

ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ืืช ืชื•ื•ื™ืช ื”ืคื•ื“ ืขื ื”ืคืงื•ื“ื” ื”ื‘ืื”:

kubectl get pods --show-labels

ืœื—ืœื•ืคื™ืŸ, ืื ืชืจืžื™ืœื™ื ืฉื™ื™ื›ื™ื ืœืžืกืคืจ ื™ื™ืฉื•ืžื™ื:

kubectl get pods --selector any-name=my-app --show-labels

ืฉื any-name=my-app ื”ื•ื ืชื•ื•ื™ืช any-name: my-app.

ื ืฉืืจื• ืงืฉื™ื™ื?

ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ืœืคื•ื“! ืœืฉื ื›ืš ืขืœื™ืš ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” port-forward ื‘- kubectl. ื”ื•ื ืžืืคืฉืจ ืœื”ืชื—ื‘ืจ ืœืฉื™ืจื•ืช ื•ืœื‘ื“ื•ืง ืืช ื”ื—ื™ื‘ื•ืจ.

kubectl port-forward service/<service name> 3000:80

ะ—ะดะตััŒ:

  • service/<service name> - ืฉื ื”ืฉื™ืจื•ืช; ื‘ืžืงืจื” ืฉืœื ื• ื–ื” ื›ืŸ my-service;
  • 3000 ื”ื•ื ื”ื™ืฆื™ืื” ืฉืฆืจื™ืš ืœืคืชื•ื— ื‘ืžื—ืฉื‘;
  • 80 - ื™ืฆื™ืื” ืฉืฆื•ื™ื ื” ื‘ืฉื“ื” port ืฉื™ืจื•ืช.

ืื ื”ื—ื™ื‘ื•ืจ ื ื•ืฆืจ, ืื– ื”ื”ื’ื“ืจื•ืช ื ื›ื•ื ื•ืช.

ืื ื”ื—ื™ื‘ื•ืจ ื ื›ืฉืœ, ื™ืฉ ื‘ืขื™ื” ืขื ื”ืชื•ื•ื™ื•ืช ืื• ืฉื”ื™ืฆื™ืื•ืช ืื™ื ืŸ ืชื•ืืžื•ืช.

ื”ืงืฉืจ ื‘ื™ืŸ ืฉื™ืจื•ืช ืœ-Ingress

ื”ืฉืœื‘ ื”ื‘ื ื‘ืžืชืŸ ื’ื™ืฉื” ืœืืคืœื™ืงืฆื™ื” ื›ื•ืœืœ ื”ื’ื“ืจืช Ingress. Ingress ืฆืจื™ืš ืœื“ืขืช ืื™ืš ืœืžืฆื•ื ืฉื™ืจื•ืช, ื•ืื– ืœืžืฆื•ื ืคื•ื“ื™ื ื•ืœื”ืคื ื•ืช ืืœื™ื”ื ืชื ื•ืขื”. Ingress ืžื•ืฆื ืืช ื”ืฉื™ืจื•ืช ื”ื ื“ืจืฉ ืœืคื™ ืฉื ื•ื™ืฆื™ืื” ืคืชื•ื—ื”.

ื‘ืชื™ืื•ืจ ืฉืœ Ingress ื•-Service ื—ื™ื™ื‘ื™ื ืœื”ืชืื™ื ืฉื ื™ ืคืจืžื˜ืจื™ื:

  1. servicePort ื‘-Ingress ื—ื™ื™ื‘ ืœื”ืชืื™ื ืœืคืจืžื˜ืจ port ื‘ืฉื™ืจื•ืช;
  2. serviceName ื‘-Ingress ื—ื™ื™ื‘ ืœื”ืชืื™ื ืœืฉื“ื” name ื‘ืฉื™ืจื•ืช.

ื”ืชืจืฉื™ื ื”ื‘ื ืžืกื›ื ืืช ื—ื™ื‘ื•ืจื™ ื”ื™ืฆื™ืื”:

1) ื›ืคื™ ืฉืืชื” ื›ื‘ืจ ื™ื•ื“ืข, ืฉื™ืจื•ืช ืžืงืฉื™ื‘ ืœืžืฉื”ื• ืžืกื•ื™ื port:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

2) ืœ-Ingress ื™ืฉ ืคืจืžื˜ืจ ืฉื ืงืจื servicePort:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

3) ืคืจืžื˜ืจ ื–ื” (servicePort) ื—ื™ื™ื‘ ืชืžื™ื“ ืœื”ืชืื™ื port ื‘ื”ื’ื“ืจืช ื”ืฉื™ืจื•ืช:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

4) ืื ืคื•ืจื˜ 80 ืžืฆื•ื™ืŸ ื‘ืฉื™ืจื•ืช, ืื– ื–ื” ื”ื›ืจื—ื™ servicePort ื”ื™ื” ืฉื•ื•ื” ื’ื ืœ-80:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

ื‘ืคื•ืขืœ, ืืชื” ืฆืจื™ืš ืœืฉื™ื ืœื‘ ืœืฉื•ืจื•ืช ื”ื‘ืื•ืช:

apiVersion: v1
kind: Service
metadata:
 name: my-service  # <<<
spec:
  ports:
 - port: 80  # <<<
   targetPort: 8080
  selector:
    any-name: my-app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - http:
    paths:
    - backend:
       serviceName: my-service  # <<<
       servicePort: 80  # <<<
     path: /

ืื™ืš ื‘ื•ื“ืงื™ื ืื Ingress ืคื•ืขืœ?

ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื” ืขื kubectl port-forward, ืื‘ืœ ื‘ืžืงื•ื ื”ืฉื™ืจื•ืช ืืชื” ืฆืจื™ืš ืœื”ืชื—ื‘ืจ ืœื‘ืงืจ Ingress.

ืจืืฉื™ืช ืขืœื™ืš ืœื‘ืจืจ ืืช ืฉื ื”ืคื•ื“ ืขื ื‘ืงืจ Ingress:

kubectl get pods --all-namespaces
NAMESPACE   NAME                              READY STATUS
kube-system coredns-5644d7b6d9-jn7cq          1/1   Running
kube-system etcd-minikube                     1/1   Running
kube-system kube-apiserver-minikube           1/1   Running
kube-system kube-controller-manager-minikube  1/1   Running
kube-system kube-proxy-zvf2h                  1/1   Running
kube-system kube-scheduler-minikube           1/1   Running
kube-system nginx-ingress-controller-6fc5bcc  1/1   Running

ืžืฆื ืืช ื”ืคื•ื“ ืฉืœ Ingress (ื™ื™ืชื›ืŸ ืฉื”ื•ื ื ืžืฆื ื‘ืžืจื—ื‘ ืฉืžื•ืช ืื—ืจ) ื•ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื” describeื›ื“ื™ ืœื’ืœื•ืช ืืช ืžืกืคืจื™ ื”ื™ืฆื™ืื”:

kubectl describe pod nginx-ingress-controller-6fc5bcc 
--namespace kube-system 
 | grep Ports
Ports:         80/TCP, 443/TCP, 18080/TCP

ืœื‘ืกื•ืฃ, ื”ืชื—ื‘ืจ ืœืชืจืžื™ืœ:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

ื›ืขืช ื‘ื›ืœ ืคืขื ืฉืืชื” ืฉื•ืœื— ื‘ืงืฉื” ืœื™ืฆื™ืื” 3000 ื‘ืžื—ืฉื‘ ืฉืœืš, ื”ื™ื ืชื•ืขื‘ืจ ืœื™ืฆื™ืื” 80 ืฉืœ ื”ืคื•ื“ ืขื ื‘ืงืจ Ingress. ื‘ื›ืš ืฉืชืœืš ืœ http://localhost:3000, ืืชื” ืืžื•ืจ ืœืจืื•ืช ืืช ื”ื“ืฃ ืฉื ื•ืฆืจ ืขืœ ื™ื“ื™ ื”ื™ื™ืฉื•ื.

ืกื™ื›ื•ื ื™ืฆื™ืื•ืช

ื‘ื•ืื• ื ื–ื›ื•ืจ ืฉื•ื‘ ืื™ืœื• ื™ืฆื™ืื•ืช ื•ืชื•ื•ื™ื•ืช ื—ื™ื™ื‘ื•ืช ืœื”ืชืื™ื:

  1. ื”ื‘ื•ืจืจ ื‘ื”ื’ื“ืจืช ื”ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ืชืื™ื ืœืชื•ื•ื™ืช ื”ืชืจืžื™ืœ;
  2. targetPort ื‘ื”ื’ื“ืจื” ื”ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ืชืื™ื containerPort ืžื™ื›ืœ ื‘ืชื•ืš ืชืจืžื™ืœ;
  3. port ื‘ื”ื’ื“ืจื” ืฉื™ืจื•ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ื“ื‘ืจ. ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืื•ืชื” ื™ืฆื™ืื” ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื”ื ื›ืชื•ื‘ื•ืช IP ืฉื•ื ื•ืช;
  4. servicePort ื”ื›ื ื™ืกื” ื—ื™ื™ื‘ืช ืœื”ืชืื™ื port ื‘ื”ื’ื“ืจืช ืฉื™ืจื•ืช;
  5. ืฉื ื”ืฉื™ืจื•ืช ื—ื™ื™ื‘ ืœื”ืชืื™ื ืœืฉื“ื” serviceName ื‘-Ingress.

ืœืžืจื‘ื” ื”ืฆืขืจ, ื–ื” ืœื ืžืกืคื™ืง ืœื“ืขืช ืื™ืš ืœื‘ื ื•ืช ื ื›ื•ืŸ ืชืฆื•ืจืช YAML.

ืžื” ืงื•ืจื” ื›ืฉื“ื‘ืจื™ื ืžืฉืชื‘ืฉื™ื?

ื™ื™ืชื›ืŸ ืฉื”ืคื•ื“ ืœื ื™ืชื—ื™ืœ ืื• ืฉื”ื•ื ืขืœื•ืœ ืœืงืจื•ืก.

3 ืฉืœื‘ื™ื ืœืื‘ื—ื•ืŸ ื‘ืขื™ื•ืช ื™ื™ืฉื•ืžื™ื ื‘-Kubernetes

ืœืคื ื™ ืฉืชืชื—ื™ืœ ืœื ืคื•ืช ื‘ืื’ื™ื ื‘ืคืจื™ืกื” ืฉืœืš, ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ืื™ืš Kubernetes ืขื•ื‘ื“.

ืžื›ื™ื•ื•ืŸ ืฉืœื›ืœ ืืคืœื™ืงืฆื™ื” ืฉื”ื•ืจื“ื” ื‘-K8s ื™ืฉ ืฉืœื•ืฉื” ืจื›ื™ื‘ื™ื, ื™ืฉ ืœื‘ืฆืข ื ื™ืคื•ื™ ื‘ืื’ื™ื ื‘ืกื“ืจ ืžืกื•ื™ื, ื”ื—ืœ ืžืœืžื˜ื”.

  1. ืจืืฉื™ืช ืขืœื™ืš ืœื•ื•ื“ื ืฉื”ืชืจืžื™ืœื™ื ืคื•ืขืœื™ื, ื•ืื–...
  2. ื‘ื“ื•ืง ืื ื”ืฉื™ืจื•ืช ืžืกืคืง ืชืขื‘ื•ืจื” ืœืชืจืžื™ืœื™ื, ื•ืœืื—ืจ ืžื›ืŸ...
  3. ื‘ื“ื•ืง ืื Ingress ืžื•ื’ื“ืจ ื›ื”ืœื›ื”.

ื™ื™ืฆื•ื’ ื•ื™ื–ื•ืืœื™:

1) ื›ื“ืื™ ืœื”ืชื—ื™ืœ ืœื—ืคืฉ ื‘ืขื™ื•ืช ืžืœืžื˜ื”. ืชื—ื™ืœื” ื‘ื“ื•ืง ืฉืœืคื•ื“ื™ื ื™ืฉ ืกื˜ื˜ื•ืกื™ื Ready ะธ Running:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

2) ืื ื”ืชืจืžื™ืœื™ื ืžื•ื›ื ื™ื (Ready), ืขืœื™ืš ืœื‘ืจืจ ืื ื”ืฉื™ืจื•ืช ืžืคื™ืฅ ืชืขื‘ื•ืจื” ื‘ื™ืŸ ืชืจืžื™ืœื™ื:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

3) ืœื‘ืกื•ืฃ, ืขืœื™ืš ืœื ืชื— ืืช ื”ืงืฉืจ ื‘ื™ืŸ ื”ืฉื™ืจื•ืช ืœ-Ingress:

ืžื“ืจื™ืš ื—ื–ื•ืชื™ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช Kubernetes

1. ืื‘ื—ื•ืŸ ืชืจืžื™ืœื™ื

ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื”ื‘ืขื™ื” ืงืฉื•ืจื” ืœืชืจืžื™ืœ. ื•ื“ื ื›ื™ ืชืจืžื™ืœื™ื ืžื•ืคื™ืขื™ื ื‘ืชื•ืจ Ready ะธ Running. ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ื–ืืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”:

kubectl get pods
NAME                    READY STATUS            RESTARTS  AGE
app1                    0/1   ImagePullBackOff  0         47h
app2                    0/1   Error             0         47h
app3-76f9fcd46b-xbv4k   1/1   Running           1         47h

ื‘ืคืœื˜ ื”ืคืงื•ื“ื” ืœืžืขืœื”, ื”ืคื•ื“ ื”ืื—ืจื•ืŸ ืจืฉื•ื ื‘ืชื•ืจ Running ะธ Readyืขื ื–ืืช, ื–ื” ืœื ื”ืžืงืจื” ืขื‘ื•ืจ ื”ืฉื ื™ื™ื ื”ืื—ืจื™ื.

ืื™ืš ืœื”ื‘ื™ืŸ ืžื” ื”ืฉืชื‘ืฉ?

ื™ืฉื ืŸ ืืจื‘ืข ืคืงื•ื“ื•ืช ืฉื™ืžื•ืฉื™ื•ืช ืœืื‘ื—ื•ืŸ ืชืจืžื™ืœื™ื:

  1. kubectl logs <ะธะผั pod'ะฐ> ืžืืคืฉืจ ืœืš ืœื—ืœืฅ ื™ื•ืžื ื™ื ืžืžื™ื›ืœื™ื ื‘ืชืจืžื™ืœ;
  2. kubectl describe pod <ะธะผั pod'ะฐ> ืžืืคืฉืจ ืœืš ืœื”ืฆื™ื’ ืจืฉื™ืžื” ืฉืœ ืื™ืจื•ืขื™ื ื”ืงืฉื•ืจื™ื ืœืชืจืžื™ืœ;
  3. kubectl get pod <ะธะผั pod'ะฐ> ืžืืคืฉืจ ืœืš ืœืงื‘ืœ ืืช ืชืฆื•ืจืช YAML ืฉืœ ืคื•ื“ ื”ืžืื•ื—ืกืŸ ื‘-Kubernetes;
  4. kubectl exec -ti <ะธะผั pod'ะฐ> bash ืžืืคืฉืจ ืœืš ืœื”ืคืขื™ืœ ืžืขื˜ืคืช ืคืงื•ื“ื” ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ืช ื‘ืื—ื“ ืžืžื™ื›ืœื™ ื”ืคื•ื“

ื‘ืื™ื–ื” ืžื”ื ื›ื“ืื™ ืœื‘ื—ื•ืจ?

ื”ืขื•ื‘ื“ื” ื”ื™ื ืฉืื™ืŸ ืคืงื•ื“ื” ืื•ื ื™ื‘ืจืกืœื™ืช. ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ืฉื™ืœื•ื‘ ืฉืœ ืืœื”.

ื‘ืขื™ื•ืช ืชืจืžื™ืœื™ื ืื•ืคื™ื™ื ื™ื•ืช

ื™ืฉื ื ืฉื ื™ ืกื•ื’ื™ื ืขื™ืงืจื™ื™ื ืฉืœ ืฉื’ื™ืื•ืช ืคื•ื“: ืฉื’ื™ืื•ืช ื”ืคืขืœื” ื•ืฉื’ื™ืื•ืช ื–ืžืŸ ืจื™ืฆื”.

ืฉื’ื™ืื•ืช ื”ืคืขืœื”:

  • ImagePullBackoff
  • ImageInspectError
  • ErrImagePull
  • ErrImageNeverPull
  • RegistryUnavailable
  • InvalidImageName

ืฉื’ื™ืื•ืช ื–ืžืŸ ืจื™ืฆื”:

  • CrashLoopBackOff
  • RunContainerError
  • KillContainerError
  • VerifyNonRootError
  • RunInitContainerError
  • CreatePodSandboxError
  • ConfigPodSandboxError
  • KillPodSandboxError
  • SetupNetworkError
  • TeardownNetworkError

ืฉื’ื™ืื•ืช ืžืกื•ื™ืžื•ืช ืฉื›ื™ื—ื•ืช ื™ื•ืชืจ ืžืื—ืจื•ืช. ืœื”ืœืŸ ื›ืžื” ืžื”ืฉื’ื™ืื•ืช ื”ื ืคื•ืฆื•ืช ื‘ื™ื•ืชืจ ื•ื›ื™ืฆื“ ืœืชืงืŸ ืื•ืชืŸ.

ImagePullBackOff

ืฉื’ื™ืื” ื–ื• ืžืชืจื—ืฉืช ื›ืืฉืจ Kubernetes ืื™ื ื• ืžืฆืœื™ื— ืœื”ืฉื™ื’ ืชืžื•ื ื” ืขื‘ื•ืจ ืื—ื“ ืžืžื™ื›ืœื™ ื”ืคื•ื“. ืœื”ืœืŸ ืฉืœื•ืฉ ื”ืกื™ื‘ื•ืช ื”ื ืคื•ืฆื•ืช ื‘ื™ื•ืชืจ ืœื›ืš:

  1. ืฉื ื”ืชืžื•ื ื” ืฉื’ื•ื™ - ืœืžืฉืœ, ื˜ืขื™ืช ื‘ื”, ืื• ืฉื”ืชืžื•ื ื” ืœื ืงื™ื™ืžืช;
  2. ืฆื•ื™ืŸ ืชื’ ืœื ืงื™ื™ื ืขื‘ื•ืจ ื”ืชืžื•ื ื”;
  3. ื”ืชืžื•ื ื” ืžืื•ื—ืกื ืช ื‘ืจื™ืฉื•ื ืคืจื˜ื™ ื•ืœ-Kubernetes ืื™ืŸ ื”ืจืฉืื” ืœื’ืฉืช ืืœื™ื”.

ืงืœ ืœื‘ื˜ืœ ืืช ืฉืชื™ ื”ืกื™ื‘ื•ืช ื”ืจืืฉื•ื ื•ืช - ืคืฉื•ื˜ ืชืงืŸ ืืช ืฉื ื”ืชืžื•ื ื” ื•ื”ืชื’. ื‘ืžืงืจื” ืฉืœ ื”ืื—ืจื•ืŸ, ืขืœื™ืš ืœื”ื–ื™ืŸ ืื™ืฉื•ืจื™ื ืขื‘ื•ืจ ื”ืจื™ืฉื•ื ื”ืกื’ื•ืจ ื‘-Secret ื•ืœื”ื•ืกื™ืฃ ืงื™ืฉื•ืจื™ื ืืœื™ื• ื‘ืคื•ื“ื™ื. ื‘ืชื™ืขื•ื“ ืฉืœ Kubernetes ื™ืฉ ื“ื•ื’ืžื” ื›ื™ืฆื“ ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช.

Crash Loop Back Off

Kubenetes ื–ื•ืจืง ืฉื’ื™ืื” CrashLoopBackOff, ืื ื”ืžื™ื›ืœ ืื™ื ื• ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ. ื–ื” ืงื•ืจื” ื‘ื“ืจืš ื›ืœืœ ื›ืืฉืจ:

  1. ื™ืฉ ื‘ืื’ ื‘ืืคืœื™ืงืฆื™ื” ืฉืžื•ื ืข ืžืžื ื• ืœื”ืคืขื™ืœ;
  2. ืžื›ื•ืœื” ืžื•ื’ื“ืจ ื‘ืฆื•ืจื” ืฉื’ื•ื™ื”;
  3. ืžื‘ื—ืŸ Liveness ื ื›ืฉืœ ื™ื•ืชืจ ืžื“ื™ ืคืขืžื™ื.

ืขืœื™ืš ืœื ืกื•ืช ืœื”ื’ื™ืข ืืœ ื”ื™ื•ืžื ื™ื ืžื”ืžื™ื›ืœ ื›ื“ื™ ืœื’ืœื•ืช ืืช ื”ืกื™ื‘ื” ืœื›ื™ืฉืœื•ืŸ ืฉืœื•. ืื ืงืฉื” ืœื’ืฉืช ืœื™ื•ืžื ื™ื ื‘ื’ืœืœ ืฉื”ืžื›ื•ืœื” ืžื•ืคืขืœ ืžื—ื“ืฉ ืžื”ืจ ืžื“ื™, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” ื”ื‘ืื”:

kubectl logs <pod-name> --previous

ื”ื•ื ืžืฆื™ื’ ื”ื•ื“ืขื•ืช ืฉื’ื™ืื” ืžื”ื’ืœื’ื•ืœ ื”ืงื•ื“ื ืฉืœ ื”ืžื›ื•ืœื”.

RunContainerError

ืฉื’ื™ืื” ื–ื• ืžืชืจื—ืฉืช ื›ืืฉืจ ื”ืžื™ื›ืœ ืœื ืžืฆืœื™ื— ืœื”ืชื—ื™ืœ. ื–ื” ืžืชืื™ื ืœืจื’ืข ืฉืœืคื ื™ ื”ืคืขืœืช ื”ืืคืœื™ืงืฆื™ื”. ื–ื” ื ื’ืจื ื‘ื“ืจืš ื›ืœืœ ืขืœ ื™ื“ื™ ื”ื’ื“ืจื•ืช ืฉื’ื•ื™ื•ืช, ืœืžืฉืœ:

  • ื ื™ืกื™ื•ืŸ ืœื”ืขืœื•ืช ืืžืฆืขื™ ืื—ืกื•ืŸ ืœื ืงื™ื™ื ื›ื’ื•ืŸ ConfigMap ืื• Secrets;
  • ื ื™ืกื™ื•ืŸ ืœื”ืขืœื•ืช ืืžืฆืขื™ ืื—ืกื•ืŸ ืœืงืจื™ืื” ื‘ืœื‘ื“ ื›ืงืจื™ืื”-ื›ืชื™ื‘ื”.

ื”ืฆื•ื•ืช ืžืชืื™ื ื”ื™ื˜ื‘ ืœื ื™ืชื•ื— ื˜ืขื•ื™ื•ืช ื›ืืœื” kubectl describe pod <pod-name>.

ื”ืชืจืžื™ืœื™ื ื ืžืฆืื™ื ื‘ืžืฆื‘ ื”ืžืชื ื”

ืœืื—ืจ ื”ื™ืฆื™ืจื”, ื”ืชืจืžื™ืœ ื ืฉืืจ ื‘ืžืฆื‘ Pending.

ืœืžื” ื–ื” ืงื•ืจื”?

ืœื”ืœืŸ ื”ืกื™ื‘ื•ืช ื”ืืคืฉืจื™ื•ืช (ืื ื™ ืžื ื™ื— ืฉื”ืžืชื–ืžืŸ ืขื•ื‘ื“ ื‘ืกื“ืจ):

  1. ืœืืฉื›ื•ืœ ืื™ืŸ ืžืกืคื™ืง ืžืฉืื‘ื™ื, ื›ื’ื•ืŸ ื›ื•ื— ืขื™ื‘ื•ื“ ื•ื–ื™ื›ืจื•ืŸ, ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืคื•ื“.
  2. ื”ืื•ื‘ื™ื™ืงื˜ ืžื•ืชืงืŸ ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ืžืชืื™ื ResourceQuota ื•ื™ืฆื™ืจืช ืคื•ื“ ืชื’ืจื•ื ืœืžืจื—ื‘ ื”ืฉืžื•ืช ืœื—ืจื•ื’ ืžื”ืžื›ืกื”.
  3. ื”ืคื•ื“ ื—ื™ื™ื‘ ืœื”ืžืชื ื” PersistentVolumeClaim.

ื‘ืžืงืจื” ื–ื”, ืžื•ืžืœืฅ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” kubectl describe ื•ืชื‘ื“ื•ืง ืืช ื”ืกืขื™ืฃ Events:

kubectl describe pod <pod name>

ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื•ืช ื”ืงืฉื•ืจื•ืช ืœ ResourceQuotas, ืžื•ืžืœืฅ ืœื”ืฆื™ื’ ืืช ื™ื•ืžื ื™ ื”ืืฉื›ื•ืœ ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”

kubectl get events --sort-by=.metadata.creationTimestamp

ื”ืชืจืžื™ืœื™ื ืื™ื ื ืžื•ื›ื ื™ื

ืื ื”ืคื•ื“ ืžื•ืคื™ืข ื‘ืชื•ืจ Running, ืื‘ืœ ื”ื•ื ืœื ื‘ืžืฆื‘ Ready, ืคื™ืจื•ืฉื• ื‘ื“ื™ืงืช ืžื•ื›ื ื•ืชื• (ื‘ื“ื™ืงืช ืžื•ื›ื ื•ืช) ื ื›ืฉืœ.

ื›ืืฉืจ ื–ื” ืงื•ืจื”, ื”ืคื•ื“ ืœื ืžืชื—ื‘ืจ ืœืฉื™ืจื•ืช ื•ืœื ื–ื•ืจืžืช ืืœื™ื• ืชืขื‘ื•ืจื”. ื›ื™ืฉืœื•ืŸ ื‘ื“ื™ืงืช ื”ืžื•ื›ื ื•ืช ื ื’ืจื ืžื‘ืขื™ื•ืช ื‘ืืคืœื™ืงืฆื™ื”. ื‘ืžืงืจื” ื–ื”, ื›ื“ื™ ืœืžืฆื•ื ืืช ื”ืฉื’ื™ืื”, ืขืœื™ืš ืœื ืชื— ืืช ื”ืกืขื™ืฃ Events ื‘ืคืœื˜ ื”ืคืงื•ื“ื” kubectl describe.

2. ืื‘ื—ื•ืŸ ืฉื™ืจื•ืช

ืื ืชืจืžื™ืœื™ื ืžื•ืคื™ืขื™ื ื‘ืชื•ืจ Running ะธ Ready, ืืš ืขื“ื™ื™ืŸ ืื™ืŸ ืชื’ื•ื‘ื” ืžื”ืืคืœื™ืงืฆื™ื”, ืขืœื™ืš ืœื‘ื“ื•ืง ืืช ื”ื’ื“ืจื•ืช ื”ืฉื™ืจื•ืช.

ื”ืฉื™ืจื•ืชื™ื ืื—ืจืื™ื ืœื ื™ืชื•ื‘ ืชื ื•ืขื” ืœืชืจืžื™ืœื™ื ื‘ื”ืชืื ืœืชื•ื•ื™ื•ืช ืฉืœื”ื. ืœื›ืŸ, ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืขืœื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื‘ื“ื•ืง ื›ืžื” ืคื•ื“ื™ื ืขื•ื‘ื“ื™ื ืขื ื”ืฉื™ืจื•ืช. ืœืฉื ื›ืš, ืชื•ื›ืœ ืœื‘ื“ื•ืง ืืช ื ืงื•ื“ื•ืช ื”ืงืฆื” ื‘ืฉื™ืจื•ืช:

kubectl describe service <service-name> | grep Endpoints

ื ืงื•ื“ืช ืงืฆื” ื”ื™ื ืฆืžื“ ืขืจื›ื™ื ืฉืœ ื”ื˜ื•ืคืก <IP-ะฐะดั€ะตั:ะฟะพั€ั‚>, ื•ืœืคื—ื•ืช ื–ื•ื’ ืื—ื“ ื›ื–ื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืงื™ื™ื ื‘ืคืœื˜ (ื›ืœื•ืžืจ, ืœืคื—ื•ืช ืคื•ื“ ืื—ื“ ืขื•ื‘ื“ ืขื ื”ืฉื™ืจื•ืช).

ืื ืกืขื™ืฃ Endpoins ืจื™ืง, ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืืคืฉืจื™ื•ืช:

  1. ืื™ืŸ ืชืจืžื™ืœื™ื ืขื ื”ืชื•ื•ื™ืช ื”ื ื›ื•ื ื” (ืจืžื–: ื‘ื“ื•ืง ืื ืžืจื—ื‘ ื”ืฉืžื•ืช ื ื‘ื—ืจ ื›ื”ืœื›ื”);
  2. ื™ืฉื ื” ืฉื’ื™ืื” ื‘ืชื•ื•ื™ื•ืช ื”ืฉื™ืจื•ืช ื‘ื‘ื•ืจืจ.

ืื ืืชื” ืจื•ืื” ืจืฉื™ืžื” ืฉืœ ื ืงื•ื“ื•ืช ืงืฆื” ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื™ื›ื•ืœ ืœื’ืฉืช ืœื™ื™ืฉื•ื, ื”ืืฉื ื”ืกื‘ื™ืจ ื”ื•ื ื‘ืื’ ื‘ targetPort ื‘ืชื™ืื•ืจ ื”ืฉื™ืจื•ืช.

ืื™ืš ื‘ื•ื“ืงื™ื ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืฉื™ืจื•ืช?

ืœืœื ืงืฉืจ ืœืกื•ื’ ื”ืฉื™ืจื•ืช, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” kubectl port-forward ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืืœื™ื•:

kubectl port-forward service/<service-name> 3000:80

ะ—ะดะตััŒ:

  • <service-name> - ืฉื ื”ืฉื™ืจื•ืช;
  • 3000 ื”ื•ื ื”ื™ืฆื™ืื” ืฉืืชื” ืคื•ืชื— ื‘ืžื—ืฉื‘;
  • 80 - ื™ืฆื™ืื” ื‘ืฆื“ ื”ืฉื™ืจื•ืช.

3. ืื‘ื—ื•ืŸ ื›ื ื™ืกื”

ืื ืงืจืืช ืขื“ ื›ืืŸ, ืื–:

  • ืชืจืžื™ืœื™ื ืžื•ืคื™ืขื™ื ื‘ืชื•ืจ Running ะธ Ready;
  • ื”ืฉื™ืจื•ืช ืžืคื™ืฅ ื‘ื”ืฆืœื—ื” ืชืขื‘ื•ืจื” ื‘ื™ืŸ ืคื•ื“ื™ื.

ืขื ื–ืืช, ืืชื” ืขื“ื™ื™ืŸ ืœื ื™ื›ื•ืœ ืœื”ื’ื™ืข ืœืืคืœื™ืงืฆื™ื”.

ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื‘ืงืจ Ingress ืื™ื ื• ืžื•ื’ื“ืจ ื›ื”ืœื›ื”. ืžื›ื™ื•ื•ืŸ ืฉื‘ืงืจ Ingress ื”ื•ื ืจื›ื™ื‘ ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ื‘ืืฉื›ื•ืœ, ืงื™ื™ืžื•ืช ืฉื™ื˜ื•ืช ื ื™ืคื•ื™ ื‘ืื’ื™ื ืฉื•ื ื•ืช ื‘ื”ืชืื ืœืกื•ื’ ืฉืœื•.

ืื‘ืœ ืœืคื ื™ ืฉืชืคื ื” ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ื ืžื™ื•ื—ื“ื™ื ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช Ingress, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืžืฉื”ื• ืžืื•ื“ ืคืฉื•ื˜. ืฉื™ืžื•ืฉื™ื ื‘-Ingress serviceName ะธ servicePort ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืœืฉื™ืจื•ืช. ืืชื” ืฆืจื™ืš ืœื‘ื“ื•ืง ืื ื”ื ืžื•ื’ื“ืจื™ื ื›ื”ืœื›ื”. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”:

kubectl describe ingress <ingress-name>

ืื ืขืžื•ื“ื” Backend ืจื™ืง, ื™ืฉ ืกื‘ื™ืจื•ืช ื’ื‘ื•ื”ื” ืœืฉื’ื™ืืช ืชืฆื•ืจื”. ืื ื”ืงืฆื” ื”ืื—ื•ืจื™ ื ืžืฆื ื‘ืžืงื•ื, ืืš ื”ื™ื™ืฉื•ื ืขื“ื™ื™ืŸ ืื™ื ื• ื ื’ื™ืฉ, ื™ื™ืชื›ืŸ ืฉื”ื‘ืขื™ื” ืงืฉื•ืจื” ืœ:

  • ื”ื’ื“ืจื•ืช ื ื’ื™ืฉื•ืช ื›ื ื™ืกื” ืžื”ืื™ื ื˜ืจื ื˜ ื”ืฆื™ื‘ื•ืจื™;
  • ื”ื’ื“ืจื•ืช ื ื’ื™ืฉื•ืช ืœืืฉื›ื•ืœ ืžื”ืื™ื ื˜ืจื ื˜ ื”ืฆื™ื‘ื•ืจื™.

ืืชื” ื™ื›ื•ืœ ืœื–ื”ื•ืช ื‘ืขื™ื•ืช ื‘ืชืฉืชื™ืช ืขืœ ื™ื“ื™ ื—ื™ื‘ื•ืจ ื™ืฉื™ืจื•ืช ืœืคื•ื“ Ingress. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืžืฆื ืชื—ื™ืœื” ืืช ื”ืคื•ื“ ืฉืœ Ingress Controller (ื™ื™ืชื›ืŸ ืฉื”ื•ื ื ืžืฆื ื‘ืžืจื—ื‘ ืฉืžื•ืช ืื—ืจ):

kubectl get pods --all-namespaces
NAMESPACE   NAME                              READY STATUS
kube-system coredns-5644d7b6d9-jn7cq          1/1   Running
kube-system etcd-minikube                     1/1   Running
kube-system kube-apiserver-minikube           1/1   Running
kube-system kube-controller-manager-minikube  1/1   Running
kube-system kube-proxy-zvf2h                  1/1   Running
kube-system kube-scheduler-minikube           1/1   Running
kube-system nginx-ingress-controller-6fc5bcc  1/1   Running

ื”ืฉืชืžืฉ ื‘ืคืงื•ื“ื” describeื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ื™ืฆื™ืื”:

kubectl describe pod nginx-ingress-controller-6fc5bcc
--namespace kube-system 
 | grep Ports

ืœื‘ืกื•ืฃ, ื”ืชื—ื‘ืจ ืœืชืจืžื™ืœ:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

ื›ืขืช ื›ืœ ื”ื‘ืงืฉื•ืช ืœื™ืฆื™ืื” 3000 ื‘ืžื—ืฉื‘ ื™ื•ืคื ื• ืœื™ืฆื™ืื” 80 ืฉืœ ื”ืคื•ื“.

ื–ื” ืขื•ื‘ื“ ืขื›ืฉื™ื•?

  • ืื ื›ืŸ, ืื– ื”ื‘ืขื™ื” ื”ื™ื ื‘ืชืฉืชื™ืช. ื™ืฉ ืฆื•ืจืš ืœื‘ืจืจ ื›ื™ืฆื“ ื‘ื“ื™ื•ืง ื”ืชื ื•ืขื” ืžื ื•ืชื‘ืช ืœืืฉื›ื•ืœ.
  • ืื ืœื, ืื– ื”ื‘ืขื™ื” ื”ื™ื ื‘ื‘ืงืจ Ingress.

ืื ืื™ื ืš ืžืฆืœื™ื— ืœื’ืจื•ื ืœื‘ืงืจ Ingress ืœืขื‘ื•ื“, ืชืฆื˜ืจืš ืœื‘ืฆืข ื ื™ืคื•ื™ ื‘ืื’ื™ื.

ื™ืฉื ื ืกื•ื’ื™ื ืจื‘ื™ื ืฉืœ ื‘ืงืจื™ Ingress. ื”ืคื•ืคื•ืœืจื™ื™ื ื‘ื™ื•ืชืจ ื”ื Nginx, HAProxy, Traefik ื•ื›ื•'. (ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ืคืชืจื•ื ื•ืช ืงื™ื™ืžื™ื, ืจืื” ื”ืกืงื™ืจื” ืฉืœื ื• - ืžืฉื•ืขืจ. ืชืจื’ื•ื) ืขืœื™ืš ืœืขื™ื™ืŸ ื‘ืžื“ืจื™ืš ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช ื‘ืชื™ืขื•ื“ ื”ื‘ืงืจ ื”ืจืœื•ื•ื ื˜ื™. ื‘ื’ืœืœ ื” Ingress Nginx ื”ื•ื ื‘ืงืจ ื”-Ingress ื”ืคื•ืคื•ืœืจื™ ื‘ื™ื•ืชืจ, ื›ืœืœื ื• ื›ืžื” ื˜ื™ืคื™ื ื‘ืžืืžืจ ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช ื”ืงืฉื•ืจื•ืช ืืœื™ื•.

ืื™ืชื•ืจ ื‘ืื’ื™ื ื‘ื‘ืงืจ Ingress Nginx

ืœืคืจื•ื™ืงื˜ Ingress-nginx ื™ืฉ ื’ื•ืจื ืจืฉืžื™ ืชื•ืกืฃ ืขื‘ื•ืจ kubectl. ืงึฐื‘ื•ึผืฆึธื” kubectl ingress-nginx ื™ื›ื•ืœ ืœืฉืžืฉ ืขื‘ื•ืจ:

  • ื ื™ืชื•ื— ืฉืœ ื™ื•ืžื ื™ื, backends, ืื™ืฉื•ืจื™ื ื•ื›ื•';
  • ืงืฉืจื™ื ืœ-Ingress;
  • ืœื•ืžื“ ืืช ื”ืชืฆื•ืจื” ื”ื ื•ื›ื—ื™ืช.

ืฉืœื•ืฉ ื”ืคืงื•ื“ื•ืช ื”ื‘ืื•ืช ื™ืขื–ืจื• ืœืš ื‘ื›ืš:

  • kubectl ingress-nginx lint - ืฆ'ืงื™ื nginx.conf;
  • kubectl ingress-nginx backend - ื—ื•ืงืจ ืืช ื”ืงืฆื” ื”ืื—ื•ืจื™ (ื‘ื“ื•ืžื” ืœ kubectl describe ingress <ingress-name>);
  • kubectl ingress-nginx logs - ื‘ื•ื“ืง ืืช ื”ื™ื•ืžื ื™ื.

ืฉื™ื ืœื‘ ืฉื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื ื™ื™ืชื›ืŸ ืฉื™ื”ื™ื” ืขืœื™ืš ืœืฆื™ื™ืŸ ืืช ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื ื›ื•ืŸ ืขื‘ื•ืจ ื‘ืงืจ Ingress ื‘ืืžืฆืขื•ืช ื”ื“ื’ืœ --namespace <name>.

ืชืงืฆื™ืจ

ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืฉืœ Kubernetes ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืืชื’ืจ ืื ืื™ื ืš ื™ื•ื“ืข ืžืื™ืคื” ืœื”ืชื—ื™ืœ. ืชืžื™ื“ ื›ื“ืื™ ืœื’ืฉืช ืœื‘ืขื™ื” ืžืœืžื˜ื” ืœืžืขืœื”: ื”ืชื—ืœ ืขื ืชืจืžื™ืœื™ื, ื•ืœืื—ืจ ืžื›ืŸ ื”ืžืฉืš ืœืฉื™ืจื•ืช ื•ืœ-Ingress. ื ื™ืชืŸ ืœื™ื™ืฉื ืืช ื˜ื›ื ื™ืงื•ืช ื ื™ืคื•ื™ ื”ื‘ืื’ื™ื ื”ืžืชื•ืืจื•ืช ื‘ืžืืžืจ ื–ื” ืขืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืื—ืจื™ื, ื›ื’ื•ืŸ:

  • ืžืฉืจื•ืช ืกืจืง ื•-CronJobs;
  • StatefulSets ื•-DaemonSets.

ืื ื™ ืžื‘ื™ืข ืืช ืชื•ื“ืชื™ ื’ืจื’ืœื™ ืจื™ืกืงื•, ื“ื ื™ืืœ ื•ื™ื™ื‘ืœ ะธ ืฆ'ืจืœืก ืงืจื™ืกื˜ื™ืจืื’' ืœื”ืขืจื•ืช ื•ืชื•ืกืคื•ืช ื—ืฉื•ื‘ื•ืช.

ื .ื‘ ืžื”ืžืชืจื’ื

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”