用 edgeadm 一键安装边沿 K8s 群集和原生态 K8s 群集

情况

现阶段,许多 边缘计算器皿开源软件在应用上均存有一个默认设置的前提条件:客户必须准备充分一个规范的或是特殊专用工具构建的 Kubernetes 群集,随后再根据特殊专用工具或是别的方法在群集中布署相对应部件来感受边沿工作能力。这毫无疑问提升了客户体验边沿工作能力的门坎,并且应用上面有诸多的限定,让客户难以入门。 简易梳理,大约会出现以下难题:

门坎太高

  • 客户必须准备充分一个 Kubernetes 群集,针对许多 客户而言门坎太高,构建的步骤非常复杂,非常容易不成功,把许多 想应用边沿工作能力的群体避而不见;

约束性很大

  • 通常规定特殊专用工具构建的特殊版本号的 Kubernetes 群集,实用性很差,客户在想在具体工作环境上应用约束性很大;

加上边沿连接点较为不便

  • 加上边沿连接点必须借助构建 Kubernetes 群集自身的专用工具加上 Kubernetes 原生态的连接点再开展转换,对第三方专用工具依赖感较强,而且操作步骤较为不便,非常容易打错;

自动化技术工作能力较弱

  • 不管 Kubernetes 群集的构建,或是加上边沿连接点都难以在工作环境自动化技术起來,有关步骤还必须自身的精英团队开展二次开发,集成化难度系数很大;

为了更好地减少客户体验边沿工作能力的门坎,云原生小区的同学们准备开发设计一个能够一键布署边沿 Kubernetes 群集的方式,让客户能够更非常容易、更简易的感受边沿 Kubernetes 群集。

架构模式

对于以上难题,为了更好地减少客户应用边沿 Kubernetes 群集的门坎,让边沿 Kubernetes 群集具有生产量,大家设计方案了一键就可以布署出去一个边沿 Kubernetes 群集的计划方案,彻底屏蔽掉安裝关键点,让客户能够零门坎的感受边沿工作能力。

初心

  • 让客户非常简单、无门坎的应用边沿 Kubernetes 群集,能够在工作环境真真正正把边沿工作能力用起來;

总体目标

一键化应用

  • 可以一键构建起一个边沿 Kubernetes 群集;
  • 可以一键非常简单、很灵便的加上边沿连接点;

二种安裝创景

  • 适用在线安装;
  • 适用线下安裝,让民营化自然环境也可以非常简单;

可生产制造应用

  • 不必封裝过多,能够让想应用边沿 Kubernetes 群集的精英团队能在內部系统软件开展简易的集成化,就生产制造可以用;

零学习培训成本费

  • 尽量的和 kubeadm 的应用方法保持一致,让客户无附加的学习培训成本费,会用 kubeadm 便会用 edgeadm;

标准

  • 不改动 kubeadm 源代码
    • 尽可能引入和多路复用 kubeadm 的源代码,尽可能不改动 kubeadm 的源代码,防止后边升級的安全隐患;
    • 根据 kubeadm 但又高过 kubeadm,无须被 kubeadm 的设计室局限性,只需能让客户应用起來更简易就可以被容许;
  • 容许客户挑选是不是布署边沿工作能力部件;
  • 容许客户自定边沿工作能力部件的配备;

设计方案与完成

大家科学研究了 kubeadm 的源代码,发觉能够使用 kubeadm 建立原生态 Kubernetes集群、join 连接点、workflow 观念来一键布署边沿 Kubernetes 群集,而且能够逐层去实行安裝流程。这恰好是大家要想的简易、灵便、低学习培训成本费的布署计划方案。因此大家立在巨人的肩膀上,运用 Kubedam 的观念,多路复用 kubeadm 的源代码,设计方案出了以下的解决方法。

在其中 kubeadm init cluster/join node一部分彻底多路复用了 kubadm 的源代码,全部逻辑性和 kubeadm 完全一致。

这一计划方案有以下好多个优势:

彻底兼容 kubeadm

大家仅仅立在 kubeadm 的肩部上,在 kubeadm init/join 以前设定了一些边沿群集必须的配备主要参数,将复位 Master 或 Node 连接点自动化技术,安裝了器皿运作时。在 kubeadm init/join 进行以后,安裝了 CNI 互联网软件和布署了相对应的边沿工作能力部件。

大家以 Go Mod 方法引入了 kubeadm 源代码,全部全过程中仍未对 kubeadm 的源代码改动过一行,彻底的原生态,为后边升級高些版本号的 kubeadm 搞好了提前准备。

一键化,用起來简易、灵便、自动化技术

edgeadm init 群集和 join 连接点彻底保存了 kubeadm init/join 原来的主要参数和步骤,仅仅全自动了复位连接点和安裝器皿运作时,可以用edgeadm --enable-edge=fasle主要参数来一键化安裝原生态 Kubernetes 群集, 还可以用edgeadm --enable-edge=true主要参数一键化来安裝边沿 Kubernetes 群集。

能够 Join 一切只需可以浏览到 Kube-apiserver 坐落于一切部位的连接点, 还可以 join master。join master 也持续了 kubeadm 的的方法,构建高可用性的连接点能够在必须的情况下,立即用 join master 去扩充 Master 连接点,完成高可用性。

无学习培训成本费,和 kubeadm 的应用完全一致

由于kubeadm init cluster/join node一部分彻底多路复用了 kubadm 的源代码,全部逻辑性和 kubeadm 完全一致,彻底保存了 kubeadm 的应用习惯性和全部 flag 主要参数,使用方法和 kubeadm 应用彻底一样,沒有一切新的学习培训成本费,客户能够按 kubeadm 的主要参数或是应用 kubeadm.config 去自定边沿 Kubernetes 群集。

边沿连接点安全性提高

依靠 Kubernetes Node身份验证体制,大家默认设置打开了NodeRestriction准入条件软件,保证每一个连接点真实身份都唯一,只具备最少管理权限集,即便某一边沿连接点被攻克也没法实际操作别的边沿连接点。

Kubelet 大家也默认设置打开了Kubelet配备资格证书交替体制,在 Kubelet 资格证书将要到期时, 将自动生成新的密匙,并从 Kubernetes API 申请办理新的资格证书。 一旦新的资格证书可以用,它将被用以与 Kubernetes API 间的联接验证。

用 edgeadm 安裝边沿 Kubernetes 群集

下列步骤小区早已视频录制了详尽视频教程,可融合文本文档开展安裝:

视頻资源链接:用edgeadm一键安装边沿Kubernetes 群集和原生态Kubernetes 群集

安裝标准

  • 遵照 kubeadm 的最少规定 ,Master && Node 最少2C2G,储存空间不小于1G;

  • 现阶段适用 amd64、arm64 2个管理体系;

    别的管理体系可自主编译程序 edgeadm 和制做相对应管理体系安装文件,可参照 5. 自定Kubernetes静态数据安装文件

  • 适用的 Kubernetes 版本号:高于或等于v1.18,给予的安装文件仅给予 Kubernetes v1.18.2 版本号;

    别的 Kubernetes 版本号可参照 5. 自定 Kubernetes 静态数据安装文件,自主制做。

免费下载 edgeadm 静态数据安装文件

免费下载 edgeadm 静态数据安装文件,并拷到全部 Master 和 Node 连接点。

留意改动"arch=amd64"主要参数,现阶段适用[amd64, amd64], 免费下载自身设备相匹配的系统架构,别的主要参数不会改变

arch=amd64 version=v0.3.0-beta.0 && rm -rf edgeadm-linux-* && wget https://superedge-1253687700.cos.ap-guangzhou.myqcloud.com/$version/$arch/edgeadm-linux-$arch-$version.tgz && tar -xzvf edgeadm-linux-* && cd edgeadm-linux-$arch-$version && ./edgeadm

安装文件大概200M,有关安装文件的详细资料可查询 5. 自定Kubernetes静态数据安装文件

假如下载安装包较慢,可立即查询相对应SuperEdge相对应版本号, 免费下载edgeadm-linux-amd64/arm64-*.0.tgz,并缓解压力也是一样的。

一键安装边沿单独 Kubernetes 群集作用从 SuperEdge-v0.3.0-beta.0逐渐适用,留意免费下载 v0.3.0-beta.0 及之后版本号。

安裝边沿 Kubernetes Master 连接点

./edgeadm init --kubernetes-version=1.18.2 --image-repository superedge.tencentcloudcr.com/superedge --service-cidr=10.96.0.0/12 --pod-network-cidr=192.168.0.0/16 --install-pkg-path ./kube-linux-*.tar.gz --apiserver-cert-extra-sans=<Master连接点外网IP> --apiserver-advertise-address=<Master连接点内部网IP> --enable-edge=true -v=6

在其中:

  • --enable-edge=true: 是不是布署边沿工作能力部件,默认设置 true

--enable-edge=false 表明安裝原生态 Kubernetes 群集,和 kubeadm 构建的群集彻底一样;

  • --install-pkg-path: Kubernetes 静态数据安装文件的详细地址

--install-pkg-path的值能够为设备上的途径,还可以为IP地址(例如:http://xxx/xxx/kube-linux-arm64/amd64-*.tar.gz, 能够密wget到就可以),留意用和设备管理体系配对的Kubernetes静态数据安装文件;

  • --apiserver-cert-extra-sans: kube-apiserver的资格证书拓展详细地址
    • 强烈推荐签署Master连接点外网IP或是网站域名,只需签署的Master连接点的IP或是网站域名能被边沿连接点浏览到就可以,自然内部网IP也被容许,前提条件是边沿连接点能够根据此IP浏览 Kube-apiserver。自定网站域名得话可自主在全部 Matser和Node连接点配备 hosts;
    • 签署外网IP和网站域名,是由于边沿连接点一般和 Master 连接点没有同一局域网络,必须根据外网地址来添加和浏览Master;
  • --image-repository:镜像系统库房详细地址

如果 superedge.tencentcloudcr.com/superedge 较慢,可换为别的加快镜像系统库房,只需能 Pull 出来 kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy,etcd, pause……镜像系统就可以。

别的主要参数和 kubeadm 含意完全一致,可按 kubeadm 的规定开展配备。

也可以用 kubeadm.config 配备 kubeadm 的原主要参数,根据edgeadm init --config kubeadm.config --install-pkg-path ./kube-linux-*.tar.gz 来建立边沿 Kubernetes 群集。

如果实行全过程中没有问题,群集取得成功复位,会輸出以下內容:

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:

edgeadm join xxx.xxx.xxx.xxx:xxx --token xxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxx
    --install-pkg-path <Path of edgeadm kube-* install package>

实行全过程中假如发生难题会立即回到相对应的错误报告,并终断群集的复位,可应用./edgeadm reset指令回退群集的复位实际操作。

设定Master kube-config 文档

使得非 root 客户能够运作 kubectl,请运作下列指令,他们也是 edgeadm init 輸出的一部分:

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

或是,如果你是 root 客户,则能够运作:

export KUBECONFIG=/etc/kubernetes/admin.conf

留意储存./edgeadm init輸出的./edgeadm join指令,后边加上Node连接点的时候会采用。

在其中token的有效期限和kubeadm一样24小时,到期以后可以用./edgeadm token create建立新的token。

--discovery-token-ca-cert-hash 的值转化成也同 kubeadm,可在 Master 连接点实行下边指令转化成。

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

Join 边沿连接点

在边沿连接点上实行 <2>.免费下载edgeadm静态数据安装文件,或是根据别的方法把 edgeadm 静态数据安装文件上传入边沿连接点,随后实行以下指令:

./edgeadm join <Master连接点外网IP/Master连接点内部网IP/网站域名>:Port --token xxxx \
     --discovery-token-ca-cert-hash sha256:xxxxxxxxxx 
     --install-pkg-path <edgeadm Kube-*静态数据安装文件详细地址/FTP途径> --enable-edge=true

在其中:

  • <Master 连接点外网地址 IP/Master 连接点内部网IP/网站域名>:Port 是连接点浏览 Kube-apiserver 服务项目的详细地址

能够把edgeadm init添加连接点提醒的 Kube-apiserver 服务项目的详细地址视状况换为Master连接点外网IP/Master连接点内部网IP/网站域名,关键在于想让连接点根据外网地址或是内部网浏览 Kube-apiserver 服务项目。

  • --enable-edge=true: 添加的连接点是不是做为边沿连接点(是不是布署边沿工作能力部件),默认设置 true

--enable-edge=false 表明 join 原生态 Kubernetes 群集连接点,和 kubeadm join 的连接点彻底一样;

假如实行全过程中没有问题,新的 Node 取得成功添加群集,会輸出以下內容:

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

实行全过程中假如发生难题会立即回到相对应的错误报告,并终断连接点的加上,可应用./edgeadm reset指令回退添加连接点的实际操作,再次 join。

提醒:假如边沿连接点 join 取得成功后都是会给边沿连接点打一个label: superedge.io/edge-node=enable,便捷事后运用用 nodeSelector 挑选运用生产调度到边沿连接点;

原生态 Kubernetes 连接点和 kubeadm 的 join 一样,不容易做一切实际操作。

用 edgeadm 安裝边沿高可用性 Kubernetes 群集

安裝前提条件

  • 提前准备一个Master VIP,作为可以用web服务统一通道;
  • 3台达到 kubeadm 的最少规定 的设备做为Master连接点;
  • 3台达到 kubeadm 的最少规定 的设备做worker连接点;

安裝 Haproxy

在 Master 上安裝 Haproxy 做为群集总通道

留意:更换环境变量中的 < Master VIP >

# yum install -y haproxy# cat << EOF >/etc/haproxy/haproxy.cfgglobal    log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     4000    user        haproxy    group       haproxy    daemon    stats socket /var/lib/haproxy/statsdefaults    mode                    http    log                     global    option                  httplog    option                  dontlognull    option http-server-close    option forwardfor       except 127.0.0.0/8    option                  redispatch    retries                 3    timeout http-request    10s    timeout queue           1米    timeout connect         10s    timeout client          1米    timeout server          1米    timeout http-keep-alive 10s    timeout check           10s    maxconn                 3000frontend  main *:5000    acl url_static       path_beg       -i /static /images /javascript /stylesheets    acl url_static       path_end       -i .jpg .gif .png .css .js    use_backend static          if url_static    default_backend             appfrontend kubernetes-apiserver    mode                 tcp    bind                 *:16443    option               tcplog    default_backend      kubernetes-apiserverbackend kubernetes-apiserver    mode        tcp    balance     roundrobin    server  master-0  <Master VIP>:6443 check # 这儿更换 Master VIP 为客户自身的 VIPbackend static    balance     roundrobin    server      static 127.0.0.1:4331 checkbackend app    balance     roundrobin    server  app1 127.0.0.1:5001 check    server  app2 127.0.0.1:5002 check    server  app3 127.0.0.1:5003 check    server  app4 127.0.0.1:5004 checkEOF

安裝 Keepalived

在全部 Master 安裝 Keepalived,实行一样实际操作:
留意:

  • 更换环境变量中的 < Master VIP >

  • 下边的 keepalived.conf 环境变量中 < Master 该设备外网地址 IP > 和 < 别的 Master 外网地址 IP > 在不一样 Master 的配备必须替换部位,不必写错。

  ## 安裝keepalived  yum install -y keepalived  cat << EOF >/etc/keepalived/keepalived.conf   ! Configuration File for keepalived  global_defs {     smtp_connect_timeout 30     router_id LVS_DEVEL_EDGE_1  }  vrrp_script checkhaproxy{  script "/etc/keepalived/do_sth.sh"  interval 5  }  vrrp_instance VI_1 {      state BACKUP      interface eth0      nopreempt      virtual_router_id 51      priority 100      advert_int 1      authentication {          auth_type PASS          auth_pass aaa      }      virtual_ipaddress {          <master VIP> # 这儿更换 Master VIP 为客户自身的 VIP      }      unicast_src_ip <Master 该设备外网地址 IP>      unicast_peer {        <别的 Master 外网地址 IP>        <别的 Master 外网地址 IP>      }  notify_master "/etc/keepalived/notify_action.sh master"  notify_backup "/etc/keepalived/notify_action.sh BACKUP"  notify_fault "/etc/keepalived/notify_action.sh FAULT"  notify_stop "/etc/keepalived/notify_action.sh STOP"  garp_master_delay 1  garp_master_refresh 5     track_interface {       eth0     }     track_script {       checkhaproxy      }  }  EOF

安裝高可用性边沿 Kubernetes Master

在这其中一台 Master 中实行群集复位实际操作

./edgeadm init --control-plane-endpoint <Master VIP> --upload-certs --kubernetes-version=1.18.2 --image-repository superedge.tencentcloudcr.com/superedge --service-cidr=10.96.0.0/12 --pod-network-cidr=192.168.0.0/16 --apiserver-cert-extra-sans=<Master连接点外网IP/Master连接点内部网IP/网站域名/> --install-pkg-path <edegadm Kube-*静态数据安装文件详细地址> -v=6

主要参数含意同 3. 用 edgeadm 安裝边沿 Kubernetes 群集,别的和 kubeadm 一致,这儿没有表述;

如果实行全过程中没有问题,群集取得成功复位,会輸出以下內容:

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/  You can now join any number of the control-plane node running the following command on each as root:  edgeadm join xxx.xxx.xxx.xxx:xxx --token xxxx \    --discovery-token-ca-cert-hash sha256:xxxxxxxxxx \    --control-plane --certificate-key xxxxxxxxxx    --install-pkg-path <Path of edgeadm kube-* install package>    Please note that the certificate-key gives access to cluster sensitive data, keep it secret!As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use"edgeadm init phase upload-certs --upload-certs" to reload certs afterward.Then you can join any number of worker nodes by running the following on each as root:edgeadm join xxx.xxx.xxx.xxx:xxxx --token xxxx \    --discovery-token-ca-cert-hash sha256:xxxxxxxxxx      --install-pkg-path <Path of edgeadm kube-* install package>

实行全过程中假如发生难题会立即回到相对应的错误报告,并终断群集的复位,应用./edgeadm reset指令回退群集的复位实际操作。

使得非 root 客户能够运作 kubectl,请运作下列指令,他们也是 edgeadm init 輸出的一部分:

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

或是,如果你是 root 客户,则能够运作:

export KUBECONFIG=/etc/kubernetes/admin.conf

留意储存./edgeadm init輸出的./edgeadm join指令,后边加上Master连接点和边沿连接点必须采用。

Join Master 连接点

在另一台 Master 实行./edgeadm join指令

./edgeadm join xxx.xxx.xxx.xxx:xxx --token xxxx    \    --discovery-token-ca-cert-hash sha256:xxxxxxxxxx \    --control-plane --certificate-key xxxxxxxxxx     \    --install-pkg-path <edgeadm Kube-*静态数据安装文件详细地址 

如果实行全过程中没有问题,新的 Master 取得成功添加群集,会輸出以下內容:

This node has joined the cluster and a new control plane instance was created:* Certificate signing request was sent to apiserver and approval was received.* The Kubelet was informed of the new secure connection details.* Control plane (master) label and taint were applied to the new node.* The Kubernetes control plane instances scaled up.* A new etcd member was added to the local/stacked etcd cluster.To start administering your cluster from this node, 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        Run 'kubectl get nodes' to see this node join the cluster.

实行全过程中假如发生难题会立即回到相对应的错误报告,并终断连接点的加上,应用./edgeadm reset指令回退群集的复位实际操作。

Join node 边沿连接点

./edgeadm join xxx.xxx.xxx.xxx:xxxx --token xxxx \    --discovery-token-ca-cert-hash sha256:xxxxxxxxxx     --install-pkg-path <edgeadm Kube-*静态数据安装文件详细地址/FTP途径>

如果实行全过程中没有问题,新的 node 取得成功添加群集,会輸出以下內容:

This node has joined the cluster:* Certificate signing request was sent to apiserver and a response was received.* The Kubelet was informed of the new secure connection details.Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

实行全过程中假如发生难题会立即回到相对应的错误报告,并终断连接点的加上,应用./edgeadm reset指令回退群集的复位实际操作。

自定 Kubernetes 静态数据安装文件

Kubernetes 静态数据安装文件的文件目录构造以下:

kube-linux-arm64-v1.18.2.tar.gz ## kube-v1.18.2 arm64的Kubernetes静态数据安装文件├── bin                         ## 二进制文件目录│   ├── conntrack               ## 联接追踪的二进制文件│   ├── kubectl                 ## kube-v1.18.2的kubectl│   ├── kubelet                 ## kube-v1.18.2的kubelet│   └── lite-apiserver          ## 相对应版本号的lite-apiserver,可编译程序SuperEdge的lite-apiserver转化成├── cni                         ## cin的配备│   └── cni-plugins-linux-v0.8.3.tar.gz ## v0.8.3的CNI软件二进制压缩文件└── container                   ## 器皿运作时文件目录    └── docker-19.03-linux-arm64.tar.gz ## docker 19.03 arm64管理体系的安裝脚本制作和安装文件

自定别的 Kubernetes 版本号

自定别的 Kubernetes 版本号必须做的有2件事:

  • 更换二进制文件目录中的 kubectl 和 kubelet 文档,版本号必须高于或等于 Kubernetes v1.18.0;
  • 保证 init 应用的镜像系统库房中有相对应 Kubernetes 版本号的基本镜像系统;

自定别的管理体系 Kubernetes 静态数据安装文件

自定 Kubernetes 静态数据安装文件别的管理体系必须做三件事:

  • 将 Kubernetes 静态数据安装文件的全部二进制换为总体目标管理体系,包含 cni 和 container 相对应安装文件中的二进制;
  • 保证 init 应用的镜像系统库房中有相对应管理体系的 Kubernetes 版本号的基本镜像系统,强烈推荐应用多管理体系镜像系统;
  • 充足检测,保证没什么兼容性问题。要有有关难题,还可以在 SuperEdge 小区提 Issues 一块来修补。

评论(0条)

刀客源码 游客评论