前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的。咱们须要有一个多节点集群,才能用到各类调度/监控功能。并且单节点只能是一个加引号的“集群”。html
kubernetes 是一个组件化的系统,安装过程有很大的灵活性,不少组件都有多种实现,这些实现各有特色,让初学者眼花缭乱。node
并且要把这些组件一个个安装配置好而且能协同工做,也是很不容易的。python
所以社区出现了各类各样的安装方案。安装方案如此之多,以至于我不晓得该用哪一个好。。因而特意调查了一番。将几个流行的安装方案罗列以下:nginx
此外社区还有 n 种方案可供选择,五花八门。并且关注度(stars)都不低。贪多嚼不烂,我就不一一介绍了。git
一番搜索,我最终肯定了用 rancher 来部署个人第一个 kubernetes 多节点集群(后来发现其实 rke 更适合个人使用场景),怎么简单怎么来哈哈~github
除了多节点集群,咱们每一个开发人员还须要一台我的测试用的机器。目前公司的这些测试用的是单节点集群,为了快速部署,这些单节点集群都是经过离线安装包(或内网镜像仓库)、以容器方式部署的。docker
要部署多节点嘛,天然得先有多台主机。我本身的机器内存够用,就直接开了一台 Ubuntu 虚拟机,而后克隆了四份。(这个克隆操做致使我后面掉进了坑。。)shell
主机的操做系统能够用本身熟悉的 Ubuntu/Debian/CentOS 等。这里主要强调一个坑:ubuntu
若是是使用 rke/kubespray 进行批量安装,能够直接在配置文件里指定节点 hostname,这俩工具会帮你自动修改。api
具体的主机配置过程官方文档写得很是详细,请移步 Rancher-基础环境配置
首先在用作 rancher server 的虚拟机上跑官方给出的 docker 命令启动 rancher server:
sudo docker run -d -v <主机路径>:/var/lib/rancher/ --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:stable
不过说实话我以为用 docker-compose 的方式会更好一点。
部署好后访问 https://<server-ip>
配置好帐号/密码/url,这没啥好说的。
如今进入了 rancher 首页,点击右上角的「添加集群」,选择「自定义」来添加本地集群。
固然若是你用的是云服务,那直接使用 rancher 提供的对应的功能显然更方便。(在导航栏「工具」-「驱动管理」中能够添加「阿里云」「腾讯云」「华为云」等国内云服务支持)
而后输入「集群名称」,「云提供商」选择「无」。
而后就是最后一步——在各个节点上部署 rancher agent——了。
只要你勾选了 worker
选项(其实就是添加了 --worker
参数),rancher agent 在运行时,就会自动在节点上部署 k8s
节点所须要的全部容器。
在多个节点上运行带 --worker
的 rancher agnet 命令,就能获得多个 k8s worker。而 etcd 和 controller 开发环境各部署一个就行了。
而后就能够愉快地玩耍了hhh~
要使用 rancher 离线部署,首先须要一个 docker 私有镜像仓库,推荐使用 harbor.
虽然也可使用官方的 rancher_save_images.sh 把全部镜像打包成 tar.gz 进行离线安装,可是这并无使用私有仓库的方式灵活简便。(前提是你原本就已经有一个内网私有仓库。。)
而后参照上一步 2. 部署 kubernetes 集群
就行。
更新
今天尝试了一下使用 kubespray 部署一个本地 k8s 集群,总的来讲,坑,仍是 rancher 最方便。。
使用 kubespary 部署,难点有二:
gcr.io
全都替换成 gcr.azk8s.cn
quay.io
全都替换成 quay.azk8s.cn
dockerhub.azk8s.cn
/usr/bin/python
,升级到最新版本才能识别到 /usr/bin/python3
趟完了上面说的坑以后,终于把 kubernetes 安装上了。安装体验上来讲比 rancher 差多了。不过这也可能和我想尝鲜 k8s 1.16,因此使用了 master 分支有关。。
优点:
1. 节点只要有 python 就行,好像连 docker 均可以交给 kubespray 安装(只要你能忍受它的速度。。)
1. 会自动配置节点的 hostname,不须要手动一台台地改了。
而后装完后我才晓得,原来 kubeconfig 是须要手动生成的。。以前用 rancher 时它直接就给生成好了,我觉得这是自动的来着。。
=====
前面使用 rancher 部署了一个 k8s 集群,可是那种方式不适合内网环境,由于它全部的镜像都仍是会从外网拉取,遇到出口带宽被限速,或者与公网物理隔离的状况下,就无能为力了。(rancher 的 UI 界面也能够设置私有仓库)
所以我改用 rke 进行部署,这种方式自定义程度更高,并且支持配置私有 docker 仓库,经过 ssh 批量部署。其实用法和 kubespray 有点像,可是比 kubespray 简单多了。(kuberspray 的配置文件实在太多了。。)
通过使用我发现,rke 才是最简单方便的 kubernetes 部署方式。流程以下:
ssh-keygen
建立密钥对,经过 ssh-copy-id
将公钥传到各节点上。rke
,放到 PATH 路径下(好比 /usr/local/bin
)。hostname_override
,覆盖掉原有的 hostname,这很是方便。rke config --list-version --all
查看全部支持的版本号。kubectl
部署官方的 ingress-controller 才正常。。部署 dashboard 存在两个问题
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
被墙。kubernetes-dashboard
权限至关小,啥都看不了。解决办法,首先下载官方的 yaml 文件,作以下修改:
gcr.azk8s.cn/google_containers/kubernetes-dashboard-amd64:v1.10.1
RoleBinding
那一部分的 yaml 配置,将服务帐号 kubernetes-dashboard
绑定到管理员角色 cluster-admin
上。详见官方文档:https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md#create-clusterrolebinding
而后再 kubectl create
kubectl proxy
提供一个访问集群内部 service 的入口http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
进入 dashboard 的 ui 界面authorization.mode
设为了 none,那应该会有个 skip
的按钮,点击就能进入 dashboard 了。参照 NGINX Ingress Controller - 安装指南
Prerequisite Generic Deployment Command
: kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
nodePort
,会致使最后导出的 nodePort 是随机分配的。。而后就可使用 ingress 啦。