首先,进入https://github.com/kubernetes/contrib/tree/master/keepalived-vip

clone最新的代码

1. 需要对结点打标签,如下所以:

kubectl label node node1 type=worker

2. 执行如下命令,创建账户

kubectl create sa kube-keepalived-vip

3. 修改contrib/keepalived-vip/vip-daemonset.yaml文件,在其中加入serviceAccount: kube-keepalived-vip:

    spec:
      hostNetwork: true
      serviceAccount: kube-keepalived-vip
      containers:
        - image: k8s.gcr.io/kube-keepalived-vip:0.11

并将其中默认的k8s.gcr.io/kube-keepalived-vip:0.11改为gcr.mirrors.ustc.edu.cn/google-containers/kube-keepalived-vip:0.11

4. 执行如下命令:

echo 'apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: kube-keepalived-vip
rules:
- apiGroups: [""]
  resources:
  - pods
  - nodes
  - endpoints
  - services
  - configmaps
  verbs: ["get", "list", "watch"]' | kubectl create -f -

这里要注意,github上给出的命令是有问题的,执行后保错:

error: unable to recognize "STDIN": no matches for kind "ClusterRole" in version "rbac.authorization.k8s.io/v1alpha1"

需要修改apiVersion,将v1beta1改为v1alpha1

5. 将如下内容写入rbac.yml

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kube-keepalived-vip
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-keepalived-vip
subjects:
- kind: ServiceAccount
  name: kube-keepalived-vip
  namespace: default

执行kubectl create -f rbac.yml

6. 修改如下文件:contrib/keepalived-vip/vip-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: vip-configmap
data:
  10.4.0.50: default/echoheaders

将其中的ip修改为需要创建的虚拟ip,注意这个ip应该与宿主机同一网段,并且没有被占用。此外,将echoheaders修改为需要使用的服务

7. 执行kubectl create -f contrib/keepalived-vip/vip-daemonset.yaml,启动虚拟机。

使用kubectl logs kube-keepalived-vip-tttxx 可以检查日志,注意,如果日志中频繁出现如下内容:

F0111 07:25:14.410876       1 controller.go:314] Error getting POD information: timed out waiting to observe own status as Running

goroutine 1 [running]:

k8s.io/contrib/keepalived-vip/vendor/github.com/golang/glog.stacks(0xc42028fe00, 0xc420142140, 0x83, 0x9d)

说明权限配置有问题,需要重新检查2、3、4、5步是否正确执行。

 

Logo

开源、云原生的融合云平台

更多推荐