DevOps集群

Gao

最近配置了一个 DevOps 集群给前端使用,现在整理一下这个流程,和在做成碰到的问题

安装

集群

由于要配置多台服务器,安装使用离线安装,来减轻现在的负担

下载好 k3s 和镜像包

  • master:
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:
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 设置问题处理方式
# 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

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来绑定

mkdir -p /export/volumes # 配置权限 chmod 777 -R /export mount --bind /home/nfs-data /export/volumes

在/etc/fstab 中添加

/home/nfs-data /export/volumes none bind 0 0

/etc/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,为集群提供动态存储

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 过于繁忙,导致的无法服务问题