准备工作
- 满足kubekey的安装条件
- 满足kubeovn的安装条件(主要是内核版本需要满足要求)
安装步骤
- 下载kubekey
- 修改生成的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地址等信息