Kubernetes快速入門実戦
8473 ワード
Kubernetesの生産環境はすでに1年半運行して、穴を踏んで無数になった後、今の暇な時にここでいくつか分かち合って、主に初心者にKubernetesを速く手に入れることができます.
以下のプレゼンテーションで使用する環境はminikubeです.
クラスタの作成
まず、使用するminikubeバージョンを表示します.
現在最新の0.25を使用する.0バージョンは、自分のニーズに合わせて指定されたバージョンをダウンロードすることもできます.
minikubeの起動:
minikubeが起動すると、単一ノードKubernetesクラスタが作成されます.
クラスタのバージョンを表示するには、次の手順に従います.
ここには2つのバージョンがあります.client versionはkubectlコマンドラインツールのバージョンを指し、server versionはKubernetesのバージョンです.
詳細なバージョン情報を表示するには、次の手順に従います.
クラスタが存在するホストのipは172.17である.0.77.
注意:ここでmasterとは、Kubernetesクラスタのmasterノードを指します(Kubernetesクラスタでは、ノードは2種類に分けられ、1つはmasterノード、1つはnodeノードです).どうやってnodeノードが見えますか?
host 01はnodeノードであり、現在の環境では実際にはホストが1台しかありません.このホストはmasterノードとしてもnodeノードとしても機能します.
アプリケーションの配備
次に、nginxの導入を例に、アプリケーションの導入手順を説明します.
runコマンドを使用してfirst-appというdeploymentを作成し、docker hub上の最新のnginxミラーを使用し、アプリケーションポートを80に指定します.deploymentは何をしていますか?焦らないで、下を見てください.
現在のdeploymentを表示するには、次の手順に従います.
現在のpodを表示するには:
現在first-app-6 db 44 b 474-dbbtpというpodがありますが、このpodの名前をよく見てみると、作成したばかりのdeploymentの名前に接尾辞が付いているのではないでしょうか.確かにそうです.Kubernetesでは、deploymentを使用してpodを宣言および管理します(実際には、ここでは説明しません).各podには少なくとも1つのcontainerが含まれています.
より詳細なpodの内容を表示します.
現在first-app-6 db 44 b 474-dbtpというpodのip、ポート、image、podライフサイクルのイベントなどの情報が表示されています.
対外公開サービス
nginxアプリケーションが配備されていますが、どうやってアクセスしますか?この場合サービスが必要です.サービスを作成するには、次の手順に従います.
first-appという名前で作成されたサービスを表示します.
PORT(S)の欄には、80ポートのほか、後ろに30491ポートがあります.これは「NodePort」タイプを使用してサービス割り当てを作成したポートで、ホストipとこのポートを通じて、このサービスにアクセスできます.curlツールを使用してアクセスできます.
拡張アプリケーション
nginxアプリケーションへのアクセスに成功したばかりですが、横方向に拡張するには複数のnginxが必要になる場合がありますが、Kubernetesではどのように実現しますか?
現在のpodを見ると、現在first-appが3つあることがわかります.
3つはリソースがもったいないと思ってpodの数を減らしたいなら、同じコマンドを使ってreplicasパラメータの値を必要な値に変更すればいいです.
アプリケーションの更新
最も一般的なのは、ミラーを更新することです.以前はdocker hub上の最新のnginxを使用していましたが、現在は1.10を使用しています.3この古いバージョンは最新バージョンの代わりになります.まず、現在使用されているnginxバージョンを表示します.ここでは、存在しないページにアクセスする簡単な方法があります.次のようにします.
現在使用されているnginxバージョンは1.13です.9、次に更新操作を行います.
現在のnginxのバージョンを確認します.
nginxバージョンは1.10に正常に更新されました.3.
アプリケーションの削除
最後に削除アプリケーションについてお話ししますが、以前はdeploymentでアプリケーションを作成していたので、deploymentを削除するだけで対応するアプリケーションを削除することができます.
現在のpodをもう一度確認します.
すべてのpodは削除されました.
この記事では、Kubernetsの基本的な操作を簡単に紹介し、後でKubernetesに関する内容を更新します.例えば、次のようにします. Kubernetesの核心概念; ネットワークスキームの選択と構成; は、高可用性のkubernetes生産クラスタをどのように構築するか. ログ/モニタリングスキームの選択; クラスタのトラブルシューティング
上記の内容に限らず、興味のあるパートナーは、多くの注目を集めることができます.ありがとうございます!
以下のプレゼンテーションで使用する環境はminikubeです.
クラスタの作成
まず、使用するminikubeバージョンを表示します.
$ minikube version
minikube version: v0.25.0
現在最新の0.25を使用する.0バージョンは、自分のニーズに合わせて指定されたバージョンをダウンロードすることもできます.
minikubeの起動:
$ minikube start
Starting local Kubernetes v1.9.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.
minikubeが起動すると、単一ノードKubernetesクラスタが作成されます.
クラスタのバージョンを表示するには、次の手順に従います.
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"", Minor:"", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2018-01-26T19:04:38Z", GoVersion:"go1.9.1", Compiler:"gc", Platform:"linux/amd64"}
ここには2つのバージョンがあります.client versionはkubectlコマンドラインツールのバージョンを指し、server versionはKubernetesのバージョンです.
詳細なバージョン情報を表示するには、次の手順に従います.
$ kubectl cluster-info
Kubernetes master is running at https://172.17.0.77:8443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
クラスタが存在するホストのipは172.17である.0.77.
注意:ここでmasterとは、Kubernetesクラスタのmasterノードを指します(Kubernetesクラスタでは、ノードは2種類に分けられ、1つはmasterノード、1つはnodeノードです).どうやってnodeノードが見えますか?
$ kubectl get node
NAME STATUS ROLES AGE VERSION
host01 Ready 20m v1.9.0
host 01はnodeノードであり、現在の環境では実際にはホストが1台しかありません.このホストはmasterノードとしてもnodeノードとしても機能します.
アプリケーションの配備
次に、nginxの導入を例に、アプリケーションの導入手順を説明します.
$ kubectl run first-app --image=nginx --port=80
deployment "first-app" created
runコマンドを使用してfirst-appというdeploymentを作成し、docker hub上の最新のnginxミラーを使用し、アプリケーションポートを80に指定します.deploymentは何をしていますか?焦らないで、下を見てください.
現在のdeploymentを表示するには、次の手順に従います.
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
first-app 1 1 1 1 1m
現在のpodを表示するには:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
first-app-6db44b474-dbbtp 1/1 Running 0 4m
現在first-app-6 db 44 b 474-dbbtpというpodがありますが、このpodの名前をよく見てみると、作成したばかりのdeploymentの名前に接尾辞が付いているのではないでしょうか.確かにそうです.Kubernetesでは、deploymentを使用してpodを宣言および管理します(実際には、ここでは説明しません).各podには少なくとも1つのcontainerが含まれています.
より詳細なpodの内容を表示します.
$ kubectl describe pod first-app-6db44b474-dbbtp
Name: first-app-6db44b474-dbbtp
Namespace: default
Node: host01/172.17.0.77
Start Time: Fri, 02 Mar 2018 06:48:02 +0000
Labels: pod-template-hash=286006030
run=first-app
Annotations:
Status: Running
IP: 172.18.0.4
Controlled By: ReplicaSet/first-app-6db44b474
Containers:
first-app:
Container ID: docker://54eacc7ff536d7181fa366883f7ed4cf632492ad6ed391207fea436d22d219a9
Image: nginx
Image ID: docker-pullable://nginx@sha256:4771d09578c7c6a65299e110b3ee1c0a2592f5ea2618d23e4ffe7a4cab1ce5de
Port: 80/TCP
State: Running
Started: Fri, 02 Mar 2018 06:48:14 +0000
Ready: True
Restart Count: 0
Environment:
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-zkqw6 (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-zkqw6:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-zkqw6
Optional: false
QoS Class: BestEffort
Node-Selectors:
Tolerations:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 7m default-scheduler Successfully assigned first-app-6db44b474-dbbtp to host01
Normal SuccessfulMountVolume 7m kubelet, host01 MountVolume.SetUp succeeded for volume "default-token-zkqw6"
Normal Pulling 7m kubelet, host01 pulling image "nginx"
Normal Pulled 7m kubelet, host01 Successfully pulled image "nginx"
Normal Created 7m kubelet, host01 Created container
Normal Started 7m kubelet, host01 Started container
現在first-app-6 db 44 b 474-dbtpというpodのip、ポート、image、podライフサイクルのイベントなどの情報が表示されています.
対外公開サービス
nginxアプリケーションが配備されていますが、どうやってアクセスしますか?この場合サービスが必要です.サービスを作成するには、次の手順に従います.
$ kubectl expose deployment/first-app --type="NodePort" --port=80
service "first-app" exposed
first-appという名前で作成されたサービスを表示します.
$ kubectl get svc first-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
first-app NodePort 10.102.0.12 80:30491/TCP 1m
PORT(S)の欄には、80ポートのほか、後ろに30491ポートがあります.これは「NodePort」タイプを使用してサービス割り当てを作成したポートで、ホストipとこのポートを通じて、このサービスにアクセスできます.curlツールを使用してアクセスできます.
$ curl 172.17.0.77:30491
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
拡張アプリケーション
nginxアプリケーションへのアクセスに成功したばかりですが、横方向に拡張するには複数のnginxが必要になる場合がありますが、Kubernetesではどのように実現しますか?
$ kubectl scale deployment/first-app --replicas=3
deployment "first-app" scaled
現在のpodを見ると、現在first-appが3つあることがわかります.
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
first-app-6db44b474-6vlrj 1/1 Running 0 39s
first-app-6db44b474-dbbtp 1/1 Running 0 19m
first-app-6db44b474-gjzgg 1/1 Running 0 39s
3つはリソースがもったいないと思ってpodの数を減らしたいなら、同じコマンドを使ってreplicasパラメータの値を必要な値に変更すればいいです.
アプリケーションの更新
最も一般的なのは、ミラーを更新することです.以前はdocker hub上の最新のnginxを使用していましたが、現在は1.10を使用しています.3この古いバージョンは最新バージョンの代わりになります.まず、現在使用されているnginxバージョンを表示します.ここでは、存在しないページにアクセスする簡単な方法があります.次のようにします.
$ curl 172.17.0.77:30491/abc
404 Not Found
404 Not Found
nginx/1.13.9
現在使用されているnginxバージョンは1.13です.9、次に更新操作を行います.
$ kubectl set image deployment/first-app first-app=nginx:1.10
deployment "first-app" image updated
現在のnginxのバージョンを確認します.
$ curl 172.17.0.77:30491/abc
404 Not Found
404 Not Found
nginx/1.10.3
nginxバージョンは1.10に正常に更新されました.3.
アプリケーションの削除
最後に削除アプリケーションについてお話ししますが、以前はdeploymentでアプリケーションを作成していたので、deploymentを削除するだけで対応するアプリケーションを削除することができます.
$ kubectl delete deployment/first-app
deployment "first-app" deleted
現在のpodをもう一度確認します.
$ kubectl get pod
No resources found.
すべてのpodは削除されました.
この記事では、Kubernetsの基本的な操作を簡単に紹介し、後でKubernetesに関する内容を更新します.例えば、次のようにします.
上記の内容に限らず、興味のあるパートナーは、多くの注目を集めることができます.ありがとうございます!