查看原文
其他

25 张图详解 K8S 管理平台 Rancher 部署实践

liugp 进击云原生 2024-02-25

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料


作者:liugp  

出处:https://goo.gs/qamve

一、概述

前面我们编排了很多 chart 包,需要一个管理平台来管理,所以这里介绍一款非常简洁和实用的管理平台 Rancher;Rancher 是一个 Kubernetes 管理工具,Rancher 基于 Kubernetes 添加了新的功能,包括统一所有集群的身份验证和 RBAC,让系统管理员从一个位置控制全部集群的访问。

Rancher 的作用:

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

官方文档:https://docs.ranchermanager.rancher.io/zh/
GitHub:https://github.com/rancher/rancher-docs

二、Rancher 架构

大多数 Rancher 2.x 软件均运行在 Rancher Server 上。Rancher Server 包括用于管理整个 Rancher 部署的所有软件组件。下图展示了 Rancher 2.x 的上层架构。

三、安装 Rancher

这里使用 helm 部署将 Rancher 部署在 k8s 上,k8s 环境部署可以参考我这篇文章:无 VIP 稳定性和可扩展性更强的 K8S 高可用方案讲解实战操作

1)安装 Helm

关于Helm介绍与部署可以参考以下几篇文章:

Helm 架构和基础语法详解:  

https://www.cnblogs.com/liugp/p/16659802.html

Helm 常用命令(chart 安装、升级、回滚、卸载等操作)  

https://www.cnblogs.com/liugp/p/16663783.html

# 下载包
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:

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

6)通过 Helm 安装 Rancher

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

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 [https://rancher.my.org/dashboard/?setup=$](https://rancher.my.org/dashboard/?setup=$)(kubectl 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

【温馨提示】有些版本是需要指定ingressClassName,这里我安装的这个版本就需要,要不然访问 web 报 404,而且还没有ADDRESS

kubectl edit ingress rancher -n cattle-system

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 地址:https://rancher.my.org/


如果安装在 k8s 上会自动获取 k8s 信息,当然也可以当入已其它已存在的 k8s 集群。

四、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

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

这里 ingress 也是没有 Address,而且访问也是 404,还是跟上面一样的处理,在 ingress 中添加如下:

ingressClassName: nginx

修改

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



3)安装 helm-push 插件

GitHub 地址:https://github.com/chartmuseum/helm-push

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


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

证书下载

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

6)在 Rancher 关联 Harbor


因为我这里证书是不可信的,所以是异常的,所以这里添加一个 bitnami 测试验证。

7)通过 Rancher 安装、更新、卸载应用



安装、更新,卸载非常简单,这里就不过多的讲解了,有任何疑问欢迎给我留言。

- END -




后台回复“
加群”,带你进入高手交流群
推荐阅读
K8S 节点 CPU 升级,导致 kubelet 无法启动排障
稳定性和可扩展性更强 K8S 高可用实战操作
K8S master 节点更换 IP 与高可用故障模拟实战
46 张图详解 Zabbix 分布式监控平台建设
这 11 张图把 K8S 权限认证说的很清楚了
10 张图解 K8S CNI Calico 网络模型原理与功能实战
网关 Apache APISIX 3.0 版本发布!功能丰富
19 张图详解 Rsync 远程同步
企业级网关 Kong 部署 Spring Boot 项目实战
24 张图初探开源容器安全平台 NeuVector
23 张图细讲使用 Devtron 简化 K8S 中应用开发
2023 年值得关注的 5 个新 CNCF 项目
K8S 1.25 中的重大更改和删除18 张图 Java 容器化最佳实践总结
17 张图解 Redis On K8S 编排部署与实战操作
三大示例实战 Prometheus API 使用12 张图讲解 Spark 在 K8S 中实战操作
ES、Kibana on K8S 详解与实战操作
深入理解 K8S Pod 调试与实践技巧用 Grafana Mimir 可视化云原生监控报警K8S 1.25 两特性减少应用滚动上线停机时间Docker 镜像构建保姆级入门实战指南17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型
全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【加群】进入高手如云技术交流群
继续滑动看下一个

25 张图详解 K8S 管理平台 Rancher 部署实践

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存