Entrada de KubeEdge a la guía de implementación de proficiency-KubeEdge v1.3!

KubeEdge  es un sistema de código abierto que puede extender los procesos comerciales nativos en contenedores y la administración de dispositivos a los hosts en Edge. Se basa en Kubernetes y proporciona soporte de infraestructura central para redes, implementación de aplicaciones y sincronización de metadatos entre la nube y el perímetro. También es compatible con MQTT y permite a los desarrolladores escribir lógica personalizada y habilitar la comunicación de dispositivos con recursos limitados en Edge. KubeEdge consta de una parte de nube y una parte de borde. Las partes de borde y nube ahora son de código abierto. Este artículo compilará e implementará KugeEdge basado en el sistema Centos8.0.

Uno, configuración del sistema

1.1 Entorno de clúster

Nombre de la CPU Roles IP Carga de trabajo
ke-nube Nube 192.168.1.66 k8s 、 docker 、 cloudcore
al borde1 Borde 192.168.1.56 acoplador 、 edgecore
ke-edge2 Borde 192.168.1.218 acoplador 、 edgecore

1.2 Deshabilitar el firewall de arranque

# systemctl disable firewalld

1.3 Desactivar SELinux de forma permanente

Edite el archivo / etc / selinux / config y cambie SELINUX a disabled, de la siguiente manera:

# sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
SELINUX=disabled

1.4 Cerrar el intercambio de sistema (opcional)

Kbernetes 1.8 comenzó a requerir el cierre del Swap del sistema. Si no lo está, el kubelet no podrá iniciarse con la configuración predeterminada, de la siguiente manera:

# sed -i 's/.*swap.*/#&/' /etc/fstab
#/dev/mapper/centos-swap swap           swap   defaults     0 0

1.5 Instalar Docker en todas las máquinas

# yum install wget container-selinux -y
# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
# yum erase runc -y
# rpm -ivh containerd.io-1.2.6-3.3.el7.x86_64.rpm
注意:上面的步骤在centos7中无须操作
# update-alternatives --set iptables /usr/sbin/iptables-legacy
# yum install -y yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && yum makecache
# yum -y install docker-ce
# systemctl enable docker.service && systemctl start docker

说明:如果想安装指定版本的Docker
# yum -y install docker-ce-18.06.3.ce

1.6 Reinicie el sistema

# reboot

Dos, implementación de nodo en la nube K8

2.1 Configurar fuente de Yum

[root@ke-cloud ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.2 Instalar kubeadm, kubectl

[root@ke-cloud ~]# yum makecache
[root@ke-cloud ~]# yum install -y kubelet kubeadm kubectl ipvsadm

说明:如果想安装指定版本的kubeadm
[root@ke-cloud ~]# yum install kubelet-1.17.0-0.x86_64 kubeadm-1.17.0-0.x86_64 kubectl-1.17.0-0.x86_64

2.3 Configurar los parámetros del kernel

[root@ke-cloud ~]# cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

[root@ke-cloud ~]# sysctl --system
[root@ke-cloud ~]# modprobe br_netfilter
[root@ke-cloud ~]# sysctl -p /etc/sysctl.d/k8s.conf

加载ipvs相关内核模块
如果重新开机,需要重新加载(可以写在 /etc/rc.local 中开机自动加载)
[root@ke-cloud ~]# modprobe ip_vs
[root@ke-cloud ~]# modprobe ip_vs_rr
[root@ke-cloud ~]# modprobe ip_vs_wrr
[root@ke-cloud ~]# modprobe ip_vs_sh
[root@ke-cloud ~]# modprobe nf_conntrack_ipv4

查看是否加载成功
[root@ke-cloud ~]# lsmod | grep ip_vs

2.4 Extraer imagen

Utilice el comando para ver la versión duplicada del componente k8s correspondiente a la versión actual de kubeadm, de la siguiente manera:

[root@ke-cloud ~]# kubeadm config images list
I0716 20:10:22.666500    6001 version.go:251] remote version is much newer: v1.18.6; falling back to: stable-1.17
W0716 20:10:23.059486    6001 validation.go:28] Cannot validate kubelet config - no validator is available
W0716 20:10:23.059501    6001 validation.go:28] Cannot validate kube-proxy config - no validator is available
k8s.gcr.io/kube-apiserver:v1.17.9
k8s.gcr.io/kube-controller-manager:v1.17.9
k8s.gcr.io/kube-scheduler:v1.17.9
k8s.gcr.io/kube-proxy:v1.17.9
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5

Utilice el comando de extracción de imágenes de configuración de kubeadm para extraer la imagen anterior, de la siguiente manera:

[root@ke-cloud ~]# kubeadm config images pull
I0716 20:11:12.188139    6015 version.go:251] remote version is much newer: v1.18.6; falling back to: stable-1.17
W0716 20:11:12.580861    6015 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0716 20:11:12.580877    6015 validation.go:28] Cannot validate kubelet config - no validator is available
[config/images] Pulled k8s.gcr.io/kube-apiserver:v1.17.9
[config/images] Pulled k8s.gcr.io/kube-controller-manager:v1.17.9
[config/images] Pulled k8s.gcr.io/kube-scheduler:v1.17.9
[config/images] Pulled k8s.gcr.io/kube-proxy:v1.17.9
[config/images] Pulled k8s.gcr.io/pause:3.1
[config/images] Pulled k8s.gcr.io/etcd:3.4.3-0
[config/images] Pulled k8s.gcr.io/coredns:1.6.5

Verifique la imagen descargada, de la siguiente manera:

[root@ke-cloud ~]# docker images
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy                v1.17.9             ddc09a4c2193        19 hours ago        117MB
k8s.gcr.io/kube-controller-manager   v1.17.9             c7f1dde319ee        19 hours ago        161MB
k8s.gcr.io/kube-apiserver            v1.17.9             7417868987f3        19 hours ago        171MB
k8s.gcr.io/kube-scheduler            v1.17.9             f7b1228fa995        19 hours ago        94.4MB
k8s.gcr.io/coredns                   1.6.5               70f311871ae1        8 months ago        41.6MB
k8s.gcr.io/etcd                      3.4.3-0             303ce5db0e90        8 months ago        288MB
k8s.gcr.io/pause                     3.1                 da86e6ba6ca1        2 years ago         742kB

2.5 Configurar kubelet (opcional)

No es necesario configurar kubelet en el lado de la nube, es principalmente para verificar el correcto despliegue del clúster K8s. También puedes construir aplicaciones como Dashboard en la nube.

Obtenga los cgroups de Docker

[root@ke-cloud ~]# DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f4)
[root@ke-cloud ~]# echo $DOCKER_CGROUPS
cgroupfs

Configurar cgroups para kubelet

[root@ke-cloud ~]# cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.1"
EOF

Iniciar kubelet

[root@ke-cloud ~]# systemctl daemon-reload
[root@ke-cloud ~]# systemctl enable kubelet && systemctl start kubelet

Nota especial: si lo usa aquí, systemctl status kubeletencontrará un mensaje de error. Este error se resolverá automáticamente después de ejecutar kubeadm init para generar el certificado de CA. Puede ignorarlo aquí.

2.6 Inicializar el clúster

Utilice el comando kubeadm init para inicializar el clúster. Una vez completada la inicialización, debe registrar el comando final del proceso de inicialización, como se muestra en la siguiente figura:

[root@ke-cloud ~]# kubeadm init --kubernetes-version=v1.17.9 \
                      --pod-network-cidr=10.244.0.0/16 \
                      --apiserver-advertise-address=192.168.1.66 \
                      --ignore-preflight-errors=Swap

[init] Using Kubernetes version: v1.17.9

...

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.66:6443 --token mskyxo.1gvtjenik78cm1ip \
    --discovery-token-ca-cert-hash sha256:89fd70b84d6beaff3c0223f288a675080034d108b5673cf66502267291078a04

Configurar más kubectl

[root@ke-cloud ~]# rm -rf $HOME/.kube
[root@ke-cloud ~]# mkdir -p $HOME/.kube
[root@ke-cloud ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@ke-cloud ~]# chown $(id -u):$(id -g) $HOME/.kube/config

Ver nodo nodo

[root@ke-cloud ~]# systemctl status kubelet
NAME       STATUS     ROLES    AGE    VERSION
ke-cloud   NotReady   master   3m3s   v1.17.0

2.7 Configurar el complemento de red (opcional)

Nota especial: la versión se actualizará con frecuencia, si la configuración es exitosa, vaya manualmente a https://raw.githubusercontent.com/coreos/flannel/master/Documentation/ para descargar la última versión del archivo yaml

Descarga el archivo yaml del complemento de franela

[root@ke-cloud ~]# cd ~ && mkdir flannel && cd flannel
[root@ke-cloud ~]# curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

puesta en marcha

[root@ke-cloud ~]# kubectl apply -f ~/flannel/kube-flannel.yml

Ver

[root@ke-cloud ~]# kubectl get node
NAME       STATUS   ROLES    AGE   VERSION
ke-cloud   Ready    master   12h   v1.17.0

[root@ke-cloud ~]# kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-6955765f44-k65xx           1/1     Running   0          12h
coredns-6955765f44-r2q6g           1/1     Running   0          12h
etcd-ke-cloud                      1/1     Running   0          12h
kube-apiserver-ke-cloud            1/1     Running   0          12h
kube-controller-manager-ke-cloud   1/1     Running   0          12h
kube-flannel-ds-amd64-lrsrh        1/1     Running   0          12h
kube-proxy-vr44d                   1/1     Running   0          12h
kube-scheduler-ke-cloud            1/1     Running   0          12h

[root@ke-cloud ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   12h

Nota: Solo después de que el complemento de red esté instalado y configurado, el nodo puede mostrarse como listo.

2.8 K8s instalar tablero (opcional)

Referencia: https://github.com/kubernetes/dashboard

En tercer lugar, la instalación y configuración de KubeEdge

3.1 Configuración de la nube

El lado de la nube es responsable de compilar los componentes relacionados de KubeEdge y ejecutar cloudcore.

3.1.1 Preparación

Descarga golang

[root@ke-cloud ~]# wget https://golang.google.cn/dl/go1.14.4.linux-amd64.tar.gz
[root@ke-cloud ~]# tar -zxvf go1.14.4.linux-amd64.tar.gz -C /usr/local

Configurar el entorno de golang

[root@ke-cloud ~]# vim /etc/profile
文件末尾添加:
# golang env
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

[root@ke-cloud ~]# source /etc/profile
[root@ke-cloud ~]# mkdir -p /data/gopath && cd /data/gopath
[root@ke-cloud ~]# mkdir -p src pkg bin

Descarga el código fuente de KubeEdge

[root@ke-cloud ~]# git clone https://github.com/kubeedge/kubeedge $GOPATH/src/github.com/kubeedge/kubeedge

3.1.2 Implementar cloudcore

Se puede implementar localmente implementación de KubeEdge (* esto requiere una compilación separada de cloudcore y edgecore *, referencia de implementación: https://docs.kubeedge.io/en/latest/setup/local.html)  , también a través de keadm Deploy KubeEdge (referencia del método de implementación: https://docs.kubeedge.io/en/latest/setup/keadm.html)  . Este artículo elige el método de implementación de keadm más simple.

Compilar kubeadm

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/kubeedge
[root@ke-cloud ~]# make all WHAT=keadm

说明:编译后的二进制文件在./_output/local/bin下,单独编译cloudcore与edgecore的方式如下:
[root@ke-cloud ~]# make all WHAT=cloudcore && make all WHAT=edgecore

Crear nodo en la nube

[root@ke-cloud ~]# keadm init --advertise-address="192.168.1.66"

Kubernetes version verification passed, KubeEdge installation will start...

...

KubeEdge cloudcore is running, For logs visit:  /var/log/kubeedge/cloudcore.log
CloudCore started

3.2 Configuración de borde

El lado del borde también se puede configurar a través de Keadm, y el archivo ejecutable binario compilado y generado en el lado de la nube se puede copiar al lado del borde a través del comando scp.

3.2.1 Obtención de tokens de la nube

La ejecución en la nube devolverá un token, que se utilizará al unirse a los nodos de borde.keadm gettoken

[root@ke-cloud ~]# keadm gettoken
8ca5a29595498fbc0648ca59208681f9d18dae86ecff10e70991cde96a6f4199.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTUwMzU0Mjh9.YR-N628S5wEFLifC0sM9t-IuIWkgSK-kizFnyAy5Q50

3.2.2 Unir nodo de borde

keadm joinSe instalarán Edgecore y mqtt. También proporciona una bandera a través de la cual se puede configurar una versión específica.

[root@ke-edge1 ~]# keadm join --cloudcore-ipport=192.168.1.66:10000 --token=8ca5a29595498fbc0648ca59208681f9d18dae86ecff10e70991cde96a6f4199.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTUwMzU0Mjh9.YR-N628S5wEFLifC0sM9t-IuIWkgSK-kizFnyAy5Q50

Host has mosquit+ already installed and running. Hence skipping the installation steps !!!

...

KubeEdge edgecore is running, For logs visit:  /var/log/kubeedge/edgecore.log

Nota importante: * El indicador –cloudcore-ipport es obligatorio. * Si desea aplicar automáticamente el certificado al nodo de borde, se requiere -token. * La versión de kubeEdge utilizada por la nube y el extremo del borde debe ser la misma.

3.3 Verificación

Después de iniciar el edgecore, el edge se comunicará con el cloudcore en la nube y los K8 incorporará el edge como un nodo en el control de los K8.

[root@ke-cloud ~]# kubectl get node
NAME       STATUS   ROLES        AGE   VERSION
ke-cloud   Ready    master       13h   v1.17.0
ke-edge1   Ready    agent,edge   64s   v1.17.1-kubeedge-v1.3.1

[root@ke-cloud ~]# kubectl get pods -n kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-6955765f44-k65xx           1/1     Running   0          13h
coredns-6955765f44-r2q6g           1/1     Running   0          13h
etcd-ke-cloud                      1/1     Running   0          13h
kube-apiserver-ke-cloud            1/1     Running   0          13h
kube-controller-manager-ke-cloud   1/1     Running   0          13h
kube-flannel-ds-amd64-fgtdq        0/1     Error     5          5m55s
kube-flannel-ds-amd64-lrsrh        1/1     Running   0          13h
kube-proxy-vr44d                   1/1     Running   0          13h
kube-scheduler-ke-cloud            1/1     Running   0          13h

说明:如果在K8s集群中配置过flannel网络插件(见2.7),这里由于edge节点没有部署kubelet,
所以调度到edge节点上的flannel pod会创建失败。这不影响KubeEdge的使用,可以先忽略这个问题。

Cuarto, ejecute el ejemplo de KubeEdge

Ejemplo de selección: El contador de demostración de KubeEdge Counter  es un pseudodispositivo, los usuarios pueden ejecutar esta demostración sin ningún dispositivo físico adicional. El contador se ejecuta en el borde y el usuario puede controlarlo en la Web desde el lado de la nube u obtener el valor del contador en la Web desde el lado de la nube. El diagrama esquemático es el siguiente:

imagen

Referencia detallada del documento: https://github.com/kubeedge/examples/tree/master/kubeedge-counter-demo

4.1 Preparación

1) Este ejemplo requiere que la versión de KubeEdge sea v1.2.1 +

[root@ke-cloud ~]# kubectl get node
NAME       STATUS   ROLES        AGE   VERSION
ke-cloud   Ready    master       13h   v1.17.0
ke-edge1   Ready    agent,edge   64s   v1.17.1-kubeedge-v1.3.1

说明:本文接下来的验证将使用边缘节点ke-edge1进行,如果你参考本文进行相关验证,后续边缘节点名称的配置需要根据你的实际情况进行更改。

2) Descargue el código de muestra:

[root@ke-cloud ~]# git clone https://github.com/kubeedge/examples.git $GOPATH/src/github.com/kubeedge/examples

4.2 Crear modelo de dispositivo y dispositivo

1) Crea un modelo de dispositivo

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
[root@ke-cloud crds~]# kubectl create -f kubeedge-counter-model.yaml

2) Crear dispositivo

Modifique matchExpressions de acuerdo con su situación real:

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
[root@ke-cloud crds~]# vim kubeedge-counter-instance.yaml
apiVersion: devices.kubeedge.io/v1alpha1
kind: Device
metadata:
  name: counter
  labels:
    description: 'counter'
    manufacturer: 'test'
spec:
  deviceModelRef:
    name: counter-model
  nodeSelector:
    nodeSelectorTerms:
    - matchExpressions:
      - key: 'kubernetes.io/hostname'
        operator: In
        values:
        - ke-edge1

status:
  twins:
    - propertyName: status
      desired:
        metadata:
          type: string
        value: 'OFF'
      reported:
        metadata:
          type: string
        value: '0'

[root@ke-cloud crds~]# kubectl create -f kubeedge-counter-instance.yaml

4.3 Implementar aplicaciones en la nube

1) Modificar el código

La aplicación en la nube web-controller-app se usa para controlar la aplicación pi-counter-app en el borde. El número de puerto de escucha predeterminado del programa es 80, aquí se modifica a 8089, como se muestra a continuación:

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app
[root@ke-cloud web-controller-app~]# vim main.go
package main

import (
        "github.com/astaxie/beego"
        "github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app/controller"
)

func main() {
        beego.Router("/", new(controllers.TrackController), "get:Index")
        beego.Router("/track/control/:trackId", new(controllers.TrackController), "get,post:ControlTrack")

        beego.Run(":8089")
}

2) Construye una imagen

Nota: Al crear la imagen, copie el código fuente en la ruta correspondiente a GOPATH, si ha abierto go mod, ciérrelo.

[root@ke-cloud web-controller-app~]# make all
[root@ke-cloud web-controller-app~]# make docker

3) Implementar la aplicación de controlador web

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
[root@ke-cloud crds~]# kubectl apply -f kubeedge-web-controller-app.yaml

4.3 Implementación de aplicaciones de borde

La aplicación pi-counter-app en el borde está controlada por la aplicación en la nube y se comunica principalmente con el servidor mqtt para funciones de conteo simples.

1) Modifica el código y crea la imagen

Necesita modificar GOARCH en el Makefile a amd64 para ejecutar el contenedor.

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/counter-mapper
[root@ke-cloud counter-mapper~]# vim Makefile
.PHONY: all pi-execute-app docker clean
all: pi-execute-app

pi-execute-app:
        GOARCH=amd64 go build -o pi-counter-app main.go

docker:
        docker build . -t kubeedge/kubeedge-pi-counter:v1.0.0

clean:
        rm -f pi-counter-app

[root@ke-cloud counter-mapper~]# make all
[root@ke-cloud counter-mapper~]# make docker

2) Implementar la aplicación Pi Counter

[root@ke-cloud ~]# cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
[root@ke-cloud crds~]# kubectl apply -f kubeedge-pi-counter-app.yaml

说明:为了防止Pod的部署卡在`ContainerCreating`,这里直接通过docker save、scp和docker load命令将镜像发布到边缘端
[root@ke-cloud ~]# docker save -o kubeedge-pi-counter.tar kubeedge/kubeedge-pi-counter:v1.0.0
[root@ke-cloud ~]# scp kubeedge-pi-counter.tar [email protected]:/root
[root@ke-edge1 ~]# docker load -i kubeedge-pi-counter.tar

4.4 Demostración corporal

Ahora, la parte de la nube y la parte de borde de la demostración de KubeEdge se han implementado de la siguiente manera:

[root@ke-cloud ~]# kubectl get pods -o wide
NAME                                    READY   STATUS    RESTARTS   AGE     IP             NODE       NOMINATED NODE   READINESS GATES
kubeedge-counter-app-758b9b4ffd-f8qjj   1/1     Running   0          26m     192.168.1.66   ke-cloud   <none>           <none>
kubeedge-pi-counter-c69698d6-rb4xz      1/1     Running   0          2m      192.168.1.56   ke-edge1   <none>           <none>

Ahora comenzaremos a probar el efecto de ejecución de la demostración:

1) Ejecutar el comando ON

Seleccione ON en la página web y haga clic en Ejecutar. Puede ver el resultado de la ejecución con el siguiente comando en el nodo de borde:

[root@ke-edge1 ~]# docker logs -f counter-container-id

imagen

2) Ver ESTADO del contador

Seleccione ESTADO en la página web y haga clic en Ejecutar, el estado actual del contador se devolverá en la página web, como se muestra a continuación:imagen

2) Ejecute el comando OFF

Seleccione DESACTIVADO en la página web y haga clic en Ejecutar, puede ver el resultado de la ejecución con el siguiente comando en el nodo de borde:

[root@ke-edge1 ~]# docker logs -f counter-container-id

imagen

Fin ~

Documento oficial:  https://kubeedge.io/zh/blog/kubeedge-deployment-manual/

¡Bienvenidos a todos a unirse a la discusión! ! !

Supongo que te gusta

Origin blog.csdn.net/wxb880114/article/details/109193543
Recomendado
Clasificación