Kubernetes (K8s) 是目前有名的「容器化應用程式」管理工具,能方便的做到自動部署、擴充和管理的需求,而有時在開發或是一些需求時,會有需要使用到輕量 Kubernetes 的需求,這時會有一些選擇例如 : Minikube、K3s、Desktop Docker… 等,而這篇文章要介紹的是由 ubuntu 維護的 MicroK8s,其特點是輕量、不需要額外安裝虛擬機,所以在開發的時候能夠不佔用多餘的系統資源,並且能夠透過指令快速的重啟與關閉。
Github 原始碼 : https://github.com/ubuntu/microk8s
使用 snap 安裝 MicroK8s (Linux 安裝)
安裝最新版本
使用 snap 安裝最新版本的 MicroK8s
sudo snap install microk8s --classic
安裝指定版本的
首先查看可安裝的 Kubernetes 版本
snap info microk8s
接著輸入指令安裝指定版本的 MicroK8s (下面假設安裝1.14版)
sudo snap install microk8s --classic
使用 brew 安裝 MicroK8s (MacoOS 安裝)
brew install ubuntu/microk8s/microk8s microk8s install
MacOS 的版本底層會使用 multipass 開 VM
可以使用 multipass 指令將外部資料夾 mount 到 VM 上以及顯示 VM 的 IP
multipass list
multipass mount \ /tmp/project \ microk8s-vm:/var/app/project
基本指令與設定
- microk8s status: 查看 MicroK8s 狀態與啟用的插件
- microk8s enable: 啟用指定套件
- microk8s disable: 停用指定套件
- microk8s kubectl: 等同 k8s 原生的
kubectl
,用來與 kubernetes 互動 - microk8s config: 查看 kubernetes 的設定檔案
- microk8s istioctl: 等於 istioctl 指令,用來與 istio services 互動 (需啟用 istio 套件)
- microk8s inspect: 用來檢查 MicroK8s 安裝與運作狀況
- microk8s reset: 重置 kubernetes 服務
- microk8s stop: 停止 kubernetes 服務
- microk8s start: 啟動 kubernetes 服務
使用指令說明
因為 MicroK8s 為了避免衝突,所以指令前面都會加上 microk8s
例如: microk8s kubectl
實際等同於 kubectl
設定使用自己家目錄的 .kubeconfig
microk8s kubectl config view --raw > $HOME/.kube/config
套件 (addons) 啟用與介紹
- 啟用套件
microk8s enable addon-name
- 停用套件
microk8s disable addon-name
常用套件介紹:
dns: 啟用 DNS,常用於不同服務之間溝通,強烈建議啟用該套件
dashboard: 啟用用來觀看服務運作的儀表板 (含 grafana 與 influxdb)
storage: 建立一個預設的 storage (會指令本機目錄的 hostpath-provisioner
ingress: 建立路口控制器
gpu: 將 GPU 啟用給 MicroK8s 使用 (本機需安裝 NVIDIA 驅動程序)
istio: 啟用 Istio 服務,啟用後可以使用 microk8s istioctl
指令.
registry: 建立一個 private 的 docker registry (開在 localhost:32000).
啟用 Dashborad (Kubernetes Dashboard、grafana) 並且透過瀏覽器檢視
輸入指令啟用 dashboard 與 dns 套件
microk8s enable dashboard dns registry istio
輸入指令查看 dashboard 所在的 IP
microk8s kubectl get all --all-namespaces
大概可以看到類似如下的畫面 (不同電腦架設的 ip 也不相同)
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 167m kube-system service/dashboard-metrics-scraper ClusterIP 10.152.183.145 <none> 8000/TCP 79s kube-system service/heapster ClusterIP 10.152.183.156 <none> 80/TCP 79s kube-system service/kube-dns ClusterIP 10.152.183.10 <none> 53/UDP,53/TCP,9153/TCP 77s kube-system service/kubernetes-dashboard ClusterIP 10.152.183.53 <none> 443/TCP 79s kube-system service/monitoring-grafana ClusterIP 10.152.183.50 <none> 80/TCP 79s kube-system service/monitoring-influxdb ClusterIP 10.152.183.217 <none> 8083/TCP,8086/TCP 79s
檢視 kubernetes Dashboard
以上面為例可以看到 service/kubernetes-dashboard
所在 ip 是 10.152.183.53,並且在 port 443 (https) 上
這時候用瀏覽器開啟 https://10.152.183.53
(請改成自己看到的 IP) 會看到如下的畫面
而我們要取得 token 來進行登入
token=$(microk8s kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) microk8s kubectl -n kube-system describe secret $token
會看到如下的訊息,而最下面會有一串長長的 token 將他複製下來
Name: default-token-qjcqr Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name: default kubernetes.io/service-account.uid: b0e4fe23-b13c-4284-b9f8-4586619e309e Type: kubernetes.io/service-account-token Data ==== ca.crt: 1103 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6IkpuTENkVU9IdnZTTW9KT1BJQm5YY29YT1FaZ0pRd3JyaFYwalNZWEZrSmcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vD2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXFqY3FyIiwia3ViZXJAZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMGU0ZmUyMy1iMTNjLTQyODQtYjlmOC00NTg2NjE5ZTMwOWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.uBvl4s9xhhwMNwRmaXPksqIMDvlDg5EPvyBbMr18rjFnqlVuQ06LL7BqqF42PcQqY32xQSR4STIt5PM0PIj7OBEGFE2Vk5tQlybKND0ZLAm_GUm4aP0vWEinwURUawcyZCIEme1AysQnse09NIa4zROmAA5_DSVh_OzDdmviP2AFOAcH4KJyyqi3Tb6V5cPc6R5LgQ7EeWU-5IKb2THbVn3DK8gzb_aypRmZdK7vgYLK-MbsciUu3fqQcoQfZVXCLB7YfxkAusdQv9vvpnjtG48gMmfbzwXBRJQV9jP9aYuyY8OB09L5n4hjePX-7bBF-edwrdFu0MPCJwo-qUbX5g
回到瀏覽器,選擇使用 token 登入,並將複製的 token 貼上去後點 [Sign in]
登入後就能透過網頁檢視 Kubernetes 服務狀態
檢視 Grafana Dashboard
而要查看 Grafana Dashboard 需要透過 API server proxy 來瀏覽
輸入指令檢視服務所在位置
microk8s kubectl cluster-info
會顯示服務在跑的位置
Kubernetes master is running at https://127.0.0.1:16443 Heapster is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/heapster/proxy CoreDNS is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Grafana is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy InfluxDB is running at https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-influxdb:http/proxy
上面顯示的訊息顯示 Grafana 在 https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
不過在用瀏覽器開啟前需要取得登入的帳號密碼
輸入指令取得
microk8s config
會取得如下的訊息
apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS1tCk1JSURBVENDQWVtZ0F3SUJBZ0lKQU1yaUdNV2VNMjNQTUEwR0NTcUdTSWIzRFFFQkN3VUFNQmN4RlRBVEJnTlYKQkFNTURERXdMakUxTWk0eE9ETXVNVEFlRncweU1EQTJNRGN3TkRBNE16ZGFGdzB6TURBMk1EVXdOREE0TXpkYQpNQmN4RlRBVEJnTlZCQU1NRERFd0xqRTFNaTR4T0RNdU1UQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQCkFEQ0NBUW9DZ2dFQkFOUUtNS3lwUjJtV3kvd1lsL2U1bGR3QTVrWXNTZDZPUU5CV2t6MndmTHovNFF1RHBkVHIKWlNXKzh3MHJjc25QTEwrWG8waGdueTVLNHdpOHhMWTJ4V253aGpLMUxoUUdhN05RdTJaZStUMXJqYjh0c0MzbwpqM0VlVGIxV3owdUk0NEZsNGlOY09DaE5Ea2FBTzMxOHN5Q0dQKzAvTTM2N0hpemJSWEhQWkRUVEY4RTQzMXYvCkJGbmViYXRuMHFRSitlNTRaRndWTUcySjVaZGRLM0lQOHM2RE1QeUR5Yy8zUGF1VEhVdDlyb0V6TUNZbXVKTlMKeWR5OHRPUnUxUlJtdW1rOHBwbVdJajVOQVFXRElielluMk56QmJTU3o0Znc0aUhiZlYwdTg3d3ZqWmJNTjIzSQpROXBaVE1zNk1Qbm5QNmtaaFVKTDFDTW5nb1p3RXY5V3pBa0NBd0VBQWFOUU1FNHdIUVlEVlIwT1JCWUVGSzB1CkpZUVdLU21GU1EwTHkrVjgyemNqS3hYc01COEdBMVVkSXdRWU1CYUFGSzB1SllRV0tTbUZTUTBMeStWODJ6Y2oKS3hYc01Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUxXM21YWlE3SWk3Vi8yWgp1d3BROVFjaGJEZjlPTjlyL24wMTlkaE84NnhWUTRyKzhUSHgwakdiV05MQVhFakRTaFVhMGM5KzZqUjIxZmJkCmdUZ2lBNDBML29MbjdvZVpOQVZtT1ZFWVViQ2xvb1oyT4hKeXlSdEZtVU5xcEFOemRINUY2dG1NQXo3TkF3eVEKSm13S09PdndZVlphbk94S3dTVU0rYWNWOWRET2J1YTRMTy9FUW1KendETE5HNGRoQW1iZGVyd2IwM0dnOEh4cQp2Zm5vZ3I5WndMU2dnMDN4aVM5VUdHWkEweUtqZHVJcXQ4aENqRE9mWEV2ekdBYzhuVE1KKzBJbG8wbmQrN2dvCnFUZTBzdkEvcUVUTFpVOXRWM1FDam9CUWpyM0txRVgvU1d4NnpZTnd0WjRPd3U3ckNueDhmVjk2YU1FZXUwQTgKWHZ3dlRsYz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.50.65:16443 name: microk8s-cluster contexts: - context: cluster: microk8s-cluster user: admin name: microk8s current-context: microk8s kind: Config preferences: {} users: - name: admin user: username: admin password: cWJkNCtoTU50MmhaS2llaE9XeGxKNXI3bk9XcGxrVHFJNXJVWU9rQVI0QT1K
最下面兩行就是登入的帳號密碼
接著使用瀏覽器開啟剛剛看到的 Grafana 網址 https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
就能夠看到 Grafana 的畫面了