一、概述

前面我们编列了很多chart包,需求一个办理渠道来办理,所以这儿介绍一款十分简练和有用的办理渠道Rancher;Rancher 是一个 Kubernetes 办理工具,Rancher 根据 Kubernetes 增加了新的功用,包含一致一切集群的身份验证和 RBAC,让体系办理员从一个方位控制全部集群的拜访。

Rancher 的作用:

  • Rancher 能够创立来自 Kubernetes 托管服务提供商的集群,创立节点并装置 Kubernetes或者导入在任何当地运行的现有 Kubernetes 集群
  • Rancher 能够为集群和资源提供更精细的监控和告警,将日志发送到外部提供商,并经过运用商店(Application Catalog)直接集成 Helm。
  • Rancher 能够与外部CI/CD 体系 对接。没有的话,你也能够运用 Rancher 提供的 Fleet 自动布置和升级工作负载。
  • 能够经过Rancher 装置、卸载、升级运用。

官方文档:docs.ranchermanager.rancher.io/zh/
GitHub:github.com/rancher/ran…

二、Rancher 架构

大多数 Rancher 2.x 软件均运行在 Rancher Server 上。Rancher Server 包含用于办理整个 Rancher 布置的一切软件组件。下图展现了 Rancher 2.x 的上层架构。

【云原生】k8s 管理平台 rancher

三、装置 Rancher

这儿运用helm布置将Rancher 布置在k8s上,k8s环境布置能够参阅我这篇文章:【云原生】无VIP稳定性和可扩展性更强的k8s高可用方案解说与实战操作

1)装置Helm

关于Helm介绍与布置能够参阅我以下几篇文章:

  • 【云原生】Helm 架构和基础语法详解
  • 【云原生】Helm 常用命令(chart 装置、升级、回滚、卸载等操作)
# 下载包
wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
# 解压压缩包
tar -xf helm-v3.9.4-linux-amd64.tar.gz
# 制造软衔接
ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm
# 验证
helm version
helm help

2)装置ingress-controller

# 能够先把镜像下载,再装置
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
# 修正镜像地址
sed -i 's@k8s.gcr.io/ingress-nginx/controller:v1.2.0\(.*\)@registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.2.0@' deploy.yaml
sed -i 's@k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1\(.*\)$@registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@' deploy.yaml
###还需求修正两当地
#1、kind: 类型修正成DaemonSet,replicas: 注销掉,因为DaemonSet形式会每个节点运行一个pod
#2、在增加一条: hostnetwork:true
#3、把LoadBalancer修正成NodePort
#4、在--validating-webhook-key下面增加- --watch-ingress-without-class=true
#5、设置master节点可调度
kubectl taint nodes k8s-master-168-0-113 node-role.kubernetes.io/control-plane:NoSchedule-
kubectl taint nodes k8s-master2-168-0-116 node-role.kubernetes.io/control-plane:NoSchedule-
kubectl apply -f deploy.yaml

3)为 Rancher 创立命名空间

kubectl create namespace cattle-system

4)挑选 SSL 装备

Rancher Management Server 默许需求 SSL/TLS 装备来确保拜访的安全性。

你能够从以下三种证书来源中挑选一种,用于在 Rancher Server 中终止 TLS:

  • Rancher 生成的 TLS 证书:要求你在集群中装置 cert-manager。Rancher 运用 cert-manager 签发并维护证书。Rancher 会生成自己的 CA 证书,并运用该 CA 签署证书。然后 cert-manager负责办理该证书。
  • Let’s Encrypt:Let’s Encrypt 选项也需求运用 cert-manager。但是,在这种情况下,cert-manager 与 Let’s Encrypt 的特殊颁发者相结合,该颁发者履行获取 Let’s Encrypt 颁发的证书所需的一切操作(包含请求和验证)。此装备运用 HTTP 验证(HTTP-01),因此负载均衡器有必要具有能够从互联网拜访的公共 DNS 记载。
  • 你已有的证书:运用已有的 CA 颁发的公有或私有证书。Rancher 将运用该证书来维护 WebSocket 和 HTTPS 流量。在这种情况下,你有必要上传名称分别为 tls.crt 和 tls.key的 PEM 格式的证书以及相关的密钥。假如你运用私有 CA,则还有必要上传该 CA 证书。这是因为你的节点或许不信任此私有 CA。Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将运用该校验和来验证其与 Rancher 的衔接。

5)装置 cert-manager

# 下载
wget https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
# 装置
kubectl apply -f cert-manager.crds.yaml
# 检查
kubectl get pods --namespace cert-manager

【云原生】k8s 管理平台 rancher

6)经过 Helm 装置 Rancher

helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=rancher.my.org \
  --set bootstrapPassword=admin

【云原生】k8s 管理平台 rancher
NOTES

NAME: rancher
LAST DEPLOYED: Thu Dec  1 23:45:23 2022
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.
NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued, Containers are started and the Ingress rule comes up.
Check out our docs at https://rancher.com/docs/
If you provided your own bootstrap password during installation, browse to https://rancher.my.org to get started.
If this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:

echo rancher.my.org/dashboard/?… get secret –namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}’)


To get just the bootstrap password on its own, run:

kubectl get secret –namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ “\n” }}’


Happy Containering!

等待 Rancher 运行:

kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
kubectl get pods  -n cattle-system -owide

【云原生】k8s 管理平台 rancher

【温馨提示】有些版本是需求指定ingressClassName,这儿我装置的这个版本就需求,要不然拜访web报404,并且还没有ADDRESS

kubectl edit ingress rancher -n cattle-system

【云原生】k8s 管理平台 rancher

2)增加 Helm Chart 仓库

### 1. 增加 Helm Chart 仓库
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

7)Rancher web

假如上面的域名没有解析,能够加hosts

192.168.182.110 rancher.my.org

获取web地址

echo https://rancher.my.org/dashboard/?setup=$(kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')
# 获取登录密码
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'

web地址:rancher.my.org

【云原生】k8s 管理平台 rancher
假如装置在k8s上会自动获取k8s信息,当然也能够当入已其它已存在的k8s集群。
【云原生】k8s 管理平台 rancher

四、Harbor 对接 Rancher

1)装置 Harbor

1、装备hosts

192.168.192.110 myharbor.com

2、创立stl证书

# 生成 CA 证书私钥
openssl genrsa -out ca.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com" \
 -key ca.key \
 -out ca.crt
# 创立域名证书,生成私钥
openssl genrsa -out myharbor.com.key 4096
# 生成证书签名请求 CSR
openssl req -sha512 -new \
    -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=harbor/OU=harbor/CN=myharbor.com" \
    -key myharbor.com.key \
    -out myharbor.com.csr
# 生成 x509 v3 扩展
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=myharbor.com
DNS.2=*.myharbor.com
DNS.3=hostname
EOF
#创立 Harbor 拜访证书
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in myharbor.com.csr \
    -out myharbor.com.crt

3、开端装置 nfs-provisioner

# 增加chart源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
# 开端装置
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --namespace=nfs-provisioner \
  --create-namespace \
  --set image.repository=willdockerhub/nfs-subdir-external-provisioner \
  --set image.tag=v4.0.2 \
  --set replicaCount=2 \
  --set storageClass.name=nfs-client \
  --set storageClass.defaultClass=true \
  --set nfs.server=192.168.182.110 \
  --set nfs.path=/opt/nfsdata

检查

kubectl get pods,deploy,sc -n nfs-provisioner

【云原生】k8s 管理平台 rancher

4、开端装置 Harbor

【1】创立 Namespace
kubectl create ns harbor
【2】创立证书秘钥
kubectl create secret tls myharbor.com --key myharbor.com.key --cert myharbor.com.crt -n harbor
kubectl get secret myharbor.com -n harbor
【3】增加 Chart 库
helm repo add harbor https://helm.goharbor.io
【4】经过helm装置harbor
helm install myharbor --namespace harbor harbor/harbor \
  --set expose.ingress.hosts.core=myharbor.com \
  --set expose.ingress.hosts.notary=notary.myharbor.com \
  --set-string expose.ingress.annotations.'nginx\.org/client-max-body-size'="1024m" \
  --set expose.tls.secretName=myharbor.com \
  --set persistence.persistentVolumeClaim.registry.storageClass=nfs-client \
  --set persistence.persistentVolumeClaim.jobservice.storageClass=nfs-client \
  --set persistence.persistentVolumeClaim.database.storageClass=nfs-client \
  --set persistence.persistentVolumeClaim.redis.storageClass=nfs-client \
  --set persistence.persistentVolumeClaim.trivy.storageClass=nfs-client \
  --set persistence.persistentVolumeClaim.chartmuseum.storageClass=nfs-client \
  --set persistence.enabled=true \
  --set externalURL=https://myharbor.com \
  --set harborAdminPassword=Harbor12345

这儿稍等一段时间在检查资源状态

kubectl get ingress,svc,pods,pvc -n harbor

【云原生】k8s 管理平台 rancher
这儿ingress也是没有Address,并且拜访也是404,仍是跟上面相同的处理,在ingress中增加如下:

ingressClassName: nginx

修正

kubectl edit ingress myharbor-ingress -n harbor
kubectl edit ingress myharbor-ingress-notary -n harbor

【云原生】k8s 管理平台 rancher
【云原生】k8s 管理平台 rancher
【云原生】k8s 管理平台 rancher

3)装置helm-push插件

GitHub地址:github.com/chartmuseum…

mkdir -p /root/.local/share/helm/plugins/helm-push
wget https://github.com/chartmuseum/helm-push/releases/download/v0.10.3/helm-push_0.10.3_linux_amd64.tar.gz
tar zxvf helm-push_0.10.3_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/helm-push
# 检查插件
helm plugin list
helm cm-push --help

【云原生】k8s 管理平台 rancher
【云原生】k8s 管理平台 rancher

4)helm 增加harbor 源

# chartrepo,固定参数,bigdata自定义项目
helm repo add local-harbor --username=admin --password=Harbor12345 https://myharbor.com/chartrepo/bigdata/ --ca-file /opt/k8s/helm-push/ca.crt

证书下载

【云原生】k8s 管理平台 rancher

5)helm-push 示例

helm repo add my-repo https://charts.bitnami.com/bitnami
helm pull my-repo/redis
tar -xf redis-17.3.13.tgz
helm install my-redis ./redis

推送harbor

# 推送,接【目录】
helm cm-push ./redis local-harbor --ca-file /opt/k8s/helm-push/ca.crt
# 推送,接【压缩包】
helm cm-push redis-17.3.13.tgz local-harbor --ca-file /opt/k8s/helm-push/ca.crt
# 推送,指定版本,--version
helm cm-push ./redis --version="17.3.13" local-harbor --ca-file /opt/k8s/helm-push/ca.crt
# 强制推送,--force
helm cm-push --force redis-17.3.13.tgz local-harbor

【云原生】k8s 管理平台 rancher

6)在Rancher关联Harbor

【云原生】k8s 管理平台 rancher
因为我这儿证书是不可信的,所以是异常的,所以这儿增加一个bitnami测试验证。
【云原生】k8s 管理平台 rancher

7)经过Rancher装置、更新、卸载运用

【云原生】k8s 管理平台 rancher

【云原生】k8s 管理平台 rancher
【云原生】k8s 管理平台 rancher

【云原生】k8s 管理平台 rancher
【云原生】k8s 管理平台 rancher

装置、更新,卸载十分简略,这儿就不过多的解说了,有任何疑问欢迎给我留言,k8s 办理渠道 rancher 简略的介绍和简略运用就先到这儿了,后续会继续更新【云原生+大数据】相关的文章,请小伙伴耐性等待~