您的位置:首页 > 运维架构 > 网站架构

k3s部署rancher2.0高可用

2020-08-28 16:51 1506 查看

在rancher的QQ群和微信群里面经常看到大家在部署rancher的集群模式很困难的样子,各种问题不知道该怎么办。其实部署起来非常的简单。下面就使用k3s集群来安装一个rancher的集群模式。
k3s是rancher公司推出的轻量化k8s,安装和运行会比k8s更容易。自动带有网络、负载均衡、traefik、持久化存储等功能。
一、k3s集群安装。
这里使用的数据源为etcd,当然大家可以改成mysql作为k3s的数据源。

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh |K3S_DATASTORE_ENDPOINT='https://master1.example.ex:2379,https://master3.example.ex:2379,https://master2.example.ex:2379' INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="server --data-dir=/home/docker --kube-proxy-arg=proxy-mode=ipvs --datastore-cafile=/etc/kubernetes/cert/ca.pem --datastore-certfile=/etc/etcd/cert/etcd.pem --datastore-keyfile=/etc/etcd/cert/etcd-key.pem" sh -

如果是使用mysql作为数据源,需要做一些修改。

curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh |K3S_DATASTORE_ENDPOINT='mysql://k3s:k3s.com@tcp(172.21.1.80:3306)/k3s' INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="server --data-dir=/home/docker --kube-proxy-arg=proxy-mode=ipvs" sh -

mysql://user:password@tcp(host:port)/database
这个格式就是这样的,请根据实际情况替换。
etcd的集群安装可以自行百度,mysql的集群安装可以使用percona公司的pxc。注意使用mysql集群的时候需要指定一个写库,推荐使用keepalived启用虚拟地址来配置。当然也可以使用mysql的读写分离集群模式。具体安装方式自行解决。
推荐三个master节点,所以上面的命令可以在三个主机上都执行一次。
使用kubectl get nodes命令查看状态

shell> kubectl get nodes

NAME                 STATUS   ROLES    AGE    VERSION
master1.example.ex   Ready    master   137d   v1.18.8+k3s1
master2.example.ex   Ready    master   137d   v1.18.8+k3s1
master3.example.ex   Ready    master   137d   v1.18.8+k3s1

其它的操作就如k8s一样,比如get pod 、get deploy、get service 等等。如kubectl get pod -n kube-system确认所有服务都正常启动。这样代表整个k3s就可以使用了。
加入agent的方式:

shell>cat /home/docker/server/node-token #这里的/home/docker目录是上面用--data-dir命令指定的。如果不指定,默认在/var/lib/rancher/k3s中
K10336a5e410440ca65fb6c9ca59d0352c9618c169723dbd8e9c233e9a228ccefef::server:18040a84a14ea4c626f0fe7c12f3d66e
shell>curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="agent --server https://k3s-server.example.ex:6443 --docker --token=K10336a5e410440ca65fb6c9ca59d0352c9618c169723dbd8e9c233e9a228ccefef::server:18040a84a14ea4c626f0fe7c12f3d66e" sh -

这里的https://k3s-server.example.ex:6443 可以通过dns服务器来指定多个A记录,添加的ip就是上面的三个master主机。当然如果只是用来单独运行rancher集群,三个master节点基本已经够了。除非你需要纳管的k8s/k3s集群非常多。
二、rancher高可用安装
首先需要先安装helm仓库,通过这个方式会非常简单。

shell> wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
shell> tar -xf helm-v3.2.4-linux-amd64.tar.gz
shell> mv linux-amd64/helm /usr/bin/

添加rancher仓库

helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
helm repo update

证书生成
下载一键生成脚本,https://docs.rancher.cn/rancher2x/install-prepare/self-signed-ssl.html 参考这个文档

mkdir ~/rancher-cert
cd ~/rancher-cert
sh create-rancher-cert.sh --ssl-domain=*.example.ex --ssl-size=2048 --ssl-date=36500

这样会生成证书了。
导入相关证书
切换到上面生成证书的目录

cd ~/rancher-cert
kubectl create namespace cattle-system
kubectl create secret generic tls-ca -n cattle-system --from-file=cacerts.pem
kubectl create secret tls tls-rancher-ingress -n cattle-system --cert=./tls.crt --key=./tls.key

安装rancher

kubectl create namespace cattle-system
helm --kubeconfig=/etc/rancher/k3s/k3s.yaml install rancher rancher-latest/rancher  --namespace cattle-system  --set hostname=manage.example.ex  --set tls=external   --set privateCA=true

域名和后面ingress配置的域名要一致。
修改ingress

shell>kubectl get ingress -n cattle-system
NAME      CLASS    HOSTS               ADDRESS       PORTS     AGE
rancher   <none>   manage.example.ex   172.21.1.83   80, 443   137d
shell> kubectl edit ingress -n cattle-system rancher
spec:
rules:
- host: manage.example.ex
http:
paths:
- backend:
serviceName: rancher
servicePort: 80
pathType: ImplementationSpecific
tls:
- hosts:
- manage.example.ex
secretName: tls-rancher-ingress

添加的内容

tls:
- hosts:
- manage.example.ex
secretName: tls-rancher-ingress

然后打开网页输入https://manage.example.ex 就可以看到rancher管理页面了。当然这个域名的dns解析需要是上面三个master的其中任何一个节点的ip地址。

剩下就可以在这个网页上面一键安装 监控、配置告警、istio、部署程序等等.
如果这个ingress的地址是个内网地址,需要在外面加一个nginx做代理。那么可以把nginx的pass_proxy直接指定到这个域名即可。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: