K8S 入門から実践まで - K8S へのアプリケーションのデプロイ

K8S 入門から実践まで - K8S へのアプリケーションのデプロイ

背景

最近、k8s 関連のブログやビデオをいくつか更新したところ、いくつかのフィードバックをいただきました。フィードバックは、おおよそ次のカテゴリに分けられます。

  • 同社はサービス指向の変革を遂げていますが、クラウドネイティブにはまだ触れていません。
  • 同社のアプリケーションの一部はクラウドネイティブへの変革を遂げていますが、作業の大部分はインフラストラクチャ部門と運用保守部門によって推進されています。私は単なる開発者なので、詳細は理解していませんし、k8s へのアクセス権もありません。
  • 依然として、主に仮想マシンの展開に基づく従来の運用と保守に基づいています。

2番目のタイプが大部分を占めます。同社はクラウドネイティブ化を進めているものの、純粋なビジネスR&Dの同僚とはあまり関係がないようで、自身の仕事に変化はない。

ちょうどそのとき、私はビジネスR&Dの視点からインフラ部門に異動したばかりでした。私は両方の役割に携わっており、ビジネス R&D スタッフが会社のクラウド ネイティブ アーキテクチャを理解できるよう支援してきました。

そのため、研究開発の観点からk8sを実践できるよう、体系的に皆さんを導いていきたいと考えています。

k8s の一部の機能は実際には運用と保守を重視しており、R&D の優先度はそれほど高くないためです。そのため、インストール、コンポーネント、その他のモジュールなど、k8s の運用と保守に関するいくつかの知識ポイントについては説明しません。主に日々の開発で使うコンポーネントについてお話します。

プラン

はじめる

  • アプリケーションをk8sにデプロイする
  • クロスサービス呼び出し
  • クラスターへの外部アクセス

高度な

  • 設定の使用方法
  • サービスメッシュの実践

アプリケーションを操作する

  • アプリケーションプローブ
  • ローリングアップデートとロールバック
  • エレガントなログコレクション
  • アプリケーションの可観測性
  • 指標の視覚化

k8sは共通のミドルウェアを導入する

  • Helmワンクリックデプロイ
  • アプリケーションライフサイクルを自動化するオペレータの作成

ここでディレクトリを整理しました。各章には、一緒に視聴できるブログとビデオがあります。お好みに合わせてお選びいただけます。

動画も関係するので、週2回の更新を目標に、2か月以内にすべての更新を完了したいと考えています。

私の経験によれば、上記の内容をすべてマスターすれば、k8s をより深く理解できるようになります。

アプリケーションをk8sにデプロイする

まず、第 1 章 [アプリケーションを k8s にデプロイする] から始めて、Go を使用して簡単な Web アプリケーションを作成し、それを Docker イメージにパッケージ化してから、k8s にデプロイしてインターフェース呼び出しを完了します。

アプリケーションの作成

func main() { http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) { log.Println("ping") fmt.Fprint(w, "pong") }) http.ListenAndServe(":8081", nil) }

アプリケーションは非常にシンプルで、ping インターフェイスを提供し、pong を返します。

Dockerファイル

# 第一阶段:编译Go 程序FROM golang:1.19 AS dependencies ENV GOPROXY=https://goproxy.cn,direct WORKDIR /go/src/app COPY go.mod . #COPY ../../go.sum . RUN --mount=type=ssh go mod download # 第二阶段:构建可执行文件FROM golang:1.19 AS builder WORKDIR /go/src/app COPY . . #COPY --from=dependencies /go/pkg /go/pkg RUN go build # 第三阶段:部署FROM debian:stable-slim RUN apt-get update && apt-get install -y curl COPY --from=builder /go/src/app/k8s-combat /go/bin/k8s-combat ENV PATH="/go/bin:${PATH}" # 启动Go 程序CMD ["k8s-combat"]

その後、docker イメージを構築するための dockerfile が作成されました。

 docker: @echo "Docker Build..." docker build . -t crossoverjie/k8s-combat:v1 && docker image push crossoverjie/k8s-combat:v1

make docker を使用すると、イメージがローカルでビルドされ、dockerhub にアップロードされます。

デプロイメントの作成

次のステップは、プロセス全体の中で最も重要な部分であり、デプロイメントを記述する k8s を扱う唯一の場所でもあります。

前回のビデオ「1 分で k8s を理解する」では、一般的なコンポーネントについて説明しました。

最も一般的なものはデプロイメントであり、通常はステートレス アプリケーションをデプロイするために使用されます。他のコンポーネントについてはまだあまり知る必要はありません。デプロイメントの記述方法を見てみましょう。

 apiVersion: apps/v1 kind: Deployment metadata: labels: app: k8s-combat name: k8s-combat spec: replicas: 1 selector: matchLabels: app: k8s-combat template: metadata: labels: app: k8s-combat spec: containers: - name: k8s-combat image: crossoverjie/k8s-combat:v1 imagePullPolicy: Always resources: limits: cpu: "1" memory: 300Mi requests: cpu: "0.1" memory: 30Mi

今のところ、最初の 2 行の apiVersion と kind に注意を払う必要はありません。これらは、デプロイメントを記述するための固定された方法であると考えてください。

メタデータ: 名前が示すように、メタデータが定義され、デプロイメントの名前をポッドに伝える場所です。ここでは次のように定義されています: k8s-combat

真ん中:

 metadata: labels: app: k8s-combat

分かりやすいです。デプロイメントにラベルを付けることです。通常、このラベルを他のコンポーネントに関連付けることは理にかなっています。そうでなければ、それは単なるラベルです。

タグはキーと値のペアの形式であり、キーと値の両方をカスタマイズできます。

ここでの app: k8s-combat は、以下の仕様の下のセレクターと一致しており、両方とも app: k8s-combat に関連付けられていることを示しています。

テンプレートで定義されたラベルは、セレクターをテンプレートで定義された Pod に関連付けるためにも使用されます。

Pod は、k8s で同じ機能を持つコンテナのグループです。 Pod は複数のコンテナにバインドできます。ここではアプリケーション コンテナーが 1 つだけあります。他のコンテナについては、後で istio とログ収集について説明するときに説明します。

テンプレートで定義された内容はわかりやすいです。コンテナのプル アドレスと占有されているリソース (CPU/メモリ) を指定します。

replicas: 1: は、レプリカが 1 つだけデプロイされていること、つまりノードが 1 つだけであることを意味します。

アプリケーションをデプロイする

次に、次のコマンドを使用します。

 kubectl apply -f deployment/deployment.yaml

クラウドベンダーが提供する k8s 環境は、本番環境でよく使用されます。 https://minikube.sigs.k8s.io/docs/start/minikube を使用してローカルでシミュレートできます。

このデプロイメントが適用され、コンテナが同時に k8s にデプロイされて使用されます。

 kubectl get pod

バックグラウンドでは、k8s は入力したリソースに基づいて適切なノードを選択し、そこに現在の Pod をデプロイします。

先ほどデプロイした Pod がリストされます。

 ❯ kubectl get pod NAME READY STATUS RESTARTS AGE k8s-combat-57f794c59b-7k58n 1/1 Running 0 17h

次のコマンドを使用します:

 kubectl exec -it k8s-combat-57f794c59b-7k58n bash

docker を使用する場合と同様に、コンテナーに入ります。

次に、curl コマンドを実行してインターフェースにアクセスします。

 root@k8s-combat-57f794c59b-7k58n:/# curl http://127.0.0.1:8081/ping pong root@k8s-combat-57f794c59b-7k58n:/#

この時点で別のターミナルを開いて実行します。

 ❯ kubectl logs -f k8s-combat-57f794c59b-7k58n 2023/09/03 09:28:07 ping

もちろん、コンテナ内のログを印刷できますが、前提として、アプリケーション ログは標準出力に書き込まれます。

要約する

以上がこの章の主な内容です。重点は、アプリケーション プログラマーを Docker イメージにパッケージ化してイメージ ウェアハウスにアップロードし、k8s によるスケジュール設定と実行のためにデプロイメントを構成することです。

関連するソース コードと yaml リソース ファイルは次のとおりです。

https://github.com/crossoverJie/k8s-combat。

<<:  OpenTelemetry Operator を使用して観測可能なデータを SigNoz に送信する

>>:  マルチリージョン展開が簡単に: Linode VLAN による迅速なマルチリージョン展開

推薦する

董静怡氏:SEOは重要だが、中国では専門職にはなり得ない

SEOに携わっている私の友人の多くが、最近Baiduからの攻撃を経験したと思います。その中には、Ba...

ガートナーは、組織によるクラウド移行の加速がパブリッククラウド支出の急増につながると予測している

[[396264]]分析会社ガートナーが発表した最近の調査および予測データによると、パブリッククラウ...

Baiduのアルゴリズム変更を合理的に扱う

ウェブマスターにとって、Baidu と Google のアルゴリズムの変更、より正確に言えば、検索エ...

ASO 最適化、ASO を行う際に知っておくべきこと!

1. 世界は論争の渦中にあり、CP はワインのランキングについて議論しています。ASOの世界は 2 ...

.INFOドメイン名登録数上位10カ国:米国が1位

中国IDCレビューネットワークは1月29日に次のように報告した。WebHosting.infoが発表...

DouMi創業者趙世勇:製品とサービスの革新を利用して、サービス産業の採用と管理のアップグレードと進化を実現する

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています5月25日...

ユーザーエクスペリエンスとは何ですか?それは、競合他社よりも早く問題点を発見し、迅速に解決することを意味します。

今日は小さな温度計から始めましょう。先週の夜、小規模なO2Oサロンに参加した後、屈強な男性が私を呼び...

企業サイトはキーワード密度を合理的に改善することで、最高の最適化効果を達成できます。

かつてはキーワード密度が非常に重要で、ウェブサイトのキーワードランキングに影響を与えるほどだったこと...

Baidu の入札最適化戦略: 半分は考え、半分は集中

Baiduで入札すると——入札アカウントが取引量がないにもかかわらず、1日に数千元を不可解に燃やした...

業界のデジタル化とインテリジェント化を推進する中国聯通のビッグデータ技術の優位性が強調される

[51CTO.comからのオリジナル記事] インターネット+、人工知能、クラウドコンピューティングな...

WordPress ブログのホームページで特定のカテゴリの記事を除外する方法

今日、ある WordPress ブロガーが「WordPress ブログのホームページから特定のカテゴ...

seflow-月額支払い 1.5 ユーロ/onapp/メモリ 1g/ハードディスク 20g/トラフィック 5T/保護 100g

seflow.it はイタリアの老舗商人です。最近非常に成功しています。onapp クラウドベース ...

budgetvm: 安価なクラウド サーバー、月額 12 ドルから、1.8Tbps の高度な防御、月間 33T のトラフィック、日本と米国のデータ センター

budgetvmは、アメリカの老舗ブランドenzuコンピュータルームのブランドで、主に物理サーバーの...

sharktech - 60% オフ プロモーション (米国で最も強力な D サーバー)

4月に友人がsharktechからサーバーを購入するのを手伝いました。なぜここからサーバーを購入した...