存储PLCNext社区PLCNext. on LinkedInPLCNext. on Instagram  PLCNext. on YouTube github plcnext社区存储PLCNext社区

 

 如何创建博客条目

制造商博客
Hits: 297

plcnext的clustermandement?

它的标准在多年来,它还没有对工业产生的影响很大。通常这样的技术被视为
太复杂,不必要。出现的问题是,他们带来了我们的优势吗?

使用Kubernetes的示例的PLCNext的愿景。

 

Kubernetes.

 

Kubernete是一种由其他东西,包括通过各种设备来形成网络的乐集(管理系统,主设备)。该系统用于以略微不同的方式提供应用程序。

经典应用程序将在设备上分发和维护。它是已知应用程序运行的计算机。如果应用程序应该在另一台计算机上运行,​​则必须由一个人完成。如果其中一个计算机失败,则计算机的所有应用程序都不可用。

使用Kubernetes,主机是给出了应用程序的状态描述,并且主人负责其余的。它确保所请求的状态随时维持。但是,在当前运行的节点上未知,但原则上可访问它。

 

问题和解答

 

什么消化了条件描述

  • The state description is the basis of every application. It contains for example which container is used in which version or if an application should be started multiple times for load balancing. It is written completely in text form as json or yaml file. It is therefore fully versionable (e.g. Git or SVN).

如何安装群集

  • 参与者(主服务器和节点)必须提供两个软件组件(容器运行时和Kubernetes)。之后,只需要一个通过令牌登录到主人。其余的是由主人完成的。

如何执行应用程序的更新

  • 更新只是用新的应用程序替换应用程序的状态描述。该更新是在飞行中完成的,这意味着新的应用程序首先安装并启动,并且在最后一刻旧应用程序关闭。如果更新失败,则可以执行回滚,并且可以简单地还原旧状态。 Orchestrator保留所有旧状态。此外,存在所描述的条件版本过的可能性。
  • 这里出现了更新方案的新可能性。例如,如果应用程序在群集中经常运行,则只能在群集中运行一些应用程序首先更新。如果在应用程序的几天或几周后在应用中发生错误,则可以更新其余部分。

如果节点发生故障会发生什么

  • 如果在任何时候节点发生故障,则所有应用程序都只是在另一个节点上可用。可访问性保持不变。只要有足够的计算能力,所有应用程序都可以继续运行。有很多关于MQTT服务器的讨论,因为中央组件在发生故障时会导致大量问题,但在群集中它不是问题。

如果主人失败会发生什么

  • 大师也可以冗余运行,一旦失败另一个节点就可以接管这项工作。

某些应用程序需要在某些节点上运行,因为需要访问硬件。

  • 这可以包含在状态描述中。也可以根据属于设备的标记分配状态。作为示例,每个AXCF2152必须运行某个应用程序。要再次拾取MQTT示例,还有一个在联合中运行的MQTT服务器,此外每个节点都可以配备MQTT客户端来建立与MQTT服务器的通信。主设备仅存在一次,客户端在每个节点上运行。

 Kubernetes.架构

例子

 

包含三个容器(前端,后端,数据库)组成的应用程序的状态描述示例。

部署:

  • 定义容器的所有必要设置。

服务:

  • 集中在集中创建应用程序的接口。无论部署运行哪个节点,界面始终有效。

进入:

 

# Kind of the Deployment
kind: Deployment
apiVersion: apps/v1
metadata:
  name: MyApplicationName
  labels:
    app: MyApplication
    MyApplication: MyApplicationName
    namespace: default

## Container specs
    spec:
      containers:

## Container spec for Frontend
## Name for the Container
      - name: MyContainer-frontend

## Container Image to use      
        image: MyApplicationImage_frontend

## Ports for the frontend, http        
        ports:
        - containerPort: 80

## Container spec for Backend      
      - name: MyContainerName-backend
        image: MyApplicationImage_backend
        ports:
        - containerPort: 3000

## Container spec for mongodb          
      - name: MyContainerName-mongo
        image: mongo:3.4

## Startup commands for Mongo DB
        command:
        - "mongod"
        - "--bind_ip"
        - "0.0.0.0"
        ports:
        - containerPort: 27017    
---
## Service declaration, expose Ports to the kubernetes api (only internal rechable)

apiVersion: v1
kind: Service
metadata:
  name: MyApplicationName
spec:
  ports:
  - name: frontend
    targetPort: 80
    port: 80
  - name: backend
    targetPort: 3000
    port: 3000
  selector:
    app: MyApplication
    task: MyApplicationName     

---    
## Ingress declaration, bind proxy to fronted and backend

apiVersion: networking.k8s.io/v1beta1
kind: Ingress

## Bind ingress to traefik service proxy

metadata:
  name:MyApplicationName
  annotations:
    kubernetes.io/ingress.class: traefik

## Ingress class for frontend, map dns ingress to service port 80 
spec:
  rules:
  - host: MyApp.Mydomain.de
    http:
      paths:
      - path: /
        backend:
          serviceName:MyApplicationName
          servicePort: frontend

## Ingress class for backend, map dns ingress to service port 3000          
  - host: MyApplicationName.MyDomain.de
    http:
      paths:
      - path: /api
        backend:
          serviceName:MyApplicationName
          servicePort: backend
 
 

拿 a look