简介:
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。 Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。
选择部署方式
公司业务环境在去年已经完成了全线容器化改造,并结合开源容器管理平台Rancher(v1.6)流畅运行,后面发现kubernetes 有要一统的江湖节奏。后面个人有时间逐步开始调研k8s集群,先从源码部署开始的,源码部署的时候个人使用了ansible,整个过程可谓一通折腾啊,踩了很多坑。网上倒是有不少批量自动化工具,鉴于我们现在准备用在生产环境,未来是要替换公司容器化生产环境,个人按照公司的业务常规服务器配置,重新组织了基于源码部署的ansible-playbook。可以完成一件部署一套多主高可用kubernetes集群,模块如下:
p1-nginx.yaml
p2-keepalived.yml
1-download-sofrware.yaml
2-creat-key.yaml
3-kernelup.yaml
4-basic.yml
5-copy-command.yml
6-etcd.yml
7-kubmaster.yaml
8-kubnode.yaml
9-flannel.yaml
10-coredns.yml
p1-nginx.yaml
p2-keepalived.yml
整个过程花费很多精力和时间,过程痛苦而漫长(O(∩_∩)O哈!),当然收获也很多。
关于使用源码部署:
如果个人想学习或者想了解一些配置细节可以用这种方法,但是最好不要自己写自动化这块,谈不上特别复杂,主要是使用批量部署工具部署分布集群,肯定要使用很对变量对路径、配置、权限进行规范,这块调试挺花时间的,另外如果再对集群部署不熟悉就更坑了。学习、了解直接手动敲一遍就行,先别把自动化的事情在初期就一起推进。另外老鸟就另说了,有时间可以折腾,毕竟自动化部署复杂集群效率还是挺高的。
使用kubeadm工具
在使用kubadm之前个人是倾向于源码部署的,后面再看关于k8s相关周边资料发现,官方对kubeadm安装部署推广力度挺大,新功能迭代也很快。另外还有一个重要因素就是k8s的新功能更新也挺快,新的功能、特性都可能面临配置的变更和参数的变化。还有k8s周边的组件dns、网络插件与k8s兼容和匹配都有约束,好多支持版本的特性只会写在官方发布的文档里面,以上种种都带来问题和坑。。。。。。
部署方式推荐:
总体考虑我推荐使用官方推荐工具部署,首先官方发布新版本前会进行自测和功能验证,兼容性问题基本可以避免,官网工具用户量也有保障,有问题解决的速度也快。未来跟随主版本升级也比较方便。省出来的时间可以多去思考公司业务如何在k8s上跑的更加流畅。
本次部署架构
节点角色介绍
[kub-master] 节点名称 部署服务
172.20.101.157 name=kubm-01 docker、keepalived、nginx、etcd、kube-apiserver、kube-controller-manager、kube-scheduler
172.20.101.164 name=kubm-02 docker、keepalived、nginx、etcd、kube-apiserver、kube-controller-manager、kube-scheduler
172.20.101.165 name=kubm-03 docker、keepalived、nginx、etcd、kube-apiserver、kube-controller-manager、kube-scheduler
[kub-node]
172.20.101.160 name=kubnode-01 kubelet、docker、kube_proxy
172.20.101.166 name=kubnode-02 kubelet、docker、kube_proxy
172.20.101.167 name=kubnode-03 kubelet、docker、kube_proxy
部署环境介绍
docker -v
Docker version 18.06.1-ce, build e68fc7a
kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529",
GitTreeState:"clean", BuildDate:"2019-06-19T16:37:41Z",
GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
Kubernetes
VERSION v1.15.0
more /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
uname -a
Linux kubm-01 4.20.10-1.el7.elrepo.x86_64 #1 SMP Fri Feb 15 08:52:17 EST 2019 x86_64 x86_64 x86_64 GNU/Linux
nginx -v
nginx version: nginx/1.16.0
keepalived -v
Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
?### 配置部署
为了减小篇幅放到一个单独的文档。
https://blog.51cto.com/michaelkang/2413965
原文地址:https://blog.51cto.com/michaelkang/2413962