前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Kubespray 2.8.3部署生产可用的Kubernetes集群(1.12.5)

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

作者头像
用户1516716
发布2019-03-14 16:09:50
1.5K0
发布2019-03-14 16:09:50
举报
文章被收录于专栏:A周立SpringCloudA周立SpringCloud

18年9月,笔者撰写了 使用Kubespray部署生产可用的Kubernetes集群(1.11.2) ,当时Kubespray发布到2.6.0,近日有童鞋反馈,这篇文章对最新的Kubespray(2.8.3)无法完全适用。

故而编写本文。

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

部署方案

优点

缺点

Kubeadm(https://github.com/kubernetes/kubeadm)

官方出品

部署较麻烦、不够透明

Kubespray(https://github.com/kubernetes-sigs/kubespray)

官方出品、部署较简单、懂Ansible就能上手

不够透明

RKE(https://github.com/rancher/rke)

部署较简单、需要花一些时间了解RKE的cluster.yml配置文件

不够透明

手动部署,操作文档(https://github.com/opsnull/follow-me-install-kubernetes-cluster)

完全透明、可配置、便于理解K8s各组件之间的关系

部署非常麻烦,容易出错

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

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

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

注:撰写本文时,笔者临时租赁了几台海外云机器,所以不存在无法连接gcr.io的问题。如果您的服务器在国内,请:

  • 访问外国网站
  • 修改Kubespray中的gcr地址,改为其他仓库地址,例如阿里云镜像地址(修改 roles/download/defaults/main.yml 即可)
  • 先弄个海外环境,安装完Kubernetes后,将镜像 docker save 下来,再到国内的服务器上 docker load

主机规划

IP

作用

172.21.240.64

ansible-client

172.21.240.65

master,node

172.21.240.66

master,node

172.21.240.67

node

172.21.240.68

node

172.21.240.69

node

一、准备工作

1.1 关闭selinux

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

代码语言:javascript
复制
~]# setenforce 0~]# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

1.2 网络配置

在master机器上

代码语言:javascript
复制
~]# 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机器上

代码语言:javascript
复制
~]# 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~]# modprobe br_netfilter~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables~]# sysctl -w net.ipv4.ip_forward=1

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

【可选】关闭防火墙

代码语言:javascript
复制
systemctl stop firewalld

二、在ansible-client机器上安装必备软件

代码语言:javascript
复制
# 安装epel源~]# sudo yum install -y epel-release# 安装ansible~]# sudo yum install -y ansible# 安装Python 3.6~]# sudo yum install –y python36

三、在ansible-client机器上配置免密登录其他机器

3.1 生成ssh公钥和私钥

在ansible-cilent机器上执行:

代码语言:javascript
复制
~]# ssh-keygen

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

3.2 建立ssh单向通道

在ansible-cilent机器上执行:

代码语言:javascript
复制
~]# ssh-copy-id root@172.21.240.65        #将公钥分发给88机器~]# ssh-copy-id root@172.21.240.66~]# ssh-copy-id root@172.21.240.67~]# ssh-copy-id root@172.21.240.68~]# ssh-copy-id root@172.21.240.69

四、在ansible-client机器上安装kubespray

4.1 下载kubespray

TIPS

  • 笔者撰写本文时,最新的RELEASE是2.8.3,RELEASE版本下载地址:https://github.com/kubernetes-incubator/kubespray/releases)
  • 强烈大家使用RELEASE分支进行部署,特别是在生产环境!Master分支不一定能部署成功,近日有童鞋无法成功部署就是因为使用的Master分支。
代码语言:javascript
复制
~]# git clone https://github.com/kubernetes-incubator/kubespray.git~]# cd kubespray~]# git checkout v2.8.3

4.2 安装kubespray需要的包:

代码语言:javascript
复制
~]# sudo pip install -r requirements.txt

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

代码语言:javascript
复制
cp -rfp inventory/sample inventory/mycluster

4.4 使用inventory_builder,初始化inventory文件

代码语言:javascript
复制
~]# declare -a IPS=(172.21.240.65 172.21.240.66 172.21.240.67 172.21.240.68 172.21.240.69)~]# CONFIG_FILE=inventory/mycluster/hosts.ini python36 contrib/inventory_builder/inventory.py ${IPS[@]}

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

代码语言:javascript
复制
[all]node1    ansible_host=172.21.240.65 ip=172.21.240.65node2    ansible_host=172.21.240.66 ip=172.21.240.66node3    ansible_host=172.21.240.67 ip=172.21.240.67node4    ansible_host=172.21.240.68 ip=172.21.240.68node5    ansible_host=172.21.240.69 ip=172.21.240.69
[kube-master]node1    node2    
[etcd]node1    node2    node3    
[kube-node]node1    node2    node3    node4    node5    
[k8s-cluster:children]kube-master      kube-node        
[calico-rr]
[vault]node1    node2    node3

4.5 使用ansible playbook部署kubespray

代码语言:javascript
复制
~]# ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root cluster.yml

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

五、验证

5.1 验证1:查看Node状态

主要是验证各个Node是否正常。

代码语言:javascript
复制
]# kubectl get nodesNAME    STATUS   ROLES         AGE     VERSIONnode1   Ready    master,node   8m41s   v1.12.5node2   Ready    master,node   7m32s   v1.12.5node3   Ready    node          6m59s   v1.12.5node4   Ready    node          6m59s   v1.12.5node5   Ready    node          6m59s   v1.12.5

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

5.2 验证2:部署一个NGINX

主要是验证网络等是否正常,步骤如下。

1 在Master所在节点(本文使用的是 172.21.240.66 ),准备一个名为 nginx.yaml 的文件,内容如下:

代码语言:javascript
复制
kind: ServiceapiVersion: v1metadata:  name: nginx-servicespec:  selector:    app: nginx  type: NodePort  ports:    # 协议:    - protocol: TCP      # service的端口,随便写      port: 80      targetPort: 80      nodePort: 32000---apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deployment  # 描述Deployment的标签,让Deployment变得可读  labels:    app: nginxspec:  replicas: 3  selector:    # label selector 标签选择器,他会找到带有app: nginx的所有pod    matchLabels:      app: nginx  template:    # Pod模板开始    metadata:      # 定义这些pod带有哪些标签      labels:        app: nginx    spec:      containers:        - name: nginx          image: nginx:1.7.9          ports:            - containerPort: 80

2 在该文件所在目录执行如下命令创建Service以及Deployment

代码语言:javascript
复制
kubectl create -f nginx.yaml

如内容所示,该NGINX以NodePort方式暴露到Kubernetes集群外部,端口为32000。

3 执行如下命令验证:

代码语言:javascript
复制
# 查看nginx服务详情~]# kubectl get svc nginx-serviceNAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEnginx-service   NodePort   10.233.59.132   <none>        80:32000/TCP   4m56s

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

六、卸载Kubespray

代码语言:javascript
复制
]# ansible-playbook -i inventory/mycluster/hosts.ini reset.yml

七、参考文档

1 Kubespray – 10 Simple Steps for Installing a Production-Ready, Multi-Master HA Kubernetes Cluster:https://dzone.com/articles/kubespray-10-simple-steps-for-installing-a-product

TIPS:主要参考文档,里面还讲解了Kubespray的一些配置、可能会遇到的问题及解决方案等。

2 使用Kubespray 部署kubernetes 高可用集群:https://yq.aliyun.com/articles/505382

3 kubespray(ansible)自动化安装k8s集群:https://www.cnblogs.com/iiiiher/p/8128184.html / https://www.jianshu.com/p/d8bee7c8a1e6

TIPS:里面有将如何替换gcr镜像为国内镜像

4 Installing Kubernetes On-premises/Cloud Providers with Kubespray:https://kubernetes.io/docs/setup/custom-cloud/kubespray/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT牧场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主机规划
  • 一、准备工作
    • 1.1 关闭selinux
      • 1.2 网络配置
        • 在master机器上
        • 在node机器上
        • 【可选】关闭防火墙
    • 二、在ansible-client机器上安装必备软件
    • 三、在ansible-client机器上配置免密登录其他机器
      • 3.1 生成ssh公钥和私钥
        • 3.2 建立ssh单向通道
        • 四、在ansible-client机器上安装kubespray
        • 五、验证
          • 5.1 验证1:查看Node状态
            • 5.2 验证2:部署一个NGINX
            • 六、卸载Kubespray
            • 七、参考文档
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档