| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

MicroK8s

提供: MyMemoWiki
2020年11月17日 (火) 13:48時点におけるPiroto (トーク | 投稿記録)による版 (→‎リソースの作成)
ナビゲーションに移動 検索に移動

| Kubernetes | Kubectl | Minikube | Docker | Multipass |

MicroK8s

基本操作

インストール

Macにインストール

$ brew install ubuntu/microk8s/microk8s
  • DriverをVirtualBoxに変更する場合、先に変更してから、install
$ microk8s install

Ubuntuにインストール

$ sudo snap install microk8s --classic
  • アンインストール
$ sudo snap remove microk8s

ステータスの確認

  • microk8s status でステータスの確認
  • インストール中などは、--wait-ready で状況確認できる
$ microk8s status --wait-ready
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    ha-cluster           # Configure high availability on the current node
  disabled:
    ambassador           # Ambassador API Gateway and Ingress
    cilium               # SDN, fast with full network policy
         :
    storage              # Storage class; allocates storage from host directory

開始と終了

  • MicroK8sは、停止するまで実行し続ける。停止と開始は、以下のコマンド。
$ microk8s stop
$microk8s start

アドオンの使用

  • MicroK8s は最低限のコンポーネントを使用するが、豊富な機能が "add-ons" とタイプすることで利用できる
  • サービス間の連携を容易にするDNS管理、 アプリケーションがストレージが必要な場合、'storage' アドオンはホストに直接領域を提供する。これらは簡単にセットアップできる

アドオンの一覧

サービスの有効化/無効化

  • 組み込みで有効化可能なアドオンサービスの確認
  • サービスを無効化する場合は、disable
$ microk8s enable --help
  • サービスを有効化する
  • status でどのアドオンが有効/無効かを確認できる
$ microk8s enable dashboard dns registry istio

コマンド

https://microk8s.io/docs/commands

コマンド 内容
microk8s add-node クラスタへの接続文字列を生成
microk8s config
microk8s ctr
microk8s dbctl
microk8s disable
microk8s enable
microk8s inspect
microk8s join
microk8s kubectl
microk8s leave
microk8s refresh-certs
microk8s remove-node
microk8s reset ノードを初期状態にリセット
microk8s start 停止されたノードを開始
microk8s status ステータス情報を表示
microk8s stop カレントノードの停止

ダッシュボード

ダッシュボード接続手順、トラブルシュート

Kubectl

  • MicroK8s は専用のバージョンのkubectlをバンドルしている。
  • コマンドを監視と制御のために実行することができる。
$ microk8s kubectl get all --all-namespaces
NAMESPACE            NAME                                             READY   STATUS              RESTARTS   AGE
kube-system          pod/calico-node-m9j8n                            1/1     Running             0          90m
kube-system          pod/metrics-server-8bbfb4bdb-679mc               1/1     Running             0          7m38s
            :
  • MicroK8s は、すでにインストール済みのkubectlとの衝突を防ぐためにネームスペースを指定したkubectlコマンドを使用する
  • もしインストール済みの物がないのであれば、簡単にエイリアスを指定できる
  • ~/.bash_aliases に以下を記載
alias kubectl='microk8s kubectl'
  • ~/.bash_profile に以下を追記
if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Kubeconfig

$ cd ~/
$ mkdir .kube
$ cd .kube
$ microk8s config > config

操作

クラスタ

  • https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/
  • Kubernetesクラスターは以下の2種類のリソースで構成
    • マスターがクラスターを管理する、マスターはクラスターの管理を担当
    • ノードがアプリケーションを動かすワーカーとなる、ノードは、Kubernetesクラスターのワーカーマシンとして機能するVMまたは物理マシン
$ kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:16443

$ kubectl get nodes
NAME          STATUS   ROLES    AGE   VERSION
microk8s-vm   Ready    <none>   47h   v1.19.3-34+a56971609ff35a

デプロイ

Kubernetesにアプリケーションをデプロイするときは、

  1. マスターにアプリケーションコンテナを起動するように指示
  2. マスターはコンテナがクラスターのノードで実行されるようにスケジュール
  3. ノードは、マスターが公開しているKubernetes APIを使用してマスターと通信
    1. エンドユーザーは、Kubernetes APIを直接使用して対話することもできます

コンテナ化アプリケーションをデプロイ

  1. KubernetesのDeployment の設定を作成
  2. DeploymentはKubernetesにアプリケーションのインスタンスを作成し、更新する方法を指示
  3. Deploymentを作成すると、KubernetesマスターはDeployment内に含まれるアプリケーションインスタンスをクラスター内の個々のノードで実行するようにスケジュール
  4. アプリケーションインスタンスが作成されると、Kubernetes Deploymentコントローラーは、それらのインスタンスを継続的に監視
  5. インスタンスをホストしているノードが停止、削除された場合、Deploymentコントローラーはそのインスタンスをクラスター内の別のノード上のインスタンスと置き換え,マシンの故障やメンテナンスに対処するためのセルフヒーリングの仕組みを提供

リソースの作成

  • Macの場合、multipassの中で動いているので、ローカルファイルをkubectlに渡す場合、mountする必要がある。
$ multipass mount `pwd` microk8s-vm:/home/ubuntu/files
  • マニフェスト

sample-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
  • 生成
$ kubectl create -f ./files/pod/sample-pod.yaml
pod/sample-pod created
  • 確認
$ kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          76s

Memo

NginxをPodとしてインストール

  • Kubernetes は、appやserviceをデプロイするためにあるので、kubecltでそれらをKubernetesに対して行うことができる
  • デモアプリをインストールしてみる
$ kubectl enable dns metallb
$ kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
  • 確認
$ kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-c69r9   1/1     Running   0          17m

サービスとして公開

  • Deploymentを確認
$ kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           108m
$ kubectl expose deployment nginx --type=LoadBalancer --name=nginx-service --port=8080
service/nginx-service exposed
  • サービスを確認(EXTERNAL-IP/PORT)
$ kubectl get services
NAME            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
kubernetes      ClusterIP      10.152.183.1    <none>           443/TCP          47h
nginx-service   LoadBalancer   10.152.183.63   192.168.64.100   8080:31344/TCP   33s

ポートフォワード

  • 手順を確認
$ kubeclt port-forward -h
 kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N]
$ kubectl port-forward nginx-6799fc88d8-c69r9 8090:80
Forwarding from 127.0.0.1:8090 -> 80
Forwarding from [::1]:8090 -> 80

クラスタリング

クラスタを作成する(Virtual Boxを使用)

サービスメッシュ

Istio

Tips

Macネットワークトラブルシュート