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、架构说明

container platform容器平台使用 容器平台管理_Rancher

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信任

NODE

IP

备注

k8s-master

172.16.218.146

Mster节点

k8s-node1

172.16.218.147

Node1节点

K8s-node2

172.16.218.148

Node2节点

nginx

172.16.218.149

Node1节点

分别在三个节点上创建用户并修改密码,以及将用户加入到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节点选项

Option

Required

Description

address

yes

公共域名或IP地址

user

yes

可以运行docker命令的用户

role

yes

分配给节点的Kubernetes角色列表

internal_address

no

内部集群通信的私有域名或IP地址

ssh_key_path

no

用于对节点进行身份验证的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.source

rancher

string - 从哪里获得证书 - rancher, letsEncrypt, secret

letsEncrypt.email

” “

string - 邮件地址

letsEncrypt.environment

production

string - 选项: staging, production

privateCA

false

bool - 如果您的证书是自签名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

container platform容器平台使用 容器平台管理_Docker_02

六、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标志,该标志记录每个命令的用法。

七、参考文档