рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

рдЯрд┐рдкреНрдкрдгреАред рдЕрдиреБрд╡рд╛рджред: рдпрд╣ рдЖрд▓реЗрдЦ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ 8s, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдкрдирд┐рдпреЛрдВ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдирд╛ред рдЗрд╕рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореИрдиреЗрдЬрд░ рдбреЗрдирд┐рдпрд▓ рдкреЛрд▓реЗрдВрд╕рд┐рдХ, K8s рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрджрдо рдЙрдард╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рджреГрд╢реНрдп рдирд┐рд░реНрджреЗрд╢ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

рдЯреАрдПрд▓;рдбреАрдЖрд░: рдпрд╣рд╛рдВ рдПрдХ рдЖрд░реЗрдЦ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рддреИрдирд╛рддреА рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯред рдореВрд▓ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ рдкреАрдбреАрдПрдл ╨╕ рдЪрд┐рддреНрд░ рдХреЗ рдЬреИрд╕реЗ.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдорддреМрд░ рдкрд░ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

  • рддреИрдирд╛рддреА - рдпрд╣ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдиреБрд╕реНрдЦрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкреЙрдбреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рд╕рд░реНрд╡рд┐рд╕ - рдЖрдВрддрд░рд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдЬреЛ рдкреЙрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • рдкреНрд░рд╡реЗрд╢ - рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕реЗрд╡рд╛ рддрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗрдЧрд╛ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдгред

рдпрд╣рд╛рдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

1) рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░реНрд╕ рдХреА рджреЛ рдкрд░рддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реАред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

2) рдЖрдВрддрд░рд┐рдХ рдмреИрд▓реЗрдВрд╕рд░ рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рдХреЛ рдЗрдирдЧреНрд░реЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

3) рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреЙрдбреНрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ (рд╡реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡. рдЗрд╕рдХреЗ рд▓рд┐рдП 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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рдХреНрдпрд╛ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреЛрд░реНрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрдирдореЗрдВ рдЯрдХрд░рд╛рд╡ рди рд╣реЛ?
  • рдХреНрдпрд╛ рд▓реЗрдмрд▓ рдирд╛рдо рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдбрд┐рдмрдЧрд┐рдВрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рддреАрди рдШрдЯрдХ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдЖрдЗрдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реЗрд╡рд╛ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред

рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз

рдЖрдкрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реЗрд╡рд╛рдПрдБ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕реЗрд╡рд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ рдкреЙрдбреНрд╕ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреЙрдбреНрд╕ рдФрд░ рд╕реЗрд╡рд╛рдПрдБ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рддреАрди рдмрд╛рддреЗрдВ:

  1. рдЪрдпрдирдХрд░реНрддрд╛ (selector) рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреЙрдб рд▓реЗрдмрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. targetPort рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП containerPort рдкреЙрдб рдХреЗ рдЕрдВрджрд░ рдХрдВрдЯреЗрдирд░ред
  3. port рд╕реЗрд╡рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ. рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдПрдБ рдПрдХ рд╣реА рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдИрдкреА рдкрддреЗ рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдЖрд▓реЗрдЦреАрдп рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:

1) рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╕реЗрд╡рд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреЙрдб рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреА рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

2) рдкреЙрдб рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ containerPort рдкреЙрдбреНрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд▓рд┐рдП:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

3) рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ port ╨╕ targetPort. рд▓реЗрдХрд┐рди рдХрдВрдЯреЗрдирд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

4)рд╡рд╛рдпрд╛ targetPort. рдпрд╣ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП containerPort.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

5) рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреЛрд░реНрдЯ 3000 рдЦреБрд▓рд╛ рд╣реИред рдлрд┐рд░ рдорд╛рди targetPort рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

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?

рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдкреЙрдб рдХреЗ рд▓реЗрдмрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рджреНрд╡рд╛рд░рд╛ рдкреЙрдбреНрд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдЗрдП рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдиреЗ рд╕рд╣реА рд╕рдВрдкрд╛рджрди рдХрд┐рдпрд╛ рд╣реИред рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ?

рдЖрдк рдирд┐рдореНрди рдЖрджреЗрд╢ рд╕реЗ рдкреЙрдб рд▓реЗрдмрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рд╕реЗрд╡рд╛ред

рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕рд╣реА рд╣реИрдВред

рдпрджрд┐ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реЗрдмрд▓ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдкреЛрд░реНрдЯ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВред

рд╕реЗрд╡рд╛ рдФрд░ рдкреНрд░рд╡реЗрд╢ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдЗрдирдЧреНрд░реЗрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЗрдВрдЧреНрд░реЗрд╕ рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдХреИрд╕реЗ рдвреВрдВрдвреА рдЬрд╛рдП, рдлрд┐рд░ рдкреЙрдб рдХреИрд╕реЗ рдвреВрдВрдвреЗрдВ рдФрд░ рдЙрди рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреИрд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред рдЗрдирдЧреНрд░реЗрд╕ рдирд╛рдо рдФрд░ рдЦреБрд▓реЗ рдкреЛрд░реНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛ рдвреВрдВрдврддрд╛ рд╣реИред

рдЗрдирдЧреНрд░реЗрд╕ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрд▓ рдЦрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:

  1. servicePort Ingress рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП port рд╕реЗрд╡рд╛ рдореЗрдВ;
  2. serviceName рдЗрдирдЧреНрд░реЗрд╕ рдХреЛ рдлрд╝реАрд▓реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП name рд╕реЗрд╡рд╛ рдореЗрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдкреЛрд░реНрдЯ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ:

1) рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реЗрд╡рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд╛рдд рд╕реБрдирддреА рд╣реИ port:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

2) рдЗрдирдЧреНрд░реЗрд╕ рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ servicePort:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

3) рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ (servicePort) рд╣рдореЗрд╢рд╛ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП port рд╕реЗрд╡рд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

4) рдпрджрд┐ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреЛрд░реНрдЯ 80 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ servicePort рдпрд╣ рднреА 80 рдХреЗ рдмрд░рд╛рдмрд░ рдерд╛:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

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: /

рдХреИрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдЗрдирдЧреНрд░реЗрд╕ рдЪрд▓ рд░рд╣реА рд╣реИ рдпрд╛ рдирд╣реАрдВ?

рдЖрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ kubectl port-forward, рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдкреЙрдб рдХрд╛ рдирд╛рдо рдкрддрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

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
Ports:         80/TCP, 443/TCP, 18080/TCP

рдЕрдВрдд рдореЗрдВ, рдкреЙрдб рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

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

рдЕрдм рдЬрдм рднреА рдЖрдк рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреЛрд░реНрдЯ 3000 рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВрдЧреЗ, рддреЛ рдЗрд╕реЗ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдкреЙрдб рдХреЗ рдкреЛрд░реНрдЯ 80 рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░ рдЬрд╛рдХрд░ http://localhost:3000, ╨▓╤Л ╨┤╨╛╨╗╨╢╨╜╤Л ╨▒╤Г╨┤╨╡╤В╨╡ ╤Г╨▓╨╕╨┤╨╡╤В╤М ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г, ╤Б╨╛╨╖╨┤╨░╨╜╨╜╤Г╤О ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╨╡╨╝.

рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢

рдЖрдЗрдП рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реЗ рдкреЛрд░реНрдЯ рдФрд░ рд▓реЗрдмрд▓ рдореЗрд▓ рдЦрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:

  1. рд╕реЗрд╡рд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдкреЙрдб рдХреЗ рд▓реЗрдмрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
  2. targetPort рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП containerPort рдлрд▓реА рдХреЗ рдЕрдВрджрд░ рдХрдВрдЯреЗрдирд░;
  3. port рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдПрдБ рдПрдХ рд╣реА рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдИрдкреА рдкрддреЗ рд╣реИрдВ;
  4. servicePort рдкреНрд░рд╡реЗрд╢ рдХрд╛ рдорд┐рд▓рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП port рд╕реЗрд╡рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ;
  5. рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдо рдлрд╝реАрд▓реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП serviceName рдкреНрд░рд╡реЗрд╢ рдореЗрдВ.

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЬрд╛рдирдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ YAML рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЪреАрдЬреЗрдВ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ?

рдкреЙрдб рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдирд┐рджрд╛рди рдХреЗ рд▓рд┐рдП 3 рдЪрд░рдг

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЕрдкрдиреА рддреИрдирд╛рддреА рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪреВрдБрдХрд┐ K8s рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдиреАрдЪреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рдбреАрдмрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

  1. рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреЙрдбреНрд╕ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░...
  2. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡рд╛ рдкреЙрдбреНрд╕ рдХреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░...
  3. рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрдирдЧреНрд░реЗрд╕ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡:

1) рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рдмрд┐рд▓реНрдХреБрд▓ рдиреАрдЪреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдкреЙрдбреНрд╕ рдореЗрдВ рд╕реНрдЯреЗрдЯрд╕ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ Ready ╨╕ Running:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

2) рдпрджрд┐ рдлрд▓рд┐рдпрд╛рдБ рддреИрдпрд╛рд░ рд╣реИрдВ (Ready), рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡рд╛ рдкреЙрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

3) рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рд╕реЗрд╡рд╛ рдФрд░ рдЗрдирдЧреНрд░реЗрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдЧрд╛рдЗрдб

1. рдлрд▓реА рдХрд╛ рдирд┐рджрд╛рди

╨Т ╨▒╨╛╨╗╤М╤И╨╕╨╜╤Б╤В╨▓╨╡ ╤Б╨╗╤Г╤З╨░╨╡╨▓ ╨┐╤А╨╛╨▒╨╗╨╡╨╝╨░ ╤Б╨▓╤П╨╖╨░╨╜╨░ ╤Б podтАЩ╨╛╨╝. ╨г╨▒╨╡╨┤╨╕╤В╨╡╤Б╤М, ╤З╤В╨╛ podтАЩ╤Л ╨╖╨╜╨░╤З╨░╤В╤Б╤П ╨║╨░╨║ 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 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
  4. kubectl exec -ti <╨╕╨╝╤П pod'╨░> bash рдЖрдкрдХреЛ рдкреЙрдб рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрдорд╛рдВрдб рд╢реЗрд▓ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рдЖрдкрдХреЛ рдХрд┐рд╕реЗ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рдЪ рддреЛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдЗрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЙрдб рд╕рдорд╕реНрдпрд╛рдПрдБ

рдкреЙрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рджреЛ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдФрд░ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпрд╛рдБред

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рддреНрд░реБрдЯрд┐рдпрд╛рдБ:

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

рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпрд╛рдБ:

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

рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрдореЗрдЬрдкреБрд▓рдмреИрдХрдСрдлрд╝

рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреЙрдб рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рддреАрди рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  1. рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо рдЧрд▓рдд рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИ, рдпрд╛ рдЫрд╡рд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ;
  2. рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдореМрдЬреВрдж рдЯреИрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛;
  3. рдЫрд╡рд┐ рдПрдХ рдирд┐рдЬреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдкрд╣рд▓реЗ рджреЛ рдХрд╛рд░рдгреЛрдВ рдХреЛ рдЦрд╝рддреНрдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ - рдмрд╕ рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо рдФрд░ рдЯреИрдЧ рд╕рд╣реА рдХрд░реЗрдВред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реАрдХреНрд░реЗрдЯ рдореЗрдВ рдмрдВрдж рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреЙрдбреНрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

рдХреНрд░реИрд╢ рд▓реВрдк рдмреИрдХ рдСрдл

рдХреНрдпреВрдмрдиреЗрдЯреНрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ CrashLoopBackOff, рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдРрд╕рд╛ рдЖрдорддреМрд░ рдкрд░ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм:

  1. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ;
  2. рдХрдВрдЯреЗрдирд░ рдЧрд╝рд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛;
  3. рд▓рд╛рдЗрд╡рдиреЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХрдИ рдмрд╛рд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд▓реЙрдЧ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

kubectl logs <pod-name> --previous

рдпрд╣ рдХрдВрдЯреЗрдирд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рдЕрд╡рддрд╛рд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

RunContainerError

рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХрдВрдЯреЗрдирд░ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдХреНрд╖рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЧрд▓рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдХреЙрдиреНрдлрд╝рд┐рдЧрдореИрдк рдпрд╛ рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдЬреИрд╕реЗ рдЧреИрд░-рдореМрдЬреВрдж рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕;
  • рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдкрдврд╝рдиреЗ-рд▓рд┐рдЦрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ред

рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдЙрдкрдпреБрдХреНрдд рд╣реИ 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;
  • рд╕реЗрд╡рд╛ рдкреЙрдбреНрд╕ рдореЗрдВ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЕрднреА рднреА рдРрдк рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕рдВрднрд╡рддрдГ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдШрдЯрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрдирдЧреНрд░реЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЖрдк рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╡реЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ serviceName ╨╕ servicePort рд╕реЗрд╡рд╛ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП. рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

kubectl describe ingress <ingress-name>

рдпрджрд┐ рд╕реНрддрдВрдн Backend рдЦрд╛рд▓реА, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреНрд░реБрдЯрд┐ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрджрд┐ рдмреИрдХрдПрдВрдб рдЬрдЧрд╣ рдкрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрднреА рднреА рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдирд┐рдореНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ:

  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдкрд╣реБрдВрдЪ рд╕реЗрдЯрд┐рдВрдЧреНрд╕;
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдПрдХреНрд╕реЗрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред

рдЖрдк рдЗрдирдЧреНрд░реЗрд╕ рдкреЙрдб рд╕реЗ рд╕реАрдзреЗ рдЬреБрдбрд╝рдХрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреЙрдб рдвреВрдВрдвреЗрдВ (рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ):

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 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

  • рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд▓реЗрдХрд░ рд╣реИ. рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рддрдХ рдХреИрд╕реЗ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдЗрдирдЧреНрд░реЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрдирдЧреНрд░реЗрд╕ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреА рдХрдИ рдХрд┐рд╕реНрдореЗрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ Nginx, HAProxy, рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрджрд┐ред (рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рд╣рдорд╛рд░реА рд╕рдореАрдХреНрд╖рд╛ - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджред) рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рдпрдВрддреНрд░рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡реЗрд╢ рдирдЧрдиреЗрдХреНрд╕ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ, рд╣рдордиреЗ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдореЗрдВ рдХреБрдЫ рдпреБрдХреНрддрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рдХреА рд╣реИрдВред

рдЗрдирдЧреНрд░реЗрд╕ Nginx рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛

Ingress-nginx рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХрд╛рд░реА рд╣реИ Kubectl рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди. рдЯреАрдо kubectl ingress-nginx рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  • рд▓реЙрдЧ, рдмреИрдХрдПрдВрдб, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЖрджрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг;
  • рдкреНрд░рд╡реЗрд╢ рд╕реЗ рд╕рдВрдмрдВрдз;
  • рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рдЖрджреЗрд╢ рдЗрд╕рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВрдЧреЗ:

  • kubectl ingress-nginx lint - рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ nginx.conf;
  • kubectl ingress-nginx backend - рдмреИрдХрдПрдВрдб рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕реА рддрд░рд╣)ред kubectl describe ingress <ingress-name>);
  • kubectl ingress-nginx logs - рд▓реЙрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдирдЧреНрд░реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдиреЗрдорд╕реНрдкреЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ --namespace <name>.

рд╕рд╛рд░рд╛рдВрд╢

рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рддреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рдореЗрд╢рд╛ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рдХреА рдУрд░ рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП: рдкреЙрдбреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╕реЗрд╡рд╛ рдФрд░ рдкреНрд░рд╡реЗрд╢ рдХреА рдУрд░ рдмрдврд╝реЗрдВред рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХреЛ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

  • рдирд┐рд╖реНрдХреНрд░рд┐рдп рдиреМрдХрд░рд┐рдпрд╛рдБ рдФрд░ рдХреНрд░реЛрдирдЬреЙрдмреНрд╕;
  • рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯреНрд╕ рдФрд░ рдбреЗрдордирд╕реЗрдЯреНрд╕ред

рдореИрдВ рдЕрдкрдирд╛ рдЖрднрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЧреЗрд░реНрдЧреЗрд▓реА рд░рд┐рд╕реНрдХреЛ, рдбреЗрдирд┐рдпрд▓ рд╡реАрдмреЗрд▓ ╨╕ Charles Christyraj рдмрд╣реБрдореВрд▓реНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдПред

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ