Windows10 でDocker環境のお勉強メモ | Docker / Kubernetes 実践コンテナ開発入門(5.Kubernetes入門)

Docker / Kubernetes 実践コンテナ開発入門(5.Kubernetes入門)

記事一覧(目次)

>>次の記事

<<前の記事

この記事は、「Docker/Kubernetes 実践コンテナ開発入門」の書籍を見ながら実践しています。実際の開発に即した内容となっており良書でした。

5.Kubernetes入門

コンテナオーケストレーションシステムのデファクトスタンダード

5.1 Kubernetesとは

  • コンテナオーケストレーション:複数のコンテナを束ねて1つのシステムとして運用するためのツール
  • Google社が自社のDocker運用で培ったノウハウをOSSとして提供
  • 2017年10月にDockerが正式採用
  • コンテナ運用の自動化
    • アプリケーションのデプロイ
    • 運用管理の自動化
    • Dockerホストの管理
    • サーバリソースの空き具合考慮
  • 色々なコンテナオーケストレーションたち
    • Dockerの「Swarm/Compose」
    • Googleの「Kubernetes」
    • CoreOSの「fleet」
    • Rancher Labsの「Rancher」
    • Mesosの「Marathon」

5.2 ローカル環境でKubernetesを実行する

kubectlのインストール

kubectlはKubernetesを操作するためのコマンドラインツール

Windows10 WSL(Ubuntu16.0.4)でインストールを実行

ch05_06_1$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 37.4M  100 37.4M    0     0  3344k      0  0:00:11  0:00:11 --:--:-- 3910k
ch05_06_1$ ls
kubectl  simple-pod.yaml
ch05_06_1$ chmod  +x kubectl
ch05_06_1$ sudo mv kubectl /usr/bin/

[sudo]

password for: ch05_06_1$ kubectl version Client Version: version.Info{Major:”1″, Minor:”13″, GitVersion:”v1.13.1″, GitCommit:”eec55b9ba98609a46fee712359c7b5b365bdd920″, GitTreeState:”clean”, BuildDate:”2018-12-13T10:39:04Z”, GoVersion:”go1.11.2″, Compiler:”gc”, Platform:”linux/amd64″} The connection to the server localhost:8080 was refused – did you specify the right host or port?

ダッシュボードのインストール(Windows10 Home + WSL)

本家サイトの手順通り、https://github.com/kubernetes/dashboard

エラーが発生。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused

8080ポートが使用中のため?かと考え、実行中のコンテナを停止して再実行

しかし、同じエラーが発生

ch05_06_1$ docker container ls
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
71a6ab8bf9a7        example/echo:latest   "go run /echo/main.go"   5 days ago          Up 5 days           0.0.0.0:9000->8080/tcp   xenodochial_booth
ch05_06_1$ docker container stop 71a6ab8bf9a7
71a6ab8bf9a7
ch05_06_1$ sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
unable to recognize "https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml": Get http://localhost:8080/api?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused

TODO:上記対策検討中

→ Windows10 Home + WSLはいったん断念し、Windows1o Pro + Docker for Windowsに変更する。

ダッシュボードのインストール(Windows1o Pro + Docker for Windows

Docker for WindowsでKubernetesを有効に

Docker for WindowsでKubernetesを有効にする。

「Apply」を押すと、インストールするか聞かれるので「install」を押します。

「アクセス許可」するとインストールが開始します。

インストールが完了すると左下に「Kubernetes is running」が表示されます。

kubernetesのダッシュボードのインストール

kubectlが使用可能かPowerShellから実行して確認します。

PS C:\Users\kenta> kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

kubernetesダッシュボードを作成します。

PS C:\Users\kenta> kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommende
d/kubernetes-dashboard.yaml
secret "kubernetes-dashboard-certs" created
serviceaccount "kubernetes-dashboard" created
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" created
deployment.apps "kubernetes-dashboard" created
service "kubernetes-dashboard" created
PS C:\Users\kenta> kubectl proxy
Starting to serve on 127.0.0.1:8001

ダッシュボードの表示

以下のURLからダッシュボード画面を表示します。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default

ログインするためのトークンを作成します。ログインする権限をきめるために権限の一覧を表示します。

PS C:\Users\kenta> kubectl -n kube-system get secret
NAME                                             TYPE                                  DATA      AGE
attachdetach-controller-token-wsp4p              kubernetes.io/service-account-token   3         39m
bootstrap-signer-token-d9vjc                     kubernetes.io/service-account-token   3         39m
bootstrap-token-r3d037                           bootstrap.kubernetes.io/token         7         39m
certificate-controller-token-pff4z               kubernetes.io/service-account-token   3         39m
clusterrole-aggregation-controller-token-nkx7d   kubernetes.io/service-account-token   3         39m
cronjob-controller-token-sgk9k                   kubernetes.io/service-account-token   3         39m
…
statefulset-controller-token-c5kfq               kubernetes.io/service-account-token   3         39m
token-cleaner-token-6cvnk                        kubernetes.io/service-account-token   3         39m
ttl-controller-token-7qldh                       kubernetes.io/service-account-token   3         39m

今回は、「 deployment-controller-token-XXXXX」の権限で入ります。以下のコマンドでトークンを作成します。


PS C:\Users\kenta> kubectl -n kube-system describe secret deployment-controller-token-8cp98
Name:         deployment-controller-token-8cp98
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=deployment-controller
              kubernetes.io/service-account.uid=c4069429-0b7c-11e9-be59-00155d0a6d01

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia…
ca.crt:     1025 bytes
namespace:  11 bytes

5.3 Kubernetesの概念

  • Kubernetes上のアプリケーションは様々な「リソース」と協調して動作することで成立する
  • Kubernetesの「リソース」とは、アプリケーションのデプロイ構成のための部品のようなもの
  • Dockerの「コンテナ」とKubernetesの「リソース」は別物

Kubernetesのリソース一覧

Docker / Kubernetes 実践コンテナ開発入門(5.Kubernetes入門)の5.4~5.10を読んで、

イメージを図にしてみました。

間違ってそうだけど、自分で絵を描くのは理解を促すと信じて書いたので、載せておきます。

リソース名用途
クラスタ様々なリソースを管理するための概念
Namespace仮想的なクラスタ(名前で切り替え可)
Nodeクラスタの中で一番大きな概念
PodDockerコンテナを格納する箱
ReplicaSetPodをレプリカ(複製)
DeploymentReplicaSetの履歴
Serviceクラスタ内からのPodへのアクセス
Ingressクラスタ外からのPodへのアクセス
ConfigMapPodの設定情報
PersistentVolumePodが利用するストレージ
PersistentVolumeClaimPersistentVolumeを動的に確保
StorageClassストレージの種類を定義
StatefulSet同じ仕様で一意性のあるPodを管理
Jobバッチ処理
CronJob時間起動のバッチ処理
Secret認証情報などの機密データ
RoleNamespace内のリソースのルール
RoleBindingRoleとリソースのひもづけ
ClusterRoleクラスタ全体のリソースのルール
ClusterRoleBindingClusterRoleとリソースのひもづけ
ServiceAccountPodの実行ユーザ

所感

まだまだ全体像が見えてこない

記事一覧(目次)

>>次の記事

<<前の記事

About: ken


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください