What’s Rancher?

Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。

Rancher给Kubernetes功能增强

Rancher包括完整的Kubernetes发行版,并在工作负载管理、集群操作和企业支持等关键领域增加加强。

在任何基础架构上安装和管理Kubernetes集群
  • Rancher可以在任何基础架构(包括裸机服务器,VMware或任何IaaS云)上自动部署和升级Kubernetes。并自动部署和配置Kubernetes组件,如ETCD,并监视集群健康状况
托管GKE、AKS和EKS集群
  • Rancher与亚马逊Web Services,谷歌云平台和微软Azure合作,使提供托管Kubernetes服务变得简单。管理员可以在这些集群上集中配置策略。对于用户来说,每个Kubernetes集群都是相同的,并且可以管理所有RANCHER集成的工作负载。
统一安全策略管理
  • Rancher允许管理员集中定义Kubernetes访问控制、网络、Pod安全策略,并将它们应用于任意集群。通过集中的策略管理,组织可以控制操作的合规性,并控制某些团队对Kubernetes的使用开销。
使用ActiveDirectory、LDAP和SAML集成进行身份验证
  • Rancher与AD、LDAP或其他基于SAML的身份验证服务集成,以对单个用户或用户组进行集中访问控制。管理员可以通过将Kubernetes集群或项目或命名空间的管理直接委派给单个用户或组。
监控、备份、容量管理、告警
  • Rancher对所有Kubernetes集群进行健康检查,并显示Kubernetes集群主机、Pod、应用程序的每个的资源消耗统计数据。Rancher Advanced Monitoring是为多租户集群构建,它使应用所有者能够深入了解他们拥有的资源使用情况。
  • Rancher为Kubernetes系统组件(如etcd、DNS等)发送集群级警报,并允许用户配置资源警报,如CPU、内存和磁盘消耗。
  • Rancher Cluster BDR获取ETCD平面的计划快照和临时快照,并将它们写到本地存储或与s3兼容的对象存储中。
工作负载管理的完整UI
  • Rancher包含一个直观的UI,使用户可以轻松地在Kubernetes上部署服务,并可以查看集群上运行的所有服务。
  • 用户直接从UI获得常用配置选项,用于定义调度规则,运行状况检查,ingress策略,密文,存储和其他关键配置选择。
跨多个命名空间的用户项目
  • Rancher项目可以很容易地将同一集群中的多个Kubernetes命名空间分配给用户或团队。然后,用户可以快速定义跨多个命名空间的访问控制策略,密文和其他配置。
公共和私有应用商店
  • Rancher包括跨Kubernetes集群工作的全局和私有应用商店,并支持Helm和Docker Compose模板。团队可以使用应用商店模板一键部署,定义配置选项并通知用户可用的升级。
集成Prometheus监控与报警
  • Rancher自动部署和配置Prometheus,以监控Kubernetes集群的运行状况以及工作负载运行状况。用户可以根据各种触发条件配置告警,例如Pod警告,节点容量或etcd健康状况。触发器可以通过电子邮件,Slack,Pagerduty或webhook进行告警。
Integrated CI/CD Pipelines
  • Rancher包含集成的CI/CD,使得使用Kubernetes的团队可以很容易地将开发、测试和发布管理流程快速集成.
  • 用户可以轻松地将Rancher对接任意的Git存储库,Rancher将自动在Kubernetes上运行构建、测试和部署应用。
完全开源
  • Rancher包含一个直观的用户界面,用户可以轻松地在Kubernetes上部署服务,并可以查看集群上运行的所有应用。用户直接从界面中看到常用配置选项,比如定义调度规则,健康检查,负载均衡配置,密文,存储和其他关键配置
没有供应商锁定
  • Rancher项目可以很容易地将同一集群中的多个Kubernetes命名空间分配给用户或团队。然后,用户可以快速定义跨多个命名空间的访问控制策略,密文和其他配置。

开始HA安装

一、创建四层负载均衡

  • 1.1、架构说明

架构说明

  • 2、配置负载均衡器(Nginx)

    • 2.1、创建Nginx配置

      • 复制下面的代码到文本编辑器,保存为nginx.conf。

      • [root@nginx ~]# vim /etc/nginx.conf 
        
      • 在nginx.conf配置中, 替换172.16.218.146、172.16.218.147、172.16.218.148 为您主机真实的IP地址。

      • 保存 nginx.conf ,并复制nginx.conf到负载均衡器节点的/etc/nginx/nginx.conf路径下。

        worker_processes 4;
        worker_rlimit_nofile 40000;
        
        events {
            worker_connections 8192;
        }
        
        stream {
            upstream rancher_servers_http {
                least_conn;
                server 172.16.218.146:80 max_fails=3 fail_timeout=5s;
                server 172.16.218.147:80 max_fails=3 fail_timeout=5s;
                server 172.16.218.148:80 max_fails=3 fail_timeout=5s;
            }
            server {
                listen     80;
                proxy_pass rancher_servers_http;
            }
        
            upstream rancher_servers_https {
                least_conn;
                server 172.16.218.146:443 max_fails=3 fail_timeout=5s;
                server 172.16.218.147:443 max_fails=3 fail_timeout=5s;
                server 172.16.218.148:443 max_fails=3 fail_timeout=5s;
            }
            server {
                listen     443;
                proxy_pass rancher_servers_https;
            }
        }
        
    • 2.2、安装nginx(单独建个节点以容器方式运行nginx服务,用于做负载均衡)

      docker run -d --restart=unless-stopped \
        -p 80:80 -p 443:443 \
        -v /etc/nginx.conf:/etc/nginx/nginx.conf \
        nginx:1.14
      

二、工具安装

  • 安装kubectl

    这是一个 kubernetes 命令行工具,安装参考 K8S 官网

    这里要注意的是,官网的安装过程是到谷歌云平台下载,这里我门修改下载链接为 RANCHER 提供的镜像地址。

     # 下载目前最新版
     wget https://www.cnrancher.com/download/kubernetes/linux-amd64-v1.14.1-kubectl
     # 设置执行权限
     chmod +x ./linux-amd64-v1.14.1-kubectl 
     # 将其移动到 /usr/locak/bin/kubectl 
     sudo mv ./linux-amd64-v1.14.1-kubectl /usr/local/bin/kubectl
     ```
    
    
  • 安装 RKE

    RKE 全称 Rancher Kubernetes Engine,是一个用于构建 kubernets 集群的命令行工具。网络原因,我们切换到 Rancher 提供的镜像地址下载安装

    # 下载目前最新版
    wget https://www.cnrancher.com/download/rke/v0.1.18-rke_linux-amd64
    # 设置执行权限
    chmod +x v0.1.18-rke_linux-amd64
    # 将其移动到 /usr/locak/bin/kubectl 
    sudo cp v0.1.18-rke_linux-amd64 /usr/local/bin/rke
    # 验证安装
    rke --version # rke version v0.1.18
    
  • 安装 helm

    helm 是Kubernetes的包管理器。Helm版本需高于 v2.12.1

    # 网络原因,切换到 Rancher 提供的镜像连接
    wget https://www.cnrancher.com/download/helm/helm-v2.14.3-linux-amd64.tar.gz
    # 解压
    tar -zxvf helm-v2.14.3-linux-amd64.tgz
    # 移动到 /usr/local/bin/helm
    mv linux-amd64/helm /usr/local/bin/helm
    

三、RKE安装K8s

准备工作

  • 各节点之间建立ssh信任
    NODEIP备注
    k8s-master172.16.218.146Mster节点
    k8s-node1172.16.218.147Node1节点
    K8s-node2172.16.218.148Node2节点
    nginx172.16.218.149Node1节点
  • 分别在三个节点上创建用户并修改密码,以及将用户加入到docker用户组
    [root@k8s-node1 ~]# useradd rancher
    [root@k8s-node1 ~]# passwd rancher
    [root@k8s-node1 ~]# groupadd docker
    [root@k8s-node1 ~]# usermod -aG docker rancher
    [root@k8s-node1 ~]# cat /etc/group |grep docker
    docker:x:981:rancher
    
    [root@k8s-node2 ~]# useradd rancher
    [root@k8s-node2 ~]# passwd rancher
    [root@k8s-node2 ~]# groupadd docker
    [root@k8s-node2 ~]# usermod -aG docker rancher
    [root@k8s-node2 ~]# cat /etc/group |grep docker
    docker:x:981:rancher
    
    [root@k8s-master ~]# useradd rancher
    [root@k8s-master ~]# passwd rancher
    [root@k8s-master ~]# groupadd docker
    [root@k8s-master ~]# usermod -aG docker rancher
    [root@k8s-master ~]# cat /etc/group |grep docker
    docker:x:981:rancher
    
  • 建立单向免密登录(即通道)
    #Master节点,输入ssh-keygen,三次回车,生成ssh公钥和私钥文件
    [root@k8s-master ~]# ssh-keygen
    
  • 公钥分发到节点机器上
    [root@k8s-master ~]# ssh-copy-id rancher@172.16.218.146
    [root@k8s-master ~]# ssh-copy-id rancher@172.16.218.147
    [root@k8s-master ~]# ssh-copy-id rancher@172.16.218.148
    
  • 验证三个节点是否可登录
    [root@k8s-master ~]# ssh rancher@172.16.218.147
    Last login: Wed Jul 24 17:28:03 2019 from k8s-node2
    [rancher@k8s-node1 ~]$ 
    
    [root@k8s-master ~]# ssh rancher@172.16.218.148
    Last login: Wed Jul 24 17:29:22 2019 from k8s-node2
    [rancher@k8s-node2 ~]$ 
    
    [root@k8s-master ~]# ssh rancher@172.16.218.146
    Last login: Wed Jul 24 17:29:45 2019 from k8s-node2
    [rancher@k8s-master ~]$ 
    
    

使用RKE以高可用etcd配置安装Kubernetes。

  • 创建rancher-cluster.yml文件。
    [root@k8s-master bin]# mkdir rancher
    [root@k8s-master bin]# cd rancher
    [root@k8s-master rancher]# vim rancher-cluster.yml
    
  • 示例文件:
    nodes:
    - address: 172.16.218.146
      user: rancher
      role: [controlplane,worker,etcd]
    - address: 172.16.218.147
      user: rancher
      role: [controlplane,worker,etcd]
    - address: 172.16.218.148
      user: rancher
      role: [controlplane,worker,etcd]
    
    services:
      etcd:
        snapshot: true
        creation: 6h
        retention: 24h
    
  • 常规RKE节点选项
    OptionRequiredDescription
    addressyes公共域名或IP地址
    useryes可以运行docker命令的用户
    roleyes分配给节点的Kubernetes角色列表
    internal_addressno内部集群通信的私有域名或IP地址
    ssh_key_pathno用于对节点进行身份验证的SSH私钥的路径(默认为~/.ssh/id_rsa)

    完整的配置示例,请参考完整-cluster-yml-示例

  • 运行RKE命令创建Kubernetes集群
    [rancher@k8s-master ~]$ rke up --config ./rancher-cluster.yml
    #执行完后会在当前目录生成kube_config_rancher-cluster.yml文件
    
  • 配置环境变量
    #切换到root用户
    [rancher@k8s-master rancher]$ su - root
    
    #修改 /etc/profile 文件
    [root@k8s-master ~]# vim /etc/profile
    
    #在profile文件末尾添加kube_config_rancher-cluster.yml文件路径并保存
    export KUBECONFIG=/usr/local/bin/rancher/kube_config_rancher-cluster.yml
    
    #最后执行命令使刚配置的环境变量生效
    [root@k8s-master ~]# source /etc/profile
    
  • 测试集群
    #通过kubectl测试您的连接,并查看您的所有节点是否处于Ready状态
    [root@k8s-master ~]# kubectl get node
    NAME             STATUS   ROLES                      AGE   VERSION
    172.16.218.146   Ready    controlplane,etcd,worker   17d   v1.13.5
    172.16.218.147   Ready    controlplane,etcd,worker   17d   v1.13.5
    172.16.218.148   Ready    controlplane,etcd,worker   17d   v1.13.5
    
  • 检查集群Pod的运行状况
    • Pods是Running或者Completed状态。

    • READY列显示所有正在运行的容器 (i.e. 3/3),STATUS显示POD是Running

    • Pods的STATUSCompletedrun-one Jobs,这些podsREADY应该为0/1

      [root@k8s-master ~]# kubectl get pods --all-namespaces
      NAMESPACE           NAME                                                      READY   STATUS             RESTARTS   AGE
      cattle-pipeline     registry-proxy-677lb                                      0/1     ImagePullBackOff   0          9d
      cattle-pipeline     registry-proxy-gspgk                                      0/1     ImagePullBackOff   0          9d
      cattle-pipeline     registry-proxy-vhzzr                                      0/1     ImagePullBackOff   0          9d
      cattle-prometheus   exporter-kube-state-cluster-monitoring-58f946d4d7-9pfnc   1/1     Running            0          9d
      cattle-prometheus   exporter-node-cluster-monitoring-5q7pt                    1/1     Running            0          9d
      cattle-prometheus   exporter-node-cluster-monitoring-kdhk2                    1/1     Running            1          9d
      cattle-prometheus   exporter-node-cluster-monitoring-t9q6d                    1/1     Running            0          9d
      cattle-prometheus   grafana-cluster-monitoring-65d7cfccd8-4vjq7               2/2     Running            2          9d
      cattle-prometheus   prometheus-cluster-monitoring-0                           5/5     Running            1          9d
      cattle-prometheus   prometheus-operator-monitoring-operator-85cbcb85b-qgk6b   1/1     Running            0          9d
      cattle-system       cattle-cluster-agent-5558b659dc-rgb2w                     1/1     Running            1          9d
      cattle-system       cattle-node-agent-jhvrq                                   1/1     Running            0          9d
      cattle-system       cattle-node-agent-pgrbh                                   1/1     Running            0          9d
      cattle-system       cattle-node-agent-rr8xg                                   0/1     CrashLoopBackOff   28         9d
      cattle-system       rancher-958ddc765-8td29                                   0/1     Running            87         9d
      cattle-system       rancher-958ddc765-fpbnb                                   0/1     Running            85         9d
      cattle-system       rancher-958ddc765-hxb9c                                   0/1     CrashLoopBackOff   93         9d
      ingress-nginx       default-http-backend-7f8fbb85db-dqq7k                     1/1     Running            8          13d
      ingress-nginx       nginx-ingress-controller-9tmf6                            1/1     Running            90         13d
      ingress-nginx       nginx-ingress-controller-khcqg                            1/1     Running            25         13d
      ingress-nginx       nginx-ingress-controller-qw57w                            0/1     CrashLoopBackOff   149        13d
      kube-system         canal-glw8k                                               2/2     Running            10         17d
      kube-system         canal-pdv22                                               2/2     Running            14         17d
      kube-system         canal-zp5rg                                               2/2     Running            23         17d
      kube-system         cert-manager-cert-manager-bcfbff747-mzrqw                 2/2     Running            65         12d
      kube-system         kube-dns-5fd74c7488-x9pqs                                 3/3     Running            6          13d
      kube-system         kube-dns-autoscaler-c89df977f-xfmdb                       1/1     Running            1          13d
      kube-system         metrics-server-7fbd549b78-4vnjb                           1/1     Running            1          13d
      kube-system         rke-ingress-controller-deploy-job-z56fc                   0/1     Completed          0          13d
      kube-system         rke-kubedns-addon-deploy-job-lpv7p                        0/1     Completed          0          13d
      kube-system         rke-metrics-addon-deploy-job-bmxjb                        0/1     Completed          0          13d
      kube-system         rke-network-plugin-deploy-job-gjr8n                       0/1     Completed          0          17d
      kube-system         tiller-deploy-546b865df5-n8wmr                            1/1     Running            7          10d
      

四、安装配置Helm

  • 配置Helm客户端访问权限

    Helm在集群上安装tiller服务以管理charts. 由于RKE默认启用RBAC, 因此我们需要使用kubectl来创建一个serviceaccountclusterrolebinding才能让tiller具有部署到集群的权限。

    • 在kube-system命名空间中创建ServiceAccount

      [root@k8s-master ~]# kubectl -n kube-system create serviceaccount tiller
      
    • 创建ClusterRoleBinding以授予tiller帐户对集群的访问权限

      [root@k8s-master ~]# kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
      
    • 安装helm service初始化tiller服务

      helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
      
  • 验证
    [root@k8s-master ~]# helm version
    Client: &version.Version{SemVer:"v2.14.3", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.14.3", GitCommit:"6af75a8fd72e2aa18a2b278cfe5c7a1c5feca7f2", GitTreeState:"clean"}
    

五、Helm安装Rancher

  • 添加Chart仓库地址
    • 使用helm repo add命令添加Rancher chart仓库地址,访问Rancher tag和Chart版本

      替换<CHART_REPO>为您要使用的Helm仓库分支(即latest或stable)。

      [root@k8s-master ~]# helm repo add rancher-stable \
      https://releases.rancher.com/server-charts/stable
      
  • 安装证书管理器
    • 只有Rancher自动生成的证书和LetsEncrypt颁发的证书才需要cert-manager。如果是你自己的证书,可使用ingress.tls.source=secret参数指定证书,并跳过此步骤。

      [root@k8s-master ~]# helm install stable/cert-manager \
        --name cert-manager \
        --namespace kube-system
      
    • Rancher自动生成证书

      默认情况下,Rancher会自动生成CA根证书并使用cert-manager颁发证书以访问Rancher server界面。
      唯一的要求是将hostname配置为访问Rancher的域名地址,使用这种SSL证书配置方式需提前安装证书管理器。

      [root@k8s-master ~]# helm install rancher-stable/rancher \
        --name rancher \
        --namespace cattle-system \
        --set hostname=rancher.fxea.cc
      
    • rancher.fxea.cc就是后面访问rancher的域名,需要在/etc/hosts文件中添加关联(所有主机):

      • vim /etc/hosts

        172.16.218.146 rancher.fxea.cc
        
      常见选项
      选项默认值描述
      hostname” “string - Rancher Server的完全限定域名
      ingress.tls.sourcerancherstring - 从哪里获得证书 - rancher, letsEncrypt, secret
      letsEncrypt.email” “string - 邮件地址
      letsEncrypt.environmentproductionstring - 选项: staging, production
      privateCAfalsebool - 如果您的证书是自签名CA证书,则设置为true
  • 为Agent Pod添加主机别名(/etc/hosts)

    如果您没有内部DNS服务器而是通过添加/etc/hosts主机别名的方式指定的Rancher Server域名,那么不管通过哪种方式(自定义、导入、Host驱动等)创建K8S集群,K8S集群运行起来之后,因为cattle-cluster-agent Podcattle-node-agent无法通过DNS记录找到Rancher Server URL,最终导致无法通信。

    • 解决方法

      可以通过给cattle-cluster-agent Podcattle-node-agent添加主机别名(/etc/hosts),让其可以正常通过Rancher Server URL与Rancher Server通信(前提是IP地址可以互通)

      **注意:**Local集群中,需要先通过Rancher Server URL访问Rancher Web UI,进行初始化之后cattle-cluster-agent Podcattle-node-agent才会自动部署。

      1.执行以下命令为Rancher Server容器配置hosts:
      kubectl -n cattle-system \
          patch deployments rancher --patch '{
              "spec": {
                  "template": {
                      "spec": {
                          "hostAliases": [
                              {
                                  "hostnames":
                                  [
                                      "rancher.fxea.cc"
                                  ],
                                      "ip": "172.16.218.146"
                              }
                          ]
                      }
                  }
              }
          }'
      
      2.通过Rancher Server URL访问Rancher Web UI,设置用户名密码和Rancher Server URL地址,然后会自动登录Rancher Web UI;
      3.在Rancher Web UI中依次进入local集群/system项目,在cattle-system命名空间中查看是否有cattle-cluster-agent Podcattle-node-agent被创建。如果有创建则进行下面的步骤,没有创建则等待;
      4.cattle-cluster-agent pod
      kubectl -n cattle-system \
      patch deployments cattle-cluster-agent --patch '{
          "spec": {
              "template": {
                  "spec": {
                      "hostAliases": [
                          {
                              "hostnames":
                              [
                                  "rancher.fxea.cc"
                              ],
                                  "ip": "172.16.218.146"
                          }
                      ]
                  }
              }
          }
      }'
      
      5.cattle-node-agent pod
      kubectl -n cattle-system \
      patch  daemonsets cattle-node-agent --patch '{
          "spec": {
              "template": {
                  "spec": {
                      "hostAliases": [
                          {
                              "hostnames":
                              [
                                  "rancher.fxea.cc"
                              ],
                                  "ip": "172.16.218.146"
                          }
                      ]
                  }
              }
          }
      }'
      

      注意

      1、替换其中的域名和IP
      2、别忘记json中的引号。

  • 登录Rancher管理端

    • 在要访问的电脑设置hosts

      #vim /etc/hosts
      172.16.218.146 rancher.fxea.cc
      
    • 使用域名登录,默认用户名:admin,密码:admin

六、Rancher CLI

Rancher CLI工具可用于与Rancher进行交互,使用此工具,您可以使用命令行而不是GUI来操作Rancher。

  • 下载Rancher CLI

    • Rancher CLI二进制文件可以直接从Rancher UI下载,下载链接可以从Rancher UI右下角找到。Rancher CLI有Windows,Mac和Linux的二进制文件。您还可以从文件下载页面下载最新版本的二进制文件。

      [root@k8s-master bin]# wget https://www.cnrancher.com/download/cli/rancher-linux-amd64-v2.2.0.tar.gz
      
  • 运行要求

    • API KEY,用于向Rancher进行身份验证。

  • CLI登录认证

    • 在使用Rancher CLI控制Rancher Server之前,必须使用API Bearer Token登录进行身份验证。

      [root@k8s-master bin]# ./rancher login https://<SERVER_URL> --token <BEARER_TOKEN>
      

      替换<BEARER_TOKEN><SERVER_URL>

    • 如果Rancher Server使用自签名证书,Rancher CLI会提示您是否继续连接

    • 输入yes,接着会让您选择默认项目:(输入编号)

    • 接着可以输入rancher node查看节点信息:

  • 项目切换

    • 如果需要操作其他项目,需要先进行项目切换,通过 ./rancher context switch 切换到其他项目,输入编号进行项目选择:

      [root@k8s-master bin]# ./rancher context switch
      NUMBER    CLUSTER NAME   PROJECT ID              PROJECT NAME
      1         cluster-2      c-7q96s:p-h4tmb         project-2
      2         cluster-2      c-7q96s:project-j6z6d   Default
      3         cluster-1      c-lchzv:p-xbpdt         project-1
      4         cluster-1      c-lchzv:project-s2mch   Default
      Select a Project:
      
    • 输入编号后,控制台会显示一条消息,表明您已切换到其他项目,并生成新的配置文件。

      INFO[0005] Setting new context to project project-1
      INFO[0005] Saving config to /Users/markbishop/.rancher/cli2.json
      
  • 命令参数

    • 以下命令可用于Rancher CLI。

      命令结果
      apps, [app]对应用商店(即单个Helm chartRancher chart)执行操作。
      catalog应用商店)执行操作。
      clusters, [cluster]集群上执行操作。
      context在Rancher 项目之间切换。有关示例,请参阅项目选择
      inspect [OPTIONS] [RESOURCEID RESOURCENAME]显示有关Kubernetes资源或Rancher资源(即:项目工作负载)的详细信息。按名称或ID指定资源。
      kubectl运行kubectl命令
      login, [l]登录Rancher Server。有关示例,请参阅CLI身份验证
      namespaces, [namespace]命名空间执行操作。
      nodes, [node]节点上执行操作。
      projects, [project]项目执行操作。
      ps显示项目中的工作负载
      settings, [setting]显示Rancher Server的当前设置。
      ssh使用SSH协议连接到您的一个集群节点。
      help, [h]显示一个命令的命令列表或帮助。
  • Rancher CLI帮助

    • 使用CLI登录Rancher Server后,输入./rancher --help以获取命令列表。 所有命令都接受--help标志,该标志记录每个命令的用法。

七、参考文档

Logo

开源、云原生的融合云平台

更多推荐