centos7使用kubeadm安装kubernetes 1.11版本多主高可用

作者: ygqygq2 分类: 系统/运维 发布时间: 2018-08-01 16:46

centos7使用kubeadm安装kubernetes 1.11版本多主高可用

kubernetes介绍
要学习一个新的东西,先了解它是什么,熟悉基本概念会有很大帮助。以下是我学习时看过的一篇核心概念介绍。
http://dockone.io/article/932

搭建Kubernetes集群环境有以下3种方式:

minikube
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
官方地址:https://kubernetes.io/docs/setup/minikube/

以下是符合企业生产环境标准的Kubernetes集群环境方式:

kubeadm
Kubeadm也是一个工具,提供kubeadm initkubeadm join,用于快速部署Kubernetes集群。

官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制包
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

官方也提供了一个互动测试环境供大家玩耍:https://kubernetes.io/cn/docs/tutorials/kubernetes-basics/cluster-interactive/
国外的这个最多支持5个节点的测试环境也很赞:https://labs.play-with-k8s.com/

1. 实验环境说明

virtualbox实验使用的Vagrantfile:

2. 准备yum源

使用阿里yum源,并将默认yum源文件都移走。

vim CentOS-Base.repo

vim epel-7.repo

vim docker-ce.repo

vim kubernetes.repo

2. 安装配置docker

v1.11.1版本推荐使用docker v17.03,v1.11,v1.12,v1.13, 也可以使用,再高版本的docker可能无法正常使用。

这里安装v1.13版本。

docker启动错误解决:

修改/etc/sysconfig/docker中的--selinux-enabled=false

3. 安装 kubeadm, kubelet 和 kubectl

如下操作在所有节点操作

4. 配置系统相关参数

如下操作在所有节点操作

5. 配置hosts解析

如下操作在所有节点操作

6. 配置haproxy代理和keepalived

如下操作在节点lab1,lab2,lab3操作

7. 配置启动kubelet

如下操作在所有节点操作

8. 配置master

8.1 配置第一个master

如下操作在lab1节点操作

kubeadm init失败解决:
将阿里云image tag成官方的image,即可解决init失败问题。(v1.11.0有此问题)

docker images # 结果如下

8.2 配置第二个master

如下操作在lab2节点操作

8.3 配置第三个master

如下操作在lab3节点操作

9. 配置使用kubectl

如下操作在任意master节点操作

10. 配置使用网络插件

如下操作在任意master节点操作

11. 配置node节点加入集群

如下操作在所有node节点操作

node节点报错处理办法:

tail -f /var/log/message

在kubelet配置文件追加以下配置
/etc/sysconfig/kubelet

12. 配置dashboard

默认是没web界面的,可以在master机器上安装一个dashboard插件,实现通过web来管理。

12.1 安装Dashboard插件

如下操作在任意master节点操作

编辑kubernetes-dashboard.yaml文件`:

执行命令

可以看到kubernetes-dashboard已正常运行。

12.2 授予Dashboard账户集群管理权限

需要一个管理集群admin的权限,新建kubernetes-dashboard-admin.rbac.yaml文件,内容如下

执行命令

找到kubernete-dashboard-admin的token,用户登录使用

执行命令并查看结果

可以看到名称是kubernetes-dashboard-admin-token-ddskx,使用该名称执行如下命令

记下这串token,等下登录使用,这个token默认是永久的。

12.3 dashboard访问方式

此处推荐API Server方式访问。(谷歌内核浏览器)

12.3.1 kubectl proxy方式访问

如下操作在lab1上操作

即可通过浏览器访问: http://192.168.105.92:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

注意
仪表盘使用kubectl代理命令不应暴露公开,因为它只允许HTTP连接。域以外的localhost和127.0.0.1将不能登录。在登录页面点击登录按钮什么都不会发生后,跳过登录后,没有任何权限。

此方式只允许开发测试使用。为了便于开发测试,以下配置用于提升默认权限为超级用户权限。

vim kubernetes-dashboard-test.yaml

12.3.2 NodePort方式访问

这种访问方式仪表板只建议在单个节点上设置开发环境。

编辑kubernetes-dashboard.yaml文件,添加type: NodePortnodePort: 30001,暴露Dashboard服务为30001端口,参考如下。

注意
仪表盘可以在master节点上访问,如果是多节点集群,官方文档说应该是使用节点IP和NodePort来访问,但是经过测试,https://<master-ip>:<nodePort>https://<node-ip>:<nodePort>都可以访问。

12.3.3 API Server方式访问

https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

注意
这种方式访问仪表盘的仅仅可能在安装了你的用户证书的浏览器上。与API Server通信可以使用示例所使用的证书kubeconfig文件。

浏览器访问问题:

这是因为最新版的k8s默认启用了RBAC,并为未认证用户赋予了一个默认的身份:anonymous

对于API Server来说,它是使用证书进行认证的,我们需要先创建一个证书:

  1. 首先找到kubectl命令的配置文件,默认情况下为/etc/kubernetes/admin.conf,在 上文 中,我们已经复制到了$HOME/.kube/config中。

  2. 然后我们使用client-certificate-data和client-key-data生成一个p12文件,可使用下列命令:

  1. 最后导入上面生成的p12文件,重新打开浏览器,显示出现选择证书选项,选OK,然后就可以看到熟悉的登录界面了。我们可以使用一开始创建的admin-user用户的token进行登录,一切OK。

注意
对于生产系统,我们应该为每个用户应该生成自己的证书,因为不同的用户会有不同的命名空间访问权限。

12.3.4 nginx ingress方式访问

可以动态的更新Nginx配置等,是比较灵活,更为推荐的暴露服务的方式,但也相对比较复杂,业务环境推荐使用。

13. 基础测试

测试容器间的通信和DNS
配置好网络之后,kubeadm会自动部署coredns

如下测试可以在配置kubectl的节点上操作

13. 小技巧

忘记初始master节点时的node节点加入集群命令怎么办

14. 相关命令

参考文档:
[1] https://kubernetes.io/docs/setup/independent/install-kubeadm/
[2] https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
[3] https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
[4] https://kubernetes.io/docs/setup/independent/high-availability/
[5] https://sealyun.com/post/k8s-ipvs/
[6] http://www.maogx.win/posts/33/
[7] https://github.com/opsnull/follow-me-install-kubernetes-cluster
[8] https://github.com/xizhibei/blog/issues/64
[9] https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.