11 | 从0到1:搭建一个完整的Kubernetes集群
张磊

你好,我是张磊。今天我和你分享的主题是:从 0 到 1 搭建一个完整的 Kubernetes 集群。
不过,首先需要指出的是,本篇搭建指南是完全的手工操作,细节比较多,并且有些外部链接可能还会遇到特殊的“网络问题”。所以,对于只关心学习 Kubernetes 本身知识点、不太关注如何手工部署 Kubernetes 集群的同学,可以略过本节,直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可。如果是使用 MiniKube 的话,阿里云还维护了一个国内版的 MiniKube,这对于在国内的同学来说会比较友好。
在上一篇文章中,我介绍了 kubeadm 这个 Kubernetes 半官方管理工具的工作原理。既然 kubeadm 的初衷是让 Kubernetes 集群的部署不再让人头疼,那么这篇文章,我们就来使用它部署一个完整的 Kubernetes 集群吧。
备注:这里所说的“完整”,指的是这个集群具备 Kubernetes 项目在 GitHub 上已经发布的所有功能,并能够模拟生产环境的所有使用需求。但并不代表这个集群是生产级别可用的:类似于高可用、授权、多租户、灾难备份等生产级别集群的功能暂时不在本篇文章的讨论范围。
目前,kubeadm 的高可用部署已经有了第一个发布。但是,这个特性还没有 GA(生产可用),所以包括了大量的手动工作,跟我们所预期的一键部署还有一定距离。GA 的日期预计是 2018 年底到 2019 年初。届时,如果有机会我会再和你分享这部分内容。
公开
同步至部落
取消
完成
0/2000
笔记
复制
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》,新⼈⾸单¥68
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(371)
- 最新
- 精选
- Roy Liangkubeadm最新版本已经为1.12,看到上面很多人遇到提示版本不对,重新安装低版本就好了 apt remove kubelet kubectl kubeadm apt install kubelet=1.11.3-00 apt install kubectl=1.11.3-00 apt install kubeadm=1.11.3-00
作者回复: 对对对
760 - Andy最新的部署ceph cluster需要多一条部署命令才可以部署成功: 1. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml 2. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml 3. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
作者回复: 又更新啦,@编辑
625 - 包治结巴张老师,请教一个问题,master部署完成后生成指令,比如“ kubeadm join 172.19.0.7:6443 --token xw4d6t.1dmpctojkcg9yqlf --discovery-token-ca-cert-hash sha256:45168e55ad19ac6126728e86c0a4c46e98c7df5d0312aec3fdd8d437dc24a3b9”,假如当时没有记下来,有什么命令可以再次让master生成这个指令吗?
作者回复: 可以用kubeadm查看token
11 - 心情不错以后是不是开发负责部署单个docker, 运维负责宏观kubernetes?
作者回复: 开发负责docker和一部分yaml文件,下一篇会讲一个流程
9 - 选择你好,照着你的教程,我在执行kubeadm init --config kubeadm.yaml, 提示:your configuration file uses an old API spec: "kubeadm.k8s.io/v1alpha1". Please use kubeadm v1.11 instead and run 'kubeadm config migrate --old-config old.yaml --new-config new.yaml', which will write the new, similar spec using a newer API version.用全新的虚拟机安装的 该怎么解决呢? 谢谢了
作者回复: 解决方法你自己都贴出来了……
7 - John非常强的挫败感。第一,打败墙,花了几天。然后,应用了网络插件,但是仍然是 not ready,提示还是 network plugin is not ready cni config uninitiated。请问怎么看日志呢?
作者回复: journalctl -l -u kubelet
27 - hpfish为什么不解释一些常见的问题呢?第一次部哪有那么顺啊
作者回复: kubeadm存在的意义就是要让你第一次部署就这么顺,要不然这个项目就太失败了。至于GFW的问题,肯定要自己想办法解决。
6 - Jeff.W网络受限的话觉得可以参考一下这个,使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响 https://github.com/gjmzj/kubeasz。机器资源有限就弄个AllInOne?或者单主多从?老师怎么看?
作者回复: Ansible等工具适合部署大规模集群,做实验环境得不偿失,不建议分散精力。
6 - huan分享一下这篇实践的小插曲,我是使用DigitalOcean的机器做的,没有墙的问题。 在使用weave-net的时候,怎么都通不过,报错是 weave-net的状态是 CrashLoopBackOff,看了container的log,也不懂啥意思,找了下k8s的troubleshoot页面的说明 (https://kubernetes.io/docs/setup/independent/troubleshooting-kubeadm/#pods-in-runcontainererror-crashloopbackoff-or-error-state),说是版本问题,不知道怎么解决。 然后随便找了另一个实现 Romana,替换weavenet `kubectl apply -f https://raw.githubusercontent.com/romana/romana/master/containerize/specs/romana-kubeadm.yml` 终于成功了,然后体验到了以前想都不敢想的Ceph,超赞
作者回复: rook.io真的是个好东西
6 - Tokamak在执行kubeadm init config kubeadm.yaml时报如下错误: your configuration file uses an old API spec: "kubeadm.k8s.io/v1alpha1". Please use kubeadm v1.11 instead and run 'kubeadm config migrate --old-config old.yaml --new-config new.yaml', which will write the new, similar spec using a newer API version. kubedadm的版本信息是: kubeadm version: &version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.0", GitCommit:"0ed33881dc4355495f623c6f22e7dd0b7632b7c0", GitTreeState:"clean", BuildDate:"2018-09-27T17:02:38Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"} 系统环境是:ubuntu server 16.04 在google也搜索了,没有找到解决方法。麻烦老师解答一下解决方法。 今后在遇到类似的问题时,应该如何解决呢,希望张老师能提供一个解决问题的思路。或者是如何才能查看不同版本的kubernetes的参数的差异变化。 谢谢张老师~
作者回复: 呃,提示都说了让你装kubeadm 1.11然后执行格式转换呢……为啥不操作呢
5
收起评论