准备工作

  1. 满足kubekey的安装条件
  2. 满足kubeovn的安装条件(主要是内核版本需要满足要求)

安装步骤

  1. 下载kubekey
  2. 修改生成的config-sample.yaml文件, 把网络插件改成kubeovn,配置如下:
apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: example
spec:
  hosts:
  - {name: node1, address: 192.168.0.183, internalAddress: 192.168.0.183, port: 22, user: root, password: Qcloud@123}
  roleGroups:
    etcd:
     - node1
    master:
     - node1
    worker:
     - node1
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.17.9
    imageRepo: kubesphere
    clusterName: cluster.local
    masqueradeAll: false
    maxPods: 110
    nodeCidrMaskSize: 24
    proxyMode: ipvs
  network:
    plugin: kubeovn
    kubeovn:
      joinCIDR: 100.64.0.0/16  #joinCIDR地址
      enableSSL: true   #开启SSL
      enableMirror: true    #是否开启流量镜像
      pingerExternalAddress: 114.114.114.114 #ping external地址
      networkType: geneve   #网络类型, 可选geneve与vlan, 如果选择vlan, vlan网卡名称必须填写
      vlanInterfaceName: interface_name  #vlan网卡名称
      vlanID: '100'    #默认vlanID
      dpdkMode: false  #是否dpdk模式
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
   registry:
    registryMirrors: []
    insecureRegistries: []
    privateRegistry: ""
  addons: []

在上面的yaml中kubeovn的配置可以不用填写,将使用默认的配置安装kube-ovn, 即配置可简化成如下:

network:
  plugin: kubeovn
  kubePodsCIDR: 10.233.64.0/18
  kubeServiceCIDR: 10.233.0.0/18

部署

./kk create cluster -f config-sample.yaml

在安装过程中,能看到kube-ovn的部署信息,看到Congratulations信息,表示集群已经安装成功了。

通过kubectl get pod -A能看到kube-ovn相关的pod已经都正常运行

查看当前的子网kubectl get subnet,能看到join子网与ovn-default子网:

如何使用Kube-OVN

在 Kube-OVN 中通过子网组织 IP,一个或多个 Namespace 可以被绑定到一个子网中,这些 Namespace 下的 Pod 将会从该子网中分配 IP,并使用子网下的网络配置。如果Pod绑定的Namespace没有绑定子网,将使用默认子网ovn-default为其分配IP地址。 在 https://github.com/alauda/kube-ovn/wiki 有上关于kube-ovn详细的使用教程,可移步Kube-OVN社区查看。

创建自定义子网

apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
  name: ls1
spec:
  protocol: IPv4
  cidrBlock: 10.100.0.0/16   #设置子网网段
  excludeIps:
  - 10.100.0.1..10.100.0.10  #设置子网排除(不使用)范围
  gateway: 10.100.0.1        #设置子网的网关地址
  namespaces:                #设置子网绑定的命名空间
  - ls1

子网的配置如上(相关字段的含义注释中有说明), kubectl apply之后再kubectl get subnet 能看到子网已经创建出来,通过kubectl get subnet ls1 -o yaml 可以查看子网的状态是否可用。

创建pod并绑定自定义子网

我们已经创建了子网ls1并绑定了命名空间ls1, 接下来我们创建一个pod并绑定ls1命名空间:

创建命名空间 kubectl create ns ns1

创建nginx pod并绑定ls1 kubectl run nginx --image=nginx:alpine -n ls1

通过上面两个步骤,pod已经创建出来了,并且分配的ip地址在排除地址范围外,通过kubectl get ip可以查看pod分配到的ip地址与mac地址等信息

    linruichao 👍 部署完成以后的验证方法以及 kube-ovn 简单的 demo 是否可以完善一下呢

      linruichao 安装和基本验证与使用的步骤我看已经非常好了~ 开头部分我来润色一下吧

        18 天 后
        1 个月 后
        5 天 后

        370569218 kubekey的版本是多少,是不是kubekey版本不对呢? not support kubeovn 似乎是说不支持kubeovn网络插件,这一步骤还没涉及到kubeovn的安装

          8 个月 后

          3.1.1 3.2.0 部署失败

          错误信息如下

          [k8smaster1 10.4.1.51] MSG:

          3

          ERRO[23:52:07 EST] Failed to deploy network plugin: Failed to exec command: sudo -E /bin/sh -c “/usr/local/bin/kubectl apply -f /etc/kubernetes/network-plugin.yaml”

          customresourcedefinition.apiextensions.k8s.io/ips.kubeovn.io unchanged

          customresourcedefinition.apiextensions.k8s.io/subnets.kubeovn.io unchanged

          customresourcedefinition.apiextensions.k8s.io/vlans.kubeovn.io unchanged

          podsecuritypolicy.policy/kube-ovn unchanged

          configmap/ovn-config unchanged

          serviceaccount/ovn unchanged

          clusterrole.rbac.authorization.k8s.io/system:ovn unchanged

          clusterrolebinding.rbac.authorization.k8s.io/ovn unchanged

          service/ovn-nb unchanged

          service/ovn-sb unchanged

          error: error parsing /etc/kubernetes/network-plugin.yaml: error converting YAML to JSON: yaml: line 53: could not find expected ‘:’: Process exited with status 1 node=10.4.1.51

          yamllint /etc/kubernetes/network-plugin.yaml

          /etc/kubernetes/network-plugin.yaml

          13:7 error wrong indentation: expected 8 but found 6 (indentation)

          82:7 error wrong indentation: expected 8 but found 6 (indentation)

          207:7 error wrong indentation: expected 8 but found 6 (indentation)

          275:15 error too many spaces after colon (colons)

          399:7 error wrong indentation: expected 8 but found 6 (indentation)

          425:1 error syntax error: could not find expected ‘:’ (syntax)

          868:81 error line too long (101 > 80 characters) (line-length)

            3 年 后

            商业产品与合作咨询