Sobes.tech
Junior

Ի՞նչ տեսակների կոնտեյներներ կան Kubernetes-ում։

sobes.tech AI

Պատասխան AI-ից

ՈՒ Kubernetes-ում չկա "տիպեր" կոնտեյներներ որպես այդպիսին տարբեր կոնտեյներիզացիայի տեխնոլոգիաների իմաստով: Բոլոր Kubernetes-ում գործարկվող կոնտեյներները ստանդարտ կոնտեյներներ են (հաճախ Docker-ի կամ համատեղելի շարժիչների վրա, ինչպիսիք են containerd կամ CRI-O):

Նշված օբյեկտների տեսակները, որոնք կարող են պարունակել կոնտեյներներ Kubernetes-ում, ներառում են՝

  • Pod: Kubernetes-ի ամենափոքր գործարկելի միավորն է: Մի Pod կարող է պարունակել մեկ կամ մի քանի կոնտեյներներ, որոնք միասին օգտագործում են ցանցային տարածք, պահեստային տարածք և ունեն ընդհանուր կյանքի ցիկլ: Սա հիմնական "տիպ" է, որը գործարկում է կոնտեյներներ:
  • Deployment: Օբյեկտ բարձր մակարդակի, որը կառավարում է Pod-ների հավաքականը: Պահպանում է դեկլարատիվ թարմացումներ և սքեյլավորում: Deployment-ը ստեղծում է ReplicaSet, որը հետագայում կառավարում է Pod-ները: Կոնտեյներները սահմանվում են Deployment-ի հղում ունեցող Pod-ի հատուկագծում:
  • StatefulSet: Դիմում Deployment-ի նման, բայց նախատեսված է վիճակային ծրագրերի համար: Հաստատում է կայուն ցանցային անուններ և պահեստային տարածքներ Pod-ների համար: Կոնտեյներները նույնպես սահմանվում են Pod-ի հատուկագծում:
  • DaemonSet: Համոզվում է, որ Pod-ը աշխատում է բոլոր (կամ նշված) հանգույցներում: Օգտագործվում է ծառայությունների կոնտեյներներ գործարկելու համար, ինչպիսիք են լոգերի հավաքիչները կամ մոնիտորինգի գործակալները: Կոնտեյներները սահմանվում են Pod-ի հատուկագծում:
  • Job: Ստեղծում է մեկ կամ մի քանի Pod և ապահովում է նրանց կատարման հաջող ավարտը: Կոնտեյներները սահմանվում են Pod-ի հատուկագծում:
  • CronJob: Ստեղծում է Jobs ժամանակացույցով: Կոնտեյներները սահմանվում են Pod-ի հատուկագծում, կապված Job-ի հետ:

Հիմնական է հասկանալ, որ կոնտեյներն ինքնին սահմանվում է Pod-ի հատուկագծում: Կառավարիչ օբյեկտները (Deployment, StatefulSet և այլն) միայն որոշում են, թե ինչպես պետք է տեղադրվեն, սքեյլավորվեն և կառավարվեն այդ Pod-ները (և, հետևաբար, կոնտեյներները ներսում):

Եթե նկատի ունեք ոչ թե "տիպ" կոնտեյներ ըստ տեխնոլոգիայի, այլ տարբեր տեսակի կոնտեյներներ մեկ Pod-ի ներսում, ապա կարելի է տարբերել՝

  • Application Containers: Հիմնական կոնտեյներներ, որոնք իրականացնում են ծրագրի բիզնես տրամաբանությունը:
  • Init Containers: Կոնտեյներներ, որոնք գործարկվում են հիմնական կոնտեյներների առաջ: Օգտագործվում են նախապատրաստական աշխատանքներ կատարելու համար, ինչպիսիք են տվյալների նախապատրաստումը կամ կոնֆիգուրացիայի կարգավորումը: Դրանք կատարվում են հերթով և պետք է հաջող ավարտվեն, նախքան հիմնական կոնտեյներները սկսվեն:
  • Sidecar Containers: Կոնտեյներներ, որոնք աշխատում են հիմնական կոնտեյներների կողքին և տրամադրում են լրացուցիչ ֆունկցիոնալություն, ինչպիսիք են լոգերի հավաքումը, մոնիտորինգը, ցանցային թրաֆիկի պրոքսիավորումը և այլն:

Նմուշ YAML կոնֆիգուրացիա Pod-ի համար՝ init կոնտեյներ և հիմնական կոնտեյներ:

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  initContainers: # Init կոնտեյներների բաժին
  - name: init-myservice
    image: myregistry/init-service:1.0.0
    command: ["sh", "-c", "echo Initializing... && sleep 5"]
    # Այս կոնտեյներն առաջինը գործարկվելու է և պետք է հաջող ավարտվի
  containers: # Հիմնական կոնտեյներների բաժին
  - name: myapp-container
    image: myregistry/myapp:latest
    ports:
    - containerPort: 80
    # Այս կոնտեյներն գործարկվելու է բոլոր init կոնտեյներների հաջող ավարտից հետո