2016-11-29 13 views
2

おはよう開発環境用Kubernetes

私たちは6台の仮想マシンからなる開発環境を持っています。現在、VirtualBoxでVagrantとAnsibleを使用しています。 あなたが想像しているように、この環境をホストすることは、特にソフトウェア/ OSのバージョンが変わるにつれ、メンテナンスの悪夢です。デベロッパーマシンのリソース負荷についてはあまり言及していません。

一部の仮想マシンをドッカーに移行し始めました。しかし、これ自体は、オーケストレーション、正しい設定、コミュニケーションなどの問題を引き起こします。これは私をKubernetesに導きました。

Kubernetesが仕事に適したツールであるかどうかについて何らかの推論を提供する人がいますか?これは、「開発」ドッカーコンテナを管理し、オーケストレーションしています。

おかげ

答えて

0

前述のように、それはかなり複雑なトピックです。しかし、私は現時点でこれもやっています。ですから、あなたのためにいくつかのことを要約してみましょう。

Kubernetes(k8s)では、SaaSアプリケーションを編成します。最良の場合、それはクラウドネイティブアプリケーションです。クラウドネイティブアプリケーションのプロパティ/要件は、クラウドネイティブコンピューティングファンデーション(CNCF)によって策定されます。これは、GoogleがLinux Foundationに寄付した後、基本的にk8の周りに形成されました。 Cloud-nativeアプリケーションのプロパティ/要件は、コンテナパッケージ、動的管理、マイクロサービス指向(cncf.io/about/charter)です。アプリケーションがマイクロサービスベースで、すべてのサービスが別々のコンテナを持っている場合は、ほとんどがk8から利益を得ます。

マイクロサービスベースのアプリケーションでは、すべてのサービスを個別に開発することができます。開発者は、たとえば12Factorメソッド(12factor.net)に従うだけで済みます(ハードコードされたIPアドレスの代わりにenv varを使用するなど)。

開発者はサービスのコンテナを作成し、コンテナレジストリにプッシュします。ローカルの開発環境では、クラスタ内でコンテナレジストリを実行する必要があるため、開発者はコードをローカルにプッシュしてテストできます。

次に、ポート、ポートマッピング、env vars、コンテナイメージ...でk8sレプリケーションコントローラ、サービス、PetSetsなどを定義し、クラスタ内で作成して実行できます。

k8s-ドキ​​ュメントは、ローカルでk8を実行するためにMinikubeを推奨しています(kubernetes.io/docs/getting-started-guides/minikube/)。 Minikubeには、DNS、NodePorts、ConfigMaps、Secrets Dashboardsなどの機能があります。 私は、私の開発環境用のバグのあるクラスタを持つマルチノードCoreOS Kubernetesを、Puja AbbassiがBlog "正しいローカルKubernetes開発環境を見つける"(https://deis.com/blog/2016/local-kubernetes-development-environment/)で述べたように選んだので、私のプロダクション環境/プロダクトパリティ)。ベイグラント環境との は、次のような特徴を持って:均衡SkyDNSとコンテナのセット

  • 内部負荷のためetcd
  • DNS名で
  • サービス発見フランネルとのネットワーク

    あなたが知りたいのであれば、どのように動作するかは、このGithubレポのgithub.com/coreos/coreos-kubernetes/tree/master/multi-node(迷惑メールと一般的なフォルダ)の中を見てください。

    あなたや開発者が本当に完全な "クラウド環境"をローカルで実行する必要がある場合は、自分自身に質問しなければなりません。多くの場合、開発者はサービス(マイクロサービスとコンテナに基づいて)を独立して開発することができます。

    ただし、複数のサービスまたはすべてのサービスをローカルマシン上で開発環境として実行する必要があることがあります。

  • 2

    は、これは非常に複雑なトピックであり、多くのものは、それが地元のdevの環境としてK8Sを使用する価値がある場合は考慮しなければなりません。特に私はKubernetesで動作していた制作環境に非常に近い私のローカル開発環境を持っていたいと思ったときに使用しました。これは、多くの設定のバグを避けるのに役立ちました。

    私の意見では、Kubernetes(k8s)は開発環境に必要なものすべてを提供します。

    これは柔軟性が高く、多くの設定自体を行います。いくつかの例:

    • ローカルkubernetesに新しいバージョンを展開する簡単な方法は、あなたがアプリケーション・モジュールのそれぞれについて、K8S複製コントローラファイルを準備

    スタック(彼らはステートレスのモジュールである必要があることに注意してください) レプリケーションコントローラでは、ドッカーイメージを指定します。それだけです。 この方法を使用すると、新しいドッカー画像をローカルのdocker_registryにプッシュし、kubectlを使用してアプリケーションのライフサイクルを制御できます。

    • たとえば、アプリケーション・モジュール

    を拡張するための簡単な方法:

    kubectl scale rc your_application_service --replicas=3 
    

    こうK8Sは、あなたがあなたのサービスのために実行していて、それが数ことを認識するとしているどのように多くのポッドをチェックしますレプリカ数を満たすために新しいレプリカ値を作成します。

    これは無限の話ですが、他にも多くのことが考えられますが、試してみることをお勧めします。

    ぼろぼろにk8sクラスタを実行するプロジェクトはhttps://github.com/kubernetes/kubernetes/blob/master/docs/devel/developer-guides/vagrant.mdです。

    もちろん、多くのサービスをお持ちの場合は、それらのすべてをローカルリポジトリにプッシュしてk8で実行する必要があります。これには時間がかかりますが、カスタムスクリプトを使用してローカルデプロイメントを自動化すると、後悔することはありません。