基于Kubernetes的动态Agent
配置对接kubernetes
kubernetes创建对应名称空间和serviceaccount
root@k8s-master01:~# kubectl create ns jenkins
root@k8s-master01:~# kubectl create serviceaccount jenkins-master -n jenkins
oot@k8s-master01:~# kubectl create rolebinding jenkins-master --clusterrole=admin --serviceaccount=jenkins:jenkins-master -n jenkinsrolebinding.rbac.authorization.k8s.io/jenkins-master created
root@k8s-master01:~# kubectl get rolebinding jenkins-master -n jenkins
NAME ROLE AGE
jenkins-master ClusterRole/admin 29s
-
获取密钥
root@k8s-master01:~# cat 1.yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
namespace: jenkins
spec:
containers:
- name: demoapp
image: ikubernetes/demoapp:v1.0
serviceAccountName: jenkins-master
root@k8s-master01:~# kubectl apply -f 1.yaml
root@k8s-master01:~# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 28s
`进入pod获取密钥`
root@k8s-master01:~# kubectl exec -it mypod -n jenkins sh
[root@mypod /]# cd /var/run/secrets/kubernetes.io/serviceaccount/
[root@mypod /run/secrets/kubernetes.io/serviceaccount]# cat ca.crt
-----BEGIN CERTIFICATE-----
MIIDBTCCAe2gAwIBAgIIZzB0Y38rWzYwDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE
AxMKa3ViZXJuZXRlczAeFw0yNDA1MDUwOTMyMDZaFw0zNDA1MDMwOTM3MDZaMBUx
EzARBgNVBAMTCmt1YmVybmV0ZXMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQDig8ll5If90dLw+NHfbX48c2LC6pt/W+x18okxPba1NsF5MWTF0j8GBW70
vhwUk6Q9eBj/Z4UREViGfQ8yg+yL3Anzzo+62ocuo6SdPLul1Wa5QBrDLBUKaIl8
xSzgKH/oGp55pSDXAQX1QOhx6ylXvqd+BGMnmSupDQm8flpOjsHE12GtkDJ8/3MP
Wdm1311kuE68ifDO2SfHHBhOPOWz3H04CqoumRV0ra6jahoyZ6/elVUILILuEON3
7bD4KRGS3VLIb5WElHy92sTWml6BzPC/xDCckbmcP7xWg0UgFY8ovC16yW9qnzvE
TMR6orPwvhbsiO6bZr3H2euRDF//AgMBAAGjWTBXMA4GA1UdDwEB/wQEAwICpDAP
BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGGcBnl7qlwXgz7qFXBrIL5vs9xzAV
BgNVHREEDjAMggprdWJlcm5ldGVzMA0GCSqGSIb3DQEBCwUAA4IBAQDJjgnnnsK7
b1MYGel3CeWpEnnq5Gk1VGp1DyppHQ6LKwm7YPLo7GRzjwFspI+USd9wUwluo/nR
C/149JI/ajwrcQdfSvMPtYCxi5gwZaCM3EIslMiZsEuDHF3h0XZbpMMlhKB0JLlp
vCiq/aOIUtHUyBqKN4Z3vt1+EPrN9+kaRx7CVbvDcXebCymbeuPJPu7YyM15c8vB
GpZzW54QTBh6GsLnB2CrPmQsqj+ErC9f69Iayr22yZP5yJpQB0jZZJxbtSri0yhG
dc28LF1XWwKWOtK7Cx2bJiPcqis7vvcDrwR0kpo5oTXGNzFVVZ2Frjh1jDW32Tj5
qZi5H8Unl18Y
-----END CERTIFICATE-----
[root@mypod /run/secrets/kubernetes.io/serviceaccount]# cat token && echo
eyJhbGciOiJSUzI1NiIsImtpZCI6Im5PWEctQWJYOWdwWmdWM05DQXdheE5ZZVI2Rk1RSVVMY01HZ09SMG9FRmcifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzQ3NjQ3Njk0LCJpYXQiOjE3MTYxMTE2OTQsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJqZW5raW5zIiwicG9kIjp7Im5hbWUiOiJteXBvZCIsInVpZCI6IjY0ODY4M2U1LWNlNzUtNGIzMC05MTE0LThlN2ExMGE5NTQ1OCJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiamVua2lucy1tYXN0ZXIiLCJ1aWQiOiJkN2U5YWY0Zi05M2Y2LTQ0ZWUtYTFmNi0wN2MzMTQ4YWVjNzgifSwid2FybmFmdGVyIjoxNzE2MTE1MzAxfSwibmJmIjoxNzE2MTExNjk0LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6amVua2luczpqZW5raW5zLW1hc3RlciJ9.PzE2Y2k0pUb5f0oSF0xxdQSN4QlgF0BsWufS2A62pW7W-Eg-THolW3dhNHfEv4zajl11e-uRdYPbsm8DXmQ2HRs_PxC4OODZuOBPWy-Pb4RfJJ4cR11_LNkGQXOfLVbv5dRJbjjlDy1_Skf_zW8uwSejXdkgnj26_a_IM-VxzVVEhgkQdWvvrCqnoCKxMwEmtQ2iB-4OZPCB0t98ugc0VRuMjBw4w2Jf_3wgu9A46SpyaaGg1PKVDL3G3iWMkp8ExpQkwr-7VZD-II6NvDJucYfggKGuMlHsAY9XsgvM2zWMc5IchqNLOYX5q3wzln_wmeQhMIAxvsPlhY4UI3Yj9Q
在Jenkins配置kubernetes信息
上面的Jenkins地址必须和Jenkins对外暴露的地址一样
上面的Jenkins通道必须在Jenkins中打开
注意:如果你是通过域名来访问Jenkins的,需要在k8s的coreDNS配置域名解析
例如:
apiVersionv1 data Corefile .:53 { errors health { lameduck 5s } ready rewrite stop { name regex (jenkins.*)\.stangj\.com {1}.jenkins.svc.cluster.local answer name (jenkins.*)\.jenkins\.svc\.cluster\.local {1}.stangj.com } hosts { 192.168.139.242 jenkin.xxx # 添加解析 fallthrough } kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa ttl 30 } prometheus :9153 forward . /etc/resolv.conf { max_concurrent 1000 } cache 30 loop reload loadbalance } kindConfigMap metadata namecoredns namespacekube-system
添加pod模板
运行测试
如上图,k8s的动态agent成功,如果需要自定义镜像agent,如下配置即可:



















文章评论