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

MyMemoWiki

「MicroK8s」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
86行目: 86行目:
 
*https://github.com/ubuntu/microk8s/issues/1046
 
*https://github.com/ubuntu/microk8s/issues/1046
 
*https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate/43666288#43666288
 
*https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate/43666288#43666288
 +
*https://qiita.com/suin/items/be87a7a581f30b38c5f7
  
  

2020年11月15日 (日) 00:42時点における版

| Kubernetes | Docker |

MicroK8s

インストール

Macにインストール

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

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

Ubuntuにインストール

$ sudo snap install microk8s --classic

ステータスの確認

$ 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
    dashboard            # The Kubernetes dashboard
    dns                  # CoreDNS
    fluentd              # Elasticsearch-Fluentd-Kibana logging and monitoring
    gpu                  # Automatic enablement of Nvidia CUDA
    helm                 # Helm 2 - the package manager for Kubernetes
    helm3                # Helm 3 - Kubernetes package manager
    host-access          # Allow Pods connecting to Host services smoothly
    ingress              # Ingress controller for external access
    istio                # Core Istio service mesh services
    jaeger               # Kubernetes Jaeger operator with its simple config
    knative              # The Knative framework on Kubernetes.
    kubeflow             # Kubeflow for easy ML deployments
    linkerd              # Linkerd is a service mesh for Kubernetes and other frameworks
    metallb              # Loadbalancer for your Kubernetes cluster
    metrics-server       # K8s Metrics Server for API access to service metrics
    multus               # Multus CNI enables attaching multiple network interfaces to pods
    prometheus           # Prometheus operator for monitoring and logging
    rbac                 # Role-Based Access Control for authorisation
    registry             # Private image registry exposed on localhost:32000
    storage              # Storage class; allocates storage from host directory


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

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

ダッシュボード

$ microk8s enable dashboard
$ multipass exec microk8s-vm -- sudo microk8s kubectl -n kube-system describe secret $(multipass exec microk8s-vm -- sudo microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)

$ multipass exec microk8s-vm -- sudo /snap/bin/microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443 --address 0.0.0.0
Forwarding from 0.0.0.0:10443 -> 8443

$ multipass info microk8s-vm | grep IPv4 | awk '{ print $2 }'
192.168.64.2


  • hyperkit
$ microk8s enable dashboard dns
$ kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:16443
Metrics-server is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy
CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
  • multipass で動いているからNG
$ multipass exec microk8s-vm -- sudo microk8s kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443

$ multipass exec microk8s-vm -- sudo microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard --address 0.0.0.0 10443:443
Forwarding from 0.0.0.0:10443 -> 8443


kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8080:443

$ microk8s dashboard-proxy
Checking if Dashboard is running.
Dashboard will be available at https://192.168.64.2:10443
Use the following token to login:
  :
$ multipass sh microk8s
ubuntu@microk8s-vm:~$$ vi dashboard-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: kubernetes-dashboard
    namespace: kubernetes-dashboard
ubuntu@microk8s-vm:~$ sudo microk8s disable dashboard
$ sudo microk8s kubectl create -f ./dashboard-admin.yaml 
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created


$ kubectl get service -n kube-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
metrics-server              ClusterIP   10.152.183.135   <none>        443/TCP                  3m18s
kubernetes-dashboard        ClusterIP   10.152.183.224   <none>        443/TCP                  3m17s
dashboard-metrics-scraper   ClusterIP   10.152.183.185   <none>        8000/TCP                 3m17s
kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   3m15s

  • VirtualBox だと、IPV4がN/A
$ microk8s enable dashboard dns
$ microk8s dashboard-proxy
Checking if Dashboard is running.
Dashboard will be available at https://N/A:10443
Use the following token to login:
   :
Forwarding from 0.0.0.0:10443 -> 8443
$ multipass ls
Name                    State             IPv4             Image
microk8s-vm             Running           N/A              Ubuntu 18.04 LTS
$ sudo VBoxManage modifyvm microk8s-vm --natnet1 "192.168/16"
$ sudo VBoxManage modifyvm microk8s-vm --natbindip1 "192.168.64.2"
  • ダッシュボードのサービス確認
$ kubectl get services -n kube-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   6m50s
metrics-server              ClusterIP   10.152.183.186   <none>        443/TCP                  6m32s
kubernetes-dashboard        ClusterIP   10.152.183.43    <none>        443/TCP                  6m27s
dashboard-metrics-scraper   ClusterIP   10.152.183.234   <none>        8000/TCP                 6m27s
  • Ubuntuの場合、以下の kubernetes-dashboard へ直接ブラウザでアクセスすればOK
$ kubectl get services --namespace=kube-system
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
metrics-server              ClusterIP   10.152.183.224   <none>        443/TCP                  8h
kubernetes-dashboard        ClusterIP   10.152.183.188   <none>        443/TCP                  8h
dashboard-metrics-scraper   ClusterIP   10.152.183.169   <none>        8000/TCP                 8h
kube-dns                    ClusterIP   10.152.183.10    <none>        53/UDP,53/TCP,9153/TCP   8h

Istio

Kubectl

  • MicroK8s は専用のバージョンのkubrctlをバンドルしている。
  • コマンドを監視と制御のために実行することができる。
$ 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
$ cd ~/
$ mkdir .kube
$ cd .kube
$ microk8s config > config


ダッシュボードメモ

https://hondou.homedns.org/pukiwiki/index.php?k8s%20microK8s

$ token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1)
$ microk8s kubectl -n kube-system describe secret $token
$ microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443

https://127.0.0.1:10443

コマンド

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 カレントノードの停止

はじめに

  • Kubernetes は、appやserviceをデプロイするためにあるので、kubecltでそれらをKubernetesに対して行うことができる
  • デモアプリをインストールしてみる
$ kubectl create deployment nginx --image=nginx
  • 確認
$ kubectl get pods

アドオンの使用

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

アドオンの一覧

開始と終了

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

クラスタリング

DriverをVirtualBoxに変更する

*現在選択されているドライバを確認する

$ sudo multipass get local.driver
hyperkit
$ sudo multipass set local.driver=virtualbox
$ sudo VBoxManage list vms
Password:
"microk8s-vm" {d90718db-3795-4116-825f-cffe4a2f0fea}

VirtualBoxのNetwork Bridgeを構成する

$ VBoxManage list bridgedifs | grep ^Name:
Name:            en0: Wi-Fi (AirPort)
Name:            en1: Thunderbolt 1
Name:            bridge0
Name:            p2p0
Name:            awdl0
Name:            llw0

$ sudo VBoxManage modifyvm microk8s-vm --nic2 bridged --bridgeadapter2 en0
  • インスタンスを立ち上げて新しいNICの名前(enp0s8)を得る
$ multipass exec microk8s-vm -- ip link | grep DOWN
3: enp0s8:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
  • 新しいNIC(enp0s8)の設定
$ multipass exec microk8s-vm -- sudo bash -c "cat > /etc/netplan/60-bridge.yaml" <<EOF
network:
  ethernets:
    enp0s8:                  # this is the interface name from above
      dhcp4: true
      dhcp4-overrides:       # this is needed so the default gateway
        route-metric: 200    # remains with the first interface
  version: 2
EOF

$ multipass exec microk8s-vm -- sudo netplan apply
  • ipアドレスを確認
$ multipass exec microk8s-vm -- ip address show dev enp0s8 up    
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:3a:92:dd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.40/24 brd 192.168.0.255 scope global dynamic enp0s8
       valid_lft 86331sec preferred_lft 86331sec
    inet6 2402:6b00:3666:5800:a00:27ff:fe3a:92dd/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 266sec preferred_lft 266sec
    inet6 fe80::a00:27ff:fe3a:92dd/64 scope link 
       valid_lft forever preferred_lft forever

マルチノードクラスタの構成

  • 構成コマンドの生成
$ microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 10.0.2.15:25000/136ac2967078d5490de2d1a2d3a8bf52

If the node you are adding is not reachable through the default interface you can use one of the following:
 microk8s join 10.0.2.15:25000/136ac2967078d5490de2d1a2d3a8bf52
 microk8s join 192.168.0.40:25000/136ac2967078d5490de2d1a2d3a8bf52
  • 生成されたコマンドを実行
$ microk8s join 192.168.0.47:25000/1c3d59551648b6da13ccbca9cf1a0fad
Contacting cluster at 192.168.0.47
Waiting for this node to finish joining the cluster. ..  
delhi:~ hirotoyagi$ kubectl get node
NAME          STATUS   ROLES    AGE     VERSION
jinmu         Ready    <none>   3d16h   v1.19.3-34+a56971609ff35a
microk8s-vm   Ready    <none>   17s     v1.19.3-34+9e8b6537ec8b6f