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-01 | debian 10 | 4 | 8 | 20G | 192.168.40.231 |
| k8s-master-02 | debian 10 | 4 | 8 | 20G | 192.168.40.232 |
| k8s-master-03 | debian 10 | 4 | 8 | 20G | 192.168.40.233 |
| k8s-node-01 | debian 10 | 12 | 24 | 20G | 192.168.40.234 |
| k8s-node-02 | debian 10 | 12 | 24 | 20G | 192.168.40.235 |
| k8s-node-03 | debian 10 | 12 | 24 | 20G | 192.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: