OpenYurt 入门 - 在树莓派上玩转 OpenYurt
作者 |?唐炳昌
來(lái)源|阿里巴巴云原生公眾號(hào)
隨著邊緣計(jì)算的快速發(fā)展,越來(lái)越多的數(shù)據(jù)需要到網(wǎng)絡(luò)的邊緣側(cè)進(jìn)行存儲(chǔ)、處理和分析,邊緣的設(shè)備和應(yīng)用呈爆發(fā)式增長(zhǎng)。如何高效的管理邊緣側(cè)的資源和應(yīng)用是業(yè)界面臨的一個(gè)主要問(wèn)題。當(dāng)前,采用云原生的方法,將云計(jì)算的能力下沉到邊緣并在云端做統(tǒng)一調(diào)度、管控的云邊端一體化架構(gòu)得到了業(yè)界的廣泛認(rèn)可。
2020 年 5 月,阿里巴巴開(kāi)源首個(gè) Kubernetes 無(wú)侵入的邊緣計(jì)算云原生項(xiàng)目?OpenYurt,并于同年 9 月份進(jìn)入 CNCF SandBox。OpenYurt 針對(duì)邊緣場(chǎng)景中網(wǎng)絡(luò)不穩(wěn)定、云邊運(yùn)維困難等問(wèn)題,對(duì)原生 Kubernetes 無(wú)侵入地增強(qiáng),重點(diǎn)提供了邊緣節(jié)點(diǎn)自治、云邊運(yùn)維通道、邊緣單元化的能力。
如圖 1 所示,本文通過(guò)在云端部署 Kubernetes 集群的控制面,并將樹(shù)莓派接入集群來(lái)搭建云管邊場(chǎng)景?;谶@個(gè)環(huán)境演示 OpenYurt 的核心能力,帶大家快速上手 OpenYurt。
圖 1? 原生 Kubernetes 集群
環(huán)境準(zhǔn)備
1. 基礎(chǔ)環(huán)境介紹
在云端,購(gòu)買(mǎi) ENS 節(jié)點(diǎn)(ENS 節(jié)點(diǎn)具有公網(wǎng) IP,方便通過(guò)公網(wǎng)對(duì)外暴露服務(wù))來(lái)部署原生 K8s 集群的管控組件。其中系統(tǒng)采用 ubuntu18.04、hostname 為 master-node、docker 版本為 19.03.5。
在邊緣,如圖 2 所示,將樹(shù)莓派 4 與本地的路由器連接,組成邊緣私網(wǎng)環(huán)境,路由器通過(guò) 4G 網(wǎng)卡訪問(wèn)互聯(lián)網(wǎng)。其中樹(shù)莓派 4 預(yù)裝系統(tǒng)為 ubuntu18.04、hostname為 edge-node、docker 版本為 19.03.5。
圖 2? 邊緣環(huán)境實(shí)體圖
2. 原生 K8s 集群搭建
本文演示環(huán)境基于社區(qū)1.16.6版本的K8s集群,并采用社區(qū)提供的kubeadm工具來(lái)搭建集群,具體操作如下:
- 在云端節(jié)點(diǎn)和樹(shù)莓派上分別執(zhí)行如下命令安裝 Kubernetes 組件。
- 使用 kubeadm 初始化云端節(jié)點(diǎn)(在云端節(jié)點(diǎn)上執(zhí)行如下命令),部署過(guò)程中采用阿里云的鏡像倉(cāng)庫(kù),為了支持樹(shù)莓派的接入,該倉(cāng)庫(kù)的鏡像做了 manifest 列表,能夠支持 amd64/arm64 兩種不同的 CPU 架構(gòu)。
依據(jù)初始化完成之后的提示,拷貝 config 文件到 $HOME/.kube 中:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config- 樹(shù)莓派接入云端集群依據(jù)第二步中初始化完成以后輸出的節(jié)點(diǎn)接入信息,在樹(shù)莓派上執(zhí)行接入命令。
- 添加 cni 配置(云端管控節(jié)點(diǎn)和樹(shù)莓派都需要配置),本文搭建的集群使用主機(jī)網(wǎng)絡(luò)。創(chuàng)建 cni 配置文件 /etc/cni/net.d/0-loopback.conf,并將如下內(nèi)容拷貝到該文件中。
- 在 master 節(jié)點(diǎn)上查看部署效果。
- 刪除 CoreDNS(本文 Demo 中 CoreDNS 不需要使用),并將 master 節(jié)點(diǎn)的 taints 去掉(方便后續(xù)部署 OpenYurt 組件)。
原生 K8s 集群在邊緣場(chǎng)景中的問(wèn)題
基于上述環(huán)境,我們來(lái)測(cè)試一下原生 K8s 在云管邊架構(gòu)中對(duì)云邊運(yùn)維的支持和對(duì)云邊網(wǎng)絡(luò)斷開(kāi)時(shí)的反應(yīng)。首先,我們從云端部署一個(gè)測(cè)試應(yīng)用 nginx,在 master 節(jié)點(diǎn)上執(zhí)行 kubectl apply -f nginx.yaml,具體的部署 yaml 如下。
注意:nodeSelector 選擇 edge-node 節(jié)點(diǎn),主機(jī)網(wǎng)絡(luò)配置為 true,并配置 pod 的容忍時(shí)間為 5s(默認(rèn) 5min, 此處配置便于演示 pod 驅(qū)逐)。
apiVersion: v1 kind: Pod metadata:name: nginx spec:tolerations:- key: "node.kubernetes.io/unreachable"operator: "Exists"effect: "NoExecute"tolerationSeconds: 5- key: "node.kubernetes.io/not-ready"operator: "Exists"effect: "NoExecute"tolerationSeconds: 5nodeSelector:kubernetes.io/hostname: edge-nodecontainers:- name: nginximage: nginxhostNetwork: true查看部署結(jié)果:
root@master-node:~# kubectl get pods -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 11s 192.168.0.100 edge-node <none> <none>1. 測(cè)試常用的集群運(yùn)維指令,包括 logs、exec、port-forward。
在 master 節(jié)點(diǎn)上運(yùn)維邊緣節(jié)點(diǎn)應(yīng)用,執(zhí)行 logs/exec/port-forward 等指令,查看結(jié)果。
root@master-node:~# kubectl logs nginx Error from server: Get https://192.168.0.100:10250/containerLogs/default/nginx/nginx: dial tcp 192.168.0.100:10250: connect: connection refusedroot@master-node:~# kubectl exec -it nginx sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. Error from server: error dialing backend: dial tcp 192.168.0.100:10250: connect: connection refusedroot@master-node:~# kubectl port-forward pod/nginx 8888:80 error: error upgrading connection: error dialing backend: dial tcp 192.168.0.100:10250: connect: connection refused從執(zhí)行結(jié)果看,原生的k8s在云管邊的場(chǎng)景中,無(wú)法提供從云端運(yùn)維邊緣應(yīng)用的能力。這是因?yàn)檫吘壒?jié)點(diǎn)部署在用戶的私網(wǎng)環(huán)境,從云端無(wú)法通過(guò)邊緣節(jié)點(diǎn)的 IP 地址直接訪問(wèn)邊緣節(jié)點(diǎn)。
2. 測(cè)試邊緣斷網(wǎng)時(shí)對(duì)業(yè)務(wù)的影響
邊緣節(jié)點(diǎn)與云端管控通過(guò)公網(wǎng)連接,經(jīng)常會(huì)出現(xiàn)網(wǎng)絡(luò)不穩(wěn)定,云端斷連的情況。這里我們將做兩個(gè)斷網(wǎng)相關(guān)的測(cè)試:
-
斷網(wǎng) 1 分鐘->恢復(fù)網(wǎng)絡(luò)
-
斷網(wǎng) 1 分鐘->重啟邊緣節(jié)點(diǎn)->恢復(fù)網(wǎng)絡(luò)
觀察兩個(gè)測(cè)試過(guò)程中節(jié)點(diǎn)和 Pod 的狀態(tài)變化。本文 Demo 中的斷網(wǎng)方式是將路由器的公網(wǎng)連接斷開(kāi)。
1)斷網(wǎng) 1 分鐘->恢復(fù)網(wǎng)絡(luò)
斷開(kāi)網(wǎng)絡(luò),大約 40s 后,節(jié)點(diǎn)變成 NotReady(正常節(jié)點(diǎn) 10s 鐘上報(bào)一次心跳,當(dāng) 4 次沒(méi)有上報(bào)心跳時(shí),管控組件認(rèn)為節(jié)點(diǎn)異常)。
root@master-node:~# kubectl get nodes NAME STATUS ROLES AGE VERSION edge-node NotReady <none> 5m13s v1.16.6 master-node Ready master 6m4s v1.16.6繼續(xù)等待 5s 之后(正常節(jié)點(diǎn)變?yōu)?NotReady 之后,5m 才開(kāi)始驅(qū)逐 pod,此處為了測(cè)試效果,將 pod 的容忍時(shí)間配成了 5s),應(yīng)用 pod 被驅(qū)逐,狀態(tài)變?yōu)?Terminating。
root@master-node:~# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Terminating 0 3m45s將網(wǎng)絡(luò)恢復(fù),觀察節(jié)點(diǎn)及 pod 變化。
root@master-node:~# kubectl get pods No resources found in default namespace.網(wǎng)絡(luò)恢復(fù)后,節(jié)點(diǎn)狀態(tài)變成 ready,業(yè)務(wù) pod 被清除,這是因?yàn)檫吘壒?jié)點(diǎn)的 Kubelet 獲取到業(yè)務(wù) Pod 的 Terminating 狀態(tài),對(duì)業(yè)務(wù) Pod 做刪除操作,并返回刪除成功,云端也做了相應(yīng)的清理。至此,業(yè)務(wù) Pod 由于云邊網(wǎng)絡(luò)的不穩(wěn)定而被驅(qū)逐,然而在斷網(wǎng)期間,邊緣節(jié)點(diǎn)其實(shí)是可以正常工作的。
重新創(chuàng)建應(yīng)用 nginx,用于下面測(cè)試。
root@master-node:~# kubectl get pods -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 4s 192.168.0.100 edge-node <none> <none>2)斷網(wǎng) 1 分鐘->重啟邊緣節(jié)點(diǎn)->恢復(fù)網(wǎng)絡(luò)
接下來(lái),我們測(cè)試在斷網(wǎng)的情況下,邊緣節(jié)點(diǎn)的重啟對(duì)業(yè)務(wù)的影響。斷網(wǎng) 1 分鐘之后,Node 和 Pod 狀態(tài)同上面測(cè)試結(jié)果,Node 變?yōu)?NotReady,Pod 的狀態(tài)變?yōu)?Terminating。此時(shí),切換到私有網(wǎng)絡(luò)環(huán)境,登錄到樹(shù)莓派上,將樹(shù)莓派重啟,重啟完成后等待大約 1 分鐘,觀察重啟前后節(jié)點(diǎn)上的容器列表。
重啟前邊緣節(jié)點(diǎn)容器列表(此時(shí)云邊端開(kāi),雖然在云端獲取的 pod 是 Terminating 狀態(tài),但是邊緣并未 Watch 到 Terminating 的操作,所以邊緣的應(yīng)用還正常運(yùn)行)。
root@edge-node:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9671cbf28ca6 e86f991e5d10 "/docker-entrypoint.…" About a minute ago Up About a minute k8s_nginx_nginx_default_efdf11c6-a41c-4b95-8ac8-45e02c9e1f4d_0 6272a46f93ef registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 2 minutes ago Up About a minute k8s_POD_nginx_default_efdf11c6-a41c-4b95-8ac8-45e02c9e1f4d_0 698bb024c3db f9ea384ddb34 "/usr/local/bin/kube…" 8 minutes ago Up 8 minutes k8s_kube-proxy_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_0 31952700c95b registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 8 minutes ago Up 8 minutes k8s_POD_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_0重啟后節(jié)點(diǎn)容器列表,斷網(wǎng)重啟后,kubelet 無(wú)法從云端獲取 Pod 信息,不會(huì)重建 Pod。
root@edge-node:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@edge-node:~#從重啟前后的對(duì)比看,邊緣節(jié)點(diǎn)在斷網(wǎng)重啟之后,節(jié)點(diǎn)上的 Pod 全部無(wú)法恢復(fù)。這就會(huì)導(dǎo)致在云邊斷網(wǎng)時(shí),一旦節(jié)點(diǎn)重啟,應(yīng)用將無(wú)法工作。
將網(wǎng)絡(luò)恢復(fù),觀察節(jié)點(diǎn)及 pod 變化,同上面測(cè)試結(jié)果,網(wǎng)絡(luò)恢復(fù)后,節(jié)點(diǎn)變?yōu)?Ready,業(yè)務(wù) Pod 被清除。
root@master-node:~# kubectl get nodes NAME STATUS ROLES AGE VERSION edge-node Ready <none> 11m v1.16.6 master-node Ready master 12m v1.16.6 root@master-node:~# kubectl get pods No resources found in default namespace.接下來(lái),再次部署業(yè)務(wù) nginx,測(cè)試 OpenYurt 集群對(duì)云邊運(yùn)維的支持和對(duì)云邊斷網(wǎng)時(shí)的反應(yīng)。
root@master-node:~# kubectl get pods -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 12s 192.168.0.100 edge-node <none> <none>原生 K8s 集群一鍵轉(zhuǎn)換為 OpenYurt 集群
探究了原生 Kubernetes 在云邊一體化架構(gòu)中的不足之后,我們來(lái)看下 OpenYurt 集群是否能滿足這種場(chǎng)景。現(xiàn)在,我們利用 OpenYurt 社區(qū)提供的集群轉(zhuǎn)換工具 yurtctl,來(lái)將原生 K8s 集群轉(zhuǎn)換成 OpenYurt 集群。在 master 節(jié)點(diǎn)上執(zhí)行如下命令,?該命令指定了組件的鏡像以及云端節(jié)點(diǎn),并指定安裝云邊運(yùn)維通道 yurt-tunnel。
yurtctl convert --yurt-controller-manager-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurt-controller-manager:v0.2.1 --yurt-tunnel-agent-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurt-tunnel-agent:v0.2.1 --yurt-tunnel-server-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurt-tunnel-server:v0.2.1 --yurtctl-servant-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurtctl-servant:v0.2.1 --yurthub-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurthub:v0.2.1 --cloud-nodes=master-node --deploy-yurttunnel轉(zhuǎn)換大概需要 2min,轉(zhuǎn)換完成之后,觀察業(yè)務(wù) pod 的狀態(tài),可以看到轉(zhuǎn)換過(guò)程中對(duì)業(yè)務(wù) pod 無(wú)影響(也可以在轉(zhuǎn)換過(guò)程中在新的終端使用 kubectl get pod -w 觀察業(yè)務(wù) pod 的狀態(tài))。
root@master-node:~# kubectl get pods -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 2m4s 192.168.0.100 edge-node <none> <none>執(zhí)行完成之后的組件分布如圖 3 所示,其中橙色部分是 OpenYurt 相關(guān)的組件,藍(lán)色部分是原生 K8s 組件。相應(yīng)地,我們觀察云端節(jié)點(diǎn)和邊緣節(jié)點(diǎn)的 pod。
圖 3? OpenYurt 集群組件分布圖
云端節(jié)點(diǎn) yurt 相關(guān)的 pod:yurt-controller-manager 和 yurt-tunnel-server。
root@master-node:~# kubectl get pods --all-namespaces -owide | grep master | grep yurt kube-system yurt-controller-manager-7d9db5bf85-6542h 1/1 Running 0 103s 183.195.233.42 master-node <none> <none> kube-system yurt-tunnel-server-65784dfdf-pl5bn 1/1 Running 0 103s 183.195.233.42 master-node <none> <none>邊緣節(jié)點(diǎn)新增 yurt 相關(guān)的 pod: yurt-hub(static pod)和 yurt-tunnel-agent。
root@master-node:~# kubectl get pods --all-namespaces -owide | grep edge | grep yurt kube-system yurt-hub-edge-node 1/1 Running 0 117s 192.168.0.100 edge-node <none> <none> kube-system yurt-tunnel-agent-7l8nv 1/1 Running 0 2m 192.168.0.100 edge-node <none> <none>測(cè)試 OpenYurt 集群在邊緣場(chǎng)景中的能力
1. 測(cè)試 logs/exec/port-forward 等運(yùn)維指令,查看結(jié)果
root@master-node:~# kubectl logs nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start uproot@master-node:~# kubectl exec -it nginx sh kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. # ls bin dev docker-entrypoint.sh home media opt root sbin sys usr boot docker-entrypoint.d etc lib mnt proc run srv tmp var # exitroot@master-node:~# kubectl port-forward pod/nginx 8888:80 Forwarding from 127.0.0.1:8888 -> 80 Handling connection for 8888測(cè)試 port-forward 時(shí),在 master 節(jié)點(diǎn)上執(zhí)行 curl 127.0.0.1:8888,可以訪問(wèn) nginx 服務(wù)。
從演示結(jié)果看,OpenYurt 能夠很好地支持常用的云邊運(yùn)維指令。
2. 測(cè)試邊緣斷網(wǎng)時(shí)對(duì)業(yè)務(wù)的影響
同樣我們重復(fù)原生 K8s 中斷網(wǎng)的兩個(gè)測(cè)試,在測(cè)試之前我們先為邊緣節(jié)點(diǎn) edge-node 開(kāi)啟自治。在 OpenYurt 集群中,邊緣節(jié)點(diǎn)的自治是通過(guò)一個(gè) annotation 來(lái)標(biāo)識(shí)的。
root@master-node:~# kubectl annotate node edge-node node.beta.alibabacloud.com/autonomy=true node/edge-node annotated1)斷網(wǎng) 1 分鐘->網(wǎng)絡(luò)恢復(fù)
同樣,將路由器公網(wǎng)斷開(kāi),觀察 Node 和 Pod 的狀態(tài)。大約過(guò)了 40s,節(jié)點(diǎn)的狀態(tài)變成 NotReady,而大約過(guò) 1min 以后,Pod 的狀態(tài)一直是 Running,并不會(huì)被驅(qū)逐。
root@master-node:~# kubectl get nodes NAME STATUS ROLES AGE VERSION edge-node NotReady <none> 24m v1.16.6 master-node Ready master 25m v1.16.6 root@master-node:~# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 5m7s恢復(fù)網(wǎng)絡(luò),觀察 Node 和 Pod 的狀態(tài),Node 狀態(tài)變?yōu)?Ready,Pod 保持 Running。可見(jiàn)云邊網(wǎng)絡(luò)不穩(wěn)定時(shí),對(duì)邊緣節(jié)點(diǎn)的業(yè)務(wù) Pod 無(wú)影響。
root@master-node:~# kubectl get nodes NAME STATUS ROLES AGE VERSION edge-node Ready <none> 25m v1.16.6 master-node Ready master 26m v1.16.6 root@master-node:~# kubectl get pods NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 6m30s2)斷網(wǎng) 1 分鐘->重啟邊緣節(jié)點(diǎn)->恢復(fù)網(wǎng)絡(luò)
接下來(lái),我們測(cè)試在斷網(wǎng)的情況下,邊緣節(jié)點(diǎn)的重啟對(duì)業(yè)務(wù)的影響。斷網(wǎng) 1 分鐘之后,Node 和 Pod 狀態(tài)同上面測(cè)試結(jié)果,Node 變?yōu)?NotReady,Pod 保持 Running。同樣,我們登錄到樹(shù)莓派上,將樹(shù)莓派重啟,觀察重啟前后節(jié)點(diǎn)上的容器列表。
重啟前邊緣節(jié)點(diǎn)容器列表:
root@edge-node:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38727ec9270c 70bf6668c7eb "yurthub --v=2 --ser…" 7 minutes ago Up 7 minutes k8s_yurt-hub_yurt-hub-edge-node_kube-system_d75d122e752b90d436a71af44c0a53be_0 c403ace1d4ff registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 7 minutes ago Up 7 minutes k8s_POD_yurt-hub-edge-node_kube-system_d75d122e752b90d436a71af44c0a53be_0 de0d693e9e74 473ae979be68 "yurt-tunnel-agent -…" 7 minutes ago Up 7 minutes k8s_yurt-tunnel-agent_yurt-tunnel-agent-7l8nv_kube-system_75d28494-f577-43fa-9cac-6681a1215498_0 a0763f143f74 registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 7 minutes ago Up 7 minutes k8s_POD_yurt-tunnel-agent-7l8nv_kube-system_75d28494-f577-43fa-9cac-6681a1215498_0 80c247714402 e86f991e5d10 "/docker-entrypoint.…" 7 minutes ago Up 7 minutes k8s_nginx_nginx_default_b45baaac-eebc-466b-9199-2ca5c1ede9fd_0 01f7770cb0f7 registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 7 minutes ago Up 7 minutes k8s_POD_nginx_default_b45baaac-eebc-466b-9199-2ca5c1ede9fd_0 7e65f83090f6 f9ea384ddb34 "/usr/local/bin/kube…" 17 minutes ago Up 17 minutes k8s_kube-proxy_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_1 c1ed142fc75b registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 17 minutes ago Up 17 minutes k8s_POD_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_1重啟后邊緣節(jié)點(diǎn)容器列表:
root@edge-node:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0c66b87066a0 473ae979be68 "yurt-tunnel-agent -…" 12 seconds ago Up 11 seconds k8s_yurt-tunnel-agent_yurt-tunnel-agent-7l8nv_kube-system_75d28494-f577-43fa-9cac-6681a1215498_2 a4fb3e4e8c8f e86f991e5d10 "/docker-entrypoint.…" 58 seconds ago Up 56 seconds k8s_nginx_nginx_default_b45baaac-eebc-466b-9199-2ca5c1ede9fd_1 fce730d64b32 f9ea384ddb34 "/usr/local/bin/kube…" 58 seconds ago Up 57 seconds k8s_kube-proxy_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_2 c78166ea563f registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 59 seconds ago Up 57 seconds k8s_POD_yurt-tunnel-agent-7l8nv_kube-system_75d28494-f577-43fa-9cac-6681a1215498_1 799ad14bcd3b registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 59 seconds ago Up 57 seconds k8s_POD_nginx_default_b45baaac-eebc-466b-9199-2ca5c1ede9fd_1 627673da6a85 registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" 59 seconds ago Up 58 seconds k8s_POD_kube-proxy-rjws7_kube-system_51576be4-2b6d-434d-b50b-b88e2d436fef_2 04da705e4120 70bf6668c7eb "yurthub --v=2 --ser…" About a minute ago Up About a minute k8s_yurt-hub_yurt-hub-edge-node_kube-system_d75d122e752b90d436a71af44c0a53be_1 260057d935ee registry.cn-hangzhou.aliyuncs.com/edge-kubernetes/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_yurt-hub-edge-node_kube-system_d75d122e752b90d436a71af44c0a53be_1從重啟前后的對(duì)比看,邊緣節(jié)點(diǎn)在斷網(wǎng)重啟之后,節(jié)點(diǎn)上的 pod 能正常拉起,OpenYurt 的節(jié)點(diǎn)自治能力可以在斷網(wǎng)下保證業(yè)務(wù)的穩(wěn)定運(yùn)行。
恢復(fù)網(wǎng)絡(luò),節(jié)點(diǎn) Ready,觀察業(yè)務(wù) pod 的狀態(tài),網(wǎng)絡(luò)恢復(fù)后,業(yè)務(wù) pod 狀態(tài)保持 running,有一次重啟記錄,符合預(yù)期。
root@master-node:~# kubectl get pods -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 1 11m 192.168.0.100 edge-node <none> <none>最后,我們利用 yurtctl 的能力將 OpenYurt 集群,轉(zhuǎn)換為原生 K8s 集群。同樣,可以觀察轉(zhuǎn)換過(guò)程中對(duì)現(xiàn)有業(yè)務(wù)不會(huì)有影響。
yurtctl revert --yurtctl-servant-image=registry.cn-hangzhou.aliyuncs.com/openyurt/yurtctl-servant:v0.2.1OpenYurt 作為阿里首個(gè)邊緣云原生開(kāi)源項(xiàng)目,基于商業(yè)化產(chǎn)品 ACK@Edge,在集團(tuán)內(nèi)部經(jīng)歷了長(zhǎng)時(shí)間的打磨。已經(jīng)應(yīng)用在 CDN、IoT、盒馬、ENS、菜鳥(niǎo)物流等眾多場(chǎng)景。針對(duì)邊緣場(chǎng)景,該項(xiàng)目堅(jiān)持保持原生 K8s 的特性,以 Addon 的形式提供了邊緣節(jié)點(diǎn)自治、云邊端一體化運(yùn)維通道等能力。最近在社區(qū)同學(xué)的一起努力下又開(kāi)源了邊緣單元化管理能力,同時(shí)后續(xù)還會(huì)繼續(xù)開(kāi)源更多的邊緣管理能力,歡迎大家積極參與貢獻(xiàn)。釘釘搜索群號(hào):31993519,即可進(jìn)群交流。
總結(jié)
以上是生活随笔為你收集整理的OpenYurt 入门 - 在树莓派上玩转 OpenYurt的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OpenKruise 2021 规划曝光
- 下一篇: 再见 2020!Apache Rocke