一、概述
前面我们编列了很多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 的上层架构。
三、装置 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
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 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
【温馨提示】有些版本是需求指定
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地址: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地址: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
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装置、更新、卸载运用
装置、更新,卸载十分简略,这儿就不过多的解说了,有任何疑问欢迎给我留言,k8s 办理渠道 rancher 简略的介绍和简略运用就先到这儿了,后续会继续更新【云原生+大数据】相关的文章,请小伙伴耐性等待~