Tencent Cloud TKE的后端研发工程师Wang Dong专注于容器云本机和超级核心开发人员的领域。他目前负责Tencent Cloud Edge容器TKE Edge的私有化。
Tencent Teg工程师Liang Hao目前负责TKEX-TEG容器平台的操作和维护。
SuperEdge开发人员,SuperEdge Developer的Sina Weibo软件工程师Yao Shubiao目前负责Weibo Event Platforms的设计和研发。
背景
目前,许多边缘计算容器开源项目都有一个默认的前提:用户需要提前准备由标准或特定工具构建的kubernetes群集,然后通过特定工具或其他方法在群集中部署相应的组件才能体验边缘能力。毫无疑问,这提高了用户体验边缘功能的阈值,并且使用了许多限制,使用户很难开始使用。简单的汇编可能会遇到以下问题:
阈值太高,限制太大。添加边缘节点很麻烦,并且自动化功能差。
为了降低用户体验边缘功能的阈值,来自Cloud Native社区的学生打算一点点单击地部署Edge Kubernetes群集的方法,以便用户可以更轻松,轻松地体验Edge Kubernetes群集。
建筑设计
为了应对上述问题,为了降低用户使用Edge Kubernetes群集的阈值,并使Edge Kubernetes簇具有生产能力,我们设计了一种解决方案,可以单击一键部署边缘Kubernetes群集,完全阻止安装详细信息,允许用户体验零阈值。边界能力。
原意和目标
一单击使用
两种装置
可用于生产
零学习成本
原则
允许用户选择是否部署边缘功能组件;
允许用户自定义边缘功能组件的配置;
设计和实施
我们已经研究了Kubeadm的源代码,发现我们可以使用Kubeadm创建本机kubernetes群集,加入节点和工作流创意,以一键单击部署Edge Kubernetes群集,我们可以在步骤中执行安装步骤。这正是我们想要的简单,灵活和低成本的部署。因此,我们站在巨人的肩膀上,使用了库贝丹的想法,重复了库贝德姆的源代码,并设计了以下解决方案。
Kubeadm Init cluster/JOIN节点部分完全重用KubaAdm的源代码,所有逻辑与Kubeadm完全相同。
该解决方案具有以下优势:
与Kubeadm完全兼容
我们只是站在kubeadm的肩膀上,在kubeadm init/join,自动化初始化主或节点节点之前,设置边缘群集所需的一些配置参数,然后安装容器运行时。 Kubeadm Init/Join完成后,安装了CNI网络插件,并部署了相应的边缘功能组件。
我们在GO Mod中引用了Kubeadm源代码。在整个过程中,我们没有修改Kubeadm源代码的一行。它是完全本地的,准备升级到更高版本的Kubeadm。
一单击,简单,灵活且自动使用
EDGEADM INIT群集并加入节点完全保留了Kubeadm Init/Join的原始参数和过程,但自动初始化节点并在运行时安装容器。您可以使用Edgeadm -Enable-gedge = Fasle参数来一次单击安装本机Kubernetes群集。 ,您还可以使用edgeadm -enable-edge = true参数来安装一键式kubernetes群集。
您可以加入Kube-Apiserver所在任何地方的任何节点,也可以加入主。加入Master还继续Kubeadm方法。当构建高度可用的节点时,您可以直接使用Join Master在需要时扩展主节点以实现高可用性。
没有学习成本,与Kubeadm使用完全相同
由于kubeadm init cluster/join节点零件完全重用kubaadm的源代码,因此所有逻辑与kubeadm完全相同,完全保留了kubeadm和所有标志参数的使用习惯。用法与Kubeadm完全相同,没有任何新的学习成本,您可以通过按下Kubeadm参数或使用KubeadM.Config来自定义Edge Kubernetes群集。
边缘节点安全增强
在Kubernetes节点身份验证[1]机制的帮助下,我们默认启用了noderterction [2]入学插件,以确保每个节点具有唯一的身份,并且只有最小的权限集。即使边缘节点受到损害,它也无法操作其他边缘节点。
Kubelet我们还默认启用Kubelet配置证书旋转机制。当Kubelet证书即将到期时,将自动生成一个新密钥,并将从Kubernetes API请求新的证书。一旦获得新证书,它将用于与Kubernetes API的连接身份验证。
使用Edgeadm安装Edge Kubernetes群集
以下过程社区录制了详细的教程视频,可以结合上述视频和文档内容:
安装条件下载Edgeadm静态安装程序包
下载Edgeadm静态安装程序包,然后将其复制到所有主节点和节点节点。
请注意修改“ 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 [5]的相应版本,下载Edgeadm-Linux-Amd64/arm64-*。*。0.TGZ,然后对其进行解压缩。
Edge独立Kubernetes群集功能的一键安装以SuperEdge-V0.3.0-Beta.0开始,请下载V0.3.0-Beta.0及更高版本的版本。
安装边缘Kubernetes主节点
./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= --apiserver-advertise-address= --enable-edge=true -v=6
在:
-enable-gedge = false表示安装了本机Kubernetes群集,这与Kubeadm构建的群集完全相同;
- 安装-PKG路径可以是机器或网络地址的路径(例如: *.tar.gz,可用于避免密码wgeting)。请注意使用与机器系统匹配的Kubernetes静态安装程序包。 ;
- 图像重复:镜像存储库地址
如果SuperEdge.TencentCloudcr.com/superedge速度很慢,则可以用其他加速镜存储库来代替。只要您可以拉下Kube-abiserver,Kube-Controller-Manager,Kube-Scheduler,Kube-Proxy等,等等,暂停...镜像还可以。
其他参数的含义与Kubeadm完全相同,并且可以根据Kubeadm的要求进行配置。
您也可以使用kubeadm.config来配置Kubeadm的原始参数集群软件安装,并通过Edgeadm Init-Config kubeadm.config-Install-pkg-path ./kube-linux-linux-xar.tar.gz。
如果执行过程中没有问题,并且群集已成功初始化,则将输出以下内容:
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
如果执行过程中存在问题,则将直接返回相应的错误消息,并且群集的初始化将中断。您可以使用./edgeadm reset命令来回滚群集的初始化操作。
设置主Kube-Config文件
为了使非根源用户能够运行kubectl,请运行以下命令集群软件安装,这也是EDGEADM INIT OUTUMP的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果您是根,则可以运行:
export KUBEConFIG=/etc/kubernetes/admin.conf
请注意从././edgeadm Init保存./edgeadm加入命令输出,稍后添加节点节点时将使用。
令牌的有效期与Kubeadm的有效期相同。到期后,您可以使用./edgeadm代币代币来创建创建新令牌。
- 划分的ca-cert-hash的价值产生也与库贝德(Kubeadm)的价值相同。您可以执行以下命令以在主节点上生成。
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
加入边缘节点
在边缘节点上执行。下载Edgeadm静态安装程序包,或以其他方式上传Edgeadm静态安装程序包到边缘节点,然后执行以下命令:
./edgeadm join :Port --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxx
--install-pkg-path --enable-edge=true
在:
Edgeadm Init提示的Kube-abiserver服务的地址将被主节点外部网络IP/Master Node内部网络IP/域名替换,这主要取决于情况,主要取决于节点是否要访问Kube-apiserver服务通过外部网络或Intranet。
-enable-gedge = false表示JOIN是本机Kubernetes群集节点,该节点与Kubeadm的节点完全相同;
如果执行过程中没有问题,并且新节点成功地加入了集群,则将输出以下内容:
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命令来回滚加入节点并重新加入它的操作。
提示:如果Edge节点成功加入,则边缘节点将被标记为:superEdge.io.io/Edge-Node = enable,因此随后的应用程序可以使用NodeSelector来选择应用程序以安排到Edge Node;
本机Kubernetes节点与Kubeadm的联接相同,不会做任何事情。
安装带有边缘高可用性的Haproxy Kubernetes群集安装先决条件
将Haproxy安装为Master上的群集总门户
注意:在配置文件中替换<Master VIP>
yum install -y haproxy
cat << EOF >/etc/haproxy/haproxy.cfg
global
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/stats
defaults
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 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
frontend 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 app
frontend kubernetes-apiserver
mode tcp
bind *:16443
option tcplog
default_backend kubernetes-apiserver
backend kubernetes-apiserver
mode tcp
balance roundrobin
server master-0 :6443 check # 这里替换 Master VIP 为用户自己的 VIP
backend static
balance roundrobin
server static 127.0.0.1:4331 check
backend 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 check
EOF
安装保存
在所有硕士上安装keepalive,也要执行相同的操作:注意:
## 安装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 为用户自己的 VIP
}
unicast_src_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
在其中一个大师中执行群集初始化操作
./edgeadm init --control-plane-endpoint --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= --install-pkg-path -v=6
这些参数的含义与3。使用Edgeadm安装Edge 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
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
如果执行过程中存在问题,则将直接返回相应的错误消息,并且群集的初始化将中断。使用./edgeadm reset命令来回滚群集的初始化操作。
为了使非根源用户能够运行kubectl,请运行以下命令,这也是EDGEADM INIT OUTUMP的一部分:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
或者,如果您是根,则可以运行:
export KUBEConFIG=/etc/kubernetes/admin.conf
请注意从././edgeadm Init保存./edgeadm加入命令输出,并需要使用它来添加主节点和边缘节点。
加入主节点
在另一个主人上执行./edgeadm加入命令
./edgeadm join xxx.xxx.xxx.xxx:xxx --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxx \
--control-plane --certificate-key xxxxxxxxxx \
--install-pkg-path
如果执行过程中没有问题,而新的主人成功地加入了集群,则将输出以下内容:
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命令来回滚群集的初始化操作。
加入节点边缘节点
./edgeadm join xxx.xxx.xxx.xxx:xxxx --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxx
--install-pkg-path
如果执行过程中没有问题,并且新节点成功地加入了集群,则将输出以下内容:
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有两件事:
自定义其他系统kubernetes静态安装软件包
在其他系统中有三件事可以自定义静态Kubernetes安装程序包:
合作与开源
TKE Edge Edge Edge容器管理服务的边缘计算能力的核心组件已开放为SuperEdge项目[7]。我们欢迎Edge计算的共同建设并参与SuperEdge开源项目的构建,以便您开发的边缘功能可以使更多的人受益。以下是SuperEdge开源项目的微信组。欢迎参加交流和讨论。
参考
[1]
节点身份验证:
[2]
noderterniction:#noderternection
[3]
Kubelet配置证书旋转:
[4]
Kubeadm的最低要求:#在您之前
[5]
SuperEdge对应版本:
[6]
多系统镜像:
[7]
SuperEdge项目:
以前的超级选定建议