十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要为大家展示了“如何二进制安装k8s集群”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何二进制安装k8s集群”这篇文章吧。
创新互联专注于大武口企业网站建设,自适应网站建设,商城网站建设。大武口网站建设公司,为大武口等地区提供建站服务。全流程定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
k8s集群安装的方式有很多,可以基于kubeadmin工具来创建与安装,也可以一个组件一个组件的安装。如果是公有云上环境可以基于console UI或者command line的方式创建与安装。上面所说,这里主要是学习的目的,所以采用二进制手动一个组件一个组件的安装。不论以任何方式创建k8s集群都会考虑如下一些条目。
容器:容器目前基本都是docker了,当然容器不仅仅只有docker。容器的实现也有很多,比方说podman(据说centos-8/redhat-8会预装),还有pivotal公司的商业化容器等(用在其pivotal cloud foundry pass里)。当然容器实现的大致原理不在这里细说,有兴趣的同学可以研究一下linux namespace/cgroup/ufs,就会对容器大致原理有所了解和认识。
K8s基础组件:存储组件etcd,master组件api-server,controller-manager,kube-scheduler,worker组件kubelet,kube-proxy,客户端工具kubectl。
容器之间网络通讯:容器之间的网络通讯总结起来基本分为两种,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的网络方案都是在这些基础知识上构建起来的。这里就不展开细节,扩展起来也可以写一个系列了。
镜像image的仓库:用来存储image的repo,目前选择有harbor(vmware开源的),nexus(这个就不用说了吧),不过harbor是专门做image repo的,nexus是支持了image repo。当然了如果是自建的private repo还要考虑volume和house-keeping(总不能放着一直不管吧)。开源方案短期可以考虑nsf挂载volume,长期可以用ceph集群挂载volume,当然有钱的话可以用nas。
容器的DNS:容器之间通讯当然是用fqdn的了(容器是动态创建和销毁的,ip地址一定会变,不可能用ip。再说ip那么难记,也不方便用),既然有fqdn,那么一定就有dns服务了。从k8s各个版本来看,有过不同的dns,例如最早的sky-dns,到后来的kube-dns,到现在最新的coredns等。
可视化dashboard:一般用来把k8s集群中的资源以UI console的形式呈现出来,以及提供一些对资源的基础操作,这个一般是由kube-dashboard来实现。
外部访问容器提供的服务:服务部署到集群里肯定是需要从集群外部来调用的(有点废话,不被外部调用难道只在里面相互调用自嗨么)。一般有node port方式,ingress方式,公有云的环境里不同的厂商还提供不同的load balancer方式。当然node port方式在service里定义一下type和port就好,load balancer方式有兴趣的同学可以查看一下不同公有云厂商提供的doc。对于ingress来说,目前用的比较多的是nginx-ingress,traefik ingress,haproxy ingress。
镜像的release发布管理:有了镜像需要发布部署到集群里,可以用最原始的命令,不过比较费劲。当然目前已经有工具helm,这样我们就方便很多。helm也包括了client,tiller server还有charts repo(存放k8s application package)。
持久化存储:一般k8s里的应用都是无状态的,不过也避免不了存储数据。k8s提供给我们persistent volume机制。当然底层我们可以用nfs,ceph,nas等存储。
监控与预警:任何应用肯定是需要监控和预警的,对于k8s里方案也比较多。例如prometheus+grafana,telegraf+grafana+influxdb等等,这也是一个非常大的话题,暂时不在这里展开,扩展起来足足可以有一个系列。
日志的收集:日志的收集总结起来也基本有两种方式,sidecar方式和daemonset方式。sidecar方式需要在每一个pod里部署一个日志收集的agent,而daemonset方式需要在集群里部署日志收集agent的daemonset,就不需要每个pod里都有日志收集agent的container。当然日志收集方案也比较多,filebeat/fluentd/logstash(logstash比较重,一般不太用)为agent,es为存储,kabina为视图(ELK/EFK)。有钱也可以选择splunk,当然它可不仅仅是提供日志收集和搜索的功能。
对于本次安装我们用的组件如下:
ssl证书:各个组件之间的通讯开启ssl,我们不暴力关闭防火墙。
容器:docker(18.09.6版本)
etcd:3.3.11版本
kubectl:1.15.1版本
kube-apiserver:1.15.1版本
kube-controller-manager:1.15.1版本
kube-scheduler:1.15.1版本
kubelet:1.15.1版本
kube-proxy:1.15.1版本
kubectl-debug:0.1.1本版(非k8s官方工具,主要用来方便调试pod。当你遇到一个pod里什么工具top/nslookup/ps/netstat/tcpdump等都没有,是没法调试的。当然从制作image的角度来说确实是不应该把和应用无关的items放到image里的,可是没有这些工具想要调试也是臣妾做不到啊,kubectl-debug就是为了解决这个问题的)
pod网络通讯:使用flannel(0.10.0版本)的host-gw方式(注意此方式要求所有的宿主host必须在同一个大二层网络里,换句话说也就是所有host不能跨ip网段)。
镜像image的仓库:使用harbor(1.8.1版本),存储用nfs挂载。当然harbor依赖docker-compose,所以也会用到docker-compose(1.24.1版本)
容器dns:使用coredns,部署在集群里,原始image为
k8s.gcr.io/coredns:1.3.1
dashboard:使用kube-dashboard,部署在集群里,原始image为k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
ingress外部访问容器:使用nginx-ingress,部署在集群里,原始镜像quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1
示例:部署nginx应用作为example application
image release发布工具:
a):helm client(2.14.3版本)
b):tiller server(2.14.3版本,部署在集群里)
c):chartmuseum(0.9.0版本,作为private charts repo)
d):helmpush(0.7.1版本,用于把k8s应用package推送到priavte charts repo chartmuseum里)
环境介绍
OS:oracle virtual box, centos-7
Master:1台vm,172.20.11.41
(当然这里没有做master的HA,有兴趣的同学可以看一下nginx/haproxy + keepalived)
Worker:2台vm
172.20.11.42/172.20.11.43
Master 安装:
docker
etcd
flannel
kubectl
kube-apiserver
kube-scheduler
kube-controller-manager
kubectl-debug
docker-componse
harbor
nfs client
helm
chartmuseum
helmpush
5. Worker 安装:
docker
etcd
flannel
kubelet
kube-proxy
nfs-server(安装在172.20.11.43)
6. 集群中的基础服务安装:
coredns
kube-dashboard
nginx-ingress
tiller-server
以上是“如何二进制安装k8s集群”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!