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信任
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 |
| yes | 公共域名或IP地址 |
| yes | 可以运行docker命令的用户 |
| yes | 分配给节点的Kubernetes角色列表 |
| no | 内部集群通信的私有域名或IP地址 |
| 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的
STATUS
是Completed
为run-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
来创建一个serviceaccount
,clusterrolebinding
才能让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
常见选项
选项 | 默认值 | 描述 |
| ” “ |
|
|
|
|
| ” “ |
|
|
|
|
| false |
|
为Agent Pod添加主机别名(/etc/hosts)
如果您没有内部DNS服务器而是通过添加/etc/hosts
主机别名的方式指定的Rancher Server域名,那么不管通过哪种方式(自定义、导入、Host驱动等)创建K8S集群,K8S集群运行起来之后,因为cattle-cluster-agent Pod
和cattle-node-agent
无法通过DNS记录找到Rancher Server URL
,最终导致无法通信。
解决方法
可以通过给cattle-cluster-agent Pod
和cattle-node-agent
添加主机别名(/etc/hosts),让其可以正常通过Rancher Server URL
与Rancher Server通信(前提是IP地址可以互通)
。
**注意:**Local集群中,需要先通过Rancher Server URL
访问Rancher Web UI,进行初始化之后cattle-cluster-agent Pod
和cattle-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 Pod
和cattle-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。
命令 | 结果 |
| 对应用商店(即单个Helm chart或Rancher chart)执行操作。 |
| 对应用商店)执行操作。 |
| 在集群上执行操作。 |
| 在Rancher 项目之间切换。有关示例,请参阅项目选择。 |
| 显示有关Kubernetes资源或Rancher资源(即:项目和工作负载)的详细信息。按名称或ID指定资源。 |
| 运行kubectl命令。 |
| 登录Rancher Server。有关示例,请参阅CLI身份验证。 |
| 对命名空间执行操作。 |
| 在节点上执行操作。 |
| 在项目执行操作。 |
| 显示项目中的工作负载。 |
| 显示Rancher Server的当前设置。 |
| 使用SSH协议连接到您的一个集群节点。 |
| 显示一个命令的命令列表或帮助。 |
Rancher CLI帮助
- 使用CLI登录Rancher Server后,输入
./rancher --help
以获取命令列表。 所有命令都接受--help
标志,该标志记录每个命令的用法。
七、参考文档