使用kubernetes自举,碰到的一些问题


kubernetes本身就是一个复杂应用,
在我们的环境里面启动了一个bootstrap的kubernetes,在上面再部署了一个kubernetes

在这个过程中,我们碰到了如下几个问题:
  1. k8s和docker都没有对网络的隔离和流控,这导致了apiserver/etcd/镜像仓库互相抢带宽而导致系统不稳定,目前只能把几个组件独立部署出去,如果平台有隔离机制,就不需要每个应用自己实现
  2. etcd 使用了petset方式来部署, 没有较好的扩容、缩容、更新等方式,目前只能备份完数据后重新建一个,coreos自己建了一个把etcd部署在k8s上的项目etcd-operator,但需要到etcd 3.0才能用
  3. 目前的调度方式全部依赖于自动化的调度器,但为了测试一些特殊的部署能力,最好能有手动的调度分配权,类似于kubectl mv pod xx-node
  4. 负载均衡的问题,原生的kube-proxy模式使用external ip的方式来做,但能力还不足,需要结合ELB来做
  5. 节点间数据流量加密,目前是每个组件自己来完成,是否有可能在pause这样的网络容器上或flannel这层上实现,这样就避免了应用自己去管理加密、证书这些麻烦的过程,同时也可以做一些通用的性能优化
已邀请:

xiphis

赞同来自: 难易 Shaman


尝试回答一下吧:
1. 既然是做生产系统,那么就把apiserver、etcd、镜像仓库独立部署,就不存在流量相互干扰的问题了。 如果不是生产环境,会有那么大的流量干扰么?
2. 独立部署吧,是k8s依赖etcd,不是etcd依赖k8s; 一定要用k8s去部署的话,用kubelet去启动etcd容器吧,petset部署,master启动都找不到etcd在哪儿,怎么能启动petset。
3. 用nodeselector标签可以部分满足你的要求
4. k8s有个组建叫ingress,专门做负责均衡的,比较坑爹是的,从1.3.6版本后,k8s不支持hostport了,职能用hostnetwork
5. 好像没听说这样的功能。节点之间的流量都是内网啊,需要加密么? 个别敏感数据,应用层自己实现加密。网络访问控制calico可以做到,流控calico现在做不到。

wisen

赞同来自:


点个赞,送你去前排。这么好的问题,求各路大神讨论,小板凳已备好。

xiphis

赞同来自:


顺便提一句, coreos的operators现在有坑, 它是用tpr的方式部署的,这个会触发k8s的bug,会导致namespace删除失败。

难易 - 华为杭州研究院PaaS开发者

赞同来自:

  1. 独立部署可以工作,但这在部署方面就很逊,回退到传统的部署模式上面去了。这样完全可以用fabric和ansible来完成
  2. 只要外面有service就行,这个我们已经实现了
  3. nodeselector是可以的,但操作比较复杂
  4. ingress需要增强
  5. 在我司的变态安全要求下,内网也要加密。。。
  6. operator模式不是正确的控制方式,这种对应用的开发人员和运维人员要求太高,我已经考虑出一个方向来替代。

要回复问题请先登录注册