1、问题

Kubernetes可以通过virtual-kubelet对接OpenStack Zun集群,同一个Zun集群在Kubernetes看来就是一个虚拟node。K8S在部署多个反亲和副本Pod的时候,因为只有一个node,所以只能调度一个pod,另外的pod因为没有可调度的node就会处于pending状态

# kubectl get pods -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP              NODE              NOMINATED NODE   READINESS GATES
sc-0-0   1/1     Running   0          16m   172.200.1.188   virtual-kubelet   <none>           <none>
sc-0-1   0/1     Pending   0          16m   <none>          <none>            <none>           <none>

OpenStack Zun集群是有多个节点的,完全可以运行多副本Pod
在当前的实现机制下,怎么解决这个问题?

2、virtual-kubelet多实例特性

查看virtual-kubelet命令信息,virtual-kubelet支持运行时指定kubernetes node name

      --nodename string                       kubernetes node name (default "virtual-kubelet")

通过virtual-kubelet这个特性是否可以起多个virtual-kubelet进程连接同一个OpenStack Zun集群?

3、验证virtual-kubelet多实例

3.1、已经在k8s-master1节点上起了一个virtual-kubelet

# kubectl get nodes
NAME               STATUS   ROLES    AGE    VERSION
k8s-master1        Ready    master   4d7h   v1.17.0
k8s-master2        Ready    master   4d7h   v1.17.0
k8s-master3        Ready    master   4d7h   v1.17.0
k8s-node1          Ready    <none>   4d7h   v1.17.0
virtual-kubelet    Ready    agent    2d6h   v1.14.3-vk-openstack-zun-781b46a-dev

3.2、在k8s-master2节点上再起一个virtual-kubelet

3.2.1、环境变量配置参考

https://blog.csdn.net/weixin_43905458/article/details/103913735
由于要对接同一个OpenStack Zun集群,所以环境变量信息和k8s-master1节点上的virtual-kubelet一致

3.2.2、拷贝kube配置文件

从k8s-master1上拷贝kube配置文件,以便virtual-kubelet在k8s-master2上运行也能够加入k8s集群

scp /root/.kube/config k8s-master2:/root/.kube/

注:需先在k8s-master2节点上创建/root/.kube/目录

3.2.3、运行virtual-kubelet

在k8s-master2上运行virtual-kubelet,指定不一样的node name

# ./virtual-kubelet --provider openstack --nodename virtual-kubelet1

4、查看Pod多副本运行情况

第二个副本已经运行在virtual-kubelet的另外一个实例virtual-kubelet1上,

# kubectl get pods -o wide
NAME            READY   STATUS    RESTARTS   AGE   IP              NODE               NOMINATED NODE   READINESS GATES
sc-0-0   1/1     Running   0          25h   172.200.1.188   virtual-kubelet    <none>           <none>
sc-0-1   1/1     Running   0          25h   172.200.1.200   virtual-kubelet1   <none>           <none>

实际第二个副本也是运行在同一个OpenStack Zun集群上

# zun capsule-list
+--------------------------------------+-------------------------------+---------+---------------+
| uuid                                 | name                          | status  | addresses     |
+--------------------------------------+-------------------------------+---------+---------------+
| a6715753-48a2-404f-b8e1-9413fed8dbc0 | capsule-test                  | Running | 172.200.1.111 |
| 2a21aaf4-dff2-42f2-9e7b-4e576174cdf4 | kube-system-kube-proxy-48cb5  | Running | 172.200.1.164 |
| 3363420a-9a7a-45b2-8fc6-a3e4070eb389 | kube-system-calico-node-dlbv7 | Running | 172.200.1.118 |
| 1da5ec1a-8f98-4eff-800d-bae4d4a78dc6 | default-sc-0-0         | Running | 172.200.1.188 |
| 22a78f09-67fc-49ea-942a-46ecb54ac07a | kube-system-kube-proxy-pvhrs  | Running | 172.200.1.168 |
| 30825dc7-d44d-4575-8b0d-8666c84f2a6f | kube-system-calico-node-k5vzl | Running | 172.200.1.153 |
| 03210a5f-d59c-453c-847e-b9d329e8b6c4 | default-sc-0-1         | Running | 172.200.1.200 |
+--------------------------------------+-------------------------------+---------+---------------+

5、怎么实现三副本或者更多的副本?

5.1、起更多的virtual-kubelet

在k8s-master3上或者其他node上起更多的virtual-kubelet实例

5.2、OpenStack Zun的capsule要支持反亲和

OpenStack Zun对于capsule目前还不支持亲和反亲和特性
待Zun支持这个特性后,可能会有更好的解决方案

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐