Kubernetesの人気の高まりについて

こんにちは、Habr!



夏の終わりに、Kubernetesのトピックに引き続き取り組んでおり、6月の初めにこのプロジェクトの状況を示すStackoverflowからの記事を公開することを決定したことをお知らせします。







読書を楽しむ!



この記事の執筆時点で、Kubernetesは約6歳であり、過去2年間で人気が高まり、常に最も人気のあるプラットフォームの1つにランクされています。 Kubernetesは今年3位です。念のため、Kubernetesは、コンテナ化されたワークロードを実行および調整するためのプラットフォームです。



コンテナは、Linuxでプロセスを分離するための特別な構造として生まれました。コンテナは2007年からcgroupであり、名前付けは2002年からです。LXCが利用可能なった2008年までに、コンテナの形状はさらに良くなり、GoogleはBorgと呼ばれる独自の内部メカニズムを開発しましたここで、「すべての作業はコンテナで行われます」。ここから、Dockerの最初のリリースが行われた2013年に早送りし、コンテナはついに人気のあるマスソリューションのカテゴリに移行しました。当時、Mesosあまり人気がありませんでしたが、コンテナを調整するための主要なツールでした。 Kubernetesの最初のリリースは2015年に行われ、その後、このツールはコンテナオーケストレーションの分野で事実上の標準になりました。



Kubernetesがなぜそれほど人気が​​あるのか​​を理解するために、いくつかの質問に答えてみましょう。開発者がアプリケーションを本番環境にデプロイする方法について最後に合意できたのはいつですか。箱から出して提供されるツールを使用している開発者を何人知っていますか?今日、アプリケーションの仕組みを理解していないクラウド管理者は何人いますか?この記事では、これらの質問に対する回答を検討します。



YAMLとしてのインフラストラクチャ



Puppet and ChefからKubernetesに移行した世界で、最大の変化の1つは、コードとしてのインフラストラクチャからデータとしてのインフラストラクチャへの移行です。特にYAMLのように。ポッド、構成、デプロイされたインスタンス、ボリュームなどを含むKubernetesのすべてのリソースは、YAMLファイルで簡単に記述できます。例えば:



apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80


このビューにより、DevOpsまたはSREは、PythonやJavascriptなどの言語でコードを記述しなくても、ワークロードを完全に表現することが容易になります。



特に、インフラストラクチャをデータとして編成することのその他の利点は次のとおりです。



  • GitOps Git Operations Version. YAML- Kubernetes git, , , , . , , , , . , Kubernetes – pull-.
  • . YAML, Kubernetes, . Kubernetes , , , , . , , - , maxReplicas 10 20:


apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50




package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}






Kubernetesは非常に拡張性が高く、開発者はそれを気に入っています。ポッド、スイープ、StatefulSetsシークレットなど、利用可能なリソースのコレクションがありますConfigMapsただし、ユーザーと開発者は、カスタムリソース定義の形式で他のリソースを追加できます



たとえば、リソースを定義する場合は、次のようにするCronTabことができます。



apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct


後で、次のようなCronTabリソースを作成できます。



apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5


Kubernetesの拡張性に関する別のオプションは、開発者が独自の演算子を作成できることです。オペレーターは、「制御ループ」パターンで動作するKubernetesクラスター内の特別なプロセスです。オペレーターの助けを借りて、ユーザーはKubernetes APIと情報を交換することにより、CRD(カスタムリソース定義)の管理を自動化できます。



コミュニティには、開発者が独自のオペレーターを簡単に作成できるようにするツールがいくつかあります。その中には、OperatorFrameworkとそのOperatorSDKがあります。このSDKは、開発者がステートメントの作成を非常に迅速に開始できるフレームワークを提供します。コマンドラインから次のように開始できるとしましょう。



$ operator-sdk new my-operator --repo github.com/myuser/my-operator




これにより、YAMLファイルやGolangコードなど、オペレーターのすべてのステレオタイプ化されたコードが作成されます。



.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go


次に、次のように、必要なAPIとコントローラーを追加できます。



$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService


次に、最後に、オペレーターを収集して、コンテナーのレジストリに送信します。



$ operator-sdk build your.container.registry/youruser/myapp-operator


開発者がさらに詳細な制御を必要とする場合は、ファイル内のステレオタイプ化されたコードをGoに変更できます。たとえば、コントローラの詳細を変更するには、ファイルに変更を加えることができますcontroller.go



別のプロジェクトであるKUDOでは、宣言型YAMLファイルのみを使用してステートメントを作成できます。たとえば、ApacheKafkaの演算子は次のように定義されます。これを使用すると、いくつかのコマンドを使用して、Kubernetesの上にKafkaクラスターをインストールできます。



$ kubectl kudo install zookeeper
$ kubectl kudo install kafka




次に、別のコマンドで構成します。



$ kubectl kudo install kafka --instance=my-kafka-name \
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 \
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m \
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m \
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 \
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20


革新



過去数年間、Kubernetesのメジャーリリースは数か月ごとにリリースされています。つまり、1年に3〜4回のメジャーリリースです。それぞれに実装されている新機能の数は減りません。さらに、私たちの困難な時期でも減速の兆候はありません-GithubでのKubernetesプロジェクトの現在の活動を見てください



新機能により、さまざまなワークロードにわたって操作をより柔軟にクラスター化できます。さらに、プログラマーは、アプリケーションを本番環境に直接デプロイする際の制御を強化することを好みます。



コミュニティ



Kubernetesの人気のもう1つの主要な側面は、そのコミュニティの強さです。 2015年、バージョン1.0に到達すると、KubernetesはCloud Native ComputingFoundationによって後援されましたプロジェクトの進展に伴い、Kubernetesのさまざまな分野に焦点を当て



たさまざまなSIG(Special Interest Groups)コミュニティもあります。これらのチームは、Kubernetesでの作業をより便利で便利にするために、常に新しい機能を追加しています。



Cloud Native Foundationは、この記事の執筆時点で世界最大のオープンソース会議であるCloudNativeCon / KubeConもホストしています。通常、年に3回開催され、Kubernetesとそのエコシステムを改善し、3か月ごとに表示される新機能を習得したい何千人もの専門家が集まります。



さらに、Cloud Native Foundationには技術監視委員会があり、SIGとともに、クラウドエコシステムに焦点を当て財団の新規および既存のプロジェクトをレビューします。これらのプロジェクトのほとんどは、Kubernetesの強みを向上させるのに役立ちます。



最後に、Kubernetesは、人々がお互いを抱きしめるコミュニティ全体の意図的な努力なしには、そのような成功を収めることはできなかったと思いますが、同時に、新参者を喜んで受け入れます。



未来



開発者が将来対処しなければならない主な課題の1つは、コードが動作するインフラストラクチャではなく、コード自体の詳細に焦点を当てる能力です。今日の主要なものの1つであるサーバーレスアーキテクチャパラダイムが対応するのは、これらの傾向ですKubernetesを使用して開発者からインフラストラクチャを抽象化するKnativeOpenFaasなどの高度なフレームワークがすでに存在します。



この記事では、Kubernetesの現在の状態を大まかに見てきただけです。実際、これは氷山の一角にすぎません。Kubernetesユーザーは、他にも多くのリソース、機能、および構成を自由に使用できます。



All Articles