前言:
Rancher是一个开源的企业级容器管理平台。通过Rancher,不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
本架构中使用rancher管理服务器中使用helm核心组件来部署的k8s集群,并加入nginx来做集群之间的负载均衡,达到高可用。
主体服务分布如下:
一、前期准备:
1、我使用的是三台服务器节点
主体架构如下:
2、软件及相关版本:
(注意:软件版本可以有出入,但helm和tiller的版本必须必须一致,不然rancher集群后续会一直报错,只能重新安装):
rancher-2.3.3
kubernetes-1.13.5
rke-v0.2.2
kubectl-v1.13.5
helm-v2.13.1
tiller-v2.13.1
(注意注意:如无特殊标注,以下所有安装及处理环境步骤均在三台主机都执行)
二、基础环境准备:
1、初始化环境:(先三关)
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
关闭selinux:
grep SELINUX /etc/selinux/config SELINUX=disabled
setenforce 0
关闭swap分区:
swapoff -a && sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab
2、修改主机名、绑定host:
hostnamectl set-hostname rancher-01
hostnamectl set-hostname rancher-02
hostnamectl set-hostname rancher-03
cat > /etc/hosts << EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.66.1.18 rancher-01
10.66.1.21 rancher-02
10.66.1.11 rancher-03
EOF
3、内核参数修改:
echo -e “root soft nofile 65535\nroot hard nofile 65535\n* soft nofile 65535\n* hard nofile 65535\n” >> /etc/security/limits.conf
sed -i ‘s#4096#65535#g’ /etc/security/limits.d/20-nproc.conf
cat >> /etc/sysctl.conf<<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
vm.swappiness=0
vm.max_map_count=655360
EOF
4、安装基础软件:
yum -y install wget ntpdate lrzsz curl yum-utils device-mapper-persistent-data lvm2 bash-completion && ntpdate -u cn.pool.ntp.org
5、创建用户并加入相关组:(此步用户操作很重要)
groupadd docker
useradd rancher -G docker
echo “123456” | passwd --stdin rancher
6、免密处理:(只在rancher-01执行即可,通过授权rancher-01主机对三台主机的免密码登陆,为后边安装k8s集群做好准备)
su - rancher
ssh-******
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]
三、总体部署:
1、部署docker环境:
需要在三台主机上都部署docker环境。
并且rke工具目前只支持docker v17.03.2,请务必保持版本一致,否则后续安装会有报错。
安装repo源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下载安装docker:
yum -y install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos
启动docker:
systemctl enable docker
systemctl start docker
systemctl status docker
添加docker加速代理:
cat > /etc/docker/daemon.json << EOF
{
“registry-mirrors” :
[
“http://docker.mirrors.ustc.edu.cn”,
“http://hub-mirror.c.163.com”,
“registry.docker-cn.com”
]
}
EOF
重启docker:
systemctl daemon-reload
systemctl restart docker
2、部署nginx:
下载安装:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
systemctl enable nginx.service
修改nginx的配置文件:
重启服务:
systemctl restart nginx.service
3、rancher集群部署:(以下操作只在rancher-01节点执行即可)
安装rke:
wget https://docs.rancher.cn/download/rke/v1.1.3-rke_linux-amd64
mv v1.1.3-rke_linux-amd64 rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 /usr/bin/rke
安装kubectl:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.0/bin/linux/amd64/kubectl
chmod +x kubectl
mv kubectl /usr/bin/kubectl
安装helm:
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
tar zxf helm-v2.13.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/helm
mv linux-amd64/tiller /usr/bin/tiller
4、k8s集群部署:
su - rancher
编辑配置文件安装:
cat > rancher-cluster.yml << EOF
nodes:
-
address: 10.66.1.18
user: rancher
role: [controlplane,worker,etcd]
-
address: 10.66.1.21
user: rancher
role: [controlplane,worker,etcd]
-
address: 10.66.1.11
user: rancher
role: [controlplane,worker,etcd]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
EOF
启动集群:(如果此处报错,多半是权限问题,可以切换回root用户执行,或者给yml文件加权限)
rke up --config ./rancher-cluster.yml
过程比较慢,大概在20分钟左右,完成后,应显示:Finished building Kubernetes cluster successfully。 并且已经创建了一个文件kube_config_rancher-cluster.yml。这个文件包含kubectl和helm访问k8s集群的凭据,不要进行任何修改。
5、配置环境变量:
su - root
vi /etc/profile
export KUBECONFIG=/home/rancher/kube_config_rancher-cluster.yml && source /etc/profile
四、部署tiller和helm环境:
这个时候可以通过kubectl测试连接情况,并查看所有节点是否处于Ready状态:
先搞一下kubectl的命令补全,方便:
echo “source <(kubectl completion bash)” >> ~/.bashrc
source ~/.bashrc
创建tiller的pod:
kubectl -n kube-system create serviceaccount tiller
创建ClusterRoleBinding以授予tiller帐户对集群的访问权限:
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
安装Helm Server(Tiller):
helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm init --service-account tiller --canary-image
(镜像站点可能也需要改一下:kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=registry.cn-hangzhou.aliyuncs.com/eryajf/tiller:v2.13.1)
这时查看一下集群的pod运行情况:(rancher、redis的是我后续添加的,现在查看的话没有这两个的pod正常,不要担心)
再总体查看一下helm和tiller安装情况:(需要版本一致!不然会一直报错!)
(注意:kube_config_rancher-cluster.yml和rancher-cluster.yml文件暂时不要动,以后将需要这些文件来管理和升级rancher实例)
五、rancher相关安装:
1、添加rancher仓库:
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
2、使用SSL证书通过rancher:(此一大步参照官方文档所做)
rancher server默认使用ssl/tls证书来保证安全性,如果没有自签名ssl证书,可以使用官方一键生成ssl证书的脚本;一键生成ssl自签名证书脚本将自动生成tls.crt、tls.key、cacerts.pem三个文件,文件名称绝对不能修改。如果使用自己的自签名ssl证书,则需要将服务证书和CA中间证书链合并到tls.crt文件中,将私钥复制到或者重命名为tls.key文件,将CA证书复制到或者重命名为cacerts.pem。
具体方法详见官方生成ssl证书文档:https://rancher2.docs.rancher.cn/docs/installation/options/self-signed-ssl/_index/
再将脚本拷贝到本地,脚本加上可执行权限:
chmod +x create_self-signed-cert.sh
./create_self-signed-cert.sh --ssl-domain=rancher.test.io --ssl-trusted-ip=10.66.1.18,10.66.1.21,10.66.1.11
创建命名空间、私钥密文、ca证书密文、两个secret:
kubectl create namespace cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem
查看secret创建情况:
3、rancher server安装:
helm install rancher-stable/rancher \
–name rancher \
–namespace cattle-system \
–set hostname=<自定义域名> \
–set ingress.tls.source=secret \
–set privateCA=true
安装成功后,在本机绑定好hosts文件,就可以访问rancher界面了: