Rancher Server 架构
Rancher Server 由认证代理(Authentication Proxy)、Rancher API Server、集群控制器(Cluster Controller)、etcd 节点和集群 Agent(Cluster Agent) 组成。除了集群 Agent 以外,其他组件都部署在 Rancher Server 中。
下图描述的是用户通过 Rancher Server 管控 Rancher 部署的 Kubernetes 集群(RKE 集群)和托管的 Kubernetes 集群的(EKS)集群的流程。以用户下发指令为例,指令的流动路径如下:
首先,用户通过 Rancher UI(即 Rancher 控制台) Rancher 命令行工具(Rancher CLI)输入指令;直接调用 Rancher API 接口也可以达到相同的效果。
用户通过 Rancher 的代理认证后,指令会进一步下发到 Rancher Server 。
与此同时,Rancher Server 也会执行容灾备份,将数据备份到 etcd 节点。
然后 Rancher Server 把指令传递给集群控制器。集群控制器把指令传递到下游集群的 Agent,最终通过 Agent 把指令下发到指定的集群中。
如果 Rancher Server 出现问题,我们也提供了备用方案,您可以通过授权集群端点管理集群。
考虑到性能表现和安全因素,我们建议您使用两个 Kubernetes 集群,分开部署 Rancher Server 和工作负载。部署 Rancher Server 后,您可以创建或导入集群,然后在这些集群上运行您的工作负载。
通过Rancher认证代理管理 Kubernetes 集群
您可以在单个节点或高可用的 Kubernetes 集群上安装 Rancher。由于单节点安装只适用于开发和测试环境,而且单节点和高可用集群之间无法进行数据迁移,所以我们建议您从一开始就使用高可用的 Kubernetes 集群来部署 Rancher Server,而且您需要分开部署运行 Rancher Server 的集群和运行自己业务的下游集群。
基础环境优化
三台机器同时执行
useradd rancher -G docker
echo "123456" | passwd --stdin rancher
debian授权密码命令
useradd rancher -G docker -s /bin/bash
echo rancher:123456|chpasswd
mkdir /home/rancher
chown -R rancher.rancher /home/
chown -R rancher.rancher /home/rancher/
su - rancher
wget https://github.com/rancher/rke/releases/download/v1.3.6/rke_linux-amd64
chmod +x rke_linux-amd64
cp rke_linux-amd64 /usr/local/bin/rke
rke --version
chown rancher.rancher /usr/local/bin/rke
chmod 755 /usr/local/bin/rke
#切换到rancher用户,继续生成rancher自身的密钥对。所有机器都要执行
ssh-keygen -t rsa -P ""
ssh-copy-id 192.168.31.191
ssh-copy-id 192.168.31.192
ssh-copy-id 192.168.31.193
#部署docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-19.03.6 docker-ce-cli-19.03.6 containerd.io
chkconfig docker on
service docker start
#格式化数据盘,挂载数据盘给docker使用。
mke2fs /dev/vdb
mkfs -t ext4 /dev/vdb
mount /dev/vdb /var/lib/docker
cp /etc/fstab /etc/fstab.bak
echo `blkid /dev/vdb | awk '{print $2}' | sed 's/\"//g'` /var/lib/docker ext4 defaults 0 0 >> /etc/fstab
df -h
#使用rancher用户执行命令,填写完交互信息后,必须修改k8s版本号
rke config --name cluster.yml
#默认最新版配置文件
[root@rancher-master-0 ~]# cat /home/rancher/rancher.cluster.yml
# If you intended to deploy Kubernetes in an air-gapped environment,
# please consult the documentation on how to configure custom RKE images.
nodes:
- address: 172.18.64.4
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: rancher-master-0
user: rancher
docker_socket: /var/run/docker.sock
- address: 172.18.64.2
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: rancher-master-2
user: rancher
docker_socket: /var/run/docker.sock
- address: 172.18.64.1
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: rancher-master-1
user: rancher
docker_socket: /var/run/docker.sock
- address: 172.18.64.3
port: "22"
role:
- worker
hostname_override: rancher-worker-1
user: rancher
docker_socket: /var/run/docker.sock
#找到kubernetes_Version,修改版本号。https://github.com/rancher/rke/releases?expanded=true&page=5&q=v1.3.6
vim cluster.yml
Kubernetes version: v1.21.8-rancher2-1 v1.20.14-rancher2-1 v1.19.16-rancher1-3 v1.18.20-rancher1-3 v1.22.5-rancher2-1
kubernetes_version: v1.20.14-rancher2-1
#注意,hostname_override必须是主机名或Ip地址
vim cluster.yml
hostname_override: 主机名
配置文件与部署流程
nodes:
- address: 10.98.0.7
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: fp-ma00-rc2-p1
user: rancher
docker_socket: /var/run/docker.sock
- address: 10.98.0.8
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: fp-ma00-rc2-p2
user: rancher
docker_socket: /var/run/docker.sock
- address: 10.98.0.9
port: "22"
role:
- controlplane
- worker
- etcd
hostname_override: fp-ma00-rc2-p3
user: rancher
docker_socket: /var/run/docker.sock
kubernetes_version: v1.20.14-rancher2-1
dns:
replicas: 3
services:
etcd:
extra_args:
election-timeout: '5000'
heartbeat-interval: '500'
quota-backend-bytes: '8589934592'
kube-api:
always_pull_images: false
extra_args:
default-watch-cache-size: '1500'
event-ttl: 1h0m0s
kubelet-timeout: 5s
max-mutating-requests-inflight: '400'
max-requests-inflight: '800'
watch-cache: 'true'
kube-controller:
extra_args:
node-cidr-mask-size: '22'
node-monitor-grace-period: 20s
node-monitor-period: 5s
node-startup-grace-period: 30s
pod-eviction-timeout: 1m
kubelet:
extra_args:
cgroups-per-qos: 'true'
eviction-max-pod-grace-period: '30'
eviction-pressure-transition-period: 30s
eviction-soft: memory.available<500Mi,nodefs.available<10%,imagefs.available<10%,nodefs.inodesFree<10%
eviction-soft-grace-period: memory.available=1m30s,nodefs.available=1m30s,imagefs.available=1m30s,nodefs.inodesFree=1m30s
kube-api-burst: '30'
kube-api-qps: '15'
max-open-files: '2000000'
max-pods: '200'
pod-infra-container-image: 'rancher/pause:3.1'
registry-burst: '10'
registry-qps: '0'
serialize-image-pulls: 'false'
sync-frequency: 3s
#然后执行命令
rke up --config cluster.yml
以上是使用RKE部署kubernetes集群
下面是安装rancher UI管理控制台
cert-manager与k8s版本对应关系
#先安装helm包
tar zxf helm-v3.2.4-linux-amd64.tar.gz
cd linux-amd64
cp helm /usr/bin/
helm version
#添加rancher稳定版仓库
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
#使用helm创建ns
kubectl create namespace cattle-system
#使用helm安装cert-manager
#注意:证书管理器需要与k8s集群版本兼容,对应关系:https://cert-manager.io/docs/installation/supported-releases/?spm=a2c4g.11186623.0.0.32be254d69N1yJ
1.9 Release of 1.11 1.20 → 1.24 4.7 → 4.11
1.8 Release of 1.10 1.19 → 1.24 4.6 → 4.11
1.10 1.20 → 1.24 4.7 → 4.11
# 安装 CustomResourceDefinition 资源
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager.crds.yaml
# **重要:**
# 如果您正在运行 Kubernetes v1.15 或更低版本,
# 则需要在上方的 kubectl apply 命令中添加`--validate=false`标志,
# 否则您将在 cert-manager 的 CustomResourceDefinition 资源中收到与
# x-kubernetes-preserve-unknown-fields 字段有关的验证错误。
# 这是一个良性错误,是由于 kubectl 执行资源验证的方式造成的。
# 为 cert-manager 创建命名空间
kubectl create namespace cert-manager
# 添加 Jetstack Helm 仓库
helm repo add jetstack https://charts.jetstack.io
# 更新本地 Helm chart 仓库缓存
helm repo update
# 安装 cert-manager Helm chart
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.1.0
#查看pod
kubectl get pods --namespace cert-manager
#所有rke的worker节点都要创建日志目录
mkdir /var/log/rancher
#注意hostname是访问控制台的域名入口,version是控制台的版本。
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=rancher.xxxxx.com \
--set ingress.tls.source=secret \
--version 2.5.16 \
--set auditLog.level=3 \
--set auditLog.maxAge=7 \
--set auditLog.destination=hostPath \
--set auditLog.hostPath=/var/log/rancher/api-audit.log \
--set auditLog.maxSize=20480 \
--set replicas=3
#注意:使用自签的证书,需要开启CA
--set privateCA=true
#查看状态
kubectl -n cattle-system rollout status deploy/rancher