在Kubernetes的世界裡,透過YAML資源清單的方式去宣告物件的內容,包含對其的資源限制,在KubeEdge也同樣適用。
Pod是Kubernetes佈署的基本單位,每一個Pod中會有一個pause容器,負責作網路命名空間的管理。在Kubernetes中會分配給Pod一個cluster IP,在叢集內所有的Pod都能通過cluster IP彼此連接。而在同一個Pod底下的所有容器則共享同一個Pod IP,pause容器則透過network namespace的方式讓同一個Pod底下的所有容器共享網路資源。
我們以busybox為例。
vim busybox.yaml
下面是我的YAML
# busybox.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
labels:
app: busybox
spec:
containers:
- image: busybox:latest
name: busybox
command:
- "sleep"
- "3600"
執行後可以看到結果
kubectl apply -f busybox.yaml
這裡要提出一個跟Kubernetes不同的地方。在Kubernetes的設計裡,可以在雲端直接與其他節點的Pod容器互動,例如下面的例子:
首先我在另一個Kubernetes的worker節點(非edge)同樣部署busybox
此時可以利用類似docker exec的方式從主節點進入到容器中
但同樣的操作方式在KubeEdge中是行不通的:
和Kubernetes叢集設計概念上不同的是,Kubernetes的場景像是在共同網域下的叢集環境,主節點能夠直接進入到其他工作節點是理所當然的;但在KubeEdge中,設計上雲端與邊緣端的應用大部分還是各自運行的,不會考慮到由雲端直接控制edge特定容器的設計。
所以最直接訪問容器的方式是到邊緣節點上,直接用docker exec的方式直接訪問容器: