• 使用Ansible快速构建kubernetes1.10.4HA高可用集群


    本文构建kubernetes1.10.4HA高可用集群使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响

    开源地址: https://github.com/gjmzj/kubeasz

    部署过程如下:

     1、准备设备

      master01主机作为部署节点,master01、master02作为集群中master节点,node01、node02作为集群中node节点,设备全部安装centos7系统

     2、前期准备

      需要安装python、epel源、关闭防火墙、selinux等

     3、准备好部署节点的环境

      在master01上安装git、ansible

    [root@master01 ~]# yum install  -y  git  ansible
    

      配置从master01到master01、master02、node01、node02节点免密码登录

    [root@master01 ~]# ssh-keygen -t rsa -P ''
    [root@master01 ~]# ssh-copy-id -i 172.16.1.151
    [root@master01 ~]# ssh-copy-id -i 172.16.1.152
    [root@master01 ~]# ssh-copy-id -i 172.16.1.153
    [root@master01 ~]# ssh-copy-id -i 172.16.1.154
    

      主备ansible脚本,下载地址:https://pan.baidu.com/s/1-4GwQW0Yy9swCcxv_aanKw

      下载下来后,将解压内容放到 /etc/ansible/

    [root@master01 ansible]# ls
    01.prepare.yml      07.cluster-addon.yml  99.clean.yml  hosts
    02.etcd.yml         11.harbor.yml         ansible.cfg   manifests
    03.docker.yml       20.addnode.yml        bin           pics
    04.kube-master.yml  21.addmaster.yml      docs          README.md
    05.kube-node.yml    22.upgrade.yml        down          roles
    06.network.yml      90.setup.yml          example       tools
    

      按需修改 hosts 文件,分配集群角色。注意 LB 的网卡接口信息需要跟实际机器保持一致

    [root@master01 ansible]# vim  hosts 
    # 部署节点:运行这份 ansible 脚本的节点
    [deploy]
    172.16.1.251
    
    # etcd集群请提供如下NODE_NAME,注意etcd集群必须是1,3,5,7...奇数个节点
    [etcd]
    172.16.1.251 NODE_NAME=etcd1
    172.16.1.252 NODE_NAME=etcd2
    172.16.1.253 NODE_NAME=etcd3
    
    [kube-master]
    172.16.1.251
    172.16.1.252
    
    # 负载均衡至少两个节点,安装 haproxy+keepalived
    # 如果是公有云环境请优先使用云上负载均衡,lb组留空
    [lb]
    172.16.1.251 LB_IF="eth0" LB_ROLE=backup  # 注意根据实际使用网卡设置 LB_IF变量
    172.16.1.252 LB_IF="eth0" LB_ROLE=master
    
    [kube-node]
    172.16.1.253
    172.16.1.254
    
    # 如果启用harbor,请配置后面harbor相关参数
    [harbor]
    #192.168.1.8
    
    # 预留组,后续添加master节点使用
    [new-master]
    #192.168.1.5
    
    # 预留组,后续添加node节点使用
    [new-node]
    #192.168.1.xx
    
    [all:vars]
    # ---------集群主要参数---------------
    #集群部署模式:allinone, single-master, multi-master
    DEPLOY_MODE=multi-master
    
    #集群主版本号,目前支持: v1.8, v1.9, v1.10
    K8S_VER="v1.10"
    
    # 集群 MASTER IP即 LB节点VIP地址,为区别与默认apiserver端口,设置VIP监听的服务端口8443
    # 公有云上请使用云负载均衡内网地址和监听端口
    MASTER_IP="172.16.1.250"
    KUBE_APISERVER="https://{{ MASTER_IP }}:8443"
    
    #TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
    BOOTSTRAP_TOKEN="8c8dfa79792f34d7f62c4df15acdb07a"
    
    # 集群网络插件,目前支持calico, flannel, kube-router
    CLUSTER_NETWORK="calico"
    
    # 默认使用kube-proxy, 可选SERVICE_PROXY="IPVS" (前提是网络选择kube-router)
    SERVICE_PROXY="kube-proxy"
    
    # 服务网段 (Service CIDR),注意不要与内网已有网段冲突
    SERVICE_CIDR="10.68.0.0/16"
    
    # POD 网段 (Cluster CIDR),注意不要与内网已有网段冲突
    CLUSTER_CIDR="172.20.0.0/16"
    
    # 服务端口范围 (NodePort Range)
    NODE_PORT_RANGE="20000-40000"
    
    # kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP)
    CLUSTER_KUBERNETES_SVC_IP="10.68.0.1"
    
    # 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
    CLUSTER_DNS_SVC_IP="10.68.0.2"
    
    # 集群 DNS 域名
    CLUSTER_DNS_DOMAIN="cluster.local."
    
    # etcd 集群间通信的IP和端口, 根据etcd组成员自动生成
    TMP_NODES="{% for h in groups['etcd'] %}{{ hostvars[h]['NODE_NAME'] }}=https://{{ h }}:2380,{% endfor %}"
    ETCD_NODES="{{ TMP_NODES.rstrip(',') }}"
    
    # etcd 集群服务地址列表, 根据etcd组成员自动生成
    TMP_ENDPOINTS="{% for h in groups['etcd'] %}https://{{ h }}:2379,{% endfor %}"
    ETCD_ENDPOINTS="{{ TMP_ENDPOINTS.rstrip(',') }}"
    
    # 集群basic auth 使用的用户名和密码
    BASIC_AUTH_USER="admin"
    BASIC_AUTH_PASS="ctsi1234"
    
    # ---------附加参数--------------------
    #默认二进制文件目录
    bin_dir="/opt/kube/bin"
    
    #证书目录
    ca_dir="/etc/kubernetes/ssl"
    
    #部署目录,即 ansible 工作目录,建议不要修改
    base_dir="/etc/ansible"
    
    #私有仓库 harbor服务器 (域名或者IP)
    #HARBOR_IP="192.168.1.8"
    #HARBOR_DOMAIN="harbor.yourdomain.com"
    

     4、开始部署集群

    [root@master01 ansible]# ansible all -m ping
    [root@master01 ansible]# ansible-playbook 01.prepare.yml 
    [root@master01 ansible]# ansible-playbook 02.etcd.yml
    [root@master01 ansible]# ansible-playbook 03.docker.yml
    [root@master01 ansible]# ansible-playbook 04.kube-master.yml
    [root@master01 ansible]# ansible-playbook 05.kube-node.yml
    [root@master01 ansible]# ansible-playbook 06.network.yml
    [root@master01 ansible]# ansible-playbook 07.cluster-addon.yml  

     5、命令环境配置

      默认ansible 把相关命令文件都放到 /opt/kube/bin 下了,我们可以配置下环境变量,便于直接使用。

    [root@master01 ansible]# vim /etc/profile
    export PATH=.:/opt/kube/bin:$PATH
    [root@master01 ansible]# source /etc/profile
    

     6、部署 dashboard

    [root@master01 ~]# kubectl create -f /etc/ansible/manifests/dashboard/kubernetes-dashboard.yaml
    [root@master01 ~]# kubectl create -f /etc/ansible/manifests/dashboard/ui-admin-rbac.yaml
    [root@master01 ~]# kubectl create -f /etc/ansible/manifests/dashboard/ui-read-rbac.yaml
    #创建访问 token (admin)
    [root@master01 ~]# kubectl create -f /etc/ansible/manifests/dashboard/admin-user-sa-rbac.yaml
    [root@master01 ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    Name:         admin-user-token-5xkxt
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  kubernetes.io/service-account.name=admin-user
                  kubernetes.io/service-account.uid=af3ff909-8f90-11e8-a9a1-000c2958364a
    
    Type:  kubernetes.io/service-account-token
    
    Data
    ====
    ca.crt:     1346 bytes
    namespace:  11 bytes
    token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTV4a3h0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhZjNmZjkwOS04ZjkwLTExZTgtYTlhMS0wMDBjMjk1ODM2NGEiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.UnM6Pxb8JsUxlZCNwAJs9skB-gqK_ACe9xnHqio9zJ6pKl1vKTPNhNDVFonjvCmvtWYced6-yIau2ZqZ64SqlhDPlRAbtioJE45xpf25TCQkj4mcwfQw36avGqx7pyVpotlfctZR2kdALSLIsf0dB25DHvlcrUuQNxuA9LxpgcYIOqIcDZMtNm6FcmNujTjM7iR7jt8Daj7g7sp9kP6MYN4PG-R-fKvkTk6bcG4P6GUJnanetOw2Im_qP8z39A58rrPcMWQulbbMTh3lW4cdad38OIeUjXdfE_N3SSqn2WnM1Zx0HEOuOnT56hsSLWA17_4X1G8peRIaZoNXYZYSJg
    

     7、访问dashboard

      查看dashboard的访问地址:kubectl cluster-info

    [root@master01 ~]# kubectl cluster-info
    Kubernetes master is running at https://172.16.1.250:8443
    CoreDNS is running at https://172.16.1.250:8443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
    kubernetes-dashboard is running at https://172.16.1.250:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy
    

      浏览器访问https://172.16.1.250:8443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

       选择 令牌 登陆,输入上面生成的 token,即可登入系统  

  • 相关阅读:
    二进制中1的个数
    原码、反码、补码,计算机中负数的表示
    win10安装MySQL
    X86、X64、X86_64
    windows搭建深度学习环境
    驱动
    cpu、gpu
    常见的文件系统
    UltralSO制作U盘启动盘
    save、load
  • 原文地址:https://www.cnblogs.com/goser/p/9363021.html
Copyright © 2020-2023  润新知