MicroK8s
ナビゲーションに移動
検索に移動
| Kubernetes | Kubectl | Minikube | Docker | Multipass |
MicroK8s
基本操作
インストール
Macにインストール
- https://jp.ubuntu.com/blog/kubernetes-on-mac-how-to-set-up-jp
- https://microk8s.io/docs/install-alternatives#heading--macos
$ 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 | カレントノードの停止 |
ダッシュボード
- https://microk8s.io/docs/addon-dashboard
- https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/README.md
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
- https://microk8s.io/docs/working-with-kubectl
- https://qiita.com/imamura_sh/items/91208a9b30e701d1e7f2
$ 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にアプリケーションをデプロイするときは、
- マスターにアプリケーションコンテナを起動するように指示
- マスターはコンテナがクラスターのノードで実行されるようにスケジュール
- ノードは、マスターが公開しているKubernetes APIを使用してマスターと通信
- エンドユーザーは、Kubernetes APIを直接使用して対話することもできます
コンテナ化アプリケーションをデプロイ
- KubernetesのDeployment の設定を作成
- DeploymentはKubernetesにアプリケーションのインスタンスを作成し、更新する方法を指示
- Deploymentを作成すると、KubernetesマスターはDeployment内に含まれるアプリケーションインスタンスをクラスター内の個々のノードで実行するようにスケジュール
- アプリケーションインスタンスが作成されると、Kubernetes Deploymentコントローラーは、それらのインスタンスを継続的に監視
- インスタンスをホストしているノードが停止、削除された場合、Deploymentコントローラーはそのインスタンスをクラスター内の別のノード上のインスタンスと置き換え,マシンの故障やメンテナンスに対処するためのセルフヒーリングの仕組みを提供
リソースの作成
$ 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
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
- Deploymentに接続するために、Serviceとして公開
- https://kubernetes.io/ja/docs/concepts/services-networking/service/
- https://kubernetes.io/ja/docs/tutorials/stateless-application/expose-external-ip-address/
$ 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
クラスタリング
- https://microk8s.io/docs/clustering
- https://tech.virtualtech.jp/entry/2019/10/25/150802
- 2つ以上のすでに稼働しているMicoroK8sインスタンスにクラスタを作成するには、add-nodeコマンドを使用
- このコマンドが実行されたMicroK8sインスタンスが、クラスタのマスターとなり、Kubernetesコントロールプレーンをホストする
サービスメッシュ
Istio
Tips
Macネットワークトラブルシュート
© 2006 矢木浩人