什么是 Kubernetes?这是一个问得很迟的问题

kubernetes_logo.png

Kubernetes是一个开源平台,旨在实现自动部署、扩展和应用容器的运维自动化。

Kubernetes使得您可以快速高效地应对要求。

    • アプリを迅速に予定通りにデプロイする (コンテナをサーバー群へ展開する)

 

    • 稼働中にアプリをスケールする(稼働中にコンテナ数を変更する)

 

    • 新機能をシームレスに提供開始する (稼働中にロールアウトする)

 

    ハードウェアの利用率を要求に制限する (コンテナで共存させて稼働率を高くする)

Kubernetes的目标是建立一个生态系统的组件和工具,以减轻以下类型应用的运营负担。

    • 可搬性: パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウド、マルチ・クラウド

 

    • 拡張可能: モジュール化、追加可能、接続可能、構成可能

 

    自動修復: 自動配置、自動再起動、自動複製、自動スケーリング

该项目于2014年开始,并基于运营经验,大规模运行生产工作负载,并结合社区的最佳实践思想和实践。 Kubernetes的实例可以在https://kubernetes.io/case-studies/上找到。

Kubernetes的发音是什么?

在我的工作场所中,有很多人发音为Ku-ba或Ku-ber-ne-tis的感觉。当我在YouTube上听到外国人的发音时,听起来像是说Ku-be-ne-tis。关于发音,Kubernetes的创始人之一 @brendandburns在Twitter上发表了如下的推文。

@imdsm @gregde @francesc @jbeda @developerluke 队伍中的大多数人说:koo-ber-net-ees,或者只说 ‘k8s’ 或者 k-eights— brendandburns (@brendandburns) 2015年4月7日

因为名称太长,所以经常使用缩写k8s来表示。

充分发挥集装箱的优势

Kubernetes是一个利用容器的优势构建的平台。

    • アジャイルなアプリ開発とデプロイ: 仮想マシンイメージの利用と比較して、コンテナ作成の簡便性や効率性が優れています。

 

    • 継続的な開発、インテグレーション、デプロイ: 信頼性の高く、頻繁なコンテナイメージのビルドとデプロイメントについて、迅速かつ簡単なロールバックを提供します。

 

    • DevとOpsの分離問題: デプロイ時ではなくビルドとリリース時に、コンテナイメージを作ることで、アプリをインフラから分離できます。

 

    • 開発、テスト、およびプロダクションの環境の一貫性: ノートPCからクラウドでも同じように動作します。

 

    • クラウドとOSディストリビューションの可搬性: Ubuntu, RHEL, CoreOS, オンプレ, Googleコンテナ・エンジン, そして、あらゆる場所で実行できます。

 

    • アプリ中心の管理: アプリがOS上の論理的な資源(コンテナ)で動作するので、仮想マシン上のOSで動かすよりも抽象レベルが向上します。 抽象レベルが上がることで、単純化され、アプリに集中できます。

 

    • 疎結合、分散、伸縮性、解放されたマイクロサービス: アプリは、より小さい独立した部分に分割され、1つの大きな単一目的のマシン上で実行される大きなモノリシックな構造ではなく、動的に展開および管理できます。

 

    • 資源の分離: 予測可能なアプリのパフォーマンス

 

    資源の稼働率: 高い効率と密度

Kubernetes可以做什么?

Kubernetes通过在物理服务器或虚拟服务器的集群环境中运行应用程序容器。它通过以容器为中心的理念来满足以下需求。

    • 共同化(1アプリ1コンテナを維持しながら、複合的なアプリを容易化) (自習ノート,IBM Cloud k8sの例)

 

    • ストレージのマウント(IBM Cloud k8sの例)

 

    • シークレットの分散 (パスワードなどを環境に保存します) (IBM Cloud k8sの例)

 

    • アプリの健全性のチェック (コンテナのヘルスチェックを設定できます)

 

    • アプリのインスタンスの複製 (自習ノート;デプロイメント・コントローラー)

 

    • 水平の自動スケーリングの利用 (CPU稼働率の閾値でコンテナ数を増減します)

 

    • サービス名と名前解決の管理 (サービスを登録すると、内部DNSで名前解決、環境変数を供給)

 

    • ワークロードの分散 (自習ノート;サービス)

 

    • ローリング・アップデート(自習ノート;ロールアウト)

 

    • 資源の監視 (プロメテウス[Prometheus]とグラファナ[Grafana]が組み込まれています)

 

    • ログの採取とアクセス (コンテナのSTDOUTを、Fluentd,ElasticSearch,Kibanaで集約して分析できます。ELK Stackは組み込まれています)

 

    • アプリのデバッグ (デバッグをサポートする機能があります)

 

    認証と認可の提供 (RBAC 役割ベースのアクセス制御とサービスアカウントでコントロールします)

展示滚动更新的演示

为了让大家更好地理解Kubernetes的独特优点,我制作了一个发布视频。

这是展示从应用程序v1.0运行中升级到v1.1的过程。屏幕上的八个浏览器通过Selenium进行操作,模拟应用程序的运行,用户登录后点击按钮会更新计数器。当从这个状态进行升级时,会保持会话,并逐渐切换到v1.1的界面。

スクリーンショット 2018-02-24 8.05.31.png

在右下方的终端是k8s状态,正中下方是selenium,左下方是命令输入界面。如果注意右下方的终端,可以看到Pod正在迁移的过程。

接下来是回滚正在进行的场景。可以从屏幕右下角的终端输入回滚命令,逐渐看到它回到了原始版本Ver1.0的样子。

スクリーンショット 2018-02-24 8.10.30.png

这个演示可以在https://youtu.be/ObA1OEVdrQY 中找到。

Kubernetes 架构

在Kubernetes的架构中,包括主控组件和节点组件两个构成要素。

    • マスター・コンポーネントは、クラスタの制御を受け持ちます。 スケジューリングやイベントの検知や対応など、クラスタの全体に関わる決定を行います。 そして、クラスタ内のどのノードでも実行できます。

 

    ノード・コンポーネントは、すべてのノードで実行され、実行中のポッドを維持し、Kubernetesランタイム環境を提供します。
スクリーンショット 2017-12-16 10.29.48.png

主组件

    • kube-apiserver: 制御部のフロントエンド

 

    • etcd: 全てのクラスタデータ保存用のデータベース

 

    • kube-controller-manager: ノード管理、レプリケーション管理、エンドポイント管理、サービスアカウントとトークン管理を実行

 

    • cloud-controller-manager: 基盤となるクラウド・プロバイダーと連携、ノード、経路、サービス、ボリュームなどの作成・更新・削除を実施

 

    • kube-scheduler: ポッドを監視して、ノードを実行する場所を選択する

 

    • addons: アドオンは、クラスタ機能を実装するポッドとサービスです。

DNS: クーべネティスのサービスを探すために必須のDNSサーバー
User interface: kube-uiは、表示だけのUIです。
Container Resource Monitoring: 時系列のデータを記録して、参照のUIを提供
Cluster-level Logging: コンテナのログの集中保管、検索、表示を提供

节点组件

    • kubelet: プライマリのエージェントで、ノードに割り当てられたポッドを監視

 

    • kube-proxy: ネーミングルールに基づき接続や転送を実施

 

    • docker: コンテナの実行に利用

 

    • rkt: 実験的なDockerの代替

 

    • supervisord: kubelet と dockerのプロセス監視と制御

 

    fluentd: ログ取得のためのプロセス

主节点和工作节点

执行主组件的服务器被称为主节点。或者简称为主机。而仅执行节点组件的服务器被称为工作节点。简称为节点。

在Minikube上学习环境中,我们可以在一台服务器上运行主控组件和节点组件,以创建一个紧凑的环境。

在执行主组件的服务器上,并不强制执行节点组件。Kubernetes the hard way 提供了一种在3个虚拟服务器上集群化部署主组件的方法。在这种配置中,由于主节点未配置为节点之一,因此无法使用kubectl get node来管理主节点。但在作为公共云提供的托管服务中,将主节点配置为所偏好的配置。

如果使用kubeadm命令来配置集群,您可以将主控组件放置在其中一个节点上,从而作为主节点来管理该节点。


不同云服务提供商之间的兼容性

我认为每家公司都已经获得了Kubernetes的兼容性认证,但我对其兼容性有多大疑问,所以我进行了调查。

我已经对可以设置多个区域的谷歌GKE、亚马逊EKS和IBM IKS进行了调查。简单来说,这三个云平台都可以使用相同的文件(YAML)进行操作,并且无需进行任何修改就可以正常运行。然而,由于各家云平台的基础架构部分(如gcloud命令、aws命令和ibmcloud命令)存在差异,所以在这个方面遇到了一些困难,但一旦理解了就很容易了。

    • AWS初心者だけど、EKSのクラスタを作って、NodePort と ELBアクセス、EBSのPVを確認したよ

 

    • GCP初心者が、GKEクラスタを作って、NodePort、ロードバランサー、永続ボリュームを使ってみたよ。

 

    EKSやGKEで動作確認したマニフェストをIKSで動かした結果

作为个人的感想,我觉得如下。

    • 簡単に利用できた順 1. IKS, 2. GKE, 3. EKS

 

    • 機能が豊富な順  1. EKS, 2. GKE, 3. IKS

 

    • 簡単さと高機能を兼ね備えているのは GKE、さすがグーグルという感じでした。

 

    各社ともメトリックスとログ監視が、クラウドに依存した方法なので、マルチクラウドを目指すのであれば、検討が必要と思います。

在IBM云上进行实现

前述的主组件将分布式部署在主节点和工作节点上。节点组件将部署在工作节点上。主节点作为IBM管理提供,并不能直接登录。而工作节点将作为IBM Cloud Infrastructure的虚拟服务器进行配置。

cs_org_ov.png

IBM Cloud 控制台上的工作节点列表

这是启动 Kubernetes 集群时的页面,其中专用工作节点数为3个。

スクリーンショット 2017-08-24 16.58.27.png
スクリーンショット 2017-08-24 17.03.28.png

总结

有很多关于执行和配置Kubernetes命令的文章,但是为了什么?它可以做什么?它有什么优势?由于缺乏这些词的解释,我在阅读参考资料的同时总结了一下。

这是参考资料。

(1) Kubernetes 是什么?请参考 https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/。
(2) Kubernetes 是什么?请参考 https://www.youtube.com/watch?v=R-3dfURb2hA。
(3) Kubernetes 组件,请参考 https://kubernetes.io/docs/concepts/overview/components/。
(4) 关于 Kubernetes 集群和 IBM Bluemix 容器服务,请参考 https://console.bluemix.net/docs/containers/cs_ov.html#cs_ov。

广告
将在 10 秒后关闭
bannerAds