在 MacOS 中使用 multipass 安裝 microk8s 環境


Multipass & MicroK8S 介紹

Kubernetes 是什么?

Kubernetes 集群通過可靠和可擴展的方式對容器化應用進行托管,使得在 DevOps 思維和體系中,讓運維服務、系統升級等工作變得超級簡單。

Multipass 是什么?

Multipass 是一款可運行於 Linux、Windows 和 MacOS 的輕量級虛擬機管理器,它專為希望使用單個命令即可啟動全新 Ubuntu 環境的開發人員而設計。它在 Linux 上使用 KVM、在 Windows 上使用 Hyper-V、在 MacOS 上使用 HyperKit,以便以最小的開銷運行虛擬機。它還可以在 Windows 和 MacOS 上使用 VirtualBox。Multipass 將協助你獲取最新鏡像,並持續保持更新。

MicroK8S 是什么?

MicroK8S 是 CNCF 認證的 Kubernetes 部署環境,可在工作站或邊緣設備上運行。作為一個 snap 包,它可以原生的運行所有 Kubernetes 服務,如果需要還可以打包類庫和二進制文件。它的安裝僅受限於你的下載速度,而刪除 MicroK8S 后不會留下任何痕跡。

安裝 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
ssh ubuntu@192.168.64.2

查看磁盤空間

multipass exec microk8s-vm -- df -kh

查看 kubeconfig 配置

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

在 kubeconfig 中可以找到集群信息,可登錄查看

server: https://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 地址

https://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 https://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

https://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 ubuntu@192.168.64.2:/tmp
scp ./urban-district-management-app.tar ubuntu@192.168.64.2:/tmp
scp ./urban-traffic-management-app.tar ubuntu@192.168.64.2:/tmp
scp ./urban-gateway-management-app.tar ubuntu@192.168.64.2:/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 http://192.168.64.2:30211
curl -s http://192.168.64.2:30211 -i
curl -s http://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 發表自博客園個人技術博客,未經作者本人同意禁止以任何的形式轉載,任何自動的或人為的爬蟲轉載行為均為耍流氓。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM