Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。
Rancher包括完整的Kubernetes发行版,并在工作负载管理、集群操作和企业支持等关键领域增加加强。
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
这是一个 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 全称 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 是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
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节点 |
[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 [email protected]
[root@k8s-master ~]# ssh-copy-id [email protected]
[root@k8s-master ~]# ssh-copy-id [email protected]
[root@k8s-master ~]# ssh [email protected]
Last login: Wed Jul 24 17:28:03 2019 from k8s-node2
[rancher@k8s-node1 ~]$
[root@k8s-master ~]# ssh [email protected]
Last login: Wed Jul 24 17:29:22 2019 from k8s-node2
[rancher@k8s-node2 ~]$
[root@k8s-master ~]# ssh [email protected]
Last login: Wed Jul 24 17:29:45 2019 from k8s-node2
[rancher@k8s-master ~]$
[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
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-示例
[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
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在集群上安装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 repo add
命令添加Rancher chart仓库地址,访问Rancher tag和Chart版本
替换
为您要使用的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会自动生成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 |
如果您没有内部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
才会自动部署。
kubectl -n cattle-system \
patch deployments rancher --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"rancher.fxea.cc"
],
"ip": "172.16.218.146"
}
]
}
}
}
}'
Rancher Server URL
访问Rancher Web UI,设置用户名密码和Rancher Server URL
地址,然后会自动登录Rancher Web UI;local集群/system项目
,在cattle-system
命名空间中查看是否有cattle-cluster-agent Pod
和cattle-node-agent
被创建。如果有创建则进行下面的步骤,没有创建则等待;kubectl -n cattle-system \
patch deployments cattle-cluster-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"rancher.fxea.cc"
],
"ip": "172.16.218.146"
}
]
}
}
}
}'
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 CLI工具可用于与Rancher进行交互,使用此工具,您可以使用命令行而不是GUI来操作Rancher。
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
如果需要操作其他项目,需要先进行项目切换,通过 ./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 chart或Rancher 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 --help
以获取命令列表。 所有命令都接受--help
标志,该标志记录每个命令的用法。