1. 程式人生 > >在 MacOS 中使用 multipass 安裝 microk8s 環境

在 MacOS 中使用 multipass 安裝 microk8s 環境

在 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 後不會留下任何痕跡。

  • 參考:Install MicroK8s on Windows using Multipass

安裝 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 [email protected]

檢視磁碟空間

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
  • 參考:在 MacOS 中使用 multipass 安裝 microk8s 環境

部署業務應用

業務應用 Demo 程式碼

urban-iptable-management # 簡單的IP地址查詢服務,服務自治,無外部依賴 urban-district-management # 簡單的省市區查詢服務,服務自治,無外部依賴 urban-traffic-management # 簡單的模擬服務間呼叫,依賴 district 服務查詢城市資訊 urban-gateway-management # 模擬API閘道器,將訪問轉發至其他服務
  • Github Repo:https://github.com/gaochundong/urbanboot

本地 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
  • 參考:Container Runtimes Part 3: High-Level Runtimes

拷貝映象檔案至 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
  • 參考:Build apps locally and Deploy on MicroK8s

建立 Service

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
  • 參考:Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what?
  • The big downside is that each service you expose with a LoadBalancer will get its own IP address, and you have to pay for a LoadBalancer per exposed service, which can get expensive!

使用配置檔案建立 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 發表自部落格園個人技術部落格,未經作者本人同意禁止以任何的形式轉載,任何自動的或人為的爬蟲轉載行為均為耍流氓。