first commit
This commit is contained in:
commit
39a4fc0244
|
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 安装证书脚本
|
||||||
|
# 在 master 节点上执行
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "开始安装TLS证书..."
|
||||||
|
|
||||||
|
# 1. 删除已存在的Secret(如果存在)
|
||||||
|
echo "删除已存在的tls Secret..."
|
||||||
|
kubectl -n default delete secret tls --ignore-not-found=true
|
||||||
|
|
||||||
|
# 2. 创建新的TLS Secret
|
||||||
|
echo "创建新的TLS Secret..."
|
||||||
|
kubectl -n default create secret tls tls \
|
||||||
|
--cert=./t-aaron.com.pem \
|
||||||
|
--key=./t-aaron.com.key
|
||||||
|
|
||||||
|
# 3. 验证Secret创建成功
|
||||||
|
echo "验证Secret创建状态..."
|
||||||
|
kubectl -n default get secret tls
|
||||||
|
|
||||||
|
echo "TLS证书安装完成!"
|
||||||
|
echo "现在可以应用Ingress配置了"
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEAn/kzqKKtXSgOCUT8Wqhh6CRnEYdzZVzly9WxNZX8aW7+h0O1
|
||||||
|
+5gS1kkbeKDBT4WikuYev/l71uI8FmulPc7WMhxEkuyT9PhwVKaKCYulxbxsQAFJ
|
||||||
|
i4KfSlqxt3k70S+ioNiras3xF2wgH5OJRbQRP2QKunFTMkHVAObNYA5vOfxZ/pM4
|
||||||
|
xB9u+ykHRFf2Hw6XHfqUAnF/YDDFpYw6JCJuoGuDbEDSmFmG2BfiWOaJRhL4QVEw
|
||||||
|
2ThEeszc+yIpdk9SrhcoKG2bQn9xqN2c99qUqooH/Vpbc2E0RCQ8qCaWz5SRpfam
|
||||||
|
5uRFbPOKriABna4+eWlO/NtNgQDdj/vntgMsbwIDAQABAoIBAENkf2/GgJRjIG6l
|
||||||
|
Qk6K6xwZ4dXPozyLgz942bvCYOCl4tJnIw5HxX/CsrEBwA5ZNOD/0up7FsGy8y9a
|
||||||
|
z/UW4sOfhwACbF5iHyh6NGLLEt4Xf98C69G7CJIRXRb3Gs0IbVGnladb9PoyEeJb
|
||||||
|
jBPyROXYpnBe93aPp0VG9jRGQHNDglzK69Q+9TX/vP3NVdswe286VnM58k2noAZJ
|
||||||
|
X0I1kJCLvmpMrwF9DaLqk214t4WgM0pdpWqapSIGVztxCgKlD2RDTsQRIlpTl2qg
|
||||||
|
/QEAUEj0UeYkmmuR+TYRAYe94Ug8KiN0F5+Z7cmmRuaqrwgocg1XFDc4ktBMrFOd
|
||||||
|
smSvKSECgYEA2H2qf/GZX5g9jmoPGX3RDKXGGPcVSWfO2JgKBLtNDR4lE5E9yIEB
|
||||||
|
1LSrPIvzRfJ7ZWsv0yv+uf86/sjxKYAFve0R5i917navEOaP4sCWmXOuwFvdrMdd
|
||||||
|
rSGkm82B+JjhNMTzuZ6I5Xeg9SPeWEhKMickb1rFdeP2VKTrUiB87fECgYEAvSsS
|
||||||
|
iNFimTOagZBMLzt0bWdI/BnP5ZnvZaPuGxR3VWqu9uEAOiErsovws3xyS0nNlfJb
|
||||||
|
Hba4FT8N2vPoFlbSMwoBguv6VQ6YCEfBszAC+sRILO5zurJQuNyoQ3JmTGS70NLl
|
||||||
|
lEfCJVVMywhfmGm62pPG4pj2mnkKmmv1l6q04F8CgYBNuWhCQRIogPbwr2E2bLZm
|
||||||
|
DQo/Ik5RKWTY3FUUd85k/EKhcM62sqJepHKp7TDtFu54bfAgp7XvPxQGL0xt8tmc
|
||||||
|
44U+mCGF+LRHpA9agHxRIXhG9XRzuKwIIYEAstqLzw9jq6Y5KRLLF5UBDdyg42tH
|
||||||
|
8EejdvpXpf1lTER0GtffcQKBgHEd0X543qHHxstVEwlnXw6QpYcClFuyegHoTdhp
|
||||||
|
m5Y7Lha4ot8fuLaSkcNyVhIJNuNEQhH5kgg6ZTmZgh3hmt4kTJUSMOYtzOGerwhM
|
||||||
|
XGvBdXtQt2lbeYOhhwiV3vAtiFWt1tSdOE4EvN/nyOolxzMvDM2xND1YxetjRT+F
|
||||||
|
N5W3AoGAaBLja3F2NEf+RQIIOnZVMLVLNEb1l/51uihZJ6rO5Xmx8mg7l5fBqTGR
|
||||||
|
a2uJwbiKn6gcTwVOBIIb5YoRRGm97WIux31pPO9lZlWLCsuF+ehil8VwgGZQu7OW
|
||||||
|
vWvju6BuONdXM8DYwTr5G6YmTy7KaU41cEKb8lQ5aKZlxskRwbU=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEszCCA5ugAwIBAgIQCyWUIs7ZgSoVoE6ZUooO+jANBgkqhkiG9w0BAQsFADBh
|
||||||
|
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||||
|
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
||||||
|
MjAeFw0xNzExMDIxMjI0MzNaFw0yNzExMDIxMjI0MzNaMGAxCzAJBgNVBAYTAlVT
|
||||||
|
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
||||||
|
b20xHzAdBgNVBAMTFlJhcGlkU1NMIFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3
|
||||||
|
DQEBAQUAA4IBDwAwggEKAoIBAQC/uVklRBI1FuJdUEkFCuDL/I3aJQiaZ6aibRHj
|
||||||
|
ap/ap9zy1aYNrphe7YcaNwMoPsZvXDR+hNJOo9gbgOYVTPq8gXc84I75YKOHiVA4
|
||||||
|
NrJJQZ6p2sJQyqx60HkEIjzIN+1LQLfXTlpuznToOa1hyTD0yyitFyOYwURM+/CI
|
||||||
|
8FNFMpBhw22hpeAQkOOLmsqT5QZJYeik7qlvn8gfD+XdDnk3kkuuu0eG+vuyrSGr
|
||||||
|
5uX5LRhFWlv1zFQDch/EKmd163m6z/ycx/qLa9zyvILc7cQpb+k7TLra9WE17YPS
|
||||||
|
n9ANjG+ECo9PDW3N9lwhKQCNvw1gGoguyCQu7HE7BnW8eSSFAgMBAAGjggFmMIIB
|
||||||
|
YjAdBgNVHQ4EFgQUDNtsgkkPSmcKuBTuesRIUojrVjgwHwYDVR0jBBgwFoAUTiJU
|
||||||
|
IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG
|
||||||
|
AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB
|
||||||
|
BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud
|
||||||
|
HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds
|
||||||
|
b2JhbFJvb3RHMi5jcmwwYwYDVR0gBFwwWjA3BglghkgBhv1sAQEwKjAoBggrBgEF
|
||||||
|
BQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzALBglghkgBhv1sAQIw
|
||||||
|
CAYGZ4EMAQIBMAgGBmeBDAECAjANBgkqhkiG9w0BAQsFAAOCAQEAGUSlOb4K3Wtm
|
||||||
|
SlbmE50UYBHXM0SKXPqHMzk6XQUpCheF/4qU8aOhajsyRQFDV1ih/uPIg7YHRtFi
|
||||||
|
CTq4G+zb43X1T77nJgSOI9pq/TqCwtukZ7u9VLL3JAq3Wdy2moKLvvC8tVmRzkAe
|
||||||
|
0xQCkRKIjbBG80MSyDX/R4uYgj6ZiNT/Zg6GI6RofgqgpDdssLc0XIRQEotxIZcK
|
||||||
|
zP3pGJ9FCbMHmMLLyuBd+uCWvVcF2ogYAawufChS/PT61D9rqzPRS5I2uqa3tmIT
|
||||||
|
44JhJgWhBnFMb7AGQkvNq9KNS9dd3GWc17H/dXa1enoxzWjE0hBdFjxPhUb0W3wi
|
||||||
|
8o34/m8Fxw==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEfjCCA2agAwIBAgIQD+Ayq4RNAzEGxQyOE8iwaDANBgkqhkiG9w0BAQsFADBh
|
||||||
|
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
||||||
|
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
|
||||||
|
QTAeFw0yNDAxMTgwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGExCzAJBgNVBAYTAlVT
|
||||||
|
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
||||||
|
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
|
||||||
|
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
|
||||||
|
2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
|
||||||
|
1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
|
||||||
|
q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
|
||||||
|
tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
|
||||||
|
vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo4IBMDCC
|
||||||
|
ASwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUTiJUIBiV5uNu5g/6+rkS7QYX
|
||||||
|
jzkwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDgYDVR0PAQH/BAQD
|
||||||
|
AgGGMHQGCCsGAQUFBwEBBGgwZjAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZGln
|
||||||
|
aWNlcnQuY24wPwYIKwYBBQUHMAKGM2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNu
|
||||||
|
L0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNydDBABgNVHR8EOTA3MDWgM6Axhi9odHRw
|
||||||
|
Oi8vY3JsLmRpZ2ljZXJ0LmNuL0RpZ2lDZXJ0R2xvYmFsUm9vdENBLmNybDARBgNV
|
||||||
|
HSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQELBQADggEBAHRBl3jN7+XHBUK0dZnu
|
||||||
|
hMdoNwD1nCROU3BTIh1TNzRI0bQ0m5+C/dCRzzlqoSAFHUlOi+OiDltWkXTzmQn6
|
||||||
|
Z8bH5PFBy5sYpc/8cNPoSzhyqcpvvEZvv/Ivc0Up+dzma7vBDJC9WrMRUUlSFSQp
|
||||||
|
kdXSmphDNkXJsgARmxzc18IN6LYMRiOWlY7RE2F900pPW60BvJHHNCX0bbSRj/Ql
|
||||||
|
bmVq8wuftBD++D+RS8K++ujpMjFBROyWfBX+woQDGsMazkmgulQdnZrdj476elOL
|
||||||
|
axRvrSgEorju1kJM7M65z2RUZrfzQYW/1rs8mRUXin6iEtad/Rv1ZI1WGYmWPyBm
|
||||||
|
pbo=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
# Drone Kubernetes 部署配置
|
||||||
|
|
||||||
|
本目录包含在Kubernetes集群中部署Drone CI/CD的配置文件。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 文件说明
|
||||||
|
|
||||||
|
### 1. drone-server-deployment.yaml
|
||||||
|
Drone Server的主要部署配置:
|
||||||
|
|
||||||
|
- **nodeSelector**: 确保Drone Server只在主节点(control-plane)上运行
|
||||||
|
- **image**: 使用官方Drone镜像 `drone/drone:2`
|
||||||
|
- **ports**: 80端口用于Web界面
|
||||||
|
- **volumes**: `/opt/drone/data` 数据存储目录(主机路径)
|
||||||
|
- **env**: 配置Gitea集成、RPC通信等环境变量
|
||||||
|
|
||||||
|
### 2. drone-server-service.yaml
|
||||||
|
Drone Server服务配置:
|
||||||
|
|
||||||
|
- **type**: ClusterIP(集群内部访问)
|
||||||
|
- **ports**: 暴露80端口
|
||||||
|
- **selector**: 匹配app=drone-server的pod
|
||||||
|
|
||||||
|
### 3. drone-runner-deployment.yaml
|
||||||
|
Drone Runner部署配置:
|
||||||
|
|
||||||
|
- **image**: 使用 `drone/drone-runner-kube:latest`
|
||||||
|
- **env**: 配置与Drone Server的RPC通信
|
||||||
|
- **volumes**: 挂载ConfigMap配置
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 5. drone-ingress.yaml
|
||||||
|
Drone外部访问配置:
|
||||||
|
|
||||||
|
- **host**: drone-ops.t-aaron.com(外部访问域名)
|
||||||
|
- **annotations**: 配置Traefik入口点和TLS
|
||||||
|
- **tls**: 使用tls Secret启用HTTPS
|
||||||
|
|
||||||
|
### 6. install-drone.sh
|
||||||
|
一键安装脚本:
|
||||||
|
|
||||||
|
- 按顺序应用所有yaml文件
|
||||||
|
- 等待部署完成
|
||||||
|
- 显示访问信息
|
||||||
|
|
||||||
|
## 部署步骤
|
||||||
|
|
||||||
|
|
||||||
|
1. 确保k3s集群正常运行
|
||||||
|
openssl rand -hex 16
|
||||||
|
生产: d3c911a6c227e59f4f86f33db6943dc4
|
||||||
|
2. 确保Gitea已部署并运行
|
||||||
|
3. 在Gitea中创建OAuth应用:
|
||||||
|
- 应用名称: Drone
|
||||||
|
- 重定向URI: https://drone-ops.t-aaron.com/login
|
||||||
|
4. 更新yaml文件中的OAuth配置:
|
||||||
|
替换 drone-server-deployment.yaml 脚本里面的下面内容
|
||||||
|
- name: DRONE_GITEA_CLIENT_ID
|
||||||
|
value: "87ef56d3-c8ef-40d3-9dd5-d9214fdac09f"
|
||||||
|
- name: DRONE_GITEA_CLIENT_SECRET
|
||||||
|
value: "tHe6Cq3dNpelsCA2NRTaGB3EueIFRkyLxh9USwBbxe4A"
|
||||||
|
- name: DRONE_RPC_SECRET
|
||||||
|
value: "your-rpc-secret"
|
||||||
|
替换 drone-runner-devployment 中如下内容
|
||||||
|
- name: DRONE_RPC_SECRET
|
||||||
|
value: "d3c911a6c227e59f4f86f33db6943dc4"
|
||||||
|
5. 运行安装脚本:
|
||||||
|
```bash
|
||||||
|
./install-drone.sh
|
||||||
|
```
|
||||||
|
6. 访问 https://drone-ops.t-aaron.com 进行Drone初始化
|
||||||
|
tuoheng@qq.com
|
||||||
|
tuoheng
|
||||||
|
tuoheng
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- Drone数据存储在主机 `/opt/drone/` 目录
|
||||||
|
- 确保主节点有足够的存储空间
|
||||||
|
- 需要先在Gitea中配置OAuth应用
|
||||||
|
- 所有服务都运行在 `default` 命名空间
|
||||||
|
- 使用相同的TLS证书确保HTTPS访问
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: drone-ingress
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- drone-ops.t-aaron.com
|
||||||
|
secretName: tls
|
||||||
|
rules:
|
||||||
|
- host: drone-ops.t-aaron.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: drone-server-service
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: drone-runner
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: drone-runner
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: drone-runner
|
||||||
|
spec:
|
||||||
|
nodeSelector:
|
||||||
|
node-role.kubernetes.io/control-plane: "true"
|
||||||
|
containers:
|
||||||
|
- name: drone-runner
|
||||||
|
image: registry.t-aaron.com/drone/drone-runner-kube:latest
|
||||||
|
env:
|
||||||
|
- name: DRONE_RPC_PROTO
|
||||||
|
value: "http"
|
||||||
|
- name: DRONE_RPC_HOST
|
||||||
|
value: "drone-server-service:80"
|
||||||
|
- name: DRONE_RPC_SECRET
|
||||||
|
value: "d3c911a6c227e59f4f86f33db6943dc4"
|
||||||
|
- name: DRONE_DEBUG
|
||||||
|
value: "true"
|
||||||
|
- name: DRONE_TRACE
|
||||||
|
value: "true"
|
||||||
|
- name: DRONE_NAMESPACE
|
||||||
|
value: "default"
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: drone-server
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: drone-server
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: drone-server
|
||||||
|
spec:
|
||||||
|
nodeSelector:
|
||||||
|
node-role.kubernetes.io/control-plane: "true"
|
||||||
|
containers:
|
||||||
|
- name: drone-server
|
||||||
|
image: registry.t-aaron.com/drone/drone:2
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
env:
|
||||||
|
- name: DRONE_GITEA_SERVER
|
||||||
|
value: "https://git-ops.t-aaron.com"
|
||||||
|
- name: DRONE_GITEA_CLIENT_ID
|
||||||
|
value: "87ef56d3-c8ef-40d3-9dd5-d9214fdac09f"
|
||||||
|
- name: DRONE_GITEA_CLIENT_SECRET
|
||||||
|
value: "tHe6Cq3dNpelsCA2NRTaGB3EueIFRkyLxh9USwBbxe4A"
|
||||||
|
- name: DRONE_RPC_SECRET
|
||||||
|
value: "d3c911a6c227e59f4f86f33db6943dc4"
|
||||||
|
- name: DRONE_SERVER_HOST
|
||||||
|
value: "drone-ops.t-aaron.com"
|
||||||
|
- name: DRONE_SERVER_PROTO
|
||||||
|
value: "https"
|
||||||
|
- name: DRONE_DEBUG
|
||||||
|
value: "true"
|
||||||
|
- name: DRONE_TRACE
|
||||||
|
value: "true"
|
||||||
|
volumeMounts:
|
||||||
|
- name: drone-data
|
||||||
|
mountPath: /data
|
||||||
|
volumes:
|
||||||
|
- name: drone-data
|
||||||
|
hostPath:
|
||||||
|
path: /opt/drone/data
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: drone-server-service
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: drone-server
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
|
type: ClusterIP
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "开始安装 Drone..."
|
||||||
|
|
||||||
|
# 应用所有yaml文件
|
||||||
|
kubectl apply -f drone-server-deployment.yaml
|
||||||
|
kubectl apply -f drone-server-service.yaml
|
||||||
|
kubectl apply -f drone-runner-deployment.yaml
|
||||||
|
kubectl apply -f drone-ingress.yaml
|
||||||
|
|
||||||
|
echo "等待 Drone 启动..."
|
||||||
|
kubectl wait --for=condition=available --timeout=300s deployment/drone-server
|
||||||
|
kubectl wait --for=condition=available --timeout=300s deployment/drone-runner
|
||||||
|
|
||||||
|
echo "Drone 安装完成!"
|
||||||
|
echo "访问地址: https://drone-ops.t-aaron.com"
|
||||||
|
echo "查看状态: kubectl get pods -l app=drone-server"
|
||||||
|
echo "注意: 需要在Gitea中配置OAuth应用才能正常使用"
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
# Gitea Kubernetes 部署配置
|
||||||
|
|
||||||
|
本目录包含在Kubernetes集群中部署Gitea的配置文件。
|
||||||
|
|
||||||
|
## 文件说明
|
||||||
|
|
||||||
|
### 1. gitea-deployment.yaml
|
||||||
|
Gitea应用的主要部署配置:
|
||||||
|
|
||||||
|
- **nodeSelector**: 确保Gitea只在主节点(control-plane)上运行
|
||||||
|
- **image**: 使用官方Gitea镜像 `gitea/gitea:latest`
|
||||||
|
- **ports**:
|
||||||
|
- 3000: HTTP Web界面端口
|
||||||
|
- 22: SSH Git操作端口
|
||||||
|
- **volumes**:
|
||||||
|
- `/opt/gitea/data`: 数据存储目录(主机路径)
|
||||||
|
- `/opt/gitea/config`: 配置文件目录(主机路径)
|
||||||
|
- **env**: 设置用户UID和GID为1000
|
||||||
|
|
||||||
|
### 2. gitea-service.yaml
|
||||||
|
Gitea服务配置:
|
||||||
|
|
||||||
|
- **type**: ClusterIP(集群内部访问)
|
||||||
|
- **ports**: 暴露3000和22端口
|
||||||
|
- **selector**: 匹配app=gitea的pod
|
||||||
|
|
||||||
|
### 3. gitea-ingress.yaml
|
||||||
|
Gitea外部访问配置:
|
||||||
|
|
||||||
|
- **host**: git-ops.t-aaron.com(外部访问域名)
|
||||||
|
- **annotations**: 配置Traefik入口点
|
||||||
|
- **path**: 根路径(/)转发到Gitea服务
|
||||||
|
|
||||||
|
### 4. install-gitea.sh
|
||||||
|
一键安装脚本:
|
||||||
|
|
||||||
|
- 按顺序应用所有yaml文件
|
||||||
|
- 等待部署完成
|
||||||
|
- 显示访问信息
|
||||||
|
|
||||||
|
## 部署步骤
|
||||||
|
|
||||||
|
1. 确保k3s集群正常运行
|
||||||
|
2. 运行安装脚本:
|
||||||
|
```bash
|
||||||
|
./install-gitea.sh
|
||||||
|
```
|
||||||
|
3. 访问 http://git-ops.t-aaron.com 进行Gitea初始化
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- Gitea数据存储在主机 `/opt/gitea/` 目录
|
||||||
|
- 确保主节点有足够的存储空间
|
||||||
|
- 首次访问需要完成Gitea初始化配置
|
||||||
|
|
||||||
|
|
||||||
|
Gitea 安装配置
|
||||||
|
配置:git-ops.t-aaron.com
|
||||||
|
配置:https://git-ops.t-aaron.com/
|
||||||
|
|
||||||
|
注册用户:
|
||||||
|
tuoheng
|
||||||
|
tuoheng@qq.com
|
||||||
|
tuoheng2023
|
||||||
|
|
||||||
|
设置安全配置:管理 OAuth2 应用程序
|
||||||
|
https://drone-ops.t-aaron.com/login
|
||||||
|
客户端:87ef56d3-c8ef-40d3-9dd5-d9214fdac09f
|
||||||
|
密钥:tHe6Cq3dNpelsCA2NRTaGB3EueIFRkyLxh9USwBbxe4A
|
||||||
|
|
||||||
|
参考:https://readme.drone.io/server/provider/gitea/
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: gitea
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: gitea
|
||||||
|
spec:
|
||||||
|
nodeSelector:
|
||||||
|
node-role.kubernetes.io/control-plane: "true"
|
||||||
|
containers:
|
||||||
|
- name: gitea
|
||||||
|
image: registry.t-aaron.com/gitea/gitea:latest
|
||||||
|
ports:
|
||||||
|
- containerPort: 3000
|
||||||
|
- containerPort: 22
|
||||||
|
env:
|
||||||
|
- name: USER_UID
|
||||||
|
value: "1000"
|
||||||
|
- name: USER_GID
|
||||||
|
value: "1000"
|
||||||
|
volumeMounts:
|
||||||
|
- name: gitea-data
|
||||||
|
mountPath: /data
|
||||||
|
- name: gitea-config
|
||||||
|
mountPath: /etc/gitea
|
||||||
|
volumes:
|
||||||
|
- name: gitea-data
|
||||||
|
hostPath:
|
||||||
|
path: /opt/gitea/data
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
- name: gitea-config
|
||||||
|
hostPath:
|
||||||
|
path: /opt/gitea/config
|
||||||
|
type: DirectoryOrCreate
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: gitea-ingress
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.tls: "true"
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- git-ops.t-aaron.com
|
||||||
|
secretName: tls
|
||||||
|
rules:
|
||||||
|
- host: git-ops.t-aaron.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: gitea-service
|
||||||
|
port:
|
||||||
|
number: 3000
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: gitea-service
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: gitea
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 3000
|
||||||
|
targetPort: 3000
|
||||||
|
- name: ssh
|
||||||
|
port: 22
|
||||||
|
targetPort: 22
|
||||||
|
type: ClusterIP
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/bash
|
||||||
|
echo "开始安装 Gitea..."
|
||||||
|
|
||||||
|
# 应用所有yaml文件
|
||||||
|
kubectl apply -f gitea-deployment.yaml
|
||||||
|
kubectl apply -f gitea-service.yaml
|
||||||
|
kubectl apply -f gitea-ingress.yaml
|
||||||
|
|
||||||
|
echo "等待 Gitea 启动..."
|
||||||
|
kubectl wait --for=condition=available --timeout=300s deployment/gitea
|
||||||
|
|
||||||
|
echo "Gitea 安装完成!"
|
||||||
|
echo "访问地址: http://git-ops.t-aaron.com"
|
||||||
|
echo "查看状态: kubectl get pods -l app=gitea"
|
||||||
Loading…
Reference in New Issue