アプリケーションの練習 - サービス、イングレスのK8S

1.背景;

        kubeadmを使用して、クラスタの展開K8S、同社のK8S展開シナリオを簡素化し、オンラインとオフラインの次元クラスタリング部門に従うことにより、あなたは:. 1つの展開を迅速かつ簡単にkubeadm使用したい2つの主な理由があり、簡単に拡張ノード3を2.k8s展開は困難さを軽減します。 


2.システム環境は、


システムバージョン カーネルのバージョン etcd  リマーク
CentOSのLinuxのリリース1804年7月5日 3.10.0-862.14.4.el7.x86_64 etcdctlバージョン:3.3.11





3.関連するコンポーネントバージョン。


kubeadminコンポーネント名 コンポーネントのバージョン名 リマーク



k8s.gcr.io/kube-apiserver 



v1.13.4

KUBE-apiserver Kubernetesは、主に以下の機能を提供し、最も重要なコア構成要素の一つであります
  • REST API等認証および許可、データ検証およびクラスタ状態変化、を含むクラスタ管理インターフェイスを提供します

  • (他のモジュールによってAPIサーバークエリまたはデータを変更のみAPIサーバーのみ直接演算ETCD)ハブを提供する他のモジュールとの間でデータを相互作用と通信します






k8s.gcr.io/kube-controller-manager 





v1.13.4

KUBE-スケジューラは、クラスタ内のノードするスケジューリングポッドを割り当てる責任があり、それはKUBE-apiserverをリッスンし、クエリPODが割り当てられていないノード、及びそれらのポッド配信ノードのスケジューリングポリシーに従って(のポッド更新  NodeName フィールド)

スケジューラは、完全に多くの要因を考慮する必要があります。

  • フェアスケジュール

  • 資源の効率的な使用

  • QoSの

  • 抗親和和親和性

  • データの局所性(データの局所性)

  • 内部負荷外乱(インターワークロード干渉)

  • 締め切り


k8s.gcr.io/kube-scheduler


v1.13.4

KUBEコントローラマネージャとクラウド・コントローラマネージャ組成のコントローラマネージャは、apiserverによってクラスタ全体の状態を監視し、クラスタが予想される動作条件にあることを確認し、脳のKubernetesあります。



 k8s.gcr.io/kube-proxy



v1.13.4

各マシンには、負荷分散サービス(のみTCPとUDPをサポートしています)を設定するには、サービスのAPIサーバとエンドポイントの変化を監視KUBE-プロキシサービスを実行し、その上のiptablesによる。

KUBE-プロキシは、静的ポッドまたはdaemonset方法で実行することができ、物理マシン上で直接実行することができます。

k8s.gcr.io/pause 3.1

各ポッドのためのKubernetesは唯一のネットワークコンテナを追加することにより、コンテナネットワーク情報ポッド、ビジネスコンテナネットワーク共有ネットワークを引き継ぐために、gcr.io/google_containers/pause:latestの子会社です。名前「一時停止」として作成し、作成、削除、およびポッドを削除するには、ポッドとコンテナ、

コンテナは、ポッドの名前空間の操作を解析されます。


k8s.gcr.io/coredns 1.2.6 DNSは、ネームサービスを提供するために不可欠な機能拡張のクラスタとしてKUBE-DNSまたはCoreDNSによってKubernetesのコア機能の一つです。


weaveworks /織り

2.5.2

織ネットは、マルチホストコンテナネットワークプログラムは、ゴシップを介してフルメッシュTCP接続の確立を介して各ホストの間wRouterの中心、及び同期制御情報を制御プレーンをサポートすることです。これは、集中的K / Vストアの必要性を排除し、展開の複雑さは、ある程度まで減少させることができます



4.アプリケーションの。


以下に示すように(1)クラスタは通常動作を有します。


image.png



2.チェック配備構成を、



apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
  name: nginx-dp
spec: 
  selector:
    matchLabels:
      app: nginx-dp
  replicas: 1
  template: 
    metadata: 
      labels: 
        app: nginx-dp 
    spec: 
      containers: 
        - name: nginx 
          image: nginx:alpine 
          ports: 
            - containerPort: 80


3.查看ervice 配置;


apiVersion: v1
kind: Service
metadata:
  name: nginx-dp-cpf
spec:
  type: NodePort
  ports:
  - nodePort: 30001
    port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: nginx-dp


4.查看生成endpoints 


image.png


5.查看service 规则;

image.png


6.查看由kube-proxy 生成的iptables 防火墙规则; (正常规则)

image.png


注意:

      1.如果防火墙规则出现 类似如下规则:

        -A KUBE-EXTERNAL-SERVICES -p tcp -m comment --comment "default/nginx-dp-cpf: has no endpoints" -m addrtype --dst-type LOCAL -m tcp --dport 30001 -j REJECT --reject-with icmp-port-unreachable

      2.解决办法;

           (1).net.ipv4.ip_forward = 1  #系统内核路由转发功能

           (2).iptables -P FORWARD ACCEPT  #允许 iptables  FORWARD 链规则通过;

           (3).iptables -P OUTPUT ACCEPT  #允许 iptables  OUTPUT 链规则通过;

           (4).检查deployment labels  和 service labels 设置是否关联正确;

           (5).kubectl get endpoints  --show-labels  #注意此规则和防火墙规则匹配 若出现none 请检查防火墙规则;



7.进行功能测试 (k8s 集群内进行测试);


image.png







    

おすすめ

転載: blog.51cto.com/breaklinux/2442979