普遍的ではないものの、大企業から中小企業になる人気のK8S技術のためには、現在使用中ですが、私は遅かれ早かれそうなものは、それについて学ぶために時間をつかむときと信じています!
K8S方法は2通りの方法でリソースを作成するには:コマンドラインとYAMLファイルを、このブログはを参照するには、リソースを作成するには、YAMLファイルを使用するコマンドラインを使用する方法に焦点を当てて、基本的なリソースオブジェクトの管理K8S
YAML設定ファイルとリストKubernetesは、個人の習慣によると、同じです。ボーエンは、まとめYAMLファイルと呼ばれます!
A、YAMLファイルの基礎
YAMLは設定ファイルの言語に専念している、それは非常にシンプルで強力です。そして、プロパティ、XML、JSONや他のデータ形式の理解、そして、あなたはより多くの有益な習慣があります。実際には、YAMLはマークアップ言語、新開発の統合のほとんどの特性の組み合わせです。
YAMLファイルの特徴:
- 構造化、明確な構造。
- 始めるのは使いやすいシンプルな、。
- 意味的に豊かな、強力な、
特別な注意が必要です。- 大文字と小文字を区別し;
- 厳格な要件は、インデント。
二、YAMLファイル
組成物1)YAMLファイル
YAMLファイルKubernetesは主に、すなわち、5つのフィールドで構成されています。
- apiVersion:APIのバージョン情報。
- 種類:リソース・オブジェクトを作成するために指定されたタイプ。
- メタデータ:オブジェクト、名前空間のリソース名のデータフィールド定義内にネストされたメタデータ。
- 仕様:仕様定義リソースは、一種の特徴の出会いに状態のパフォーマンスと出会い、ユーザーの期待を確実にするために、コントローラに依存して何を持っている必要があります。
- ステータス:リソースの現在のステータスを表示しますが、K8Sは無限に近い満たすユーザーの期待に、目標状態への現在の状態を確認することです。これは、リソースの現在の状態を表します。
2)ヘルプ書き込みYAMLファイルを取得します。
フィールドYAMLファイルの意識がすることは何もないが、それでも書く方法を知りません。あなたは、以下のコマンドを用いていくつかの助けを得ることができます。
[root@master ~]# kubectl api-versions
//获取当前集群支持的 apiserver版本
[root@master ~]# kubectl api-resources
//获取全部的api资源对象
[root@master ~]# kubectl explain deployment
//查看k8s某个对象的配置清单格式,应该包含哪些字段及使用方法
[root@master ~]# kubectl explain deployment.spec
//这个命令是非常重要的,它可以一级一级来获取帮助
基本フォーマット3)YAMLファイル
[root@master ~]# cat web.yaml
kind: Deployment //指定要创建的资源对象
apiVersion: extensions/v1beta1 //指定deployment所对应的API版本信息
metadata:
name: web //定义deployment的名称
spec:
replicas: 2 //指定副本数量
template:
metadata:
labels: //指定pod的标签
app: web_server
spec:
containers:
- name: nginx //指定pod运行的容器的名称
image: nginx //指定运行容器所需的镜像
4)作成または更新するために適用さ
[root@master ~]# kubectl apply -f web.yaml
//使用“-f”来指定yaml文件,根据yaml文件中定义的内容生成所需的资源
あなたが別のファイルを見つけた場合、複数回指定することが適用され、更新
5)削除します
[root@master ~]# kubectl delete -f web.yaml
//删除yaml文件中定义的资源
6)確認
[root@master ~]# kubectl get deployments. web
//查看web控制器所产生的pod
NAME READY UP-TO-DATE AVAILABLE AGE
web 2/2 2 2 5m50s
[root@master ~]# kubectl describe deployments. web
//查看web控制器的详细信息
次のように返された結果は以下のとおりです。
その結果、Kubernetesポッドは、我々はYAMLファイルが必要なリソースに基づいて生成されています!
[root@master ~]# kubectl get pod -o wide //查看pod的详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-d6ff6c799-7jtvd 1/1 Running 0 17m 10.244.2.2 node02 <none> <none>
web-d6ff6c799-7tpdc 1/1 Running 0 17m 10.244.1.2 node01 <none> <none>
K8Sは、クラスタ・テストにアクセスします。
第三に、外部からのアクセス可能なサービスのK8SポッドでYAMLファイルを作成します
[root@master ~]# cat web-svc.yaml
kind: Service
apiVersion: v1
metadata:
name: web-svc
spec:
type: NodePort //指定类型为NodePort,可以让外部访问,否则默认情况下是cluster IP,仅限集群内部访问
selector:
app: web_server //必须与deployment资源对象的标签进行关联
ports:
- protocol: TCP
port: 80 //指定要映射到的Cluster IP的端口
targetPort: 80 //指定的是要映射pod中的端口
nodePort: 31000 //指定映射到宿主机的端口,范围是30000~32767
[root@master ~]# kubectl apply -f web-svc.yaml
//生成service的控制文件(yaml中已经定义其名称为web-svc)
[root@master ~]# kubectl get svc web-svc //查看service控制器
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-svc NodePort 10.99.32.22 <none> 80:31000/TCP 12m
//TYPE:为NodePort,可以使外部访问;
//PORT:映射出的端口与我们定义的一样
テストアクセス:
注:アクセス・グループは、任意のノードに集中することであるポッドで提供クラスタサービスK8Sにアクセスすることができます!
第四に、ロードバランシングを実現する基本原理
[root@master ~]# kubectl describe svc web-svc
//查看service的详细信息
情報が返され、次の通りである:
エンドポイントは、ポッドをバックエンド今来て、その後、次のことを確認し、IPアドレスを指定:
[root@master ~]# kubectl get pod -o wide | awk '{print $6}'
//提取后端pod的IP地址
IP
10.244.2.2
10.244.1.2
//与上述查询的结果一样!
私たちは、それがどのように達成することである、サービスの負荷バランス能力であることを知っていますか?
実際には、iptablesので実装そう背が高くない、KUBE-プロキシ転送メカニズムの理論的根拠は、他のiptablesのルールに転送する「-j」オプションを使用し、IPがクラスタIPが提供するサービスであるターゲットを定義し、そして、効果のロードバランシング、その後、確認してください。
[root@master ~]# kubectl get svc web-svc | awk '{print $3}'
//首先查看service的群集IP地址
CLUSTER-IP
10.99.32.22
[root@master ~]# iptables-save | grep 10.99.32.22
//查看iptables规则中与群集IP地址相关的内容
-A KUBE-SERVICES ! -s 10.244.0.0/16 -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-MARK-MASQ
-A KUBE-SERVICES -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7
从上述结果中可以看出,当目标地址是群集IP时,就会转发到KUBE-SVC-3RBUQ3B6P3MTQ3S7规则中
[root@master ~]# iptables-save | grep KUBE-SVC-3RBUQ3B6P3MTQ3S7
:KUBE-SVC-3RBUQ3B6P3MTQ3S7 - [0:0]
-A KUBE-NODEPORTS -p tcp -m comment --comment "default/web-svc:" -m tcp --dport 31000 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7
-A KUBE-SERVICES -d 10.99.32.22/32 -p tcp -m comment --comment "default/web-svc: cluster IP" -m tcp --dport 80 -j KUBE-SVC-3RBUQ3B6P3MTQ3S7
-A KUBE-SVC-3RBUQ3B6P3MTQ3S7 -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-E3SP5QDRAUFB55IC
-A KUBE-SVC-3RBUQ3B6P3MTQ3S7 -j KUBE-SEP-3T3LUFAKMOTS5BKN
//从查询结果中可以看出其负载均衡的效果,因为后端只创建了两个pod,所以其概率为0.5
K8Sまたは提案参照の詳細についてはK8S中国のドキュメント
この記事--------これまでのところ、読んでくれてありがとう--------