附录:Rancher 安装.md

安装前准备

一、安装 kubectl 与 helm(如果未安装)

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x kubectl && mv kubectl /usr/local/bin/

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

二、准备 Kubernetes 集群

你必须确保:

  • 可以通过 kubectl get nodes 正常访问集群

  • Kubernetes ≥ 1.21(不同 Rancher 版本略有差异)

三、安装 ingress-nginx(用于暴露 Rancher)

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.service.type=LoadBalancer

等待外部 IP 分配:

ubuntu@ubuntu:~$ kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.111.89.100    <pending>     80:32402/TCP,443:30097/TCP   22s
ingress-nginx-controller-admission   ClusterIP      10.105.200.153   <none>        443/TCP                      22s
## 发现缺少 LoadBalancer【EXTERNAL-IP 为pending】
## 安装LB
ubuntu@ubuntu:~$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.3/config/manifests/metallb-native.yaml
namespace/metallb-system created
customresourcedefinition.apiextensions.k8s.io/bfdprofiles.metallb.io created
customresourcedefinition.apiextensions.k8s.io/bgpadvertisements.metallb.io created
customresourcedefinition.apiextensions.k8s.io/bgppeers.metallb.io created
customresourcedefinition.apiextensions.k8s.io/communities.metallb.io created
customresourcedefinition.apiextensions.k8s.io/ipaddresspools.metallb.io created
customresourcedefinition.apiextensions.k8s.io/l2advertisements.metallb.io created
serviceaccount/controller created
serviceaccount/speaker created
role.rbac.authorization.k8s.io/controller created
role.rbac.authorization.k8s.io/pod-lister created
clusterrole.rbac.authorization.k8s.io/metallb-system:controller created
clusterrole.rbac.authorization.k8s.io/metallb-system:speaker created
rolebinding.rbac.authorization.k8s.io/controller created
rolebinding.rbac.authorization.k8s.io/pod-lister created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:controller created
clusterrolebinding.rbac.authorization.k8s.io/metallb-system:speaker created
configmap/metallb-excludel2 created
secret/webhook-server-cert created
service/webhook-service created
deployment.apps/controller created
daemonset.apps/speaker created
validatingwebhookconfiguration.admissionregistration.k8s.io/metallb-webhook-configuration created
ubuntu@ubuntu:~$ kubectl get pods -n metallb-system
NAME                          READY   STATUS    RESTARTS   AGE
controller-6d9b64d49f-x5fs5   1/1     Running   0          27s
speaker-98mqz                 0/1     Running   0          27s
speaker-dgfmd                 0/1     Running   0          27s
speaker-nvss7                 0/1     Running   0          27s
ubuntu@ubuntu:~$ 
## 给分配IP 192.168.236.101/24
ubuntu@ubuntu:~$ cat <<EOF | kubectl apply -f -
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.236.200-192.168.236.210
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec: {}
EOF
ipaddresspool.metallb.io/default-pool created
l2advertisement.metallb.io/default unchanged
## 让 ingress-nginx 重新获得 IP
ubuntu@ubuntu:~$ helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --set controller.service.type=LoadBalancer

## 重新查看
ubuntu@ubuntu:~$  kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.104.99.152    192.168.236.200   80:31694/TCP,443:31176/TCP   7m56s
ingress-nginx-controller-admission   ClusterIP      10.105.200.153   <none>            443/TCP                      21m

安装 cert-manager(Rancher TLS 依赖)

kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --set installCRDs=true

检查

ubuntu@ubuntu:~$ kubectl get pods -n cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-77b74755d9-9tkkv              1/1     Running   0          25s
cert-manager-cainjector-65fcfd6ccf-68lpn   1/1     Running   0          25s
cert-manager-webhook-9b4dd78-566b9         1/1     Running   0          25s

五、准备 Rancher 主机名(无需域名)

我们用 sslip.io,它会自动将主机名解析到你的 IP。

rancher.<INGRESS_IP>.sslip.io

如果 INGRESS_IP=1.2.3.4,则 hostname 是:

rancher.1.2.3.4.sslip.io
## 这里是
rancher.192.168.236.200.sslip.io

六、安装 Rancher(Helm)

kubectl create namespace cattle-system

helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm repo update

# helm install rancher rancher-latest/rancher \
#   --namespace cattle-system \
#   --set hostname=rancher.192.168.236.200.sslip.io \
#   --set replicas=3 \
#   --set ingress.tls.source=letsEncrypt \
#   --set letsEncrypt.email="952022746@qq.com"

helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=rancher.192.168.236.200.sslip.io \
  --set ingress.tls.source=secret \
  --set replicas=1 \
  --set ingress.ingressClassName=nginx

七、检查安装状态

查看 Rancher pod 是否全部 Running:

ubuntu@ubuntu:~$ kubectl get pods -n cattle-system
NAME                       READY   STATUS    RESTARTS   AGE
rancher-5dbcb676cd-kx5nb   0/1     Running   0          76s
rancher-5dbcb676cd-lbcmz   0/1     Running   0          76s
rancher-5dbcb676cd-tkv5n   0/1     Running   0          76s
## 查看 ingress
ubuntu@ubuntu:~$ kubectl get ingress -n cattle-system
NAME      CLASS    HOSTS                              ADDRESS   PORTS     AGE
rancher   <none>   rancher.192.168.236.200.sslip.io             80, 443   100s
ubuntu@ubuntu:~$ 

八、访问 Rancher

浏览器打开:

https://rancher.192.168.236.200.sslip.io

首次登录会要求设置 admin 密码。

如需重置密码:

kubectl -n cattle-system get pods -l app=rancher

kubectl -n cattle-system exec -it rancher-5dbcb676cd-kx5nb -c rancher -- reset-password

P5KkW6ZyrRhb6nvtm0OO


posted @ 2025-11-17 18:16  beamsoflight  阅读(0)  评论(0)    收藏  举报