Kubeedge - 2: 部署安装KubeEdge

KubeEdge 部署环境

  • 在云端方面,我们需要:Kubernetes 集群
    • Kubernetes:在CPU:2G,运行内存2G以上
  • 在边缘,我们需要:
    容器运行时,现在我们支持:
    • Docker
    • Containerd
    • Cri-o
    • Virtlet
    • MQTT服务器(可选)
  • 建议公网开放端口:9443、10252、10251、5353、20006、2701、9376、12345、2379、2380、6443、10000-10004
  • 出现无法访问,第一时间考虑是否未开放相应端口号

1. 安装Docker

Docker

  • 一键shell脚本安装:安装实例中Docker版本19.03.5
     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 install docker-ce-19.03.5 docker-ce-cli-19.03. containerd.io -y


    systemctl start docker
    systemctl enable docker

验证Docker

  • 输入docker version

配置Docker

  • 配置Docker

      1. 修改exec-opts
      1. 添加Docker镜像"registry-mirrors": ["https://dockerproxy.com" ]
  • 一键脚本

    touch /etc/docker/daemon.json
    echo '{ "exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://dockerproxy.com" ] }' > /etc/docker/daemon.json
    service docker restart
    # 开机自动启动,防止需要手动启动
    systemctl enable docker.service

2. 安装K8S集群

一键Shell脚本安装

  • K8S安装版本:19.4
    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab

    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF

    sysctl --system
    yum install -y wget
    mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
    yum clean all && yum makecache

    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=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    yum install -y kubelet-1.19.4 kubectl-1.19.4 kubeadm-1.19.4
    systemctl enable kubelet

部署启动K8S集群

  • 需要指定kubernetes-version和–apiserver-advertise-address
  • apiserver-advertise-address:服务器内网地址
    kubeadm init --apiserver-advertise-address=xxx  --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

安装提示完成安装K8S

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署flannel网络插件

  • 问题描述:当你不部署容器网络的时候,可能会出coredns一直处于pengding 模式
    • 适用情况:执行kubectl describe po <peoblem podid> -n <peoblem podid> 之后描述内容:warning 缺少一个xx 文件的
      # 获取安装文件
      wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      # 执行生成flannel 容器
      kubectl apply -f kube-flannel.yml

其他问题

有master污点,无法调度

  • 使用kubectl describe po <po> -n <namespace>,查看描述类似kubectl taint nodes k8s-master1 node-role.kubernetes.io/master=:NoSchedule node/k8s-master1 tainted
  • 解决:允许调度到master kubectl taint nodes --all node-role.kubernetes.io/master-

3. 安装KubeEdge

一键Shell脚本安装云端

  • 环境:下载KubeEgev.12.1版本
  • –advertise-address 公网ip
  • 出现cloudcore install过慢
    • 事先拉取docker镜像
    • exmaple:docker pull kubeedge/cloudcore:v1.12.1
  • kubeedge\keadm weget可能受到网络限制,下载过慢可以手动下载,放入服务器并且注释wget
  • **建议先修改好hostname:hostnamectl set-hostname **:hostnamectl set-hostname cloud-01
    wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
    tar zxvf keadm-v1.12.1-linux-amd64.tar.gz
    chmod +x keadm-v1.12.1-linux-amd64/keadm/keadm
    mv keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin
    ## --advertise-address 公网ip
    keadm init --advertise-address=xxx --set iptablesManager.mode="external" --profile version=v1.12.1
    kubectl get pod -n kubeedge

    # 安装metrics-server
    #kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    # 添加 --kubelet-insecure-tls 参数
    #kubectl patch deploy metrics-server -n kube-system --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value":"--kubelet-insecure-tls"}]'

    # daemon patch
    # 禁止 kubectl-proxy 调度
    kubectl get daemonset -n kube-system | grep -v NAME | awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-system --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/affinity", "value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'

验证安装

  • keadm version
  • kubectl get pod -n kubeedge:有二个podcloudcore.... and cloud-iptables-manager... 后面是我们在启动cloudcore的时候指定了iptablesManager.mode="external"

边缘节点安装

  • 边缘节点可能加入过慢:
    • 事先拉取docker 镜像,版本之间不互通,这边是kubeEdge 是v1.12.1版本下的的版本对应关系
    • example:docker pull eclipse-mosquitto:1.6.15 and kubeedge/installation-package
  • **建议先修改好hostname:hostnamectl set-hostname **:hostnamectl set-hostname edge-01
    1. 回到第一步安装Docker
    1. 安装keadm 命令:
      wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
      tar -zxvf keadm-v1.12.1-linux-amd64.tar.gz
      chmod +x keadm-v1.12.1-linux-amd64/keadm/keadm
      mv keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin
    1. 获取云端token:在云端节点执行keadm gettoken
    1. join 云端:keadm join --token=$TOKEN --cloudcore-ipport=$SERVER --kubeedge-version=1.12.1
    • TOKEN:云端获取的token
    • SERVER:云端节点的公网ip:10000 端口,一般kubeedge使用10000
    1. 在加入的时候,可以在云端使用kubectl get nodes -A -w,在边缘启动成功之后,需要等待一会云端的k8s 才会显示加入节点,看到节点处于ready模式