kubernetes(1)簡単な例を作成する

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
复制代码

image.png

启动minikube

minikube start
复制代码

image.png理由:dockerが起動しませんでした。dockerを起動した後、正常に起動しました。

image.pngそしてもう1つのDocker

image.png

kuberの実行状態を確認してください

kubectl cluster-info
复制代码

image.png

ssh経由でこのノードに接続します

minikube ssh
复制代码

image.png

mysqlを作成します

创建好 mysql-rc.yaml文件后,为了将它发布到kubernetes集群中,我们在Master节点执行命令:

kubectl create -f mysql-rc.yaml
复制代码

image.png

Kubernetes 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本。接下来,我们用kubectl命令查看刚刚创建的RC:

kubectl get rc
复制代码

image.png

然后,我们创建一个与之关联的 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 
复制代码

image.png 运行 kubectl 命令,可以查看到刚刚创建的service:

kubectl get svc
复制代码

image.png 注意到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 
复制代码

image.png 最后,创建对应的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 
复制代码

image.png

运行kubectl get svc

image.png 运行kubectl get rc

image.png

至此,我们的第1个Kubernetes 例子搭建完成了,通过浏览器访问网页

http://localhost:30001/
复制代码

image.png

参考

[1]Kubernetes入门
[2]mac安装启动minikube

おすすめ

転載: juejin.im/post/7084926299340275743
おすすめ