K8Sの基礎知識

自動化された運用保守
プラットフォーム(ansible、gitの、gitlab、ドッキングウィンドウ 、ジェンキンス、ヘラジカ)
オートメーション(ツール/スクリプト)
(ドッカ/ K8S)のコンテナ
仮想化

差ドッキングウィンドウと、仮想マシン
のリソースをより効率的に使用します。仮想マシンは、コンテナがちょうどプロセスであり、完全なシステムです。

VMスロースタート、コンテナが第2のレベルで
一貫したランタイム環境の
CI / CD
コンテナの中心的な概念
ミラーイメージ
(1)ミラーリングは、特殊なファイルシステムです。また、それは、実行時(例えば、環境変数)の準備をするために多数の構成パラメータが含まれている、プログラム、ライブラリ、リソース、およびその他の設定ファイルを実行するための容器を提供することに加えて必要とされます。任意の動的なデータが含まれていない画像は、その内容が構造後に変更されることはありません。
(2)ミラーAUFS、階層構造を使用します。ミラーを構築する場合、レイヤーを構築します、前の層は、後者の層の基礎となっています。あなたが構築した各層が変更されない、レベルの変化が唯一の彼自身のこの層に発生します。ミラーリングは読み取り専用です。新しいイメージを作成すると、ちょうど鏡に変わらない基本的な内容は、新しいレベルが追加されます。
コンテナ容器
(1)は、ミラーリング実行コンテナと考えることができる、ミラーリングは書き込み可能です。ただ、オペレーティングシステム上のコンテナプロセス、プロセスが完成意志出口です。コンテナが常に存在することを前提としないでください、それはいつでも崩壊することを前提とすべきです。コンテナが失敗したら、起動した後、それを削除することを躊躇しません。
ドッカーベストプラクティスを特徴とする(2)は、容器は、貯蔵層は、貯蔵層は、状態のない容器を保持するれた任意のデータを書き込むべきではありません。すべてのファイル書き込み操作、ボリュームデータ(ボリューム)を使用する必要がある、またはディレクトリのホストを結合、これらの場所を読み書きホスト(またはネットワークストレージ)にコンテナ収納読むため層と書き込みをスキップします直接発生し、その性能より高い安定性。寿命データ量は、データ量が死ぬことはないであろうダイ、容器とは無関係です。
リポジトリ倉庫
倉庫倉庫はミラーであるミラーがドッカー(同様の倉庫管理者)の管理を担当して、各倉庫は、複数のラベル(タグ)を含むことができ、各ラベルは、ミラーに対応します。また、独自のプライベート倉庫を作成することができます。
K8Sが作る
このクラスタは2つの部分で構成されています。
マスターノード(マスターノード):制御するために使用される容器、スケジューリング、一般的な物理的なサーバ、
ノード(ノード演算)のグループ:特定の容器であるワークロード・ノードは、物理サーバであってもよく、ホストもクラウドであってもよいです

彼は加えた:
ポッドはKubernetes基本操作部です。Aポッドは、1つ以上の容器が密接に関連しているカプセル化内のクラスタ内で実行されるプロセスを表します。ポッドに加えて、同じサービスポッドを提供するために、外部アクセスインターフェースのセットとして見ることができるサービス、サービスの概念がありK8S。

K8Sチャート

DESCRIPTIONワークフロー図K8S

K8Sの簡単な構成およびアプリケーション
1、マスターインストールK8S(NODE11:192.168.4.11)、ノードとして設置ドッカーノード
2は、ドッカーは、物理マシンをミラーリングそれがプライベートリポジトリ上で使用することができるように、構成ファイルを変更します

[k8s_pkgsルート@ NODE11]#のVimの/ etc /のsysconfig /ドッカー
OPTIONS =「 - = falseを//閉じる... SELinuxのにSELinuxの対応
[ルート@ NODE11 k8s_pkgs] Vimの/etc/docker/daemon.json#
{
「安全でありませんで-registries ":[" 192.168.4.254:5000「]
}
#################################### #############################################
[ルート@ room9pc01ロイヤリティーフリー]#]ドッキングウィンドウの画像//物理マシン(192.168.4.254)ビルドプライベートイメージリポジトリ以下の
画像サイズ作成したリポジトリタグID
192.168.8.254:5000/mysqlを最新7bb2586065cd 10週のメンバー476.9メガバイト前
192.168.8.254:5000/pod-infrastructure 99965fb98423最新19メンバーヶ月前208.6メガバイト
192.168.8.254:5000/guestbook-php-frontend最新47ee16830e89 2年メンバー510メガバイト前
192.168.8.254:5000/tomcat-app最新a29e200a18e9 358.2メガバイト2年前メンバー
最新の405a0b586f7e 3年メンバー192.168.8.254:5000/redis-master 419.1メガバイト前
192.168.8.254:5000/guestbook-redis-slave最新e0c36a1fa372 3年メンバー109.5メガバイト前
1
3、関連するサービスの開始
:K8S-マスターを
ETCD:データベース、クラスタ全体の状態の保存
のみ入場リソースの操作を提供し、命令を実行し、認証、許可、アクセス制御、APIの登録と発見のメカニズムを提供する:KUBE-apiserver
KUBE-コントローラマネージャ:MT5の練習www.gendan5.com /mt5.html制御マネージャ、等の故障検出、自動拡張、ロールオーバーなど、クラスタの状態を維持する責任がある
KUBEスケジューラ:リソーススケジューリングを担当する、適切なポッド機へ発送に所定スケジューリングポリシーに従って

K8S-ノード:
kubelet:コンテナのライフサイクルを維持する責任命令受信ノードのノード(K8Sクライアント)も、ボリューム(CVI)とネットワーク(CNI)の管理を担当して
KUBE-プロキシ:プロキシノード、サービスのクラスタを提供する責任があります内部サービスの発見とロードバランシング
ドッキングウィンドウ:実際のコンテナサービス、実像管理を実行し、ポッドとコンテナの責任

[ルート@ NODE11 k8s_pkgs]#RPM -qドッカー
ドッカー-1.13.1-91.git07f3374.el7.centos.x86_64
#master的组件
[ルート@ NODE11 kubernetes]#etcd開始systemctl
[ルート@ NODE11 kubernetes]#はetcd有効systemctl
[ルート@ NODE11 k8s_pkgs]#1 systemctl開始KUBE-apiserver.service
[ルート@ NODE11 k8s_pkgs] KUBE-apiserver.service有効systemctl#
[ルート@ NODE11 k8s_pkgs]#1 systemctl開始KUBE-コントローラmanager.service
[ルート@ NODE11 k8s_pkgs] #はKUBE-コントローラmanager.serviceを有効systemctl
[ルート@ NODE11 k8s_pkgs]#はKUBE-scheduler.serviceを開始systemctl
[ルート@ NODE11 k8s_pkgs]#イネーブルsystemctl KUBE-scheduler.service
#node的组件
[ルート@ NODE11 k8s_pkgs]#systemctlスタートドッキングウィンドウ
[ルート@ NODE11 k8s_pkgs]#ドッカーを有効systemctl
[ルート@ NODE11 k8s_pkgs]#はkubelet.serviceを開始systemctl
[ルート@ NODE11 k8s_pkgs]#はkubelet.serviceを有効systemctl
[ルート@ NODE11 k8s_pkgs]#はKUBE-proxy.serviceを開始systemctl
[ルート@ NODE11 k8s_pkgs]#はKUBE-proxy.serviceを有効systemctl

4、構成の変更は、サービスを再起動します

[k8s_pkgsルート@ NODE11] LS#の/ etc / Kubernetes /
apiserverコントローラー設定プロキシマネージャkubeletスケジューラ
[ルート@ NODE11 k8s_pkgs]#のVimは/ etc / Kubernetes / apiserver
KUBE_API_ADDRESS = " -安全でないバインドアドレス= 0.0.0.0で" //許可する任意のホストマシンにアクセスすることができ
KUBE_ADMISSION_CONTROL ServiceAccountから削除する//サービスアカウントを削除し
ます。[root @ NODE11 k8s_pkgs]#systemctl再起動KUBE-apiserver.service
[ルート@ NODE11 k8s_pkgs]#のvimの/ etc / Kubernetes / configに
KUBE_MASTER = " -マスター= http://192.168.4.11:8080 "指定されたマスター// IPアドレス
[ルート@ NODE11 k8s_pkgs]#のvimの/ etc / Kubernetes / kubelet
KUBELET_ADDRESS = " -アドレス= 0.0.0.0" //簡単にマスターリモート管理へのすべてのアドレス上のカスタムクライアントを実行すると、
「 - API-サーバ= KUBELET_API_SERVER = http://192.168.4.11:8080」//クライアントとサーバーのIPアドレスで指定されました
KUBELET_POD_INFRA_CONTAINER = " -ポッドインフラコンテナイメージ= 192.168.4.254:5000 /ポッド・インフラ" // POD(コンテナのグループ)独自のイメージリポジトリの指定
[ルートを@ NODE11 k8s_pkgs]#systemctl再起動kubelet

図5に示すように、アプリケーションのテストのTomcat + MySQLの

[ルート@ NODE11 tomcat_mysql]は、#のvimのmysql-rc.yaml / mysqlのrcファイルの宣言の作成
apiVersionを:v1の
種類://型宣言ReplicationController
メタデータ:
名前:mysqlの// RC名前
スペック://ファイルが宣言する
レプリカ:1 //タグは、アプリを必要としている:ポッドのmysqlの数は1つのである
セレクタ://セレクタは、ラベルを探しているアプリ:mysqlのポッド
アプリ:mysqlの
テンプレート://非準拠のポッド番号は、以下の条件をポッド満たす作成する場合は
メタデータ:
ラベル:
アプリケーション:MySQLの
仕様:
コンテナ:

  • 名前:MySQLの
    画像:192.168.4.254:5000/mysql //民間倉庫ミラーリング
    ポート:
    • containerPort:3306
      ENV:
    • 名前:MYSQL_ROOT_PASSWORDの
      値: "123456"

#YAMLファイルに応じてリソースを作成し
ます。[root @ NODE11 tomcat_mysql]#はkubectl -fのmysql-rc.yamlを作成// RCコンテナにmysqlのための名前を開始
[ルート@ NODE11 tomcat_mysql]#kubectl GET RC // 取得した情報の
目的の名前をAGEのREADY CURRENT
のMySQL。1. 1. 1 IH
[ルート@ NODE11 tomcat_mysql] GET#kubectl //コンテナとコンテナインフラMySQLの容器のポッドグループを含むポッド
AGEのNAMEが再起動STATUS READY
1/1 0 IH-v0pdr実行MySQLを

ポッド#ビューした後、詳細ビューのメッセージ
[ルート@ NODE11 tomcat_mysql]#kubectlポッドのmysql-v0pdr //記述するチェック情報ポッド
[ルート@ NODE11 tomcat_mysql]#ドッカ PS

#mysqlのサービスを作成し
ます。[root @ NODE11 tomcat_mysql]#のvimのmysql-svc.yaml // mysqlのコンテナサービススクリプトの起動
apiVersion:V1の
種類:サービス
メタデータ:
名前:mysqlの
仕様:
ポート:

  • ポート:3306
    セレクター:
    アプリケーション:mysqlの
    [ルート@ NODE11 tomcat_mysql] -f#kubectl作成のmysql-svc.yaml //コンテナは、MySQLサービスを開始MySQLの
    [ルート@ NODE11 tomcat_mysql]#kubectl GETサービスは// サービスの開始を参照
    NAMEクラスタをAGEのIP(S) -外部ポート-IP
    Kubernetes 10.254.0.1 <なし> 443 / TCP 4H
    MySQLの10.254.164.241 <なし> 3306 / TCP 7M

    MySQLのサービス外部-IP、ユーザーが直接アクセスしませmysqlのが、Webサービスへのアクセスを行うため、

#Webサービスを作成し
ます。[root @ NODE11 tomcat_mysql]#vimの myweb-rc.yamlは// comcatコンテナのスクリプトの起動
ReplicationController:一種
のメタデータ:
名前:mywebの
仕様:
レプリカ:コピーの5 //数
セレクター:
アプリケーション:myweb
テンプレート:
メタデータ:
ラベル:
アプリケーション:mywebの
仕様:
コンテナ:

  • 名前:mywebの
    画像:192.168.4.254:5000/tomcat-app //民間倉庫ミラーリング
    ポート:
    • containerPort:8080
      ENV:
    • 名前:MYSQL_SERVICE_HOST //接続mysqlの容器
      値: 'mysqlの'
    • 名前:MYSQL_SERVICE_PORTの
      値: '3306'
      [ルート@ NODE11 tomcat_mysql]#-f myweb-rc.yaml作成kubectl
      [ルートを@ NODE11 tomcat_mysql]#kubectl GET RC
      NAME所望の電流READY AGEの
      mysqlの1 1 1 2時間の
      myweb 5つの5 5つの35Sを
      [ルート@ NODE11 tomcat_mysql]#kubectl GETポッド
      NAME READYのステータスが再起動AGEの
      0 2Hの実行のmysql-v0pdr 1/1
      0 47S実行myweb-jsb1k 1/1
      0 47S実行myweb-kl2gk 1/1
      0 47Sを実行myweb-l1qvq 1/1
      0 47S実行myweb-p0n7g 1/1
      myweb-sh6jl 1/1 0 47Sを実行し
      ます。[root @ NODE11 tomcat_mysql]#vimのmyweb-svc.yaml // myweb服务脚本
      apiVersion:V1の
      種類:サービス
      メタデータ:
      名前:mywebの
      仕様:
      タイプ:NodePort
      ポート:
      • ポート:8080 //次の2行、30001のアクセスノードを表すの8080ポッドにマップされます
        nodePort:30001
        セレクター:
        アプリケーション:myweb
        [ルート@ NODE11 tomcat_mysql]#kubectl作成-f myweb-svc.yaml // myweb開始サービス
        [ルートtomcat_mysql @ NODE11]#kubectl GET-サービス
        NAME CLUSTER AGEの外部IP-IP-PORT(S)
        Kubernetes 10.254.0.1 <なし> 443 / TCP 4H
        MySQLの10.254.164.241 <なし> 3306/30メートルTCP
        MyWeb 10.254.222.24 <ノード> 8080:30001 / TCP 26S
        #ドッカーPS [NODE11 tomcat_mysql @ルート] |のawk '$ {2}を印刷'
        ID
        192.168.4.254:5000/tomcat-app
        192.168.4.254:5000/tomcat-app
        192.168.4.254:5000/tomcat -app
        192.168.4.254:5000/tomcat-app
        192.168.4.254:5000/tomcat-app
        192.168.4.254:5000/pod-infrastructure // mywebインフラコンテナ
        192.168.4.254:5000/pod-infrastructure
        192.168.4.254:5000/pod-infrastructure
        192.168.4.254:5000/pod-infrastructure
        192.168.4.254:5000/pod-infrastructure
        192.168.4.254:5000/mysql
        192.168.4.254:5000/pod -infrastructure // mysqlのインフラコンテナの
        各ポッドは、インフラストラクチャコンテナを持っている必要があるため#mywebも作業船を持っている必要があり、共感mysqlはポッドとコンテナを開始し、5つのポッドと10個のコンテナを起動します

ブラウザアクセスhttp://192.168.4.11:30001/
あなたは、コンテナを削除した後、K8Sは、コンテナの数は、RC声明未満となっているでしょう、それは自動的に新しい対応するコンテナを作成します

[ルートtomcat_mysql @ NODE11] -f RM#ドッカーのc1bf3822f088
[ルート@ NODE11 tomcat_mysql] PS#ドッカー
。1
2
あなたが動的にポッドの数を調整したいのですが、数を変更することができた場合、RC

[ルート@ NODE11 tomcat_mysql]#1 kubectlのスケール--replicas = 3 replicationcontroller myweb // myweb 3に調整されるコンテナの数
[ルート@ NODE11 tomcat_mysql] RC#kubectl GET
NAME AGEのCURRENT READY DESIRED
のMySQL。1. 1. 1のIH
myweb。3. 3 36M。3
[ルート@ NODE11 tomcat_mysql] GET#kubectl POD
AGEのNAMEが再起動STATUS READY
のMySQL-58メートルhg9z0 1/1 0実行
実行-3g6rz 1/1 0 32M MyWeb
MyWebを1/1 0 32M-90jtsを実行している
1/1 MyWeb-rvrr1を実行0 32M
[ルート@ NODE11 tomcat_mysql] PS#ドッキングウィンドウ-a | awkの'{2} $を印刷' //自動的にドッキングウィンドウの数を調整
ID
192.168.4.254:5000/tomcat-app
192.168.4.254:5000/tomcat-app
192.168 .4.254:5000 / Tomcatのアプリ
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/pod-infrastructure
192.168.4.254:5000/mysql
192.168.4.254:5000/pod-infrastructure

(ポッドはまた、マイクロサービスとして知られている)サービスを削除し、RC

[ルート@ NODE11 tomcat_mysql]#kubectl削除サービスのmysql
サービス"MySQLは"削除
[ルート@ NODE11 tomcat_mysql]#kubectl削除サービスmywebの
サービス"myweb"は削除し
ます。[root @ NODE11 tomcat_mysql]#kubectl削除のRC MySQLの
replicationcontroller "MySQLは"削除
[ルートを@ NODE11 tomcat_mysql]#kubectl削除のRC mywebの
replicationcontroller "myweb"を削除
#ドッキングウィンドウPS //无容器运行[ルート@ NODE11 tomcat_mysql]

からのphp-Redisのマスター

#はRedisのマスター
[ルート@ NODE11 php_redis]#LS
フロントエンド-controller.yaml Redisのマスター- controller.yaml Redisのスレーブ-controller.yaml
フロントエンド-service.yaml Redisのマスター- service.yaml Redisのスレーブ-service.yamlを
[ルート@ NODE11 php_redis]#VIM Redisのマスター-controller.yaml
piVersion:V1
種類:ReplicationController
メタデータ:
名前:Redisのマスター
ラベル:
名前:Redisのマスター
仕様:
複製:1つの
セレクタ:
名前:Redisのマスター
テンプレート:
メタデータ:
ラベル:
名前:Redisのマスターの
仕様:
コンテナ:

  • 名前:マスター
    イメージ:192.168.4.254:5000/redis-master
    ポート:
    • containerPort:6379
      [ルート@ NODE11 php_redis]#が作成kubectl -fはRedisのマスター・controller.yaml
      [ルート@ NODE11 php_redis]#vimのRedisのマスター-service.yaml
      apiVersion:V1の
      種類:サービス
      メタデータ:
      名前:Redisのマスターの
      ラベル:
      名前:Redisのマスターの
      スペック:
      ポート:
      • ポート:6379
        targetPort:6379
        セレクター:
        名前:Redisのマスター
        [ルートNODE11 php_redis @]#は、-fは、マスター・service.yamlをRedisの作成kubectl

#Redisのスレーブ
[ルート@ NODE11 php_redis]#VIMのRedisスレーブ-controller.yaml
apiVersion:V1
種類:ReplicationController
メタデータ:
名前:Redisのスレーブ
ラベル:
名前:Redisのスレーブ
仕様:
複製:2
セレクタ:
名前:redis-スレーブ
テンプレート:
メタデータ:
ラベル:
名前:Redisのスレーブ
仕様:
コンテナ:

  • 名前:スレーブ
    画像:192.168.4.254:5000/guestbook-redis-slave
    ENV:
    • 名前:GET_HOSTS_FORM
      値:ENVの
      ポート:
    • containerPort:6379
      [ルート@ NODE11 php_redis]#のvimのRedisスレーブ-service.yaml
      apiVersion:v1の
      種類:サービス
      メタデータ:
      名前:Redisのスレーブ
      ラベル:
      名前:Redisのスレーブ
      仕様:
      ポート:
      • ポート:6379
        セレクタ:
        名前:Redisのスレーブ
        [ルート@ NODE11 php_redis]#が作成kubectl -fはRedisのスレーブ・service.yaml
        [ルート@ NODE11 php_redis]#kubectl GET RC
        NAMEは、所望の電流READY AGEは
        Redisのマスター1 1 1 9メートルを
        Redisのスレーブ2 2 2 1メートル
        [ルート@ NODE11 php_redis]#kubectl GETポッド
        NAME READYのステータスが再起動AGEは
        0 9メートル実行Redisのマスター-cn208 1/1
        のRedisスレーブ-dctvw 1/1 0 1メートル実行
        のRedisスレーブ-gxtfsを1 / 1 0 1メートル実行
        [ルートを@ NODE11 php_redis]#kubectl GETサービス
        NAME CLUSTER-IP EXTERNAL-IP PORT(S)AGEの
        kubernetes 10.254.0.1 <なし> 443 / TCP 9hの
        Redisのマスター10.254.174.239 <なし> 6379 / TCPを8メートル
        のRedisスレーブ10.254.117.213 <なし> 6379 / TCP 42S

#frontend(前端)
[ルート@ NODE11 php_redis]#VIMフロントエンド-controller.yaml
apiVersion:V1の
種類:ReplicationController
メタデータ:
名前:フロントエンド
ラベル:
名前:フロントエンド
仕様:
複製:3
セレクタ:
名前:フロントエンド
テンプレート:
メタデータ:
ラベル:
名前:フロントエンド
仕様:
コンテナ:

  • 名前:フロントエンド
    画像:192.168.4.254:5000/guestbook-php-frontend
    ENV:
    • 名前:GET_HOSTS_FROMの
      値:ENVの
      ポート:
      • containerPort:80
      • [ルート@ NODE11 php_redis]#-fフロントエンド-controller.yaml作成kubectl
        [ルートを@ NODE11 php_redis]#vimのフロントエンド-service.yaml
        apiVersion:V1の
        種類:サービス
        メタデータ:
        名前:フロントエンド
        ラベル:
        名前:フロントエンドの
        仕様:
        タイプ:NodePort
        ポート:

        • ポート:80
          nodePort:30001
          セレクター:
          名前:フロントエンド
          [ルートNODE11 php_redis @]#は、-fフロントエンド-service.yaml作成kubectl
          [ルート@ NODE11 php_redis]#kubectl GET RC
          名が現在のREADY AGEが希望
          3 3 3 2メートルフロントエンド
          Redisのマスターを1 1 1 14メートル
          2 2 2 -スレーブはRedisの6メートル
          [ルート@ NODE11 php_redis]#kubectl GETポッド
          NAME READYのステータスが再起動AGEは、
          フロントエンド・3dqhv 1/1 0 2メートル実行
          0 2メートルの実行フロントエンド・ct7qw 1/1
          フロントエンド-tz3p4 1/1 0 2メートル実行
          Redisのマスター-cn208 1/1は0 14メートルを実行すると、
          1月1日0 6メートル実行-スレーブdctvw Redisの
          0 6メートル実行のRedisスレーブ-gxtfs 1/1
          [ルート@ NODE11 php_redis]#kubectl GETサービス
          名クラスタ-IPを外部IP PORT(S)AGE
          フロントエンド10.254.210.184 <ノード> 80:30001 / TCPの42Sの
          kubernetes 10.254.0.1 <なし> 443 / TCP 9H
          Redisのマスター10.254.174.239 <なし> 6379 / TCP 13メートル
          のRedisスレーブ10.254.117.213 <なし> 6379 / TCP 5メートル

ブラウザのアクセスhttp://192.168.4.11:30001/、メイン読書から分離され、書き込みテストのRedis

おすすめ

転載: blog.51cto.com/14513127/2477735