Ubuntu Weekly Recipe

第560回 microk8sでお手軽Kubernetes環境構築

この記事を読むのに必要な時間:およそ 7 分

Deploymentをrunする

ためしにnginxコンテナイメージを,レプリカ数3でデプロイしてみましょう。

$ kubectl run nginx --image nginx --replicas 3

各種ステータスを表示すると,無事にNginxが3インスタンス立ち上がっていることがわかります。

$ kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   3/3     3            0           40s
$ kubectl get replicasets
NAME               DESIRED   CURRENT   READY   AGE
nginx-7cdbd8cdc9   3         3         3       49s
$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7cdbd8cdc9-br6ck   1/1     Running   0          22s
nginx-7cdbd8cdc9-c74tf   1/1     Running   0          22s
nginx-7cdbd8cdc9-x4n5r   1/1     Running   0          22s

dockerコマンドで見ても,結果は同じです。

$ microk8s.docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED              STATUS              PORTS               NAMES
42533b39f8ee        nginx                  "nginx -g 'daemon of…"   57 seconds ago       Up 56 seconds                           k8s_nginx_nginx-7cdbd8cdc9-c74tf_default_53cf2b93-42f3-11e9-9fa6-525400123456_0
f541a2a89911        nginx                  "nginx -g 'daemon of…"   About a minute ago   Up 59 seconds                           k8s_nginx_nginx-7cdbd8cdc9-x4n5r_default_53d001fa-42f3-11e9-9fa6-525400123456_0
6cd45194c525        nginx                  "nginx -g 'daemon of…"   About a minute ago   Up About a minute                       k8s_nginx_nginx-7cdbd8cdc9-br6ck_default_53cfef99-42f3-11e9-9fa6-525400123456_0

Deploymentsの情報を表示すると,次のような結果になっています。

$ kubectl describe deployments.apps nginx
Name:                   nginx
Namespace:              default
CreationTimestamp:      Sun, 10 Mar 2019 05:14:06 +0000
Labels:                 run=nginx
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=nginx
  Containers:
   nginx:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-7cdbd8cdc9 (3/3 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  5m8s  deployment-controller  Scaled up replica set nginx-7cdbd8cdc9 to 3

要するに普通のKubernetesと同じ使い方になっているというわけですね。

たとえばNodePortで80番ポートをexposeすると,microk8sをインストールしたアドレスに対してHTTPアクセスできるようになります。

$ kubectl expose deployment nginx --port 80 --type NodePort --name nginxex
service/nginxex exposed
$ kubectl get services
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.152.183.1     <none>        443/TCP        39h
nginxex      NodePort    10.152.183.239   <none>        80:30890/TCP   10s

「CLUSTER-IP」はホストローカルとしてアクセスできるIPアドレスです。⁠PORT」のコロンの後ろが外部に見えているポート番号です。つまり,次のようなアクセス方法が可能です。

  • ホストマシンの内部から「http://10.152.183.239/」でアクセスする
  • ホストマシンの外から「http://ホストマシンのIPアドレス:30890/」でアクセスする

上記のいずれかの方法を実施すれば,NginxのWelcomeページが表示されます。

ダッシュボードアドオンを有効化する

microk8s.enableコマンドを利用すれば,各種アドオンを有効化できます。ここではダッシュボードを有効化してみましょう。

ダッシュボードはDNSアドオンも必要なので両方共有効化します。

$ microk8s.enable dns dashboard
Enabling DNS
Applying manifest
service/kube-dns created
serviceaccount/kube-dns created
configmap/kube-dns created
deployment.extensions/kube-dns created
Restarting kubelet
DNS is enabled
Enabling dashboard
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created
service/monitoring-grafana created
service/monitoring-influxdb created
service/heapster created
deployment.extensions/monitoring-influxdb-grafana-v4 created
serviceaccount/heapster created
configmap/heapster-config created
configmap/eventer-config created
deployment.extensions/heapster-v1.5.2 created
dashboard enabled

kube-system側にdashboardのIPアドレスが表示されるはずです。

$ kubectl get services --namespace=kube-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
heapster               ClusterIP   10.152.183.26   <none>        80/TCP              2m19s
kube-dns               ClusterIP   10.152.183.10   <none>        53/UDP,53/TCP       10m
kubernetes-dashboard   ClusterIP   10.152.183.23   <none>        443/TCP             2m19s
monitoring-grafana     ClusterIP   10.152.183.96   <none>        80/TCP              2m19s
monitoring-influxdb    ClusterIP   10.152.183.77   <none>        8083/TCP,8086/TCP   2m19s

上記だと「https://10.152.183.23:443」ですね。ただしClusterIPなので,このままだとローカルマシンからしかアクセスできないことに注意してください。

用済みになれば削除

アドオンはmicrok8s.disableコマンドで無効化できます。

$ microk8s.disable dashboard
Disabling dashboard
secret "kubernetes-dashboard-certs" deleted
serviceaccount "kubernetes-dashboard" deleted
deployment.apps "kubernetes-dashboard" deleted
service "kubernetes-dashboard" deleted
service "monitoring-grafana" deleted
service "monitoring-influxdb" deleted
service "heapster" deleted
deployment.extensions "monitoring-influxdb-grafana-v4" deleted
serviceaccount "heapster" deleted
configmap "heapster-config" deleted
configmap "eventer-config" deleted
deployment.extensions "heapster-v1.5.2" deleted
dashboard disabled

アドオンを含む個別のDeploymentsやServicesを削除したいなら,⁠kubectl delete」コマンドを使うことになるでしょう。

さらに,勉強がてらいろいろ試した結果にっちもさっちもいかなくなったのなら,⁠microk8s.reset」コマンドで環境をまっさらにできます。

$ microk8s.reset
Calling clean_cluster
Cleaning resources in namespace default
endpoints "kubernetes" deleted
endpoints "nginxex" deleted
event "ubuntu.158a9b403a334966" deleted
pod "nginx-7cdbd8cdc9-br6ck" deleted
pod "nginx-7cdbd8cdc9-c74tf" deleted
pod "nginx-7cdbd8cdc9-x4n5r" deleted
secret "default-token-tgfmf" deleted
serviceaccount "default" deleted
service "kubernetes" deleted
service "nginx" deleted
(中略)
event.events.k8s.io "kube-dns-6ccd496668-mknvj.158a9b43ee9c38dd" deleted
event.events.k8s.io "kube-dns-6ccd496668.158a9b43ed7dbe10" deleted
Waiting for kubernetes resources to be released

インストール直後とほぼ同じ状態になると思えば良いでしょう。

$ kubectl get all
NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.152.183.1   <none>        443/TCP   2m
$ microk8s.docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ microk8s.docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ただし取得したDockerイメージはすぐには消されませんので注意してください。

$ microk8s.docker images
REPOSITORY  TAG                 IMAGE ID            CREATED             SIZE
nginx       latest              881bd08c0b08        5 days ago          109MB
(以下略)

Kubernetes環境自体が不要になったら,snapパッケージを削除してしまいましょう。

$ snap remove microk8s

Kubernetesのインストール解説は
Software Design 2019年4月号に

繰り返しになりますが,microk8sはあくまで学習用という位置づけです。

来週18日に発売されるSoftware Design 2019年4月号のUbuntu Monthly Reportでは,水野さんが「よりまっとうな」Kubernetesのインストール方法を解説してくれています。

microk8sで基本的な使い方を学習したら,Ubuntu Montly Reportの記事を参考に,マルチノードなクラスターを作ってみてはいかがでしょうか。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入