Kubernetes快速入門実戦

8473 ワード

Kubernetesの生産環境はすでに1年半運行して、穴を踏んで無数になった後、今の暇な時にここでいくつか分かち合って、主に初心者に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に関する内容を更新します.例えば、次のようにします.
  • Kubernetesの核心概念;
  • ネットワークスキームの選択と構成;
  • は、高可用性のkubernetes生産クラスタをどのように構築するか.
  • ログ/モニタリングスキームの選択;
  • クラスタのトラブルシューティング

  • 上記の内容に限らず、興味のあるパートナーは、多くの注目を集めることができます.ありがとうございます!