DevOps集群

Gao
最近配置了一个 DevOps 集群给前端使用,现在整理一下这个流程,和在做成碰到的问题 ### 安装 #### 集群 由于要配置多台服务器,安装使用离线安装,来减轻现在的负担 下载好 k3s 和镜像包 - master: ```bash cp ./k3s /usr/local/bin/ cp ./k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/ cat ./install.sh | \ INSTALL_K3S_SKIP_DOWNLOAD=true \ sh -s - server \ --cluster-domain=devops.local \ --cluster-cidr=10.31.0.0/16 \ --service-cidr=10.32.0.0/16 \ --default-local-storage-path=/storage/volumes \ --node-name=master \ --docker ``` - backup: ```bash mkdir -p /var/lib/rancher/k3s/agent/images/ cp ./k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/ export K3S_TOKEN="{server-token}" export K3S_URL="https://{server-ip}:6443" cat ./install.sh | \ INSTALL_K3S_SKIP_DOWNLOAD=true \ sh -s - agent \ --docker \ --node-name=slave \ ``` - ⚠️ 注意问题 * 安装好后集群运行有问题,发现是 iptables 设置问题处理方式 ```bash # master iptables -F && systemctl restart k3s # slave iptables -F && systemctl restart k3s-agent ``` 如果服务重启或者网络重启,可能会导致问题,也需要这么处理 - 这里使用 docker 而没有使用 containerd 是因为网络环境有问题,rancher-agent 无法 运行导致的 - 安装完成后禁止了在 master 运行任务,防止 master 负荷过大导致集群瘫痪 `kubectl taint node mymasternode node-role.kubernetes.io/master:NoSchedule` #### 安装 Rancher 首先安装 helm,下载到 `/usr/local/bin/helm` 安装 rancher ```shell helm repo add rancher https://releases.rancher.com/server-charts/latest helm repo update helm install rancher rancher-stable/rancher --namespace cattle-system ``` 配置好域名证书后,正常访问 #### NFS 希望集群能够共享数据,所以增加了 nfs 存储,可以在节点之间共享数据 - 配置 NFS 服务器 方便管理,将所有 export 都放入一个目录,真正的目录都通过`--bind`来绑定 ```shell mkdir -p /export/volumes # 配置权限 chmod 777 -R /export mount --bind /home/nfs-data /export/volumes ``` 在/etc/fstab 中添加 ```fstab /home/nfs-data /export/volumes none bind 0 0 ``` 在`/etc/exports`中配置 ```exports /export/volumes 10.1.108.0/24(rw,nohide,subtree_check,insecure,all_squash,anonuid=0,async) /export 10.1.0.0/16(ro,fsid=0,root_squash,no_subtree_check,hide) ``` #### 安装 nfs-client-provisioner 使用 helm 安装 nfs-client-provisioner,为集群提供动态存储 ```shell helm install -n kube-system nfs-client-provisioner --set nfs.server={nfs-server-ip} --set nfs.path=/volumes stable/nfs-client-provisioner --set storageClass.name=nfs ``` #### 安装 Tekton 配置安装 Tekton 前置工作已经完成,使用 github 上的项目来安装 下载目录下文件 `https://github.com/gsmlg/pipeline/tree/master/tektoncd` 直接安装即可 需要配置项目 - ssh-key 配置 known_hosts 和 ssh-privatekey 获取权限 这个项目中定义了一个 pipeline,用于跑项目任务 在 rancher 和 gitlab 配置好 eventlistener 的触发 URL,就可以自动运行当前的 pipeline 了 ### 总结问题 过程中碰到 too many open files 的问题,修改 ulimit 解决 测试网络和服务器不太稳定,经常连接不上,或者运行两个任务后,系统很卡,主要是虚拟 平台给的性能严重不足 nfs 服务器和集群机器之间网络有问题,导致无法共享存储,最后被迫使用了 local-path,失去了共享存储的并行任务能力 碰到 tekton 升级 0.12 版本,更新了 git 资源到 task 来实现共享工作空间 给 nfs,tekton,rancher 增加了 toleration 和 affinity,将他们调度到 master,防止 worker 过于繁忙,导致的无法服务问题