コンテナオーケストレーションシステムである
シングルノードにのみ対応したKubernetes環境
Kubernetesと言えば、
microk8sはそんなコンテナ被害者をよりカジュアルに増やすためのソフトウェアです。Ubuntu Weekly Topicsの2018年12月14日号でも
同じくローカルにKubernetes環境を構築できるMinikubeとの違いのひとつが
snapパッケージとしては、
microk8sのインストール
microk8sのインストール自体はとても簡単です。今回はUbuntu 18.
まずはパッケージの情報を表示してみましょう。
$ snap info microk8s name: microk8s summary: Kubernetes for workstations and appliances publisher: Canonical✓ contact: https://github.com/ubuntu/microk8s license: Apache-2.0 description: | MicroK8s is a small, fast, secure, single node Kubernetes that installs on just about any Linux box. Use it for offline development, prototyping, testing, or use it on a VM as a small, cheap, reliable k8s for CI/CD. It's also a great k8s for appliances - develop your IoT apps for k8s and deploy them to MicroK8s on your boxes. snap-id: EaXqgt1lyCaxKaQCU349mlodBkDCXRcg channels: stable: v1.13.3 2019-02-25 (412) 229MB classic candidate: v1.13.4 2019-03-01 (437) 229MB classic beta: v1.13.4 2019-03-01 (437) 229MB classic edge: v1.13.4 2019-03-06 (455) 229MB classic 1.14/stable: – 1.14/candidate: – 1.14/beta: v1.14.0-beta.1 2019-03-01 (442) 207MB classic 1.14/edge: v1.14.0-beta.1 2019-03-01 (442) 207MB classic 1.13/stable: v1.13.3 2019-02-28 (413) 229MB classic 1.13/candidate: v1.13.4 2019-03-02 (438) 229MB classic 1.13/beta: v1.13.4 2019-03-02 (438) 229MB classic 1.13/edge: v1.13.4 2019-03-06 (456) 229MB classic 1.12/stable: v1.12.5 2019-02-03 (387) 251MB classic 1.12/candidate: v1.12.6 2019-02-27 (435) 251MB classic 1.12/beta: v1.12.6 2019-02-27 (435) 251MB classic 1.12/edge: v1.12.6 2019-02-26 (435) 251MB classic 1.11/stable: v1.11.7 2019-02-02 (389) 245MB classic
3月10日時点で、
$ sudo snap install microk8s --channel 1.13/stable --classic $ microk8s.status --wait-ready microk8s is running addons: jaeger: disabled fluentd: disabled gpu: disabled storage: disabled registry: disabled ingress: disabled dns: disabled metrics-server: disabled prometheus: disabled istio: disabled dashboard: disabled
インストールしたら、
microk8s.
さて、microk8s.
」
$ microk8s.kubectl get nodes NAME STATUS ROLES AGE VERSION ubuntu Ready <none> 6m54s v1.13.3 $ microk8s.kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 7m1s
もし普通のKubernetesと同じようにプレフィックス無しでkubectlコマンドを実行したいなら、
$ sudo snap alias microk8s.kubectl kubectl
次のようにkubectlコマンドを使えるようになります。
$ kubectl config view apiVersion: v1 clusters: - cluster: server: http://127.0.0.1:8080 name: microk8s-cluster contexts: - context: cluster: microk8s-cluster user: admin name: microk8s current-context: microk8s kind: Config preferences: {} users: - name: admin user: username: admin
ちなみにsnapパッケージ版のmicrok8sはDockerも同梱しています。つまりmicrok8s.
$ microk8s.docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.06.1-ce Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file (以下略)
Deploymentをrunする
ためしにnginxコンテナイメージを、
$ kubectl run nginx --image nginx --replicas 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すると、
$ 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」
- ホストマシンの内部から
「http:// 10. 152. 183. 239/」 でアクセスする - ホストマシンの外から
「http://ホストマシンのIPアドレス:30890/」 でアクセスする
上記のいずれかの方法を実施すれば、
ダッシュボードアドオンを有効化する
microk8s.
ダッシュボードは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
上記だと
用済みになれば削除
アドオンはmicrok8s.
$ 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を削除したいなら、
さらに、
$ 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 remove microk8s
Kubernetesのインストール解説は
Software Design 2019年4月号に
繰り返しになりますが、
来週18日に発売されるSoftware Design 2019年4月号のUbuntu Monthly Reportでは、
microk8sで基本的な使い方を学習したら、