安装前提要素
首先需要安装nfs和storageClass还有nfs provide,然后创建storageClass, k8s会根据pvc自动创建pv, 然后需要安装metallb负载均衡,最后安装nginx-ingress, 我这边没有安装自动化tls所以要把阳明博客中关于https和tls都删除掉,然后helm安装对应的服务
安装过程遇到的问题
- 如果用官方的drone docker版本本地又有k8s然后还部署了ingress可能会冲突,我这边因为docker暴露了80端口,导致域名访问访问不了ingress,所以最好k8s环境就是k8s,istio环境就是istio
- metallb不知道出啥问题,不分配ip给nginx-ingress,我这边是用helm卸载了重新安装,发现问题是和istio出现冲突了,唯一的ip分配给istio的ingress了, 这个metallb好像ip只会分配一次,不会给多个服务分配同一个ip
- nfs再每个节点都要安装因为每个节点使用pv的时候本质都是底层的挂载nfs,所以每个节点都要安装(yum)nfs的包才能支持nfs的mount的操作,如果没有安装可能会一直安装nfs provide失败
- 然后nfs挂载的地址,像我这边是用的/root/data/k8s, 默认不root目录下,所以这里要注意
- 如果集群里安装了istio,最好把istio的自动注入放入其他命名空间
gogs和drone安装问题
- 首先gogs对应的helm的yaml里面的apiversion都太低了,先helm下载本地修改好再本地安装
- drone绑定gogs是直接用gogs的账号密码登录,然后会自动跳转到gogs上获取权限和增加webhook(gogs发送webhook也是给drone发送请求,gogs也要配置host), 但是注意要给gogs的pod配置drone的host,drone也要配置gogs的host, 我这里用是内网所以host需要在pod上手动配置下,外部访问虽然可以访问,但是pod访问不知道为啥不能访问gogs或drone的host
- metallb重启后好型ingress就不可用了,导致域名访问不了,可能metallb的ip分配有问题,目前这是猜测,我这边是每次重启后重新部署nginx和metallb还有metallb的ip
- 最好k8s不要部署istio可能导致2个gateway有冲突,我之前就是这样,然后卸载了istio
drone-helm-values.yaml
helm install drone stable/drone -f values.yaml
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- drone.kak.com
sourceControl:
provider: gogs
gogs:
server: http://gogs.kakj.com
# github:
# clientID: 9f949ade4dce277e559b
# clientSecretKey: clientSecret
# clientSecretValue: 7dc3e96e973b6d07446d58b424ece3949fbadabb
# server: http://github.com
service:
httpPort: 8082
server:
adminUser: kakj-go
## Configures drone to use kubernetes to run pipelines rather than agents, if enabled
## will not deploy any agents.
kubernetes:
## set to true if you want drone to use kubernetes to run pipelines
enabled: true
host: drone.kak.com
protocol: http
persistence:
enabled: true
storageClass: course-nfs-storage
sharedSecret: c7634c78eda8891d1d11d5f1f64e6753
gogs-helm-values.yaml
使用本地部署,可能后续gogs更新了就可以适应新版本k8s
helm install gogs gogs -f values.yaml
service:
ingress:
## Enable Ingress.
##
enabled: true
service:
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
hosts:
- gogs.kakj.com
gogs:
# serverDomain: gogs.load.com
serverRootUrl: http://gogs.kakj.com/
persistence:
enabled: true
storageClass: "course-nfs-storage"
accessMode: ReadWriteOnce
size: 2Gi
postgresql:
persistence:
enabled: true
storageClass: "course-nfs-storage"
accessMode: ReadWriteOnce
size: 2Gi