• Kubernetes(31):kubeasz安装三主两从高可用集群


    前言

    使用kubeadm或者二进制直接搭建k8s集群非常麻烦,如何简答而快速的搭建k8s高可用集群?

    kubeasz 官方地址: https://github.com/easzlab/kubeasz

    高可用集群架构

    如果k8s集群中,属于一主多从,那么当master节点宕机后,服务将不可用。
    在这里插入图片描述

    上面的高可用集群有两个worker node,三个master node,两个负载均衡服务器,三个etcd数据库。

    主机规划

    类型IP系统信息配置
    master01192.168.88.23Centos 7.9.20092核1G 50G磁盘
    master02192.168.88.24Centos 7.9.20092核1G 50G磁盘
    master03192.168.88.25Centos 7.9.20092核1G 50G磁盘
    node1192.168.88.26Centos 7.9.20092核1G 50G磁盘
    node2192.168.88.27Centos 7.9.20092核1G 50G磁盘
    lb01192.168.88.21Centos 7.9.20092核1G 50G磁盘
    lb02192.168.88.22Centos 7.9.20092核1G 50G磁盘
    etcd1192.168.88.23Centos 7.9.20092核1G 50G磁盘
    etcd2192.168.88.24Centos 7.9.20092核1G 50G磁盘
    etcd3192.168.88.25Centos 7.9.20092核1G 50G磁盘

    注意: etcd数据库需要是奇数个,1,3,5,…,如果是生成环境建议不少不低于3个。这里etcd复用了master机器。

    服务器的安装过程: 请见vmware安装centos7并制作多副本

    ansible部署k8s集群

    可以在master或者集群外的一台机器上操作,需要该主机到所有其它主机的免密登录,

    1. 配置ssh免密码登录,需要从操作机到集群其它机器的免密登录
      请见:如何配置ssh免密登录

    2. 安装ansible

    yum install epel-release -y
    yum install ansible -y
    
    • 1
    • 2
    1. 下载ezdown
    export release=3.1.0
    
    # 国外地址(由于网络原因,可能需要多次尝试才能下载成功)
    curl -C- -fLO --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
    
    # 国内地址 (国内下载地址,不会失败)
    curl -C- -fLO --retry 3  https://github.91chi.fun//https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
    
    # 修改文件的执行权限
    chmod +x ezdown
    
    # ezdown执行下载文件(根据网络情况,下载可能需要几分钟)
    ./ezdown -D
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    1. 创建k8s集群,并修改配置文件
    # 切换目录
    cd /etc/kubeasz/
    
    # 创建一个集群,名称为k8s
    ./ezctl new k8s
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    1. 修改/etc/kubeasz/clusters/k8s/hosts文件
    vim /etc/kubeasz/clusters/k8s/hosts
    
    • 1

    在这里插入图片描述
    6. 执行集群安装,安装完成后如下。

    # 执行安装,这个过程根据网络和服务器的速度而定,可能需要30分钟左右
    ./ezctl setup k8s-01 all
    
    • 1
    • 2

    在这里插入图片描述
    7. 查看节点信息

    kubectl get node
    
    • 1

    在这里插入图片描述

    服务部署测试

    1. 创建deployment.yaml,内容如下
    apiVersion: apps/v1   #版本号
    kind: Deployment    #类型
    metadata:   #元数据
      name: pc-deployment    #rs名称
      namespace: dev   #所属命名空间
    spec:  #详情
      replicas: 3 #副本数量3
      selector: #选择器,通过它指定该控制器管理哪些pod
        matchLabels: #labels匹配规则,用于匹配template
          app: nginx-pod
      template:  #模板,当副本数量不足时,会根据模板创建pod副本
        metadata:
          labels:
            app: nginx-pod
        spec:
          containers:
            - name: nginx
              image: nginx:1.17.1
              ports:
                - containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    创建deployment

    [root@centos7 home]# vim deployment.yaml
    [root@centos7 home]# kubectl create -f deployment.yaml 
    deployment.apps/pc-deployment created
    [root@centos7 home]# kubectl get pods -n dev -o wide
    NAME                             READY   STATUS              RESTARTS   AGE   IP           NODE            NOMINATED NODE   READINESS GATES
    nginx                            1/1     Running             0          63m   172.20.2.5   192.168.88.27   <none>           <none>
    pc-deployment-5ffc5bf56c-5t4d6   1/1     Running             0          13s   172.20.2.6   192.168.88.27   <none>           <none>
    pc-deployment-5ffc5bf56c-dc9z4   0/1     ContainerCreating   0          13s   <none>       192.168.88.26   <none>           <none>
    pc-deployment-5ffc5bf56c-h768h   0/1     ContainerCreating   0          13s   <none>       192.168.88.26   <none>           <none>
    [root@centos7 home]# kubectl get pods -n dev -o wide
    NAME                             READY   STATUS    RESTARTS   AGE   IP           NODE            NOMINATED NODE   READINESS GATES
    nginx                            1/1     Running   0          63m   172.20.2.5   192.168.88.27   <none>           <none>
    pc-deployment-5ffc5bf56c-5t4d6   1/1     Running   0          31s   172.20.2.6   192.168.88.27   <none>           <none>
    pc-deployment-5ffc5bf56c-dc9z4   1/1     Running   0          31s   172.20.3.5   192.168.88.26   <none>           <none>
    pc-deployment-5ffc5bf56c-h768h   1/1     Running   0          31s   172.20.3.4   192.168.88.26   <none>           <none>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. 创建service-nodeport.yaml,内容如下
    apiVersion: v1   #版本号
    kind: Service    #类型
    metadata:   #元数据
      name: service-nodeport    #svc名称
      namespace: dev   #所属命名空间
    spec:  #详情
      selector: #选择器,通过它指定该控制器管理哪些pod
        app: nginx-pod
      type: NodePort
      ports:
        - port: 80    #Service端口
          nodePort: 30002 #指定绑定的node的端口(默认的取值范围是30000~32767),如果不指定,会默认分配
          targetPort: 80 #pod端口
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    创建service

    [root@centos7 home]# kubectl create -f service-nodeport.yaml 
    service/service-nodeport created
    [root@centos7 home]# kubectl get svc -n dev -o wide
    NAME               TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
    service-nodeport   NodePort   10.68.244.39   <none>        80:30002/TCP   12s   app=nginx-pod
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1. 打开浏览器访问,可以看到部署的nginx可以被访问到。
      在这里插入图片描述

    2. 宕机测试,直接关闭一台master节点,一台etcd(etcd复用了master机器),一台worker节点,此时集群为一主一从。再次访问服务,可以发现服务依然可用。
      在这里插入图片描述
      在这里插入图片描述

    添加一个master

    # 向集群名为k8s的集群中添加一台master
    ezctl add-master k8s 192.168.88.25
    
    • 1
    • 2

    在这里插入图片描述

    其它ezctl指令

    # 帮助
    [root@centos7 kubeasz]# ezctl help
    Usage: ezctl COMMAND [args]
    -------------------------------------------------------------------------------------
    Cluster setups:
        list		             to list all of the managed clusters
        # 显示集群
        checkout    <cluster>            to switch default kubeconfig of the cluster
        # 切换集群
        new         <cluster>            to start a new k8s deploy with name 'cluster'
        # 创建新集群
        setup       <cluster>  <step>    to setup a cluster, also supporting a step-by-step way
        # 执行集群的操作
        start       <cluster>            to start all of the k8s services stopped by 'ezctl stop'
        # 启动该所有被停止的k8s 服务
        stop        <cluster>            to stop all of the k8s services temporarily
        # 停止所有的k8s服务
        upgrade     <cluster>            to upgrade the k8s cluster
        # 升级
        destroy     <cluster>            to destroy the k8s cluster
        # 销毁
        backup      <cluster>            to backup the cluster state (etcd snapshot)
        # 备份etcd
        restore     <cluster>            to restore the cluster state from backups
        # 回复etcd
        start-aio		             to quickly setup an all-in-one cluster with 'default' settings
        # 使用默认设置all-in-one部署集群
    
    Cluster ops:
        add-etcd    <cluster>  <ip>      to add a etcd-node to the etcd cluster
        # 添加etcd数据库
        add-master  <cluster>  <ip>      to add a master node to the k8s cluster
        # 添加master
        add-node    <cluster>  <ip>      to add a work node to the k8s cluster
        # 添加worker node
        del-etcd    <cluster>  <ip>      to delete a etcd-node from the etcd cluster
        # 删除etcd
        del-master  <cluster>  <ip>      to delete a master node from the k8s cluster
        # 删除master
        del-node    <cluster>  <ip>      to delete a work node from the k8s cluster
        # 删除worker node
    
    Extra operation:
        kcfg-adm    <cluster>  <args>    to manage client kubeconfig of the k8s cluster
        # 管理k8s集群的配置
    
    Use "ezctl help " for more information about a given command.
    [root@centos7 kubeasz]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
  • 相关阅读:
    电网数字孪生解决方案助力智慧电网体系建设
    有偿找proteus51单片机仿真代做
    招商证券携手联想Filez谱写云中办公新篇章
    通过yarn提交作业到spark,运行一段时间后报错。
    基于HTML仿华为手机网站电商项目的设计与实现
    【算法训练营】 井字棋
    【网页设计】基于HTML在线图书商城购物项目设计与实现
    1、Mybatis搭建流程
    【UiBot干货】UiBot屏幕锁屏常见的7个问题
    前端面试宝典React篇12 React 的渲染异常会造成什么后果?
  • 原文地址:https://blog.csdn.net/u011628753/article/details/127622737