Kubernetesとは
これは、コンテナテクノロジーに基づく分散アーキテクチャ向けのまったく新しい最先端のソリューションです。このソリューションはまだ非常に新しいものですが、コンテナテクノロジーの大規模なアプリケーションに依存するというGoogleの10年以上の経験の蓄積と昇華の重要な結果です。リソース管理を自動化し、複数のデータセンター間でリソース使用率を最大化します
次に、システム設計がKubernetesの設計アイデアに従っている場合、ビジネスとはほとんど関係のない従来のシステムアーキテクチャの基盤となるコードまたは機能モジュールがすぐに見えなくなり、負荷について心配する必要がなくなります。バランサーとデプロイメントおよび実装の問題については、複雑なサービスガバナンスフレームワークを自分で参照または開発することを検討する必要はなく、サービス監視および障害処理モジュールの開発について心配する必要もありません。Kubernetesが提供するソリューションを使用すると、開発コストを30%以上節約できると同時に、ビジネス自体により集中できます。また、Kubernetesは強力な自動化メカニズムを提供するため、システムのその後の運用と保守を行うことができます。維持が困難で困難です。コストが大幅に削減されます。
Kubernetesは開発用の開発プラットフォームです。プログラミングインターフェイスが定義されていないため、Java、Go、C ++、またはPythonで記述されたサービスを問題なくKubernetesサービスにマッピングし、標準のTCP通信プロトコルを介して対話できます。さらに、Kubernetesプラットフォームには既存のプログラミング言語、プログラミングフレームワーク、中間価格への侵入がないため、既存のシステムは非常にコンテナ化され、アップグレードされてKubernetesプラットフォームに移行されます。
Kubernetesは、完全な分散システムサポートプラットフォームです。Kubernetesには、マルチレベルのセキュリティ保護とアクセスメカニズム、マルチテナントアプリケーションサポート機能、透過的なサービス登録とサービス検出メカニズム、組み込みのインテリジェントな負荷分散など、完全なクラスター管理機能があります。サーバー、強力な障害検出および自己修復機能、サービスローリングアップグレードおよびオンライン拡張機能、スケーラブルな自動リソーススケジューリングメカニズム、およびマルチグラニュラリティリソースクォータ管理機能。同時に、Kubernetesは、開発、展開テスト、運用および保守の監視を含むすべての側面をカバーする包括的な管理ツールを提供します。したがって、Kubernetesは、コンテナテクノロジーに基づく新しい分散アーキテクチャソリューションであり、ワンストップの完全な分散システム開発およびサポートプラットフォームです。
kubernetesを使用する理由
複雑なシステムを「軽く」開発できます。Kubernetesソリューションを採用した後は、小規模で有能なチームだけで簡単に対処できます。このチームでは、アーキテクトがシステムの「サービスコンポーネント」の改良に焦点を当て、数人の開発エンジニアがビジネスコードの開発に焦点を当て、システムと運用および保守のエンジニアがKubernetesの導入と運用および保守を担当します。二度と使用されることはありません。"996"、私たちがやったことが少ないからではなく、Kubernetesがすでに私たちのためにたくさんのことをしてくれたからです。
Kubernetesを使用することは、マイクロサービスアーキテクチャを採用することです。マイクロサービスアーキテクチャのコアは、巨大なモノリシックアプリケーションを相互接続された多数の小さなマイクロサービスに分解することです。マイクロサービスは複数のインスタンスコピーでサポートされる場合があり、コピーの数は社会システムの負荷に応じて異なる場合があります。微調整、インライン負荷ここではバランサーが大きな役割を果たします。マイクロサービスアーキテクチャにより、各サービスを専任の開発チームが開発でき、開発者は開発技術を自由に選択できます。これは、大規模なチームにとって非常に価値があります。さらに、各マイクロサービスは独立して開発、アップグレード、拡張されるため、システムは、高い安定性と高速の反復進化機能を備えています。Google、Amazon、eBay、その他の国内メーカーもマイクロサービスアーキテクチャを採用しています。今回、Googleはマイクロサービスアーキテクチャのインフラストラクチャを直接Kubernetesソリューションにパッケージ化し、複雑なビジネスを解決するためにマイクロサービスアーキテクチャを直接適用する機会を提供します。アーキテクチャの問題。
Kubernetesシステムアーキテクチャには、強力な水平拡張機能があります。インターネット企業の場合、ユーザーの規模は資産と同等であり、ユーザー数が多い人は誰でも競争に勝つことができます。したがって、超水平拡張機能は、インターネットビジネスシステムの重要な指標の1つです。コードを変更することなく、Kubernetesクラスターは、少数のノードのみを含む小さなクラスターから数百のノードを含む大規模なクラスターにスムーズに拡張できます。Kubernetesが提供するツールを使用すると、クラスターの拡張をオンラインで完了することもできます。マイクロサービスが適切に設計され、ハードウェアまたはパブリッククラウドリソースが直線的に増加している限り、システムは多数のユーザーによる同時アクセスの大きなプレッシャーに耐えることができます。
簡単な例
安装minikube
brew install minikube
复制代码
启动minikube
minikube start
复制代码
理由:dockerが起動しませんでした。dockerを起動した後、正常に起動しました。
そしてもう1つのDocker
kuberの実行状態を確認してください
kubectl cluster-info
复制代码
ssh経由でこのノードに接続します
minikube ssh
复制代码
mysqlを作成します
创建好 mysql-rc.yaml文件后,为了将它发布到kubernetes集群中,我们在Master节点执行命令:
kubectl create -f mysql-rc.yaml
复制代码
Kubernetes 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本。接下来,我们用kubectl命令查看刚刚创建的RC:
kubectl get rc
复制代码
然后,我们创建一个与之关联的 Kubernetes Service——MySQL的定义文件 mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysqls
复制代码
运行 kubectl命令,创建service:
kubectl create -f mysql-svc.yaml
复制代码
运行 kubectl 命令,可以查看到刚刚创建的service:
kubectl get svc
复制代码
注意到MySQL服务被分配了一个值为10.102.12.112的Cluster IP地址,这是一个虚地址,随后,Kubernetes集群中其他新创建的Pod就可以通过Service的Cluster IP+ 端口号3306来连接和访问它了。
在通常情况下,Cluster IP 是在Service创建后,由Kubernetes 系统自动分配的,其他Pod无法预先知道某个Service的Cluster IP地址,因此需要一个服务发现机制来知道这个服务。为此,最初时,Kubernetes巧妙地使用率Linux环境变量来解决这个问题。现在我们只需要知道,根据Service的唯一名字,容器可以从环境变量中获取到Service对应的Cluster IP 地址和端口,从而发起 TCP/IP 连接请求了。
启动tomcat应用
上面我们定义和启动了Mysql服务,接下来我们采用同样的步骤,完成Tomcat应用的启动过程。首先,创建对应的 RC 文件 myweb-rc.yaml,内容如下:
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
env:
- name: MYSQL_SERVICE_HOST
value: "mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
复制代码
注意,Tomcat容器内,应用将使用环境变量 MYSQL_SERVICE_HOST 的值连接MySQL服务。更安全可靠的用法是使用服务的名称 "mysql", 运行下面的命令,完成RC的创建和验证工作。
kubectl create -f myweb-rc.yaml
复制代码
最后,创建对应的Service:。以下是完整的yaml定义文件:
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
复制代码
type=NodePort 和 nodePort=30001 的两个属性,表示此 Service开启了 NodePort方式的外网访问模式,在Kubernetes集群之外,比如在本机的浏览器里,可以通过 30001 这个端口访问myweb(对应 8080 的虚端口上)。
运行 kubectl create 命令进行创建:
kubectl create -f myweb-svc.yaml
复制代码
运行kubectl get svc
运行kubectl get rc
至此,我们的第1个Kubernetes 例子搭建完成了,通过浏览器访问网页
http://localhost:30001/
复制代码
参考
[1]Kubernetes入门
[2]mac安装启动minikube