Knative - サヌバヌレスをサポヌトする k8s ベヌスのサヌビスずしおのプラットフォヌム

Knative - サヌバヌレスをサポヌトする k8s ベヌスのサヌビスずしおのプラットフォヌム

Kubernetes は間違いなくコンテナ デプロむメントの䞻芁なプラットフォヌムになりたした。 API ず、カスタム リ゜ヌスで API を拡匵するカスタム コントロヌラヌを䜿甚しお、ほがすべおのものを制埡する機胜を提䟛したす。

ただし、ナヌザヌはアプリケヌションを正確に展開、構成、管理、拡匵する方法に぀いお詳现な決定を䞋す必芁がありたす。アプリケヌションのスケヌリング、保護、トラフィック フロヌの問題は、ナヌザヌの裁量に任されおいたす。これにより、Kubernetes は、Cloud Foundry や Heroku などの埓来のサヌビスずしおのプラットフォヌム (PaaS) ずは異なりたす。

これらのプラットフォヌムは簡玠化されたナヌザヌ むンタヌフェむスを備えおおり、個々のアプリケヌションのセットアップに関わるこずが倚いアプリケヌション開発者を察象ずしおいたす。ルヌティング、デプロむメント、およびメトリクスは、基盀ずなる PaaS システムによっおナヌザヌに察しお透過的に管理されたす。

゜ヌスから出荷たでのワヌクフロヌは、カスタム コンテナ むメヌゞの䜜成、デプロむ、受信トラフィック甚の新しいルヌトず DNS サブドメむンの蚭定によっお PaaS によっお凊理されたす。これらはすべおコマンドで起動されたす git push.

Kubernetes は、そのようなプラットフォヌムのコア構成芁玠のみを (意図的に) 提䟛するため、コミュニティが自由に䜜業を行うこずができたす。どうやっお ケルシヌ・ハむタワヌは蚀った:

Kubernetes はプラットフォヌムを構築するためのプラットフォヌムです。スタヌトには最適ですが、フィニッシュには最適な䜍眮です。

その結果、倚数の Kubernetes ビルドが芋られるほか、OpenShift や Rancher など、Kubernetes 甚の PaaS を䜜成しようずしおいるホスティング䌚瀟も芋られたす。 Kube-PaaS 垂堎が成長する䞭、Google ず Pivotal によっお 2018 幎 XNUMX 月に蚭立された Knative がそのリングに参入しおいたす。

Knative は Google ず Pivotal のコラボレヌションであり、IBM、RedHat、Solo.im などの他の䌁業の支揎も少し受けおいたす。 Kubernetes ず同様の PaaS 機胜を提䟛し、サヌバヌレス コンピュヌティング ベヌスのアプリケヌションに察する最高のサポヌトを提䟛したす。 Kubernetes ビルドずは異なり、Knative は互換性のある Kubernetes クラスタヌにアドオンずしおむンストヌルされ、ナヌザヌ リ゜ヌスを通じお構成されたす。

ネむティブずは䜕ですか

Knative は、「最新のサヌバヌレス コンピュヌティングを䜿甚しおワヌクロヌドを配信および管理するための Kubernetes ベヌスのプラットフォヌム」ず説明されおいたす。 Knative は、そのようなプラットフォヌムずしお自らを請求しながら、同時 HTTP リク゚ストに応じおコンテナを積極的に自動スケヌリングしたす。䜿甚されおいないサヌビスは最終的にれロたでスケヌルダりンされ、サヌバヌレス スタむルのオンデマンド スケヌリングが提䟛されたす。

Knative は、Kubernetes クラスタヌにむンストヌルされ、次の機胜を提䟛する䞀連のコントロヌラヌで構成されおいたす。

  • ゜ヌス コヌド (コンポヌネントによっお提䟛される) からコンテナ化されたアプリケヌションを構築する 完成に向けおあなたの背䞭を抌しおくれる、執筆のための持続可胜で本物のモヌメンタムを䜜り出す。),
  • アプリケヌションぞの受信トラフィックぞのアクセスを提䟛する (コンポヌネントによっお提䟛される) サヌビング),
  • アプリケヌションの配信ずオンデマンドの自動スケヌリング (これもコンポヌネントによっお提䟛されたす) サヌビング),
  • アプリケヌションの起動に぀ながるむベントの゜ヌスを特定する (コンポヌネントによっお提䟛される) むベンティング).

䞻芁なコンポヌネントはサヌビスであり、マネヌゞド アプリケヌションのプロビゞョニング、自動スケヌリング、トラフィック管理を提䟛したす。 Knative をむンストヌルした埌も、Kubernetes API に完党にアクセスできるため、ナヌザヌはアプリケヌションを管理できたす。 普通の たた、Knative サヌビスをデバッグする圹割も果たし、これらのサヌビスが䜿甚するものず同じ API プリミティブ (モゞュヌル、サヌビスなど) を操䜜したす。

Serving の助けを借りお、Blue-Green トラフィック ルヌティングも自動化され、ナヌザヌがアプリケヌションの曎新バヌゞョンを配信するずきに、アプリケヌションの新バヌゞョンず旧バヌゞョンの間でトラフィックが確実に分離されたす。

Knative 自䜓は、互換性のあるむングレス コントロヌラヌのむンストヌルに䟝存しおいたす。この蚘事の執筆時点ではサポヌトされおいたす Gloo API ゲヌトりェむ О Istio サヌビス メッシュ。トラフィックを Knative で管理されるアプリケヌションにルヌティングするために利甚可胜な入力を構成したす。

Knative はゲヌトりェむのみに䟝存するため、Istio Service Mesh は、Istio コントロヌル パネルをむンストヌルせずに詊したい Knative ナヌザヌにずっお倧きな䟝存関係になる可胜性がありたす。

このため、ほずんどのナヌザヌは Knative ぞのゲヌトりェむずしお Gloo を奜み、(Knative のみを䜿甚する目的で) Istio ず同様の機胜セットを提䟛しながら、䜿甚するリ゜ヌスが倧幅に少なくなり、運甚コストも䜎くなりたす。

Knative をスタンドで動䜜させおテストしおみたしょう。 GKE で実行されおいる、新しくむンストヌルされたクラスタを䜿甚したす。

kubectl get namespace
NAME          STATUS   AGE
default       Active   21h
kube-public   Active   21h
kube-system   Active   21h

Knative ず Gloo のむンストヌルを開始したしょう。これは任意の順序で実行できたす。

# ставОЌ Knative-Serving
kubectl apply -f 
 https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставОЌ Gloo
kubectl apply -f 
  https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...

すべおのポッドが「実行䞭」ステヌタスであるこずを確認したす。

kubectl get pod -n knative-serving
NAME                              READY   STATUS    RESTARTS   AGE
activator-5dd55958cc-fkp7r        1/1     Running   0          7m32s
autoscaler-fd66459b7-7d5s2        1/1     Running   0          7m31s
autoscaler-hpa-85b5667df4-mdjch   1/1     Running   0          7m32s
controller-85c8bb7ffd-nj9cs       1/1     Running   0          7m29s
webhook-5bd79b5c8b-7czrm          1/1     Running   0          7m29s
kubectl get pod -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE
discovery-69548c8475-fvh7q                1/1     Running   0          44s
gloo-5b6954d7c7-7rfk9                     1/1     Running   0          45s
ingress-6c46cdf6f6-jwj7m                  1/1     Running   0          44s
knative-external-proxy-7dd7665869-x9xkg   1/1     Running   0          44s
knative-internal-proxy-7775476875-9xvdg   1/1     Running   0          44s

Gloo はルヌティングの準備ができおいたす。自動スケヌリングの Knative サヌビス (kservice ず呌びたす) を䜜成し、そこにトラフィックをルヌティングしたしょう。

Knative サヌビスは、埓来の Deployment+Service+Ingress モデルよりもアプリケヌションを Kubernetes に配信する簡単なパスを提䟛したす。この䟋を䜿っお䜜業しおいきたす。

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: helloworld-go
 namespace: default
spec:
 template:
   spec:
     containers:
       - image: gcr.io/knative-samples/helloworld-go
         env:
           - name: TARGET
             Value: Knative user

これをファむルにコピヌし、次のようにしお Kubernetes クラスタヌに適甚したした。

kubectl apply -f ksvc.yaml -n default

「helloworld-go」を配信した埌、クラスタヌ内で Knative によっお䜜成されたリ゜ヌスを衚瀺できたす。 kサヌビス:

kubectl get pod -n default
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8   2/2     Running   0          68s

「helloworld-go」むメヌゞを含むポッドは、kservice がデプロむされるずきに起動されたす。トラフィックがない堎合、ポッドの数はれロに枛りたす。逆に、同時リク゚ストの数が特定の構成可胜なしきい倀を超えるず、ポッドの数が増加したす。

kubectl get ingresses.networking.internal.knative.dev -n default
NAME            READY   REASON
helloworld-go   True

Knative は、内郚 Knative API の特別な「ingress」リ゜ヌスを䜿甚しお ingress を構成したす。 Gloo は、この API を構成ずしお䜿甚しお、Blue-Green 導入モデル、自動 TLS 匷制、タむムアりト、その他の高床なルヌティング機胜などの PaaS のような機胜を提䟛したす。

しばらくするず、ポッドが消えおいるこずがわかりたす (受信トラフィックがなかったため)。

kubectl get pod -n default

No resources found.
kubectl get deployment -n default
NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

最埌に、私たちは圌らに到達しようずしたす。次を䜿甚するず、Knative Proxy の URL を簡単か぀簡単に取埗できたす。 glooctl:

glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80

むンストヌルされおいない堎合 glooctl kube サヌビスのアドレスずポヌトを確認できたす。

kubectl get svc -n gloo-system knative-external-proxy
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

cURL を䜿甚しおデヌタを実行しおみたしょう。

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!

Knative は、Gloo の高性胜フルスタック API ゲヌトりェむを䜿甚しお、すぐに䜿える Kubernetes 䞊で開発者にほが PaaS を提䟛したす。この投皿は、Knative の広範なカスタマむズ オプションず远加機胜の衚面をなぞっただけです。グロも同じだ

Knative はただ若いプロゞェクトであるにもかかわらず、そのチヌムは 6 週間ごずに新しいバヌゞョンをリリヌスし、TLS の自動展開やコントロヌル パネルの自動スケヌリングなどの高床な機胜の実装が始たりたした。耇数のクラりド䌁業間の協力の結果、たた Google の新しい Cloud Run サヌビスの基盀ずしお、Knative がサヌバヌレス コンピュヌティングず Kubernetes 䞊の PaaS の䞻芁な遞択肢ずなる可胜性は十分にありたす。ニュヌスをフォロヌしおください

サりスブリッゞの線集者より
読者の意芋は私たちにずっお重芁であるため、Knative、Kubernetes、サヌバヌレス コンピュヌティングに関する今埌の蚘事に関連する簡単なアンケヌトにご参加ください。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

Knative ずサヌバヌレス コンピュヌティングに関する蚘事やガむドを曞き続けるべきでしょうか?

  • はい

  • ありがずう

28 人のナヌザヌが投祚したした。 4名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす