在Kubernetes上安装

本教程展示了如何手动部署 OpenYurt 集群。我们假设用户已经安装好一个Kubernetes集群。如果想从头开始创建OpenYurt集群,请参考yurtadm 文档

1 Kubernetes集群环境

用户需要先自行准备好一个Kubernetes集群(可以通过kubeadm工具搭建),本文档中以1节点的Kubernetes为例。

  1. $ kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. izwz9dohcv74iegqecp4axz Ready control-plane,master 6d1h v1.22.11

1.1 给云端节点打标签

当与 apiserver 断开连接时,只有运行在边缘自治的节点上的Pod才不会被驱逐。因此,我们首先需要通过打 openyurt.io/is-edge-worker 的标签的方式,将节点分为云端节点和边缘节点。 我们将 izwz9dohcv74iegqecp4axz 作为云端节点,将标签的 value 值设置为 false

  1. $ kubectl label node izwz9dohcv74iegqecp4axz openyurt.io/is-edge-worker=false
  2. izwz9dohcv74iegqecp4axz labeled

2 OpenYurt安装前置条件

  1. 保证集群中所有节点IP不冲突。
  2. 如果采用docker作为容器运行时则需要做以下调整,避免Docker修改iptables FORWARD链默认规则为DROP,从而导致Raven Gateway节点流量转发失败:

    1. iptables -w -P FORWARD ACCEPT
    2. sed -i 's#^After=network-online.target firewalld.service$#After=network-online.target firewalld.service containerd.service#g' \
    3. /lib/systemd/system/docker.service
  3. 通过Raven提供的VPN隧道,边缘节点pods的域名解析将由主节点或云节点上的CoreDNS实例进行处理,因此可能引发解析延迟或者超时失败。如果您在意解析延迟或者超时失败,我们建议您根据CoreDNS调整教程调整“CoreDNS部署”。

3 部署OpenYurt的Control-Plane组件

我们推荐使用Helm安装OpenYurt组件。请先保证在你的环境中已经安装helm。另外,接下来要用到的所有helm charts都可以在openyurt-helm 仓库中找到。

3.1 部署openyurt/yurt-app-manager组件

3.1.1 安装 yurt-app-manager

Yurt-App-Manager是OpenYurt集群提供边缘单元化管理的功能组件,全面提升在边缘场景下的应用部署效率,降低边缘节点和应用运维的复杂度。通过helm安装该组件:

  1. helm install yurt-app-manager -n kube-system . --set image.tag=latest

确认yurt-app-manager组件的pod和service配置已经成功创建:

  1. kubectl get pod -n kube-system | grep yurt-app-manager
  2. kubectl get svc -n kube-system | grep yurt-app-manager

3.1.2 创建节点池

为了更好的管理节点和节点上的流量(如Service流量拓扑管理),我们推荐把二层网络互通的节点放在同一个节点池。本例中为云端创建一个节点池,具体如下:

  1. cat <<EOF | kubectl apply -f -
  2. apiVersion: apps.openyurt.io/v1beta1
  3. kind: NodePool
  4. metadata:
  5. name: master
  6. spec:
  7. type: Cloud
  8. EOF

3.1.3 节点加入节点池

将云端节点加入3.1.2中创建的云端节点池,具体如下:

  1. $ kubectl label node izwz9dohcv74iegqecp4axz apps.openyurt.io/desired-nodepool=master
  2. izwz9dohcv74iegqecp4axz labeled

3.2 部署openyurt/yurt-controller-manager组件

yurt-controller-manager防止apiserver在断开连接时驱逐运行在边缘节点上的pod 我们可以通过helm安装以上组件:

  1. cat <<EOF | helm install openyurt ./openyurt -n kube-system -f -
  2. yurtControllerManager:
  3. image:
  4. tag: latest
  5. EOF

可以通过helm list -A确认是否安装成功:

  1. $ helm list -A
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  3. openyurt kube-system 1 2022-09-07 17:06:17.764754411 +0800 CST deployed openyurt-1.0.0 1.0.0
  4. yurt-app-manager kube-system 1 2022-09-07 17:36:30.371904902 +0800 CST deployed yurt-app-manager-0.1.2 0.8.0

4 部署OpenYurt的跨网络域通信组件

Raven提供了云、边位于不同网络区域的网络通信能力,raven项目包含两个组件raven-controller-manager和raven-agent构成:

4.1 部署raven-controller-manager组件

raven-controller-manager是一个自定义CR Gateway的标准kubernetes控制器,被部署在云端节点(可为master或cloud节点),Gateway CR管理不同物理区域的节点,动态选举物理区域内一个合格节点作为Gateway节点。

  1. git clone https://github.com/openyurtio/raven-controller-manager.git
  2. cd raven-controller-manager
  3. git checkout v0.3.0
  4. make generate-deploy-yaml
  5. kubectl apply -f _output/yamls/raven-controller-manager.yaml

4.2 部署raven-agent组件

  1. git clone https://github.com/openyurtio/raven.git
  2. cd raven
  3. git checkout v0.3.0
  4. FORWARD_NODE_IP=true make deploy

5. 注意

以上操作仅针对Master节点,如果集群中还有其他节点,还需要额外调整,操作方法可以参考: 在存量的K8s节点上安装OpenYurt Node组件