微信公众号:运维开发故事,作者:刘大仙

RKE简述:

Rancher Kubernetes Engine(RKE)是一款轻量级Kubernetes安装程序,支持在裸机和虚拟化服务器上安装Kubernetes。RKE解决了Kubernetes社区中的一个常见问题,比如:安装复杂性。RKE支持多种平台运行,比如MacOS,linux,windows。

详情见:https://docs.rancher.cn/rke/

Rancher简述:

Rancher 是为使用容器的公司打造的容器管理平台。Rancher 简化了使用 Kubernetes 的流程,开发者可以随处运行 Kubernetes(Run Kubernetes Everywhere),满足 IT 需求规范,赋能 DevOps 团队。

详情见:https://rancher2.docs.rancher.cn/docs/overview/_index

使用环境:

操作系统 主机名 IP地址 节点 作用
CentOS 7 1810 nginx-master 192.168.111.21 Nginx主服务器 负载均衡
CentOS 7 1810 nginx-backup 192.168.111.22 Nginx备服务器 负载均衡
ubuntu-18.04.3-live-server rke-node1 192.168.111.50 rke节点1 RKE集群
ubuntu-18.04.3-live-server rke-node2 192.168.111.51 rke节点2 RKE集群
ubuntu-18.04.3-live-server rke-node3 192.168.111.52 rke节点3 RKE集群

部署前系统环境准备:

关闭防火墙和SeLinux

为防止因端口问题造成集群组建失败,我们在这里提前关闭防火墙以及selinux

  • centos :

    systemctl stop firewalld
    systemctl disable firewalld
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
  • Ubuntu:

    sudo ufw stop
    

配置host文件:

192.168.111.21 nginx-master
192.168.111.22 nginx-backup
192.168.111.50 rke-node1
192.168.111.51 rke-node2
192.168.111.52 rke-node3
  • 配置host文件,并确保每台机器上都可以通过主机名互通

需要用到的工具:

此安装需要以下 CLI 工具。请确保这些工具已经安装并在$PATH中可用

CLI工具的安装在RKE节点上进行,确保3台节点都已经安装正确

  • kubectl - Kubernetes 命令行工具.

  • rke - Rancher Kubernetes Engine,用于构建 Kubernetes 集群的 cli。

  • helm - Kubernetes 的软件包管理工具。

    请参阅Helm 版本要求选择 Helm 的版本来安装 Rancher。

安装 Kubectl:

  • 安装参考K8S官网,由于某些特殊原因,此处我们使用snap

    sudo apt-get install snapd
    sudo snap install kubectl --classic # 此处安装较慢,请耐心等待
    # 验证安装
    kubectl help
    

安装 RKE:

  • 安装参考Rancher官网,由于是从GitHub上下载,文件较大,网络原因请自行解决

    wget https://github.com/rancher/rke/releases/download/v1.0.8/rke_linux-amd64
    # 将二进制文件移动至/usr/local/bin/下并改名成rke,并赋予可执行权限
    sudo mv rke_linux-amd64 /usr/local/bin/rke
    sudo chmod +x /usr/local/bin/rke
    # 验证安装
    rke --version
    

安装 Helm:

  • 安装参考Helm官网,Helm是Kubernetes的包管理器,Helm的版本需要高于v3

    # 下载安装包
    wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
    # 解压
    tar zxvf helm-v3.2.1-linux-amd64.tar.gz
    # 将二进制文件移动至/usr/local/bin/
    sudo mv linux-amd64/helm /usr/local/bin/helm
    # 验证安装
    helm help
    

创建 Nginx+Keepalived 集群:

此处在CentOS节点上进行

  • 安装 Nginx

    # 下载Nginx安装包
    wget http://nginx.org/download/nginx-1.17.10.tar.gz
    # 解压安装包
    tar zxvf nginx-1.17.10.tar.gz
    # 安装编译时必备的软件包
    yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel libnl3-devel
    # 进入nginx目录,此处我们需要使用https,所有在编译时选择 --with-http_ssl_module 模块
    cd nginx-1.17.10
    mkdir -p /usr/local/nginx
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream
    # 安装nginx
    make && make install
    # 创建nginx命令软连接
    ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
    # 验证安装
    nginx -V
    # 启动nginx
    nginx
    
  • 安装 Keepalived

    # 下载安装包
    wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
    # 解压安装包
    tar zxvf keepalived-2.0.20.tar.gz
    # 编译安装keepalived
    cd keepalived-2.0.20
    mkdir /usr/local/keepalived
    ./configure --prefix=/usr/local/keepalived/
    make && make install
    # 配置 keepalived 为系统服务
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
    touch /etc/init.d/keepalived
    chmod +x /etc/init.d/keepalived # keepalived 中的内容见下文
    vim /etc/init.d/keepalived
    # 配置 keepalived
    mkdir /etc/keepalived/
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    vim /etc/keepalived/keepalived.conf #keepalived.conf 中的内容见下文
    # 启动keepalived
    systemctl start keepalived
    systemctl enable keepalived
    # 验证
    systemctl status keepalived
    # 此时keepalived应该是运行,一个为master,一个为backup, master上执行 ip addr 命令时,应该存在一个虚拟ip地址,backup上不应该有
    # 访问 https://192.168.111.20 验证配置
    

    /etc/init.d/keepalived文件内容

    #!/bin/sh

    Startup script for the Keepalived daemon

    processname: keepalived

    pidfile: /var/run/keepalived.pid

    config: /etc/keepalived/keepalived.conf

    chkconfig: - 21 79

    description: Start and stop Keepalived

    Source function library

    . /etc/rc.d/init.d/functions

    Source configuration file (we set KEEPALIVED_OPTIONS there)

    . /etc/sysconfig/keepalived

    RETVAL=0

    prog=“keepalived”

    start() {
    echo -n $"Starting $prog: "
    daemon keepalived KEEPALIVEDOPTIONSRETVAL={KEEPALIVED_OPTIONS} RETVAL=KEEPALIVEDO​PTIONSRETVAL=?
    echo
    [ KaTeX parse error: Expected 'EOF', got '&' at position 16: RETVAL -eq 0 ] &̲& touch /var/lo…prog
    }

    stop() {
    echo -n $"Stopping prog:"killprockeepalivedRETVAL=prog: " killproc keepalived RETVAL=prog:"killprockeepalivedRETVAL=?
    echo
    [ KaTeX parse error: Expected 'EOF', got '&' at position 16: RETVAL -eq 0 ] &̲& rm -f /var/lo…prog
    }

    reload() {
    echo -n $"Reloading prog:"killprockeepalived−1RETVAL=prog: " killproc keepalived -1 RETVAL=prog:"killprockeepalived−1RETVAL=?
    echo
    }

    See how we were called.

    case "1"instart)start;;stop)stop;;reload)reload;;restart)stopstart;;condrestart)if[−f/var/lock/subsys/1" in start) start ;; stop) stop ;; reload) reload ;; restart) stop start ;; condrestart) if [ -f /var/lock/subsys/1"instart)start;;stop)stop;;reload)reload;;restart)stopstart;;condrestart)if[−f/var/lock/subsys/prog ]; then
    stop
    start
    fi
    ;;
    status)
    status keepalived
    RETVAL=$?
    ;;
    *)
    echo “Usage: $0 {start|stop|reload|restart|condrestart|status}”
    RETVAL=1
    esac

    exit $RETVAL

    # /etc/keepalived/keepalived.conf 中的内容
    ! Configuration File for keepalivedglobal_defs {router_id 192.168.111.21 # 此id在网络中有且只有一个,不应有重复的id
    }vrrp_script chk_nginx {     #因为要检测nginx服务状态,所以创建一个检查脚本script "/usr/local/keepalived/check_ng.sh"interval 3
    }vrrp_instance VI_1 {state MASTER    # 配置此节点为master,备机上设置为BACKUPinterface ens33    # 设置绑定的网卡virtual_router_id 51    # vrrp 组, 主备的vrrp组应该一样priority 120    # 优先级,优先级大的为主advert_int 1    # 检查间隔authentication { # 认证auth_type PASSauth_pass 1111}virtual_ipaddress { # 虚拟IP192.168.111.20}track_script {    # 执行脚本chk_nginx}
    }
    

    /usr/local/keepalived/check_ng.sh 中的内容

    #!/bin/bash
    d=date --date today +%Y%m%d_%H:%M:%S
    n=ps -C nginx --no-heading|wc -l
    if [ $n -eq “0” ]; then
    systemctl start nginx
    n2=ps -C nginx --no-heading|wc -l
    if [ n2−eq"0"];thenecho"n2 -eq "0" ]; then echo "n2−eq"0"];thenecho"d nginx down,keepalived will stop" >> /var/log/check_ng.log
    systemctl stop keepalived
    fi
    fi

    
    

安装 docker-ce :

此处在RKE节点上进行

# 移除旧版本Docker
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装工具包
sudo apt-get install -y \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
# 添加 Docker官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加 stable apt 源
sudo add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) \stable"
# 安装 Docker-ce
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 验证安装
docker info
# 将当前用户加入"docker"用户组,加入到该用户组的账号在随后安装过程会用到。用于节点访问的SSH用户必须是节点上docker组的成员
sudo usermod -aG docker $USER

配置四层负载均衡

此处在Nginx集群操作

# 更新nginx配置文件
# vim /usr/local/nginx/conf/nginx.conf#user  nobody;
worker_processes  4;
worker_rlimit_nofile 40000;events {worker_connections  8192;
}stream {upstream rancher_servers_http {least_conn;server 192.168.111.50:80 max_fails=3 fail_timeout=5s;server 192.168.111.51:80 max_fails=3 fail_timeout=5s;server 192.168.111.52:80 max_fails=3 fail_timeout=5s;}server {listen     80;proxy_pass rancher_servers_http;}upstream rancher_servers_https {least_conn;server 192.168.111.50:443 max_fails=3 fail_timeout=5s;server 192.168.111.51:443 max_fails=3 fail_timeout=5s;server 192.168.111.52:443 max_fails=3 fail_timeout=5s;}server {listen     443;proxy_pass rancher_servers_https;}
}

开始部署:

使用 RKE 安装 Kubernetes

  • RKE-Node 之间建立 ssh 免密登陆

    # 生成 rsa 公钥秘钥
    ssh-keygen
    # 复制当前主机上的公钥到另外两台上面,实现免密码登录
    ssh-copy-id -i ~/.ssh/id_rsa.pub docker@192.168.111.50
    ssh-copy-id -i ~/.ssh/id_rsa.pub docker@192.168.111.51
    ssh-copy-id -i ~/.ssh/id_rsa.pub docker@192.168.111.52
    # 注意,自已也要跟自己注册一下,三个节点都要执行
    # 验证
    docker@rke-node3:~$ ssh docker@192.168.111.50    # 在node3上远程node1 此时ssh应该不需要密码
    
  • 编写 rancher-cluster.yml 文件

    # vim rancher-cluster.yml
    nodes:- address: 192.168.111.50    # 主机IPuser: docker    # 可以执行docker命令的用户role: [controlplane,worker,etcd]    # 节点角色- address: 192.168.111.51user: dockerrole: [controlplane,worker,etcd]- address: 192.168.111.52user: dockerrole: [controlplane,worker,etcd]services:etcd:snapshot: truecreation: 6hretention: 24
    
  • 运行 RKE 构建 Kubernetes 集群

    rke up --config ./rancher-cluster.yml
    # 验证:返回下面的消息则说明执行成功。
    # Finished building Kubernetes cluster successfully.
    
  • Pod 是RunningCompleted状态。

  • STATUSRunning 的 Pod,READY 应该显示所有容器正在运行 (例如,3/3)。

  • STATUSCompleted的 Pod 是一次运行的作业。对于这些 Pod,READY应为0/1

    kubectl get pods --all-namespacesNAMESPACE       NAME                                      READY     STATUS      RESTARTS   AGE
    ingress-nginx   nginx-ingress-controller-tnsn4            1/1       Running     0          30s
    ingress-nginx   nginx-ingress-controller-tw2ht            1/1       Running     0          30s
    ingress-nginx   nginx-ingress-controller-v874b            1/1       Running     0          30s
    kube-system     canal-jp4hz                               3/3       Running     0          30s
    kube-system     canal-z2hg8                               3/3       Running     0          30s
    kube-system     canal-z6kpw                               3/3       Running     0          30s
    kube-system     kube-dns-7588d5b5f5-sf4vh                 3/3       Running     0          30s
    kube-system     kube-dns-autoscaler-5db9bbb766-jz2k6      1/1       Running     0          30s
    kube-system     metrics-server-97bc649d5-4rl2q            1/1       Running     0          30s
    kube-system     rke-ingress-controller-deploy-job-bhzgm   0/1       Completed   0          30s
    kube-system     rke-kubedns-addon-deploy-job-gl7t4        0/1       Completed   0          30s
    kube-system     rke-metrics-addon-deploy-job-7ljkc        0/1       Completed   0          30s
    kube-system     rke-network-plugin-deploy-job-6pbgj       0/1       Completed   0          30s
    
  • 保存好配置文件

    rancher-cluster.yml:RKE集群配置文件。
    kube_config_rancher-cluster.yml:群集的Kubeconfig文件,此文件包含完全访问群集的凭据。
    rancher-cluster.rkestate:Kubernetes群集状态文件,此文件包含完全访问群集的凭据。
    
  • 执行成功后会在当前目录下生成一个 kube_config_rancher-cluster.yml 的文件, 把这个文件复制到 .kube/kube_config_rancher-cluster.yml

    # 在用户家目录下进行
    mkdir .kube
    cp kube_config_rancher-cluster.yml .kube/
    export KUBECONFIG=$(pwd)/kube_config_rancher-cluster.yml
    # 验证
    kubectl get nodes
    NAME             STATUS   ROLES                      AGE     VERSION
    192.168.111.50   Ready    controlplane,etcd,worker   5m47s   v1.17.5
    192.168.111.51   Ready    controlplane,etcd,worker   5m46s   v1.17.5
    192.168.111.52   Ready    controlplane,etcd,worker   5m47s   v1.17.5
    
  • 检查集群 Pod 的运行情况

    检查所有必需的 Pod 和容器是否状况良好,然后可以继续进行。

安装 Rancher

  • 添加 Helm Chart 仓库

    helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
    
  • 为 Rancher 创建 Namespace

    kubectl create namespace cattle-system
    
  • 使用 Rancher 生成的自签名证书

    # 安装 CustomResourceDefinition 资源kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.12/deploy/manifests/00-crds.yaml# **重要:**
    # 如果您正在运行 Kubernetes v1.15 或更低版本,
    # 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
    # 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
    # x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
    # 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。# 为 cert-manager 创建命名空间
    kubectl create namespace cert-manager# 添加 Jetstack Helm 仓库
    helm repo add jetstack https://charts.jetstack.io# 更新本地 Helm chart 仓库缓存
    helm repo update# 安装 cert-manager Helm chart
    helm install \cert-manager jetstack/cert-manager \--namespace cert-manager \--version v0.12.0# 验证
    kubectl get pods --namespace cert-managerNAME                                      READY   STATUS    RESTARTS   AGE
    cert-manager-754d9b75d9-6xbk4             1/1     Running   0          94s
    cert-manager-cainjector-85fbdf788-hthfn   1/1     Running   0          94s
    cert-manager-webhook-76f9b64b45-bmt5z     1/1     Running   0          94s
    
  • 部署 Rancher 集群

    helm install rancher rancher-stable/rancher \--namespace cattle-system \--set hostname=rancher.hzqx.com
    
  • 等待 Rancher 集群运行

    kubectl -n cattle-system rollout status deploy/rancher
    Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
    deployment "rancher" successfully rolled out
    
  • 搭建完成, 访问 https://rancher.hzqx.com, 默认用户名密码均为 admin

使用RKE部署高可用Rancher相关推荐

  1. RKE安装k8s及部署高可用rancher

    此博客,是根据 Rancher 官网文档,使用 RKE 测试部署最新发布版 Rancher v2.5.9 高可用集群的总结文档. 一 了解 Rancher Rancher 是为使用容器的公司打造的容器 ...

  2. RKE部署高可用Kubernetes集群

    RKE简介 RKE全称Rancher Kubernetes Engine,是一个快速的,多功能的 Kubernetes 安装工具.通过RKE,我们可以快速的安装一个高可用K8S集群.RKE 支持多种操 ...

  3. RKE2部署高可用Rancher v2.7.1

    先决条件 注意修改主机名,不要有冲突 第一个server节点安装 官方文档的描述感觉对于新手来说太不友好了,建议以下链接都看一下.Rancher新老文档都建议看一下,不然刚刚入门很蒙. RKE2快速开 ...

  4. 使用rke安装高可用k8s集群

    文章目录 使用rke安装高可用k8s集群 rke 增加和移除节点 彻底清理rke节点 使用rke安装高可用k8s集群 服务器rke集群节点角色规划 用户 主机名 内网IP SSH端口 系统 rke 角 ...

  5. 《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案四)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  6. 《Kubernetes部署篇:基于docker使用kubespray工具离线部署高可用K8S集群(国内专网方案)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  7. 《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案三)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  8. 在Kubernetes集群上部署高可用Harbor镜像仓库

    这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中. 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/181969 ...

  9. 06-4.部署高可用 kube-scheduler 集群

    06-4.部署高可用 kube-scheduler 集群 本文档介绍部署高可用 kube-scheduler 集群的步骤. 该集群包含 3 个节点,启动后将通过竞争选举机制产生一个 leader 节点 ...

最新文章

  1. 聊聊《柒个我》这部剧
  2. 为什么程序员加班有罪?
  3. Javascript是否通过引用传递?
  4. 检查列表中是否存在值的最快方法
  5. sql语句查询商品的一二三级分类都是一个字段怎么办_畅购商城(三):商品管理...
  6. python中字典的键必须是可以哈希的对象
  7. Apache Kafka(二)- Kakfa 安装与启动
  8. Android的十六进制颜色值
  9. 映客都是互刷礼物吗_仿映客刷礼物效果 代码优化
  10. 安装配置文件共享协议(SAMBA)
  11. 微信联系人一键导出的方法在这里
  12. 企业部署WAPI无线网络的技术详析
  13. 西威变频器 服务器显示,西威变频器故障查询及操作方法;
  14. 串口调试助手和网络调试助手
  15. html 中 div 盒子上下垂直居中显示
  16. Android Studio中ListView通过自定义Adapter显示数据3-1
  17. python3换行符_python的换行符
  18. linux系统 中文定制版,我们的Ubuntu 中文定制版呢?
  19. shiro介绍(一)
  20. myeclipse修改jsp页面无反应

热门文章

  1. 电脑桌面上的文件不见了怎么恢复
  2. 各厂商网络设备取消分屏显示
  3. 深度学习玩LOL-游戏助手-概述
  4. 记事本 App 之我见
  5. 离谱的任务,离谱的村长
  6. FMC子卡设计原理图:141-四路 250Msps 16bits AD FMC子卡 模拟信号、无线电、光电的采集场景
  7. 管理上的心得分享(二)
  8. 学习华为特殊端口模式Hybrid(带配置命令)
  9. 7-41 最佳情侣身高差
  10. 云筑网认证_云筑网供应商常见问题