参考:
https://www.bilibili.com/video/BV1L341147ki?spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV1b34y1R7mg?spm_id_from=333.999.0.0
https://www.bilibili.com/video/BV1Fi4y1Z7Kw?spm_id_from=333.999.0.0
https://argo-cd.readthedocs.io/en/stable/getting_started/
https://openelb.github.io/docs/getting-started/installation/install-openelb-on-kubernetes/
https://openelb.github.io/docs/getting-started/usage/use-openelb-in-layer-2-mode/
https://openebs.io/docs/user-guides/quickstart
https://openebs.io/docs/user-guides/localpv-hostpath
1 前提
本篇文档里使用了自己本地原有的Harbor仓库,且仓库用已有k8s-v1.20.6 等相关镜像
2 机器配置
| 系统版本 | 内核 | 内存 | CPU | 硬盘 | 机器数量 |
|---|---|---|---|---|---|
| RHEL 7.9 | 3.10.0-1160.el7.x86_64 | 32G | 8C | 400G | 1 |
3 初始化
# 0 基础环境初始化# 初始化脚本执行,过程略# 1 hostnamehostnamectl set-hostname local-k8s-01
4 上传工具
# 在github 上找尽可能新的版本# 2 kkmkdir -p kubekey## 上传kkcd kubekey/tar xf kubekey-v1.1.1-linux-amd64.tar.gzrm kubekey-v1.1.1-linux-amd64.tar.gz README* -f./kk version# 3 k9s#cd## 上传k9star xf k9s_Linux_x86_64.tar.gz\cp -rvf k9s /usr/bin/rm LICENSE README.md k9s_Linux_x86_64.tar.gz -f
5 集群配置
# 4 k8s.yml# 使用kk 生成即将要部署的k8s 集群配置export KKZONE=cncd kubekey/./kk create config --name k8svim config-k8s.yaml## edit# 修改k8s 节点ip、用户密码# 修改k8s 版本# 添加本地harbor仓库信息
apiVersion: kubekey.kubesphere.io/v1alpha1kind: Clustermetadata:name: k8sspec:hosts:- {name: local-k8s-01, address: 10.1.6.210, internalAddress: 10.1.6.210, user: root, password: a}roleGroups:etcd:- local-k8s-01master:- local-k8s-01worker:- local-k8s-01controlPlaneEndpoint:domain: lb.kubesphere.localaddress: ""port: 6443kubernetes:version: v1.20.6imageRepo: kubesphereclusterName: cluster.localnetwork:plugin: calicokubePodsCIDR: 10.233.64.0/18kubeServiceCIDR: 10.233.0.0/18registry:registryMirrors: ["https://pfei7wep.mirror.aliyuncs.com"]insecureRegistries: ["harbor.dockerregistry.com"]privateRegistry: "harbor.dockerregistry.com"addons: []
6 部署集群
# 5 clustercd kubekey./kk create cluster -f ./config-k8s.yaml# 确认输入yes# 这里需要联网下载那个helm包,可能会卡住或失败,这里解决方法是直接将那个包上传到他所需的路径下# 然后重新执行上面安装命令,多试几次就会好了kubectl get nodes
7 命令补全
# 6 自动补全yum install -y bash-completionsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrc
8 openelb eip
# 7 openelb# 通过openelb 来做LoadBalancer 替代NodePort 这种服务暴露模式mkdir -p openelb && cd openelbwget https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml# images# 拉镜像,换成本地的名字docker pull kubesphere/openelb:v0.4.4docker tag kubesphere/openelb:v0.4.4 harbor.dockerregistry.com/kubesphere/openelb:v0.4.4docker push harbor.dockerregistry.com/kubesphere/openelb:v0.4.4vim openelb.yaml# 将这里镜像名称改为本地仓库的# replace repoimage: harbor.dockerregistry.com/app/kube-webhook-certgen:v1.1.1 # 两处image: harbor.dockerregistry.com/kubesphere/openelb:v0.4.4kubectl apply -f openelb.yamlkubectl get po -n openelb-system# kube-proxy$ kubectl describe configmap -n kube-system kube-proxy | grep ARP$ kubectl get configmap kube-proxy -n kube-system -o yaml | \sed -e "s/strictARP: false/strictARP: true/" | \kubectl apply -f - -n kube-system$ kubectl describe configmap -n kube-system kube-proxy | grep ARP$ kubectl rollout restart daemonset kube-proxy -n kube-system# eipvim eip.yml## edit ip# 在同网段中选用,未被占用且未绑定任何物理网卡的IP地址池做LB地址,2个左右即可
apiVersion: network.kubesphere.io/v1alpha2kind: Eipmetadata:name: eip-poolspec:address: 10.1.6.233-10.1.6.234interface: ens32protocol: layer2
kubectl apply -f eip.ymlkubectl get eip
9 ingress-nginx
# 8 ingress-nginxmkdir -p ingress-nginx && cd ingress-nginxwget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/cloud/deploy.yamlvim deploy.yaml## edit image# 同样,给镜像名称换成本地仓库的image: harbor.dockerregistry.com/app/ingress-nginx-controller:v1.1.1image: harbor.dockerregistry.com/app/kube-webhook-certgen:v1.1.1## add annotations# 添加ingress-nginx-controller 服务的注释行,具体规范参考openelb官方的用法示范# https://openelb.github.io/docs/getting-started/usage/use-openelb-in-layer-2-mode/# Source: ingress-nginx/templates/controller-service.yamlapiVersion: v1kind: Servicemetadata:annotations:lb.kubesphere.io/v1alpha1: openelbprotocol.openelb.kubesphere.io/v1alpha1: layer2eip.openelb.kubesphere.io/v1alpha2: eip-pool ## 将这里的lb资源池名称换成自己本地的# 我这里前面是创建的名称叫做'eip-pool'kubectl apply -f deploy.yamlkubectl get po -n ingress-nginxkubectl get svc -n ingress-nginxkubectl get IngressClass -n ingress-nginxkubectl edit eips.network.kubesphere.io # 只查看不修改
10 openebs
# openebs# 先添加官方的chart仓库helm repo add openebs https://openebs.github.io/chartshelm repo updatemkdir -p openebs && cd openebs# 再下载官方的版本包到本地helm pull openebs/openebstar xf openebs-*.tgzcd openebs# 下载所需的镜像,并存到本地仓库,然后将原来部署脚本中的镜像名换成本地的docker pull openebs/m-apiserver:2.12.2docker pull openebs/openebs-k8s-provisioner:2.12.2docker pull openebs/provisioner-localpv:3.2.0docker pull openebs/snapshot-controller:2.12.2docker pull openebs/snapshot-provisioner:2.12.2docker pull openebs/node-disk-manager:1.9.0docker pull openebs/node-disk-operator:1.9.0docker pull openebs/admission-server:2.12.2docker pull openebs/linux-utils:3.2.0docker pull openebs/m-exporter:2.12.2docker pull openebs/jiva:2.12.2docker pull openebs/cstor-pool:2.12.2docker pull openebs/cstor-pool-mgmt:2.12.2docker pull openebs/cstor-istgt:2.12.2docker pull openebs/cstor-volume-mgmt:2.12.2docker tag openebs/m-apiserver:2.12.2 harbor.dockerregistry.com/openebs/m-apiserver:2.12.2docker tag openebs/openebs-k8s-provisioner:2.12 harbor.dockerregistry.com/openebs/openebs-k8s-provisioner:2.12.2docker tag openebs/provisioner-localpv:3.2.0 harbor.dockerregistry.com/openebs/provisioner-localpv:3.2.0docker tag openebs/snapshot-controller:2.12.2 harbor.dockerregistry.com/openebs/snapshot-controller:2.12.2docker tag openebs/snapshot-provisioner:2.12.2 harbor.dockerregistry.com/openebs/snapshot-provisioner:2.12.2docker tag openebs/node-disk-manager:1.9.0 harbor.dockerregistry.com/openebs/node-disk-manager:1.9.0docker tag openebs/node-disk-operator:1.9.0 harbor.dockerregistry.com/openebs/node-disk-operator:1.9.0docker tag openebs/admission-server:2.12.2 harbor.dockerregistry.com/openebs/admission-server:2.12.2docker tag openebs/linux-utils:3.2.0 harbor.dockerregistry.com/openebs/linux-utils:3.2.0docker tag openebs/m-exporter:2.12.2 harbor.dockerregistry.com/openebs/m-exporter:2.12.2docker tag openebs/jiva:2.12.2 harbor.dockerregistry.com/openebs/jiva:2.12.2docker tag openebs/cstor-pool:2.12.2 harbor.dockerregistry.com/openebs/cstor-pool:2.12.2docker tag openebs/cstor-pool-mgmt:2.12.2 harbor.dockerregistry.com/openebs/cstor-pool-mgmt:2.12.2docker tag openebs/cstor-istgt:2.12.2 harbor.dockerregistry.com/openebs/cstor-istgt:2.12.2docker tag openebs/cstor-volume-mgmt:2.12.2 harbor.dockerregistry.com/openebs/cstor-volume-mgmt:2.12.2docker login harbor.dockerregistry.com -u admin -p Harbor12345docker push harbor.dockerregistry.com/openebs/m-apiserver:2.12.2docker push harbor.dockerregistry.com/openebs/openebs-k8s-provisioner:2.12.2docker push harbor.dockerregistry.com/openebs/provisioner-localpv:3.2.0docker push harbor.dockerregistry.com/openebs/snapshot-controller:2.12.2docker push harbor.dockerregistry.com/openebs/snapshot-provisioner:2.12.2docker push harbor.dockerregistry.com/openebs/node-disk-manager:1.9.0docker push harbor.dockerregistry.com/openebs/node-disk-operator:1.9.0docker push harbor.dockerregistry.com/openebs/admission-server:2.12.2docker push harbor.dockerregistry.com/openebs/linux-utils:3.2.0docker push harbor.dockerregistry.com/openebs/m-exporter:2.12.2docker push harbor.dockerregistry.com/openebs/jiva:2.12.2docker push harbor.dockerregistry.com/openebs/cstor-pool:2.12.2docker push harbor.dockerregistry.com/openebs/cstor-pool-mgmt:2.12.2docker push harbor.dockerregistry.com/openebs/cstor-istgt:2.12.2docker push harbor.dockerregistry.com/openebs/cstor-volume-mgmt:2.12.2\cp values.yaml{,.bak}vim values.yaml## edit images## 要换的太多了,直接将文件下载下来批量替换# openebs/ --> harbor.dockerregistry.com/openebs/cd /root/openebshelm install openebs openebs --namespace openebs --create-namespacehelm list -n openebs# test openebs# 使用官方的脚本来做个简单测试wget https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pvc.yamlwget https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pod.yamlkubectl apply -f https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pvc.yamlkubectl apply -f https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pod.yamlvim local-hostpath-pod.yaml## edit image# 同样,将镜像名称换成本地的image: harbor.dockerregistry.com/app/busybox:1.35.0kubectl apply -f local-hostpath-pvc.yamlkubectl apply -f local-hostpath-pod.yamlkubectl get pod hello-local-hostpath-podkubectl get pvc local-hostpath-pvc
