ื”ื™ื›ืจื•ืช ืขื Kubernetes CCM (ืžื ื”ืœ ื‘ืงืจ ืขื ืŸ) ืขื‘ื•ืจ Yandex.Cloud

ื”ื™ื›ืจื•ืช ืขื Kubernetes CCM (ืžื ื”ืœ ื‘ืงืจ ืขื ืŸ) ืขื‘ื•ืจ Yandex.Cloud

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

ืžื‘ื•ื

ืœืžื” ื–ื”?

ื”ืžื ื™ืขื™ื ืฉื”ื ื™ืขื• ืื•ืชื ื• ืœืคืชื— CCM ืขื‘ื•ืจ Yandex.Cloud ืขื•ืœื™ื ื‘ืงื ื” ืื—ื“ ืขื ืืœื” ืฉื›ื‘ืจ ืžืชื•ืืจื™ื ื‘- ื”ึทื›ืจึธื–ึธื” ืžื ื”ืœื™ ื”ืชืงื ื™ื ืฉืœ CSI. ืื ื• ืžืชื—ื–ืงื™ื ืืฉื›ื•ืœื•ืช Kubernetes ืจื‘ื™ื ืžืกืคืงื™ ืขื ืŸ ืฉื•ื ื™ื, ืขื‘ื•ืจื ืื ื• ืžืฉืชืžืฉื™ื ื‘ื›ืœื™ ื™ื—ื™ื“. ื”ื•ื ืžื™ื™ืฉื ื”ืจื‘ื” ื ื•ื—ื•ืช "ืขื•ืงืคืช" ืืช ื”ืคืชืจื•ื ื•ืช ื”ืžื ื•ื”ืœื™ื ืฉืœ ืกืคืงื™ื ืืœื”. ื›ืŸ, ื™ืฉ ืœื ื• ืžืงืจื” ื•ืฆืจื›ื™ื ืกืคืฆื™ืคื™ื™ื ืœืžื“ื™, ืื‘ืœ ื”ืคื™ืชื•ื—ื™ื ืฉื ื•ืฆืจื• ื‘ื’ืœืœื ืขืฉื•ื™ื™ื ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ื™ื ืœืžืฉืชืžืฉื™ื ืื—ืจื™ื.

ืžื” ื–ื” ื‘ื“ื™ื•ืง CCM?

ื‘ื“ืจืš ื›ืœืœ, ืื ื• ืžื›ื™ื ื™ื ืืช ื”ืกื‘ื™ื‘ื” ืกื‘ื™ื‘ื ื• ืœืืฉื›ื•ืœ ืžื‘ื—ื•ืฅ - ืœืžืฉืœ, ื‘ืืžืฆืขื•ืช Terraform. ืื‘ืœ ืœืคืขืžื™ื ื™ืฉ ืฆื•ืจืš ืœื ื”ืœ ืืช ืกื‘ื™ื‘ืช ื”ืขื ืŸ ืฉืกื‘ื™ื‘ื ื• ืžืืฉื›ื•ืœ. ืืคืฉืจื•ืช ื–ื• ื ื™ืชื ืช, ื•ื”ื™ื ืžื™ื•ืฉืžืช CCM.

ื‘ืื•ืคืŸ ืกืคืฆื™ืคื™, Cloud Controller Manager ืžืกืคืง ื—ืžื™ืฉื” ืกื•ื’ื™ื ืขื™ืงืจื™ื™ื ืฉืœ ืื™ื ื˜ืจืืงืฆื™ื”:

  1. ืžืงืจื™ื - ืžื™ื™ืฉืžืช ืงืฉืจ ืฉืœ 1:1 ื‘ื™ืŸ ืื•ื‘ื™ื™ืงื˜ ืฆื•ืžืช ื‘-Kubernetes (Node) ื•ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืกืคืง ื”ืขื ืŸ. ื‘ืฉื‘ื™ืœ ื–ื” ืื ื—ื ื•:
    • ืœืžืœื ืืช ื”ืฉื“ื” spec.providerID ื‘ื—ืคืฅ Node. ืœื“ื•ื’ืžื”, ืขื‘ื•ืจ OpenStack CCM ืœืฉื“ื” ื–ื” ื™ืฉ ืืช ื”ืคื•ืจืžื˜ ื”ื‘ื: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ืฉื ืฉืœ ืกืคืง ื”ืขื ืŸ ื•ืืช ื”-UUID ื”ื™ื™ื—ื•ื“ื™ ืฉืœ ื”ืฉืจืช (ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘-OpenStack) ืฉืœ ื”ืื•ื‘ื™ื™ืงื˜;
    • ืžึทืฉืืœึดื™ื nodeInfo ื‘ื—ืคืฅ Node ืžื™ื“ืข ืขืœ ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช. ืœื“ื•ื’ืžื”, ืื ื• ืžืฆื™ื™ื ื™ื ืกื•ื’ ืžื•ืคืข ื‘-AWS;
    • ืื ื• ื‘ื•ื“ืงื™ื ื ื•ื›ื—ื•ืช ืฉืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืขื ืŸ. ืœื“ื•ื’ืžื”, ืื ื—ืคืฅ Node ื ื›ื ืกื” ืœืžื“ื™ื ื” NotReady, ืชื•ื›ืœ ืœื‘ื“ื•ืง ืื ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืงื™ื™ืžืช ื‘ื›ืœืœ ื‘ืกืคืง ื”ืขื ืŸ ืขืœ ื™ื“ื™ providerID. ืื ื”ื•ื ืœื ืงื™ื™ื, ืžื—ืง ืืช ื”ืื•ื‘ื™ื™ืงื˜ Node, ืฉืื—ืจืช ื™ื™ืฉืืจ ื‘ืืฉื›ื•ืœ ืœื ืฆื—;
  2. ืื–ื•ืจื™ื โ€“ ืžื’ื“ื™ืจ ืืช ืชื—ื•ื ื”ื›ืฉืœ ืขื‘ื•ืจ ื”ืื•ื‘ื™ื™ืงื˜ Node, ื›ืš ืฉื”ืžืชื–ืžืŸ ื™ื•ื›ืœ ืœื‘ื—ื•ืจ ืฆื•ืžืช ืขื‘ื•ืจ ื”ืคื•ื“ ืœืคื™ ื”ืื–ื•ืจื™ื ื•ื”ืื–ื•ืจื™ื ื‘ืกืคืง ื”ืขื ืŸ;
  3. LoadBalancer - ื‘ืขืช ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ Service ืขื ืกื•ื’ LoadBalancer ื™ื•ืฆืจ ืžืขื™ืŸ ืื™ื–ื•ืŸ ืฉื™ื›ื•ื•ืŸ ืชื ื•ืขื” ืžื‘ื—ื•ืฅ ืœืฆืžืชื™ ื”ืืฉื›ื•ืœื•ืช. ืœื“ื•ื’ืžื”, ื‘- Yandex.Cloud ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ NetworkLoadBalancer ะธ TargetGroup ืœืžื˜ืจื•ืช ืืœื•;
  4. ืžืกืœื•ืœ โ€“ ื‘ื•ื ื” ืจืฉืช ื‘ื™ืŸ ืฆืžืชื™ื, ื›ื™ ืขืœ ืคื™ ื“ืจื™ืฉื•ืช Kubernetes, ืœื›ืœ ืคื•ื“ ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื›ืชื•ื‘ืช IP ืžืฉืœื• ื•ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ื’ื™ืข ืœื›ืœ ืคื•ื“ ืื—ืจ. ืœืžื˜ืจื•ืช ืืœื•, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืจืฉืช ืฉื›ื‘ืช-ืขืœ (VXLAN, GENEVE) ืื• ืœื”ื’ื“ื™ืจ ื˜ื‘ืœืช ื ื™ืชื•ื‘ ื™ืฉื™ืจื•ืช ื‘ืจืฉืช ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช ืฉืœ ืกืคืง ื”ืขื ืŸ:

    ื”ื™ื›ืจื•ืช ืขื Kubernetes CCM (ืžื ื”ืœ ื‘ืงืจ ืขื ืŸ) ืขื‘ื•ืจ Yandex.Cloud

  5. ืชื›ื•ืœื” - ืžืืคืฉืจ ื”ื–ืžื ื” ื“ื™ื ืžื™ืช ืฉืœ PV ื‘ืืžืฆืขื•ืช PVC ื•-SC. ื‘ืชื—ื™ืœื”, ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ื”ื™ื™ืชื” ื—ืœืง ืž-CCM, ืืš ื‘ืฉืœ ืžื•ืจื›ื‘ื•ืชื” ื”ืจื‘ื” ื”ื™ื ื”ื•ืขื‘ืจื” ืœืคืจื•ื™ืงื˜ ื ืคืจื“, Container Storage Interface (CSI). ื“ื™ื‘ืจื ื• ืขืœ CSI ื™ื•ืชืจ ืžืคืขื ืื—ืช ะฟะธัะฐะปะธ ื•ื›ืคื™ ืฉื›ื‘ืจ ื”ื•ื–ื›ืจ, ืืคื™ืœื• ืžึฐืฉืื•ึผื—ืจึธืจ ืžื ื”ืœ ื”ืชืงืŸ CSI.

ื‘ืขื‘ืจ, ื›ืœ ื”ืงื•ื“ ื”ืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืขื ืŸ ื”ื™ื” ืžืžื•ืงื ื‘ืžืื’ืจ Git ื”ืจืืฉื™ ืฉืœ ืคืจื•ื™ืงื˜ Kubernetes ื‘ื›ืชื•ื‘ืช k8s.io/kubernetes/pkg/cloudprovider/providers, ืื‘ืœ ื”ื ื”ื—ืœื™ื˜ื• ืœื ื˜ื•ืฉ ืืช ื–ื” ื‘ื’ืœืœ ืื™ โ€‹โ€‹ื”ื ื•ื—ื•ืช ื‘ืขื‘ื•ื“ื” ืขื ื‘ืกื™ืก ืงื•ื“ ื’ื“ื•ืœ. ื›ืœ ื”ื”ื˜ืžืขื•ืช ื”ื™ืฉื ื•ืช ื”ื•ืขื‘ืจื• ืืœ ืžืื’ืจ ื ืคืจื“. ืœื ื•ื—ื•ืช ื”ืชืžื™ื›ื” ื•ื”ืคื™ืชื•ื—, ื”ื•ืขื‘ืจื• ื’ื ื›ืœ ื”ืจื›ื™ื‘ื™ื ื”ื ืคื•ืฆื™ื ืžืื’ืจ ื ืคืจื“.

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

ื›ื“ื™ ืœื›ืชื•ื‘ ื™ื™ืฉื•ื ืžืฉืœืš ืฉืœ CCM, ืžืกืคื™ืง ืœื™ื™ืฉื ืžืžืฉืงื™ Go ื ื“ืจืฉื™ื.

ะ˜ ื–ื” ืžื” ืฉืงื™ื‘ืœื ื•.

ะ ะตะฐะปะธะทะฐั†ะธั

ืื™ืš ื”ื’ืขืช ืœื–ื”

ื”ืชื—ืœื ื• ื‘ืคื™ืชื•ื— (ืื• ืœื™ืชืจ ื“ื™ื•ืง, ืืคื™ืœื• ืœื”ืฉืชืžืฉ) ืขื ืžื•ื›ืŸ(!) CCM ืขื‘ื•ืจ Yandex.Cloud ืœืคื ื™ ืฉื ื”.

ืขื ื–ืืช, ื‘ื™ื™ืฉื•ื ื–ื” ื”ื™ื” ื—ืกืจ ืœื ื•:

  • ืื™ืžื•ืช ื‘ืืžืฆืขื•ืช ืืกื™ืžื•ืŸ JWT IAM;
  • ืชืžื™ื›ื” ื‘ื‘ืงืจ ืฉื™ืจื•ืช.

ื‘ื”ืกื›ืžื” ืขื ื”ืžื—ื‘ืจ (ื“ืœื™ืกื™ืŸ) ื‘ื˜ืœื’ืจื, ื—ื™ืœืงื ื• ืืช yandex-cloud-controller-manager ื•ื”ื•ืกืคื ื• ืืช ื”ืคื•ื ืงืฆื™ื•ืช ื”ื—ืกืจื•ืช.

ืชื›ื•ื ื•ืช ืขื™ืงืจื™ื•ืช

ื ื›ื•ืŸ ืœืขื›ืฉื™ื•, CCM ืชื•ืžืš ื‘ืžืžืฉืงื™ื ื”ื‘ืื™ื:

  • ืžืงืจื™ื;
  • ืื–ื•ืจื™ื;
  • LoadBalancer.

ื‘ืขืชื™ื“, ื›ืืฉืจ Yandex.Cloud ื™ืชื—ื™ืœ ืœืขื‘ื•ื“ ืขื ื™ื›ื•ืœื•ืช VPC ืžืชืงื“ืžื•ืช, ื ื•ืกื™ืฃ ืžืžืฉืง ืžืกืœื•ืœื™ื.

LoadBalanacer ื›ืืชื’ืจ ืขื™ืงืจื™

ื‘ืชื—ื™ืœื”, ื ื™ืกื™ื ื•, ื›ืžื• ื™ื™ืฉื•ืžื™ CCM ืื—ืจื™ื, ืœื™ืฆื•ืจ ื–ื•ื’ LoadBalancer ะธ TargetGroup ืขื‘ื•ืจ ื›ืœ ืื—ื“ Service ืขื ืกื•ื’ LoadBalancer. ืขื ื–ืืช, Yandex.Cloud ื’ื™ืœื” ืžื’ื‘ืœื” ืžืขื ื™ื™ื ืช ืื—ืช: ืืชื” ืœื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ TargetGroups ืขื ืžืฆื˜ืœื‘ื™ื Targets (ื–ื•ื’ SubnetID - IpAddress).

ื”ื™ื›ืจื•ืช ืขื Kubernetes CCM (ืžื ื”ืœ ื‘ืงืจ ืขื ืŸ) ืขื‘ื•ืจ Yandex.Cloud

ืœื›ืŸ, ื‘ืชื•ืš ื”-CCM ืฉื ื•ืฆืจ, ืžื•ืคืขืœ ื‘ืงืจ, ืฉื›ืืฉืจ ืื•ื‘ื™ื™ืงื˜ื™ื ืžืฉืชื ื™ื Node ืื•ืกืฃ ืžื™ื“ืข ืขืœ ื›ืœ ื”ืžืžืฉืงื™ื ื‘ื›ืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ืžืงื‘ืฅ ืื•ืชื ืœืคื™ ื”ืฉืชื™ื™ื›ื•ืชื ืœื—ืœืง ืžืกื•ื™ื NetworkID, ื™ื•ืฆืจ ืขืœ ื™ื“ื™ TargetGroup ืขืœ NetworkID, ื•ื’ื ืขื•ืงื‘ ืื—ืจ ื”ืจืœื•ื•ื ื˜ื™ื•ืช. ืœืื—ืจ ืžื›ืŸ, ื‘ืขืช ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ Service ืขื ืกื•ื’ LoadBalanacer ืื ื—ื ื• ืคืฉื•ื˜ ืžืฆืจืคื™ื ืคืจื™ื˜ ืฉื ื•ืฆืจ ืžืจืืฉ TargetGroup ืœื—ื“ืฉ NetworkLoadBalanacerืื ื™.

ื›ื™ืฆื“ ืœื”ืชื—ื™ืœ ืœื”ืฉืชืžืฉ?

CCM ืชื•ืžืš ื‘-Kubernetes ื’ืจืกื” 1.15 ื•ืžืขืœื”. ื‘ืืฉื›ื•ืœ, ื›ื“ื™ ืฉื–ื” ื™ืขื‘ื•ื“, ื–ื” ื“ื•ืจืฉ ืืช ื”ื“ื’ืœ --cloud-provider=external ื”ื•ื’ื“ืจ ืœ true ืขื‘ื•ืจ kube-apiserver, kube-controller-manager, kube-scheduler ื•ื›ืœ ื”ืงื•ื‘ืœื˜ื™ื.

ื›ืœ ื”ืฉืœื‘ื™ื ื”ื“ืจื•ืฉื™ื ืœื”ืชืงื ื” ืขืฆืžื” ืžืชื•ืืจื™ื ื‘ README. ื”ื”ืชืงื ื” ืžืกืชื›ืžืช ื‘ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ื™ื ื‘-Kubernetes ืžืžื ื™ืคืกื˜ื™ื.

ื›ื“ื™ ืœื”ืฉืชืžืฉ ื‘-CCM ืชืฆื˜ืจืš ื’ื:

ื ืฉืžื— ืœืงื‘ืœ ืืช ื”ืžืฉื•ื‘ ืฉืœืš ื• ื ื•ืฉืื™ื ื—ื“ืฉื™ืืื ืืชื” ื ืชืงืœ ื‘ื‘ืขื™ื•ืช ื›ืœืฉื”ืŸ!

ืชื•ืฆืื•ืช ืฉืœ

ื”ืฉืชืžืฉื ื• ื‘-CCM ื”ืžื™ื•ืฉื ื‘ื—ืžื™ืฉื” ืืฉื›ื•ืœื•ืช Kubernetes ื‘ืžื”ืœืš ื”ืฉื‘ื•ืขื™ื™ื ื”ืื—ืจื•ื ื™ื ื•ืžืชื›ื ื ื™ื ืœื”ืจื—ื™ื‘ ืืช ืžืกืคืจื ืœ-20 ื‘ื—ื•ื“ืฉ ื”ืงืจื•ื‘. ื›ืจื’ืข ืื™ื ื ื• ืžืžืœื™ืฆื™ื ืœื”ืฉืชืžืฉ ื‘-CCM ืขื‘ื•ืจ ื”ืชืงื ื•ืช K8s ื’ื“ื•ืœื•ืช ื•ืงืจื™ื˜ื™ื•ืช.

ื›ืžื• ื‘ืžืงืจื” ืฉืœ CSI, ื ืฉืžื— ืื ืžืคืชื—ื™ Yandex ื™ื™ืงื—ื• ืขืœ ืขืฆืžื ืืช ื”ืคื™ืชื•ื— ื•ื”ืชืžื™ื›ื” ื‘ืคืจื•ื™ืงื˜ ื–ื” โ€“ ืื ื• ืžื•ื›ื ื™ื ืœื”ืขื‘ื™ืจ ืืช ื”ืžืื’ืจ ืœื‘ืงืฉืชื ืขืœ ืžื ืช ืœื”ืชืžื•ื“ื“ ืขื ืžืฉื™ืžื•ืช ืฉืจืœื•ื•ื ื˜ื™ื•ืช ืœื ื• ื™ื•ืชืจ.

ื .ื‘.

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

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

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