在 MacOS 中使用 multipass 安裝 microk8s 環境

在 MacOS 中使用 multipass 安裝 microk8s 環境

Multipass & MicroK8s 介紹

What is Kubernetes?

Kubernetes clusters host containerised applications in a reliable and scalable way. Having DevOps in mind, Kubernetes makes maintenance tasks such as upgrades dead simple.

What is Multipass?

Multipass is a lightweight VM manager for Linux, Windows and macOS. It』s designed for developers who want a fresh Ubuntu environment with a single command. It uses KVM on Linux, Hyper-V on Windows and HyperKit on macOS to run the VM with minimal overhead. It can also use VirtualBox on Windows and macOS. Multipass will fetch images for you and keep them up to date.

What is MicroK8s?

MicroK8s is a CNCF certified upstream Kubernetes deployment that runs entirely on your workstation or edge device. Being a snap it runs all Kubernetes services natively (i.e. no virtual machines) while packing the entire set of libraries and binaries needed. Installation is limited by how fast you can download a couple of hundred megabytes and the removal of MicroK8s leaves nothing behind.

安裝 multipass & microk8s

安裝 multipass 服務

brew search multipass
brew cask info multipass
brew cask install multipass
multipass version

通過 multipass 安裝和啟動 microk8s 環境

multipass launch –name microk8s-vm –mem 4G –disk 40G
multipass list
multipass stop microk8s-vm
multipass delete microk8s-vm
multipass purge

在虛機中安裝 microk8s 服務

multipass exec microk8s-vm — sudo snap install microk8s –classic

multipass exec microk8s-vm — sudo iptables -P FORWARD ACCEPT

查看 microk8s 的 snap 包資訊,比如版本資訊

 multipass exec microk8s-vm — sudo snap info microk8s

增加帳號訪問許可權,簡化操作

# 默認 ubuntu 帳號無許可權操作集群,均需要 sudo

# 可將 ubuntu 帳號加入 microk8s 用戶組以便簡化訪問
multipass exec microk8s-vm — sudo usermod -a -G microk8s ubuntu
multipass exec microk8s-vm — sudo sudo chown -f -R ubuntu ~/.kube

增加訪問公鑰,簡化操作

# 在 ~/.ssh/authorized_keys 增加自己的公鑰,則可方便的進行SSH登錄

multipass shell microk8s-vm

查看磁碟空間

multipass exec microk8s-vm — df -kh

查看 kubeconfig 配置

multipass exec microk8s-vm — /snap/bin/microk8s.config

在 kubeconfig 中可以找到集群資訊,可登錄查看

server: //192.168.64.2:16443
username: admin
password: xxx

增加 DNS 插件,必須安裝,多處依賴使用

multipass exec microk8s-vm — /snap/bin/microk8s.enable dns
multipass exec microk8s-vm — /snap/bin/microk8s.enable dashboard

嘗試訪問 Grafana 地址

//192.168.64.2:16443/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy

安裝 Dashboard UI

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl apply -f //raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

使用 Bearer Token 進行鑒權訪問

# 為安全考慮,Dashboard UI 需要使用 Bearer Token 進行鑒權訪問,使用如下命令獲取 Token
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl -n kube-system get secret | grep default-token | cut -d ” ” -f1
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl -n kube-system describe secret default-token-qqt75

訪問 Dashboard UI

//192.168.64.2:16443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

查看集群組件狀態

multipass exec microk8s-vm — /snap/bin/microk8s.status

可通過指定配置文件進行訪問

# 把kubeconfig保存至本地 /Users/xxx/.kube/microk8s-vm.yml,則可通過指定配置文件進行訪問
kubectl –insecure-skip-tls-verify –kubeconfig=”/Users/xxx/.kube/microk8s-vm.yml” get pods –all-namespaces

# 把kubeconfig保存至本地 ~/.kube/config,則可通過指定配置文件進行訪問
kubectl –insecure-skip-tls-verify get pods –all-namespaces

安裝 registry 組件

# The MicroK8s registry will not be enabled by default, so needs run the following to enable it.
multipass exec microk8s-vm — /snap/bin/microk8s.enable registry

查看集群內組件狀態

multipass exec microk8s-vm — /snap/bin/microk8s.status | grep enabled

部署業務應用

業務應用 Demo 程式碼

urban-iptable-management # 簡單的IP地址查詢服務,服務自治,無外部依賴
urban-district-management # 簡單的省市區查詢服務,服務自治,無外部依賴
urban-traffic-management # 簡單的模擬服務間調用,依賴 district 服務查詢城市資訊
urban-gateway-management # 模擬API網關,將訪問轉發至其他服務

本地 docker image 構建

cd urbanboot

docker build -t urban-iptable-management-app:latest –file ./urban-iptable-management/docker/Dockerfile .
docker build -t urban-district-management-app:latest –file ./urban-district-management/docker/Dockerfile .
docker build -t urban-traffic-management-app:latest –file ./urban-traffic-management/docker/Dockerfile .
docker build -t urban-gateway-management-app:latest –file ./urban-gateway-management/docker/Dockerfile .

刪除無用鏡像

docker images
docker rmi –force $(docker images | grep “^<none>” | awk ‘{print $3}’)
docker images

保存本地鏡像至文件

# Save one or more images to a tar archive
docker save -o urban-iptable-management-app.tar urban-iptable-management-app:latest
docker save -o urban-district-management-app.tar urban-district-management-app:latest
docker save -o urban-traffic-management-app.tar urban-traffic-management-app:latest
docker save -o urban-gateway-management-app.tar urban-gateway-management-app:latest

拷貝鏡像文件至 microk8s 機器

scp ./urban-iptable-management-app.tar [email protected]:/tmp
scp ./urban-district-management-app.tar [email protected]:/tmp
scp ./urban-traffic-management-app.tar [email protected]:/tmp
scp ./urban-gateway-management-app.tar [email protected]:/tmp

安裝鏡像至 registry

multipass exec microk8s-vm — /snap/bin/microk8s.ctr namespaces list
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images list -q

multipass exec microk8s-vm — /snap/bin/microk8s.ctr images import /tmp/urban-iptable-management-app.tar
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images import /tmp/urban-district-management-app.tar
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images import /tmp/urban-traffic-management-app.tar
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images import /tmp/urban-gateway-management-app.tar

multipass exec microk8s-vm — /snap/bin/microk8s.ctr images list -q | grep urban

刪除鏡像

multipass exec microk8s-vm — /snap/bin/microk8s.ctr images remove docker.io/library/urban-iptable-management-app:latest
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images remove docker.io/library/urban-district-management-app:latest
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images remove docker.io/library/urban-traffic-management-app:latest
multipass exec microk8s-vm — /snap/bin/microk8s.ctr images remove docker.io/library/urban-gateway-management-app:latest

在部署文件中配置鏡像位置

# 替換deployment.yaml文件中的image路徑
/Users/xxx/g/github/urbanboot/urban-district-management/kubernetes/deployment.yaml

創建 Namespace

kubectl –insecure-skip-tls-verify create namespace urbanboot

部署應用

kubectl –insecure-skip-tls-verify apply -f /Users/xxx/g/github/urbanboot/urban-iptable-management/kubernetes/deployment.yaml -n urbanboot
kubectl –insecure-skip-tls-verify apply -f /Users/xxx/g/github/urbanboot/urban-district-management/kubernetes/deployment.yaml -n urbanboot
kubectl –insecure-skip-tls-verify apply -f /Users/xxx/g/github/urbanboot/urban-traffic-management/kubernetes/deployment.yaml -n urbanboot
kubectl –insecure-skip-tls-verify apply -f /Users/xxx/g/github/urbanboot/urban-gateway-management/kubernetes/deployment.yaml -n urbanboot

查看部署

kubectl –insecure-skip-tls-verify get deployments -n urbanboot
kubectl –insecure-skip-tls-verify get pods -n urbanboot

刪除部署,會自動刪除 Pods

kubectl –insecure-skip-tls-verify delete deployment urban-iptable-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete deployment urban-district-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete deployment urban-traffic-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete deployment urban-gateway-management-app -n urbanboot
kubectl –insecure-skip-tls-verify get services -n urbanboot
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose -h

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-iptable-management-app –type=ClusterIP –port=7200 –name=urban-iptable-management-app -n urbanboot
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-iptable-management-app –type=NodePort –port=7200 –name=urban-iptable-management-nodeport -n urbanboot

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-district-management-app –type=ClusterIP –port=7200 –name=urban-district-management-app -n urbanboot
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-district-management-app –type=NodePort –port=7200 –name=urban-district-management-nodeport -n urbanboot

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-traffic-management-app –type=ClusterIP –port=7200 –name=urban-traffic-management-app -n urbanboot
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-traffic-management-app –type=NodePort –port=7200 –name=urban-traffic-management-nodeport -n urbanboot

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-gateway-management-app –type=ClusterIP –port=7200 –name=urban-gateway-management-app -n urbanboot
multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-gateway-management-app –type=NodePort –port=7200 –name=urban-gateway-management-nodeport -n urbanboot

multipass exec microk8s-vm — /snap/bin/microk8s.kubectl expose deployment urban-traffic-management-app –type=LoadBalancer –port=7200 –name=urban-traffic-management-loadbalancer -n urbanboot

使用配置文件創建 Service

kubectl –insecure-skip-tls-verify expose -f /Users/xxx/g/github/urbanboot/urban-traffic-management/kubernetes/service.yaml -n urbanboot
kubectl –insecure-skip-tls-verify expose -f /Users/xxx/g/github/urbanboot/urban-traffic-management/kubernetes/nodeport.yaml -n urbanboot

刪除 Service

kubectl –insecure-skip-tls-verify delete service urban-iptable-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-iptable-management-nodeport -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-district-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-district-management-nodeport -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-traffic-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-traffic-management-nodeport -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-gateway-management-app -n urbanboot
kubectl –insecure-skip-tls-verify delete service urban-gateway-management-nodeport -n urbanboot

查一下 TCP 埠監聽

multipass exec microk8s-vm — netstat -nl -t

查看部署事件,按照時間排序

kubectl –insecure-skip-tls-verify get events -n urbanboot –sort-by=.metadata.creationTimestamp

查看 Pod 日誌

kubectl –insecure-skip-tls-verify get pods -n urbanboot
kubectl –insecure-skip-tls-verify describe pod urban-traffic-management-app-58d7578547-p277h -n urbanboot
kubectl –insecure-skip-tls-verify logs urban-traffic-management-app-58d7578547-p277h -n urbanboot
kubectl –insecure-skip-tls-verify logs urban-traffic-management-app-58d7578547-p277h -n urbanboot –tail=20

查看 Endpoint 資訊

# Spring Cloud Kubernetes 會通過 API 查詢 Endpoints
kubectl –insecure-skip-tls-verify get services -n urbanboot
kubectl –insecure-skip-tls-verify get endpoints -n urbanboot
kubectl –insecure-skip-tls-verify get all –all-namespaces
kubectl –insecure-skip-tls-verify get all -n urbanboot
kubectl –insecure-skip-tls-verify describe services urban-traffic-management-nodeport -n urbanboot
kubectl –insecure-skip-tls-verify describe services urban-traffic-management-app -n urbanboot

訪問 NodePort 埠

curl -s //192.168.64.2:30211
curl -s //192.168.64.2:30211 -i
curl -s //192.168.64.2:30211 -v

登錄 Pod 環境

kubectl –insecure-skip-tls-verify exec -it urban-traffic-management-app-58d7578547-p277h -n urbanboot — /bin/bash

查看 Java 進程

java -version
env | grep JAVA
ps -ef|grep java

版權聲明:本篇文章《在 MacOS 中使用 multipass 安裝 microk8s 環境》由作者 Dennis Gao 發表自部落格園個人技術部落格,未經作者本人同意禁止以任何的形式轉載,任何自動的或人為的爬蟲轉載行為均為耍流氓。