実際の運用展開で、グレースケールの出版は、多くの場合、従来の方法は、手動で、バックエンドサーバー上のフロントLB(負荷分散)から削除し、サービスを停止し、最終的にソフトウェアアップデート接続を完了するためのコードをアップロードすることで、使用されています。CI / CD・ツールを使用している場合、このプロセスは自動化され、私たちはジェンキンスによって、この強力なオープンソースの継続的な統合および展開ツールが必要、自動的にコードを引っ張ってGitlabまたはGogsを組み合わせることができ、そして私がパイプラインによると書かれているになりスクリプト、自動的LB上のバックエンドサーバーを削除して、自動的にバックエンドサーバーに接続し、コードをアップロードし、電子メールを介してプロセスの結果に関する最終報告書を管理者に通知するために、サービスを再起動して接続します。しかし、今日、K8Sのは、私たちは、グレースケールのリリースのより便利で効率的な実装を参照して作られた、次は言われます。
限られた容量の、で、まだ徹底した後のフォローアップ調査の主要部でK8Sの浅い理解であるため、初心者のために詳細に説明し、このタイトルは、
最初にこの実験のためにベースイメージを作成する必要があります
:1。dockerfile書き込み
ます。mkdir dockerfile && CD dockerfile
vimのdockerfile#注:最初の文字のファイル名がdockerfile大文字
最新:アルパインFROM
MAINTAINER "ZCF <[email protected]>"
ENV NGX_DOC_ROOT = "の/ var / libに/ nginxの/ HTML" HOSTNAME = "" IP = "" PORT = "" index_page = ""
アドオンキャッシュ&& Nginxは--no RUNのAPK
Entrypoint.sh COPY / binに
CMD [ "は/ usr / sbinに/ nginxの"、 " - G"、 "OFFデーモン;"]#は、サービス開始nginxの、-gを開始するために、フロントエンドのように定義される:OFF修飾デーモンのグローバルセグメントを、
エントリーポイント。引数としてスクリプトを/bin/entrypoint.shに渡された[「/bin/entrypoint.sh」]#CMDコマンドは、
#は、文書を支えるDockerfile基盤を準備:
entrypoint.sh:1)コンテナ、スクリプトファイルの実行を開始します
entrypoint.sh vimの
#/ binに/ SH!
エコー「<H1> TO $ようこそ{ホスト名を: - www.zcf.com} WEBサイト| `ホスト名の-i` | |` date` | `hostname` - $ {YOU_INFO: } -V1 - | <の/ H1>「> $ {} NGX_DOC_ROOT /index.htmlが
CAT> << EOF /etc/nginx/conf.d/default.conf
サーバー{
サーバー名の$ {HOSTNAME: - www.zcf.com} ;
IP $聞く{:} -0.0.0.0:$ {PORTを:-80}。
{} $ NGX_DOC_ROOTルート;
LOCATION / {
索引} $ {index_page用のindex.htmlのindex.htm;
}
LOCATION /404.html = {
内部;
}
}
EOF
Execの"$ @" #CMDは、それが入ってくるパラメータを受け入れることです。
2)実行権限をaddがentrypoint.shする
X-entrypoint.sh + chownコマンド
後者はヘルスチェックを行う際に、htmlファイルを使用3):
OKエコー> chk.html
:2.画像ファイルドッキングウィンドウ作り始める
ドッキングウィンドウが--tag myappのをビルドします。 ./ V1
3.良好な画像ファイルを生成しますタグを付けるために、港にアップロードします。
ドッキングウィンドウのログインharbor.zcf.com -u管理者-p 123456#ログイン港
ドッカータグmyappに:V1 harbor.zcf.com/k8s/myapp:v1#は、港の倉庫パスをヒット
ドッキングウィンドウプッシュharbor.zcf.com/k8s/myapp:v1位港に画像をアップロードします。
4.回復の遅延効果の解放を容易にするために、我々はまた、ミラーイメージを作成する必要があり
ドッカーRUN --name ngx1 -d -e YOU_INFO =「DIY-のHelloWorld-V2」harbor.zcf.com/k8s/myapp:v1の
#説明:-eは、私は、スクリプトentrypoint.sh myappのに使用される初期のこのYOU_INFO環境変数、開始しているため、環境変数がコンテナに渡されるように指定されている
ので、#を、ここで私はnginxのを修正達成するために、コンテナに直接この変数を渡すことができますホーム効果。
ドッカーコミット--pause ngx1番号のngx1は中断され、新しいイメージへの輸出コンテナの現在の状態、。
ドッキングウィンドウはngx1 &&ドッキングウィンドウのrm -fv ngx1殺す #は、完成ミラーリング直接テストngx1コンテナを削除します。
ルート-N1 K8S @:〜#ドッカー画像
タグIDは、画像サイズ作成したリポジトリ
<なし>を<なし> 85355d4af36c。6秒7.02メガバイト前メンバー #を。これは新しいイメージだけでしょう
、港にアップロードするのは簡単V2:harbor.zcf.com/k8s/myapp:ちょうどタグ付けするには良いイメージを作るための#を。
ドッキングウィンドウタグ85355d4af36cの harbor.zcf.com/k8s/myapp:v2
#ミラーテストラン問題が無ければ、あなたは地元の港をアップロードすることができます。
--rm -d -p 83:80ドッカー--name ngx1 harbor.zcf.com/k8s/myapp:v2 RUN
〜#カール:K8S-N1 @ルートhttp://192.168.111.80:83/ ミラーかどうか#テストをnginxのYOU_INFOのコンテンツのホームページを変更します。
<H1> WERCOMEへwww.zcf.com WEBサイトを|金7月19日午前二時31分13秒UTC 2019 | ec4f08f831de | 172.17.0.2 | -DIY-のHelloWorld-V2- | </ H1>
ドッカーはキルngx1#のngx1コンテナを削除します。
ドッカー最後にプッシュharbor.zcf.com/k8s/myapp:v2番号、ハーバーに新しいイメージをアップロードします。
5.今持っている、myappに:v1とmyappに:それができるv2のグレー開始K8Sリリーステスト。
#3ポッド、クライアント二nginxのを作成し
、クライアントを作成するために、#1
Kubectl RUNクライアント--image = harbor.zcf.com / K8S /アルパイン:V1 --replicas = 1
#注:高山は:最小でありますLinuxシステムの、多くのオープンソースの画像は、ステーションにダウンロードすることができます。
kubectl GET PODS#-oワイドビューの詳細は、ポッドを作成しました。
#2 nginxのを作成します。
kubectl RUN = harbor.zcf.com --image nginxの/ K8S / myappに:V1 = 80 = 2 --replicas --port
kubectl GET展開は、監視K8Sは、私たちは2つのポッド・プロセスを作成するのに役立ち#watch -w。
ポッド-oワイドGET kubectl
#3ログインクライアント、テストアクセスnginxのは。
K8S-M1 @ルート:の/ etc / ansible GET#kubectl PODの
AGEのNAMEが再起動STATUS READY
クライアントf5cdb799f 2wsmr-2で16時間の1/1の実行のために
nginxの6d6d8b685-7t7xj-99メートル1/1 0ランニング
0ランニングnginxの6d6d8b685-99m-xpx5r 1/1
-it-f5cdb799fクライアントExecのkubectl-2wsmrのSH
/ IP addrの番号
配列1000 ' `iのための/#;やるのwget -O - -q HTTP:// nginxの/ ; SLEEP 1; DONE
/の##注:場合は、あなたのKUBE-DNSが正常に展開されていない、ここでnginxのはのIPサービスと交換することができる。
/ ## kubectl GET SVC |。#これはnginxのnginxのgrepのクラスタIPサービスがあるされて
テスト上記の#4は、我々はロードバランシングを実現することができた、見ることができます効果。
次に、グレーテスト公開開始するために
、画像#更新myappにはmyappにある:V2
kubectl設定された画像は、--help
V2#myappのミラーリングがmyappのあるアップグレード:V2を展開myappのmyappの= harbor.zcf.com / K8S / myappには、設定された画像をkubectl
#上記のコマンドが実行され、あなたは、V1からDIY-のHelloWorld-V2になるためのアクセスを見つけることができ、クライアントのアクセスの変化に別の端末で見ることができます。
#5テスト・ポッドは、動的にnginxのの多数の調整
kubectlスケール--replicas = 5展開nginxの#ポッド5 nginxの部数を変更する。
Kubectl GET PODS
#次に、クライアント端末が置かれているにで、変更を確認するために、あなたはホスト名とIPセクションがより変更されているようになったことがわかります。
#6。は、nginxのビューミラーのアップグレードステータスは、成功
kubectl rollOutが展開ステータスnginxのの
#7は、Myappというは、画像が最新のものにアップグレードされているかどうかを確認
ポッドのnginx-XXX-XX説明kubectl
以前の#8のバージョンがmyappのにロールバックされますそのv1のバージョン
kubectl rollOutが使用アンドゥ--help
kubectl rollOutが使用アンドゥ展開nginxの
nginxのアクセスするには、クラスタ外部6.テストK8S
修正の#myappのサービスタイプは、それが外部のクライアントアクセスのクラスタすることができます。
kubectl編集のSVC myappという
#TYPE:CLUSTERIPそれはタイプのように修正:NodePortの
#は、SVCの更新情報を表示:
30020 / TCP、注:kubectl GET SVC#ここにあなたが見ることができ、myapサービスポートは、:. 80のような動的に追加されます30020がランダムに割り当てられます。
その範囲の#、あなたがNODE_PORT_RANGEに設定kubeasz展開、=「30000から60000」は、ランダムに選択を使用しています。
#それから、彼らは、クラスタクライアントの外myappの訪問に行くことができます
http://または物理IPマスターノードの:30020 /
#さて、これらの試験の結果、私はスクリーンショットにはない、とハンズオン多くのテストに忠実ロードの結果を見たいと思って、それから、思考の多くを、多くを総括、私たちが見ることができます理解しています。