使用Kubespray 2.8.3部署生产可用的Kubernetes集群(1.12.5)
admin
2023-04-07 13:01:30
0

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

部署方案 优点 缺点
Kubeadm 官方出品 部署较麻烦、不够透明
Kubespray 官方出品、部署较简单、懂Ansible就能上手 不够透明
RKE 部署较简单、需要花一些时间了解RKE的cluster.yml配置文件 不够透明
手动部署 第三方操作文档 完全透明、可配置、便于理解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

准备工作

关闭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
~]# modprobe br_netfilter
~]# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
~]# sysctl -w net.ipv4.ip_forward=1

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

【可选】关闭防火墙
systemctl stop firewalld

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

# 安装epel源
~]# sudo yum install -y epel-release
# 安装ansible
~]# sudo yum install -y ansible
# 安装Python 3.6
~]# sudo yum install –y python36

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

生成ssh公钥和私钥

在ansible-cilent机器上执行:

~]# ssh-keygen

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

建立ssh单向通道

在ansible-cilent机器上执行:

~]# 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

  • 下载kubespray

    TIPS

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

    ~]# sudo pip install -r requirements.txt
  • 拷贝inventory/sample ,命名为inventory/mycluster ,mycluster可以改为其他你喜欢的名字

    cp -rfp inventory/sample inventory/mycluster
  • 使用inventory_builder,初始化inventory文件

    ~]# 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 文件内容类似如下:

    [all]
    node1    ansible_host=172.21.240.65 ip=172.21.240.65
    node2    ansible_host=172.21.240.66 ip=172.21.240.66
    node3    ansible_host=172.21.240.67 ip=172.21.240.67
    node4    ansible_host=172.21.240.68 ip=172.21.240.68
    node5    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
  • 使用ansible playbook部署kubespray

    ~]# ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root cluster.yml
  • 等待大概20分钟左右,Kubernetes即可安装完毕。

验证

验证1:查看Node状态

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

]# kubectl get nodes
NAME    STATUS   ROLES         AGE     VERSION
node1   Ready    master,node   8m41s   v1.12.5
node2   Ready    master,node   7m32s   v1.12.5
node3   Ready    node          6m59s   v1.12.5
node4   Ready    node          6m59s   v1.12.5
node5   Ready    node          6m59s   v1.12.5

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

验证2:部署一个NGINX

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

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

    kind: Service
    apiVersion: v1
    metadata:
    name: nginx-service
    spec:
    selector:
      app: nginx
    type: NodePort
    ports:
      # 协议:
      - protocol: TCP
        # service的端口,随便写
        port: 80
        targetPort: 80
        nodePort: 32000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: nginx-deployment
    # 描述Deployment的标签,让Deployment变得可读
    labels:
      app: nginx
    spec:
    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
  • 在该文件所在目录执行如下命令创建Service以及Deployment

    kubectl create -f nginx.yaml

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

  • 执行如下命令验证:

    # 查看nginx服务详情
    ~]# kubectl get svc nginx-service
    NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    nginx-service   NodePort   10.233.59.132           80:32000/TCP   4m56s
    
    # 访问测试,如果能够正常返回NGINX首页,说明正常
    ~]# curl 172.21.240.66:32000

卸载Kubespray

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

参考文档:

  • Kubespray – 10 Simple Steps for Installing a Production-Ready, Multi-Master HA Kubernetes Cluster:

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

  • 使用Kubespray 部署kubernetes 高可用集群:

  • kubespray(ansible)自动化安装k8s集群: /

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

  • Installing Kubernetes On-premises/Cloud Providers with Kubespray:

Docker与Kubernetes开源书

  • Gitee:
  • GitHub:

本文首发

http://www.itmuch.com/install/kubernetes-deploy-by-kubespray2.8.3/

干货分享

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

相关内容

热门资讯

大学老师坐班,有必要吗? 白天在人事处整理档案、收发通知,晚上回家才能打开电脑备课——这是西南某大专院校青年教师小林的日常。他...
最新引进“挖坑青海麻将是不是有... 网上科普关于“挖坑青海麻将有没有挂”话题很是火热,小编也是针对挖坑青海麻将作*弊开挂的方法以及开挂对...
玩家分享攻略“青鸾拼三张究竟有... 您好:青鸾拼三张这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在这款游...
【第一消息】“情怀莆仙真的有挂... 网上科普关于“情怀莆仙有没有挂”话题很是火热,小编也是针对情怀莆仙作*弊开挂的方法以及开挂对应的知识...
玩家最新攻略“万圣节消除大作战... 家人们!今天小编来为大家解答万圣节消除大作战透视挂怎么安装这个问题咨询软件客服徽9784099的挂在...
今日重大发现“微乐四川麻将开挂... 家人们!今天小编来为大家解答微乐四川麻将透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里...
从夜空画布到物流变革:无人机开... 6500架无人机在阿布扎比夜空中同步升起,组成壮观的倒计时图案,与62分钟的烟花秀交相辉映。这一创纪...
今日重大通报“天天福建十三水有... 网上科普关于“天天福建十三水有没有挂”话题很是火热,小编也是针对天天福建十三水作*弊开挂的方法以及开...
【第一资讯】“钱柜手游怎么开挂... 有 亲,根据资深记者爆料钱柜手游是可以开挂的,确实有挂(咨询软件无需打开...
【第一消息】“功夫熊猫炸/金/... 【第一消息】“功夫熊猫炸/金/花怎么装挂?”(必胜开挂神器)您好,功夫熊猫炸/金/花这个游戏其实有挂...