如何二进制安装k8s集群

发布时间:2021-11-17 13:48:05 作者:小新
来源:亿速云 阅读:260

这篇文章主要为大家展示了“如何二进制安装k8s集群”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何二进制安装k8s集群”这篇文章吧。

k8s集群安装的方式有很多,可以基于kubeadmin工具来创建与安装,也可以一个组件一个组件的安装。如果是公有云上环境可以基于console UI或者command line的方式创建与安装。上面所说,这里主要是学习的目的,所以采用二进制手动一个组件一个组件的安装。不论以任何方式创建k8s集群都会考虑如下一些条目。

  1. 容器:容器目前基本都是docker了,当然容器不仅仅只有docker。容器的实现也有很多,比方说podman(据说centos-8/redhat-8会预装),还有pivotal公司的商业化容器等(用在其pivotal cloud foundry pass里)。当然容器实现的大致原理不在这里细说,有兴趣的同学可以研究一下linux namespace/cgroup/ufs,就会对容器大致原理有所了解和认识。


  2. K8s基础组件:存储组件etcd,master组件api-server,controller-manager,kube-scheduler,worker组件kubelet,kube-proxy,客户端工具kubectl。


  3. 容器之间网络通讯:容器之间的网络通讯总结起来基本分为两种,underlay方式和overlay方式。underlay方式在通讯过程中没有额外的封包,通常将容器的宿主作为路由来实现数据包的转发。常见的实现方案有flannel host-gw方式,calico bgp方式。


    overlay方式在通讯过程中有额外的封包,例如flannel vxlan方式(在三层网络里构建二层网络,即在udp包里封装eth以太包),calico ipip模式(在ip包里再次封装ip包)。还有flannel udp方式,在upd包里封装ip包(当然这种方式使用tun device,每次通讯都涉及到用户态到内核态的切换,所以效率不高,基本是不会被用的。不过作为学习入手是可以的)。


    另外除了flannel和calico方案之外还有weave,ovs等方案,k8s自己并没有定义网络方案。毕竟网络实现会有多种情况,不同场景的复杂度也不尽相同,也不好一下子定死。感觉k8s把网络方案开放出来由不同的社区实现也是比较好的选择,一来出现了不同的k8s网络方案,不是一家独大,有利于技术和社区发展,二来也让使用者根据自己的实际情况有不同的选择。


    对于这块感兴趣的同学可以多了解下linux bridge,veth-pair,route-table,arp-table,iptable,nat,fdb,tun&tap device,ipip-tunnel,vxlan,bgp protocol,l2-miss,l3-miss等基础知识,k8s的网络方案都是在这些基础知识上构建起来的。这里就不展开细节,扩展起来也可以写一个系列了。


  4. 镜像image的仓库:用来存储image的repo,目前选择有harbor(vmware开源的),nexus(这个就不用说了吧),不过harbor是专门做image repo的,nexus是支持了image repo。当然了如果是自建的private repo还要考虑volume和house-keeping(总不能放着一直不管吧)。开源方案短期可以考虑nsf挂载volume,长期可以用ceph集群挂载volume,当然有钱的话可以用nas。


  5. 容器的dns:容器之间通讯当然是用fqdn的了(容器是动态创建和销毁的,ip地址一定会变,不可能用ip。再说ip那么难记,也不方便用),既然有fqdn,那么一定就有dns服务了。从k8s各个版本来看,有过不同的dns,例如最早的sky-dns,到后来的kube-dns,到现在最新的coredns等。


  6. 可视化dashboard:一般用来把k8s集群中的资源以UI console的形式呈现出来,以及提供一些对资源的基础操作,这个一般是由kube-dashboard来实现。


  7. 外部访问容器提供的服务:服务部署到集群里肯定是需要从集群外部来调用的(有点废话,不被外部调用难道只在里面相互调用自嗨么)。一般有node port方式,ingress方式,公有云的环境里不同的厂商还提供不同的load balancer方式。当然node port方式在service里定义一下type和port就好,load balancer方式有兴趣的同学可以查看一下不同公有云厂商提供的doc。对于ingress来说,目前用的比较多的是nginx-ingress,traefik ingress,haproxy ingress。


  8. 镜像的release发布管理:有了镜像需要发布部署到集群里,可以用最原始的命令,不过比较费劲。当然目前已经有工具helm,这样我们就方便很多。helm也包括了client,tiller server还有charts repo(存放k8s application package)。


  9. 持久化存储:一般k8s里的应用都是无状态的,不过也避免不了存储数据。k8s提供给我们persistent volume机制。当然底层我们可以用nfs,ceph,nas等存储。


  10. 监控与预警:任何应用肯定是需要监控和预警的,对于k8s里方案也比较多。例如prometheus+grafana,telegraf+grafana+influxdb等等,这也是一个非常大的话题,暂时不在这里展开,扩展起来足足可以有一个系列。


  11. 日志的收集:日志的收集总结起来也基本有两种方式,sidecar方式和daemonset方式。sidecar方式需要在每一个pod里部署一个日志收集的agent,而daemonset方式需要在集群里部署日志收集agent的daemonset,就不需要每个pod里都有日志收集agent的container。当然日志收集方案也比较多,filebeat/fluentd/logstash(logstash比较重,一般不太用)为agent,es为存储,kabina为视图(ELK/EFK)。有钱也可以选择splunk,当然它可不仅仅是提供日志收集和搜索的功能。


对于本次安装我们用的组件如下:

环境介绍

  1. OS:oracle virtual box, centos-7


  2. Master:1台vm,172.20.11.41

    (当然这里没有做master的HA,有兴趣的同学可以看一下nginx/haproxy + keepalived)


  3. Worker:2台vm

    172.20.11.42/172.20.11.43


  4. Master 安装:

    5. Worker 安装:

    6. 集群中的基础服务安装:

以上是“如何二进制安装k8s集群”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. K8S集群安装 之 Docker环境准备
  2. kubeadm安装k8s集群1.17版本

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

k8s

上一篇:AngularJS中使用模块组织代码的示例分析

下一篇:jquery如何获取tr里面有几个td

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》