使用Kubespray部署生产可用的Kubernetes集群(1.11.2)

Kubernetes的安装部署是难中之难,每个版本安装方式都略有区别。笔者一直想找一种支持多平台相对简单适用于生产环境 的部署方案。经过一段时间的调研,有如下几种解决方案进入笔者视野:


部署方案优点缺点
Kubeadm官方出品部署较麻烦、不够透明
Kubespray官方出品、部署较简单、懂Ansible就能上手不够透明
RKE部署较简单、需要花一些时间了解RKE的cluster.yml配置文件不够透明
手动部署 第三方操作文档 完全透明、可配置、便于理解K8s各组件之间的关系部署非常麻烦,容易出错

其他诸如Kops之类的方案,由于无法跨平台,或者其他因素,被我pass了。

最终,笔者决定使用Kubespray部署Kubernetes集群。也希望大家能够一起讨论,总结出更加好的部署方案

废话不多说,以下是操作步骤。

<!-- more -->

注:撰写本文时,笔者临时租赁了几台海外阿里云机器,实现了科学上网。如果您的机器在国内,请:

  • 考虑科学上网
  • 或修改Kubespray中的gcr地址,改为其他仓库地址,例如阿里云镜像地址。

主机规划

IP作用
172.20.0.87ansible-client
172.20.0.88master,node
172.20.0.89master,node
172.20.0.90node
172.20.0.91node
172.20.0.92node

准备工作

关闭selinux

所有机器都必须关闭selinux,执行如下命令即可。

~]# setenforce 0
~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

网络配置

在master机器上

~]# firewall-cmd --permanent --add-port=6443/tcp
~]# firewall-cmd --permanent --add-port=2379-2380/tcp
~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10251/tcp
~]# firewall-cmd --permanent --add-port=10252/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --reload
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果关闭了防火墙,则只需执行最下面三行。

在node机器上

~]# firewall-cmd --permanent --add-port=10250/tcp
~]# firewall-cmd --permanent --add-port=10255/tcp
~]# firewall-cmd --permanent --add-port=30000-32767/tcp
~]# firewall-cmd --permanent --add-port=6783/tcp
~]# firewall-cmd --reload
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

如果关闭了防火墙,则只需执行最下面两行。

【可选】关闭防火墙

 systemctl stop firewalld

在ansible-client机器上安装ansible

安装ansible

~]# sudo yum install epel-release
~]# sudo yum install ansible 

安装jinja2

~]# easy_install pip
~]# pip2 install jinja2 --upgrade

如果执行pip2 install jinja2 --upgrade 出现类似如下的提示:

You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

则执行pip install --upgrade pip 升级pip,再执行pip2 install jinja2 --upgrade

安装Python 3.6

~]# sudo yum install python36 –y

在ansible-client机器上配置免密登录

生成ssh公钥和私钥

在ansible-cilent机器上执行:

~]# ssh-keygen

然后三次回车,生成ssh公钥和私钥。

建立ssh单向通道

在ansible-cilent机器上执行:

~]# ssh-copy-id root@172.20.0.88		#将公钥分发给88机器
~]# ssh-copy-id root@172.20.0.89
~]# ssh-copy-id root@172.20.0.90
~]# ssh-copy-id root@172.20.0.91
~]# ssh-copy-id root@172.20.0.92

在ansible-client机器上安装kubespray

1 下载kubespray

TIPS:本文下载的是master分支,如果大家要部署到线上环境,建议下载RELEASE分支。笔者撰写本文时,最新的RELEASE是2.6.0,RELEASE版本下载地址:https://github.com/kubernetes-incubator/kubespray/releases)

~]# git clone https://github.com/kubernetes-incubator/kubespray.git

2 安装kubespray需要的包:

~]# cd kubespray
~]# sudo pip install -r requirements.txt

3 拷贝inventory/sample ,命名为inventory/mycluster ,mycluster可以改为其他你喜欢的名字

cp -r inventory/sample inventory/mycluster

4 使用inventory_builder,初始化inventory文件

~]# declare -a IPS=(172.20.0.88 172.20.0.89 172.20.0.90 172.20.0.91 172.20.0.92)
~]# CONFIG_FILE=inventory/mycluster/hosts.ini python36 contrib/inventory_builder/inventory.py ${IPS[@]} 

此时,会看到inventory/mycluster/host.ini 文件内容类似如下:

[k8s-cluster:children]
kube-master 
kube-node 

[all]
node1 ansible_host=172.20.0.88 ip=172.20.0.88
node2 ansible_host=172.20.0.89 ip=172.20.0.89
node3 ansible_host=172.20.0.90 ip=172.20.0.90
node4 ansible_host=172.20.0.91 ip=172.20.0.91
node5 ansible_host=172.20.0.92 ip=172.20.0.92

[kube-master]
node1 
node2 

[kube-node]
node1 
node2 
node3 
node4 
node5 

[etcd]
node1 
node2 
node3 

[calico-rr] 
[vault]
node1 
node2 
node3 

5 使用ansible playbook部署kubespray

~]# ansible-playbook -i inventory/mycluster/hosts.ini cluster.yml

6 大概20分钟左右,Kubernetes即可安装完毕。

验证

验证1:查看Node状态

]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master,node 2m v1.11.2
node2 Ready master,node 2m v1.11.2
node3 Ready node 2m v1.11.2
node4 Ready node 2m v1.11.2
node5 Ready node 2m v1.11.2

每个node都是ready的,说明OK。

验证2:部署一个NGINX

# 启动一个单节点nginx ]# kubectl run nginx --image=nginx:1.7.9 --port=80 
# 为“nginx”服务暴露端口 ]# kubectl expose deployment nginx --type=NodePort 
# 查看nginx服务详情 ]# kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.233.29.96 <none> 80:32345/TCP 14s

# 访问测试,如果能够正常返回NGINX首页,说明正常 ]# curl localhost:32345 

卸载

]# ansible-playbook -i inventory/mycluster/hosts.ini reset.yml 

遇到的问题

Calico网络插件部署失效。这是Calico 3.2所带来的问题,原因详见:https://github.com/kubernetes-incubator/kubespray/issues/3223

解决方法:https://github.com/wilmardo/kubespray/commit/1c87a49d1443bcdd237500a714f1a60d680c1ad8 ,即:将Calico降级到3.1.3。

本文转自开源中国-使用Kubespray部署生产可用的Kubernetes集群(1.11.2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android webView 与 JS交互方式

webView 与JS交互 Android调用JS代码的方法有&#xff1a; 通过WebView的loadUrl&#xff08;&#xff09;通过WebView的evaluateJavascript&#xff08;&#xff09; 对于JS调用Android代码的方法有3种&#xff1a; 通过WebView的addJavascriptInterface&#xff08;&…

matlab软件imag函数_「复变函数与积分变换」基本计算代码

使用了Matlab代码&#xff0c;化简平时遇到的计算问题&#xff0c;也可以用于验算结果来自211工科专业2学分复变函数与积分变换课程求复角主值sym(angle(待求复数))%公式 sym(angle(1sqrt(3)*i))%举例代入化简将 代入关于z的函数f(z)中并化解&#xff0c;用于公式法计算无穷远点…

数据科学 python_为什么需要以数据科学家的身份学习Python的7大理由

数据科学 pythonAs a new Data Scientist, you know that your path begins with programming languages you need to learn. Among all languages that you can select from Python is the most popular language for all Data Scientists. In this article, I will cover 7 r…

[luoguP4142]洞穴遇险

https://www.zybuluo.com/ysner/note/1240792 题面 戳我 解析 这种用来拼接的奇形怪状的东西&#xff0c;要不就是轮廓线\(DP\)&#xff0c;要不就是网络流。 为了表示奇数点&#xff08;即\((xy)\%21\)&#xff09;的危险值&#xff0c;把该点拆为两个点&#xff0c;连一条边长…

飞信虚拟机

做完了一个图片处理软件,突然想到上次上网看到C#程序脱离.NET FRAMEWORK运行的文章,于是决定自己动手试一下。 之前看到有用别的方法来实现的&#xff0c;但我还是选择了现在比较流行的软件飞信中带的VMDotNet&#xff0c;也就是所谓的.NET FRAMEWORK虚拟机吧。相信有很多人也已…

django的contenttype表

https://blog.csdn.net/aaronthon/article/details/81714496 这篇文章已经非常详细了,供自己以后忘了...回看...... 总结&#xff1a; 当一张表和多个表FK关联&#xff0c;并且多个FK中只能选择其中一个或其中n个时&#xff0c;可以利用contenttype&#xff0c;固定用三个字段…

视频播放问题和提高性能方案

1.Five symptoms of poor video performance 1.1 视频加载缓慢 ​Perceived Wait Time Time to first frame (TTFF): ​ 播放开始所需的adaptive bitrate(ABR)流媒体段的数量。(我们稍后将对此进行更详细的讨论。) ​ 视频请求发送到视频加载之间的时间(即接收到足够的数据…

rabbitmq 不同的消费者消费同一个队列_RabbitMQ 消费端限流、TTL、死信队列

消费端限流1. 为什么要对消费端限流假设一个场景&#xff0c;首先&#xff0c;我们 Rabbitmq 服务器积压了有上万条未处理的消息&#xff0c;我们随便打开一个消费者客户端&#xff0c;会出现这样情况: 巨量的消息瞬间全部推送过来&#xff0c;但是我们单个客户端无法同时处理这…

动量策略 python_在Python中使用动量通道进行交易

动量策略 pythonMost traders use Bollinger Bands. However, price is not normally distributed. That’s why only 42% of prices will close within one standard deviation. Please go ahead and read this article. However, I have some good news.大多数交易者使用布林…

css3 变换、过渡效果、动画

1 CSS3 选择器 1.1 基本选择器 1.2 层级 空格 > .itemli ~ .item~p 1.3 属性选择器 [attr] [attrvalue] [attr^value] [attr$value] [attr*value] [][][] 1.4 伪类选择器 :link :visited :hover :active :focus :first-child .list li:first-child :last-chi…

webservice 启用代理服务器

您会发现你写完了一个webservice在调用的时候发现怎也没办法调用&#xff0c;一个简单的webservice怎么不能使用&#xff0c;一肚子的怨恨&#xff0c;哈哈您可能没有为webservice设置代理。 下面就给您写个调用的用例和大家分享下。其实很简单&#xff0c;但是你没有想到的时…

mysql常用的存储引擎_Mysql存储引擎

什么是存储引擎&#xff1f;关系数据库表是用于存储和组织信息的数据结构&#xff0c;可以将表理解为由行和列组成的表格&#xff0c;类似于Excel的电子表格的形式。有的表简单&#xff0c;有的表复杂&#xff0c;有的表根本不用来存储任何长期的数据&#xff0c;有的表读取时非…

android studio设计模式和文本模式切换

转载于:https://www.cnblogs.com/judes/p/9437104.html

高斯模糊为什么叫高斯滤波_为什么高斯是所有发行之王?

高斯模糊为什么叫高斯滤波高斯分布及其主要特征&#xff1a; (Gaussian Distribution and its key characteristics:) Gaussian distribution is a continuous probability distribution with symmetrical sides around its center. 高斯分布是连续概率分布&#xff0c;其中心周…

C# webbrowser 代理

百度&#xff0c;google加自己理解后&#xff0c;将所得方法总结一下&#xff1a; 方法1&#xff1a;修改注册表Software//Microsoft//Windows//CurrentVersion//Internet Settings下 ProxyEnable和ProxyServer。这种方法适用于局域网用户&#xff0c;拨号用户无效。 1p…

C MySQL读写分离连接串_Mysql读写分离

一 什么是读写分离MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询&#xff0c;而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。当然&#xff0c;主服务器也可以提供…

golang 编写的在线redis 内存分析工具 rma4go

redis 内存分析工具 rma4go redis是一个很有名的内存型数据库&#xff0c;这里不做详细介绍。而rma4go (redis memory analyzer for golang) 是一个redis的内存分析工具&#xff0c;这个工具的主要作用是针对运行时期的redis进行内存的分析&#xff0c;统计redis中key的分布情…

从Jupyter Notebook到脚本

16 Aug: My second article: From Scripts To Prediction API8月16日&#xff1a;我的第二篇文章&#xff1a; 从脚本到预测API As advanced beginners, we know quite a lot: EDA, ML concepts, model architectures etc…… We can write a big Jupyter Notebook, click “Re…

【EasyNetQ】- 使用Future Publish调度事件

许多业务流程要求在将来某个日期安排事件。例如&#xff0c;在与客户进行初次销售联系后&#xff0c;我们可能希望在将来的某个时间安排跟进电话。EasyNetQ可以通过其Future Publish功能帮助您实现此功能。例如&#xff0c;这里我们使用FuturePublish扩展方法来安排未来一个月的…

Java这些多线程基础知识你会吗?

0、并发和并行、进程核线程、多进程和多线程的区别&#xff1a; &#xff08;这里的时间和时刻上的概念同物理上的一样&#xff09; 并发&#xff1a;在一段时间内多个任务同时执行&#xff0c;或者说是在一段很短的时间内可以执行多条程序指令&#xff0c;微观上看起来好像是可…