15分钟部署kubernetes+Metallb+Ingress-nginx+Rancher

924 阅读3分钟

10分钟部署Kubernetes高可用集群

Created by: douniwan Created time: May 24, 2023 1:14 PM Last edited by: douniwan Last edited time: May 24, 2023 5:44 PM Tags: Sealos, k8s, kubernetes

系统环境

统一 主机 root 密码,并允许 ssh root 远程登录

主机名环境CPU内存硬盘IP地址
k8s-master-01debian 104820G192.168.40.231
k8s-master-02debian 104820G192.168.40.232
k8s-master-03debian 104820G192.168.40.233
k8s-node-01debian 10122420G192.168.40.234
k8s-node-02debian 10122420G192.168.40.235
k8s-node-03debian 10122420G192.168.40.236

更换系统源信息(所有主机)

备份系统源

mv /etc/apt/sources.list /etc/apt/sources.list.bak

更换阿里源

echo 'deb http://mirrors.aliyun.com/debian/ buster main
deb-src http://mirrors.aliyun.com/debian/ buster main
 
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
 
deb http://mirrors.aliyun.com/debian/ buster-updates main
deb-src http://mirrors.aliyun.com/debian/ buster-updates main
' > /etc/apt/sources.list

更新源配置

apt update

安装 sealos(k8s-master-01节点)

sealos 文档地址

添加源信息

echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | tee /etc/apt/sources.list.d/labring.list

更新源信息

apt update

安装软件

apt install sealos

部署K8S集群

编写Clusterfile

apiVersion: apps.sealos.io/v1beta1
kind: Cluster
metadata:
  name: bzg #集群名称
spec:
  hosts:
    - ips: # master节点
        - 192.168.40.231:22
        - 192.168.40.232:22
        - 192.168.40.233:22
      roles:
        - master
        - amd64
    - ips: # node节点
        - 192.168.40.234:22
        - 192.168.40.235:22
        - 192.168.40.236:22
      roles:
        - node
        - amd64
  image:
    - labring/kubernetes:v1.25.0
    - labring/helm:v3.8.2
    - labring/calico:v3.24.1
  ssh: #统一登录信息(douniwan为所有主机统一登录密码,这里自行更换)
    passwd: douniwan
    pk: /root/.ssh/id_rsa
    port: 22
    user: root

执行安装脚本

sealos apply -f Clusterfile

安装负载均衡-Metallb-v0.13.9

metallb 文档地址

开启严格ARP模式

kubectl edit configmap -n kube-system kube-proxy

设置 strictARP为 true(默认false)

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
  strictARP: true

执行安装脚本

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml

如果 raw.githubusercontent.com连接失败 可再能下载的网络环境下载到本地,然后上传至服务器行

配置IP地址池并广播通告集群

ip-pool.yaml 文件

#配置ip地址池
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ip-pool
  namespace: metallb-system
spec:
  addresses: #IP地址池特别注意此地址区间不能与集群地址空间重合
  - 192.168.40.237-192.168.40.240
--- ## 通告消息
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2adver
  namespace: metallb-system

执行脚本

kubectl apply -f ip-pool.yaml

安装ingress-nginx(v1.7.1)

下载配置文件

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/cloud/deploy.yaml

修改配置文件

externalTrafficPolicy: Local → externalTrafficPolicy: Cluster

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.7.1
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Cluster

执行安装脚本

kubectl apply -f deploy.yaml

官方镜像可能由于网络原因拉不下来,可自行去docker.io 搜对应的镜像名替换 可替换镜像 附: giantswarm/ingress-nginx-controller:v1.7.1 dyrnq/kube-webhook-certgen:v20230312-helm-chart-4.5.2-28-g66a760794

验证执行脚本

kubectl get svc ingress-nginx-controller -n ingress-nginx

安装Rancher

rancher 文档地址

添加 Helm Chart 仓库

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

为 Rancher 创建命名空间

kubectl create namespace cattle-system

安装 cert-manager

# 如果你手动安装了CRD,而不是在 Helm 安装命令中添加了 `--set installCRDs=true` 选项,你应该在升级 Helm Chart 之前升级 CRD 资源。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml

# 添加 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 \
  --create-namespace \
  --version v1.11.0

安装完 cert-manager 后,你可以通过检查 cert-manager 命名空间中正在运行的 Pod 来验证它是否已正确部署: kubectl get pods --namespace cert-manager NAME READY STATUS RESTARTS AGE cert-manager-5c6866597-zw7kh 1/1 Running 0 2m cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m

通过 Helm 安装 Rancher

helm install rancher rancher-stable/rancher  \
 --namespace cattle-system   \
--set hostname=rancher.holdcraft.cn   \
--set bootstrapPassword=admin   \
--set global.cattle.psp.enabled=false

hostname 改为自己的域名

域名绑定IP

kubectl get svc ingress-nginx-controller -n ingress-nginx

执行上述命令,查看 EXTERNAL-IP ,与上面hostname中的域名绑定

修改路由添加 ingressClassName

请注意,Rancher Helm Chart 默认情况下不会在 Ingress 上设置 ingressClassName

kubectl edit ingress -n cattle-system

执行上述命令后,添加 ingressClassName: nginx

spec:
    ingressClassName: nginx
    rules:
    - host:

结束

至此可以打开上述域名愉快的玩耍了