如何連到遠端的 MicroK8s 並用 K9S monitoring
如何連到遠端的 MicroK8s 並用 K9S 快快樂樂的管理 Kubernetes
使用 kubectl command 管理 Kubernetes Cluter 為工程師基本技能,用久了自然而然就想找些更適合習慣 Terminal 操作但又想有點 hacky 的介面,從強者同事分享的工具集才發現根本是超讚的東西阿!
前置作業: 大致上就是在 AWS 上面開個 EC2 instance,裝個 Ubuntu 20.04 Server Edition,其他就照 K9S 跟 MicroK8s 官網安裝。(秘技: 其實裝個 PrimeHub CE 照著步驟到 Quick Verification 也是更快的選項)
你應該可以 ssh 到這台 EC2,輸入 k9s
驗證在該台主機上可以透過 K9S 看到 Cluster 資訊沒問題!
接著來到這篇的主題:透過 laptop 連到遠端的主機
首先,你會發現即使你知道主機的 public IP,嘗試透過 ~/.kube/config
並放到 laptop 的 kube config
~$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <YOUR_CERT_DATA>
server: https://127.0.0.1:16443
name: microk8s-cluster
contexts:
- context:
cluster: microk8s-cluster
user: admin
name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
user:
token: <YOUR_-_TOKEN>
修改對應的 server: https://<EC2_PUBLIC_IP>:16443
,也打開 EC2 上的 16443
port
發現怎麼在打 kubectl get node
時找不到
Unable to connect to the server: x509: certificate is valid for 127.0.0.1, 10.152.183.1, 192.168.1.123, not <EC2_PUBLIC_IP>
記得先檢查 MicroK8s 的 metrics-server 有沒有 enabled。有 enabled 的話才不會在 K9S 上面看到 CPU/MEM 是 n/a
~$ microk8s status
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
dns # CoreDNS
ha-cluster # Configure high availability on the current node
metrics-server # K8s Metrics Server for API access to service metrics
rbac # Role-Based Access Control for authorisation
storage # Storage class; allocates storage from host directory
然後找了一些文件,有一說是在kube-apiserver設定檔案,新增 --bind-address
,像是這個 跟 這個。重啟 MicroK8s 之後沒什麼幫助。直到我找到 這篇,內容大意是說,像是 EC2 這種 instance 的 Public IP 並沒有實際在 network interface 指定,而是透過 EC2 方式給定一組 Public IP 指定給這個 instance,就需要在 /var/snap/microk8s/current/certs/csr.conf.template
裡面新增一個 IP
[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 127.0.0.1
IP.2 = 10.152.183.1
IP.99 = <EC2_PUBLIC_IP>
#MOREIPS
記得這裡千萬別自認為要直接指定 IP.3
,而是要指定從 IP.100
或是往下遞減,這邊先給個 IP.99
。
改好並 restart microk8s 之後就可以遠端執行 kubectl
啦!
~$ kubectl get node
NAME STATUS ROLES AGE VERSION
ip-10-40-0-11 Ready <none> 4d1h v1.19.13-34+939585d5fb6fa7
然後就可以快快樂樂的在 laptop 直接監控 Cluster 囉~