基于RKE部署的K8S集群,使用helm部署Rancher-Server

基于RKE部署的K8S集群,使用helm部署Rancher-Server

Deng YongJie's blog 914 2022-10-30

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 集群
image-1676603077570

您可以在单个节点或高可用的 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版本对应关系
image-20220915150912556

#先安装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