暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

IoT基础架构的演进 — KubeEdge安装

ProdanLabs 2020-11-15
1266

5G的兴起带动IT互联网技术的变革和走向,带来泛在接入,为解决当前边缘领域面临的挑战,边缘计算由此而生。


KubeEdge是一个开源的边缘计算平台,基于Kubernetes实现了云边协同、计算下沉、海量边缘设备管理、边缘自治等能力,最近也晋升为CNCF孵化级托管项目。笔者也是它的忠实粉丝,之前也有介绍过,实际上在我们物联网业务的应用场景中一直有试用和探索。


在物联网生态中,还有扮演着重要角色边缘端操作系统。Canonical公司推出物联网生态系统和嵌入式设备的Ubuntu Core 操作系统,Ubuntu Core使用了革命性的Snap通用软件包格式,旨在降低安全维护成本和软件开发风险,事实上ubuntu core也是一个snap包,默认安装的软件包较少,仅200多M,可最大限度地减少攻击面,它受到戴尔,英特尔,高通,三星,恩智浦和Rigado等各种物联网设备的支持。


如果说KubeEdgeKubernetes的能力延伸到边缘,那么Ubuntu Core就是Linux在物联网领域的扩展。




  KubeEdge 云端安装


使用Keadm进行部署KubeEdge的云和边缘组件,它不负责安装K8s和容器运行时,因此需要具备先决条件,对于云端而言需要正确配置kubeconfig,通常在 ${HOME}/.kube/config


Step 1: 安装Keadm

# wget https://github.com/kubeedge/kubeedge/releases/download/v1.4.0/keadm-v1.4.0-linux-amd64.tar.gz
# tar -zxvf keadm-v1.4.0-linux-amd64.tar.gz
# mv keadm-v1.4.0-linux-amd64/keadm/keadm /usr/local/bin/


Step 2: 初始化cloudcore

# keadm init --advertise-address="47.242.xx.xx"

--advertise-address 参数指定云节点的公共IP,云服务器为公网IP 


cloudcore初始化成功后,会在Kubernetes创建4个CRD资源,和kubeedge命名空间,并在该空间下创建了三个secrets

root@k8s-test99:~# kubectl get crd | grep kubeedge.io
clusterobjectsyncs.reliablesyncs.kubeedge.io          2020-11-13T06:53:09Z
devicemodels.devices.kubeedge.io                      2020-11-13T06:53:08Z
devices.devices.kubeedge.io                           2020-11-13T06:53:08Z
objectsyncs.reliablesyncs.kubeedge.io                 2020-11-13T06:53:09Z
root@k8s-test99:~# kubectl -n kubeedge get secrets 
NAME                  TYPE                                  DATA   AGE
casecret              Opaque                                2      31h
cloudcoresecret       Opaque                                2      31h
default-token-6dzfc   kubernetes.io/service-account-token   3      31h
tokensecret           Opaque                                1      31h


其中tokensecret是KubeEdge边缘端接入token,可以使用keadm 或 kubectl 命令获取

root@k8s-test99:~#  keadm gettoken
3385553490654fb476eae55a1819a3dfeec44b76bddc563b15a3c0580107a25a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDUzMzc3NzR9.OCvedXKDJfCBfT_jAtDOnI8_7KZebYa05EQ_G27xGb4
root@k8s-test99:~#  kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d
3385553490654fb476eae55a1819a3dfeec44b76bddc563b15a3c0580107a25a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDUzMzc3NzR9.OCvedXKDJfCBfT_jAtDOnI8_7KZebYa05EQ_G27xGb4 
root@k8s-test99:~#


Step 3: 使用systemd管理cloudcore(可选)

cloudcore的默认的配置文件在 /etc/kubeedge/config/cloudcore.yaml

# vim /usr/lib/systemd/system/cloudcore.service
[Unit]
Description=cloudcore.service

[Service]
Type=simple
ExecStart=/usr/local/bin/cloudcore > /var/log/kubeedge/cloudcore.log 2>&1
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable cloudcore
# systemctl start cloudcore
# systemctl status cloudcore


Step 4: 启用kubectl logs功能(可选)

从仓库复制证书生成脚本

root@k8s-test99:~# git clone https://github.com/kubeedge/kubeedge
root@k8s-test99:~# cp /tmp/kubeedge/build/tools/certgen.sh /etc/kubeedge/


确保/etc/kubernetes/pki/目录有ca.crt和ca.key

root@k8s-test99:~# ls /etc/kubernetes/pki/ca*
/etc/kubernetes/pki/ca.crt  /etc/kubernetes/pki/ca.key  /etc/kubernetes/pki/ca.srl


指定cloudcore的地址,云服务器指定公网IP

export CLOUDCOREIPS="47.242.xx.xx"


生成证书

root@k8s-test99:~# cd /etc/kubeedge/
root@k8s-test99:/etc/kubeedge# ./certgen.sh stream
root@k8s-test99:/etc/kubeedge# tree
.
├── ca
│   └── streamCA.crt
├── certgen.sh
├── certs
│   ├── stream.crt
│   ├── stream.csr
│   └── stream.key
├── config
│   └── cloudcore.yaml


在kube-apiserver的服务器上设置iptables转发规则

root@k8s-test99:~# iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to $CLOUDCOREIPS:10003


开启cloudcore cloudStream功能,并重启cloudcore

root@k8s-test99:~# vi /etc/kubeedge/config/cloudcore.yaml 
 cloudStream:
    enable: true
root@k8s-test99:~#  systemctl restart cloudcore


Step 5: 启用Metrics server功能(可选)

 该功能点的实现重用了cloudstream和edgestream模块,需要执行开启kubectl logs功能的步骤。


克隆 metrics server 仓库

root@k8s-test99:~# git clone https://github.com/kubernetes-sigs/metrics-server.git
root@k8s-test99:~# cd metrics-server/manifests/base/


可以选择build镜像,本文没有选择

cd metrics-server
make container


编辑deployment.yaml文件

1、metrics server 需要运行在kube-apiserver节点;

2、metrics server 需要使用hostnetwork网络模式;

3、metrics server 需要开启kubelet-use-node-status-port功能;

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/master
                      operator: In
                      values:
                      - k8s-test99
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      priorityClassName: system-cluster-critical
      hostNetwork: true
      containers:
      - name: metrics-server
        image: gcr.io/k8s-staging-metrics-server/metrics-server:master
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --v=2
          - --kubelet-insecure-tls
          - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalIP,Hostname
          - --kubelet-use-node-status-port
        ports:
        - name: https
          containerPort: 4443
          protocol: TCP
        readinessProbe:
          httpGet:
            path: /readyz
            port: https
            scheme: HTTPS
          periodSeconds: 10
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /livez
            port: https
            scheme: HTTPS
          periodSeconds: 10
          failureThreshold: 3
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        kubernetes.io/os: linux
---
apiVersion: v1
kind: Service
metadata:
  name: metrics-server
  namespace: kube-system
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server


创建metrics server

root@k8s-test99:~/metrics-server/manifests/base
root@k8s-test99:~/metrics-server/manifests/base# tree 
.
├── apiservice.yaml
├── deployment.yaml
├── kustomization.yaml
├── rbac.yaml
└── service.yaml

0 directories, 5 files
root@k8s-test99:~/metrics-server/manifests/base# kubectl create -f .
root@k8s-test99:~/metrics-server/manifests/base# kubectl -n kube-system get po --selector=k8s-app=metrics-server
NAME                             READY   STATUS    RESTARTS   AGE
metrics-server-8cf664b9b-5xwpv   1/1     Running   0          15m





  KubeEdge 边缘端安装


使用Keadm进行部署,需要先安装容器运行时,默认为docker。


Step 1: 安装Keadm

[root@edge-test001 ~]# wget https://github.com/kubeedge/kubeedge/releases/download/v1.4.0/keadm-v1.4.0-linux-amd64.tar.gz
[root@edge-test001 ~]# tar -zxvf keadm-v1.4.0-linux-amd64.tar.gz
[root@edge-test001 ~]# mv keadm-v1.4.0-linux-amd64/keadm/keadm /usr/local/bin/


Step 2: 加入边缘节点

[root@edge-test001 ~]# keadm join --cloudcore-ipport=47.242.xx.xx:10000 --token=3385553490654fb476eae55a1819a3dfeec44b76bddc563b15a3c0580107a25a.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDUzMzc3NzR9.OCvedXKDJfCBfT_jAtDOnI8_7KZebYa05EQ_G27xGb4

1.3版本后,无需再从云端拷贝证书文件到边缘端,亦无需手动创建node节点,都会自动完成。在拥有大量边缘终端的时候,这功能很实用。


Step 3: 在云端检查该边缘端是否加入

root@k8s-test99:~# kubectl get nodes -o wide
NAME           STATUS     ROLES        AGE   VERSION                   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                 CONTAINER-RUNTIME
edge-test001   Ready    agent,edge   32h   v1.18.6-kubeedge-v1.4.0   172.31.250.219   <none>        CentOS Linux 8 (Core)   4.18.0-193.14.2.el8_2.x86_64   docker://19.3.13
edge-test002   NotReady   agent,edge   31h   v1.18.6-kubeedge-v1.4.0   172.20.61.119    <none>        Ubuntu 20.04.1 LTS      5.4.0-47-generic               docker://19.3.13
edge-test003   NotReady   agent,edge   30h   v1.18.6-kubeedge-v1.4.0   172.18.46.55     <none>        CentOS Linux 7 (Core)   3.10.0-693.2.2.el7.x86_64      docker://18.6.1
k8s-test99     Ready      master       32h   v1.19.4                   172.31.250.218   <none>        Ubuntu 20.04.1 LTS      5.4.0-47-generic               docker://19.3.13

可以看到edge-test001已成功加入。(笔者写文章时候与操作有时间间隔)


Step 4: 在边缘端启用kubectl logs功能(可选)

开启edgecore cloudStream功能,并重启edgecore。

root@edge-test001 ~]# cd /etc/kubeedge/
[root@edge-test001 kubeedge]# vi config/edgecore.yaml 
  edgeStream:
    enable: true
    handshakeTimeout: 30
    readDeadline: 15
    server: 47.242.xx.xx:10004
    tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
    tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
    tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
    writeDeadline: 15

[root@edge-test001 kubeedge]# systemctl restart edgecore.service


Step 5: 在云端创建pod验证

创建测试的deploy,定义反亲和性,pod调度到edge节点

root@k8s-test99:~# cat demo.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
          nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/master
                      operator: DoesNotExist
      containers:
      - name: nginx
        image: nginx:1.19.4-alpine
        ports:
        - containerPort: 80
          hostPort: 80
root@k8s-test99:~# kubectl create -f demo.yaml 
deployment.apps/nginx created
root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP       NODE           NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   0/1     Pending   0          4s    <none>   edge-test001   <none>           <none>
root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          9s    172.17.0.2   edge-test001   <none>           <none>
root@k8s-test99:~


到边缘端查看容器

[root@edge-test001 ~]# docker ps 
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                NAMES
4087353ee74c        e5dcd7aa4b5e          "/docker-entrypoint.…"   About a minute ago   Up About a minute                        k8s_nginx_nginx-6bc4cff87d-c6ln7_default_626a0d86-1752-4fb2-9d7d-da91bd61f759_0
bd59aa68fa63        kubeedge/pause:3.1    "/pause"                 About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   k8s_POD_nginx-6bc4cff87d-c6ln7_default_626a0d86-1752-4fb2-9d7d-da91bd61f759_0


验证kubectl logs功能

root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          2m59s   172.17.0.2   edge-test001   <none>           <none>
root@k8s-test99:~# kubectl logs -f nginx-6bc4cff87d-c6ln7 
/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: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: 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 up


验证metrics server功能

root@k8s-test99:~# kubectl get nodes -o wide
NAME           STATUS     ROLES        AGE   VERSION                   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                 CONTAINER-RUNTIME
edge-test001   Ready      agent,edge   34h   v1.18.6-kubeedge-v1.4.0   172.31.250.219   <none>        CentOS Linux 8 (Core)   4.18.0-193.14.2.el8_2.x86_64   docker://19.3.13
edge-test002   NotReady   agent,edge   33h   v1.18.6-kubeedge-v1.4.0   172.20.61.119    <none>        Ubuntu 20.04.1 LTS      5.4.0-47-generic               docker://19.3.13
edge-test003   NotReady   agent,edge   32h   v1.18.6-kubeedge-v1.4.0   172.18.46.55     <none>        CentOS Linux 7 (Core)   3.10.0-693.2.2.el7.x86_64      docker://18.6.1
k8s-test99     Ready      master       34h   v1.19.4                   172.31.250.218   <none>        Ubuntu 20.04.1 LTS      5.4.0-47-generic               docker://19.3.13
root@k8s-test99:~# kubectl top nodes
NAME           CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%     
edge-test001   27m          0%     1364Mi          17%         
k8s-test99     241m         6%     2555Mi          32%         
edge-test003   <unknown>                           <unknown>               <unknown>               <unknown>               
edge-test002   <unknown>                           <unknown>               <unknown>               <unknown>               
root@k8s-test99:~

在线的节点都可以获取到系统的资源





  Ubuntu Core安装KubeEdge


在KVM上安装Ubuntu Core用于测试,需要一个Ubuntu SSO账号,用于安装和ssh登陆。


Step 1: 安装Ubuntu Core

安装KVM,需要cpu开启虚拟化

prodan@ubuntu:~$ egrep 'vmx|svm' /proc/cpuinfo  | wc -l
4
prodan@ubuntu:~$ sudo apt install qemu-kvm
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
qemu-kvm 已经是最新版 (1:4.2-3ubuntu6.8)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
prodan@ubuntu:~$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
prodan@ubuntu:~$ 


创建并启动kvm虚拟机

prodan@ubuntu:~$ wget https://cdimage.ubuntu.com/ubuntu-core/18/stable/current/ubuntu-core-18-amd64.img.xz
prodan@ubuntu:~$ unxz ubuntu-core-18-amd64.img.xz
prodan@ubuntu:~$ kvm -smp 2 -m 1500 -netdev user,id=mynet0,hostfwd=tcp::8022-:22,hostfwd=tcp::8090-:80 -device virtio-net-pci,netdev=mynet0 -vga qxl -drive file=ubuntu-core-18-amd64.img,format=raw

虚拟机22端口映射到本地8022端口;

虚拟机80端口映射到本地8090端口;

-vga qxl 设置半虚拟图形驱动程序qxl;


安装比较简单,输入Ubuntu SSO账号即可


Step 2: 在Ubuntu Core安装docker

通过ssh -p 8022 <Ubuntu SSO user name>@localhost登陆

prodan@ubuntu:~/kvm$ ssh -p 8022 test@localhost
Welcome to Ubuntu Core 18 (GNU/Linux 4.15.0-112-generic x86_64)
 * Ubuntu Core:     https://www.ubuntu.com/core
 * Community:       https://forum.snapcraft.io
 * Snaps:           https://snapcraft.io

This Ubuntu Core 18 machine is a tiny, transactional edition of Ubuntu,
designed for appliances, firmware and fixed-function VMs.

If all the software you care about is available as snaps, you are in
the right place. If not, you will be more comfortable with classic
deb-based Ubuntu Server or Desktop, where you can mix snaps with
traditional debs. It's a brave new world here in Ubuntu Core!

Please see '
snap --help' for app installation and updates.
Last login: Fri Nov 13 09:51:39 2020 from 10.0.2.2

通过snap安装docker,snap目前没有国内源,可以设置自己的代理。

$ sudo su  - 
root@localhost:~# cat /etc/systemd/system/snapd.service
[Service]
Environment=http_proxy=http://192.168.1.6:8880
Environment=https_proxy=http://192.168.1.6:8880

安装docker

root@localhost:~# snap install docker


Step 3: 使用docker安装mosquitto

root@localhost:~# docker run -d  --net host  --restart=always --name=mosquitto  eclipse-mosquitto:1.6.12
7f3859fb0063a1be51edeed156b89f7dcfe230851be4a98a9f38da09d83ffb63
root@localhost:~# docker ps 
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES
7f3859fb0063        eclipse-mosquitto:1.6.12   "/docker-entrypoint.…"   3 seconds ago       Up 3 seconds                            mosquitto
root@localhost:~#


Step 4: 使用docker安装edgecore

Ubuntu Core因为安全原因文件系统的权限控制很严格,重要的目录如/etc,/var等只有只读权限。edgecore默认存储pods信息的目录是/var/lib/edged,但是该目录是只读的,所以需要改下源码,重新编译成二进制包

修改edge/pkg/edged/edged.go源码

DefaultRootDir = "/var/lib/snapd/edged"

构建edgecore镜像

[root@edge-test001 kubeedge]# cat Dockerfile 
FROM debian:stretch-slim
RUN apt-get update && apt-get install  apt-transport-https ca-certificates curl   gnupg-agent  iptables  software-properties-common -y \
&& curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" \
&& apt-get update \
&& apt-get install  docker-ce-cli -y \
&& apt-get remove apt-transport-https  curl   gnupg-agent    software-properties-common -y \
&& apt-get clean 
ADD edgecore /usr/local/bin/edgecore
ENTRYPOINT ["edgecore"]
[root@edge-test001 kubeedge]# docker build -t kubeedge/edgecore:v1.4.0 .


初始化配置文件

root@localhost:~# mkdir -p /mnt/kubeedge/config/
root@localhost:~# docker run -it --net host  --rm --name=edgecore-init --privileged=true  --hostname=ubuntu-core-test01 \
> -v /var/run/docker.sock:/var/run/docker.sock \
> kubeedge/edgecore:v1.4.0 --defaultconfig >/mnt/kubeedge/config/edgecore.yaml
root@localhost:~

编辑配置文件,设置server|httpServer|token并开启edgeStream

创建edgecore容器

docker run -it -d --restart=always \
--net host  --name=edgecore \
--privileged=true  --hostname=ubuntu-core-test01 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mnt/kubeedge/:/etc/kubeedge/ \
-v /var/lib/snapd/edged:/var/lib/snapd/edged \
-v /var/snap/docker/:/var/snap/docker/ \
kubeedge/edgecore:v1.4.0

Step 5: 到云端验证

查看边缘节点是否加入

root@k8s-test99:~# kubectl get nodes -o wide
NAME                 STATUS     ROLES        AGE    VERSION                   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                       KERNEL-VERSION                 CONTAINER-RUNTIME
edge-test001         Ready      agent,edge   2d     v1.18.6-kubeedge-v1.4.0   172.31.250.219   <none>        CentOS Linux 8 (Core)          4.18.0-193.14.2.el8_2.x86_64   docker://19.3.13
edge-test002         NotReady   agent,edge   47h    v1.18.6-kubeedge-v1.4.0   172.20.61.119    <none>        Ubuntu 20.04.1 LTS             5.4.0-47-generic               docker://19.3.13
edge-test003         NotReady   agent,edge   47h    v1.18.6-kubeedge-v1.4.0   172.18.46.55     <none>        CentOS Linux 7 (Core)          3.10.0-693.2.2.el7.x86_64      docker://18.6.1
k8s-test99           Ready      master       2d     v1.19.4                   172.31.250.218   <none>        Ubuntu 20.04.1 LTS             5.4.0-47-generic               docker://19.3.13
ubuntu-core-test01   Ready      agent,edge   101s   v1.18.6-kubeedge-v1.4.0   10.0.2.15        <none>        Debian GNU/Linux 9 (stretch)   4.15.0-112-generic             docker://19.3.11
root@k8s-test99:~


调度pod验证

root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          18h   172.17.0.2   edge-test001   <none>           <none>
root@k8s-test99:~# kubectl scale deploy nginx --replicas=2
deployment.apps/nginx scaled
root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE                 NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          18h   172.17.0.2   edge-test001         <none>           <none>
nginx-6bc4cff87d-sqr7m   0/1     Pending   0          2s    <none>       ubuntu-core-test01   <none>           <none>
root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS              RESTARTS   AGE   IP           NODE                 NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running             0          18h   172.17.0.2   edge-test001         <none>           <none>
nginx-6bc4cff87d-sqr7m   0/1     ContainerCreating   0          6s    172.17.0.2   ubuntu-core-test01   <none>           <none>
root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE                 NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          18h   172.17.0.2   edge-test001         <none>           <none>
nginx-6bc4cff87d-sqr7m   1/1     Running   0          17s   172.17.0.2   ubuntu-core-test01   <none>           <none>


测试kubectl logs功能

root@k8s-test99:~# kubectl get po -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE                 NOMINATED NODE   READINESS GATES
nginx-6bc4cff87d-c6ln7   1/1     Running   0          18h   172.17.0.2   edge-test001         <none>           <none>
nginx-6bc4cff87d-sqr7m   1/1     Running   0          17s   172.17.0.2   ubuntu-core-test01   <none>           <none>
root@k8s-test99:~
root@k8s-test99:~# kubectl logs -f nginx-6bc4cff87d-sqr7m
/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: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: 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 up


测试Metrics server功能

root@k8s-test99:~# kubectl top nodes
NAME                 CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%     
edge-test001         34m          0%     2248Mi          29%         
k8s-test99           248m         6%     2762Mi          35%         
ubuntu-core-test01   31m          1%     20Mi            1%          
edge-test002         <unknown>                           <unknown>               <unknown>               <unknown>               
edge-test003         <unknown>                           <unknown>               <unknown>               <unknown>               
root@k8s-test99:~#





  总结


对于物联网终端设备来说,ubuntu core比linux发行版更适合,在安全方面也有优势。同时使用ubuntu core也会面临的一些问题或挑战。KubeEdge 与 Ubuntu Core探索与试用还在继续.....

文章转载自ProdanLabs,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论